@burtson-labs/ui 0.13.0 → 0.14.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 (391) 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 +5 -1
  7. package/THIRD_PARTY_NOTICES.md +15 -3
  8. package/dist/components/accordion.d.ts +1 -1
  9. package/dist/components/accordion.js +9 -8
  10. package/dist/components/accordion.js.map +1 -1
  11. package/dist/components/alert-dialog.d.ts +1 -1
  12. package/dist/components/alert-dialog.js +12 -11
  13. package/dist/components/alert-dialog.js.map +1 -1
  14. package/dist/components/alert.js +1 -0
  15. package/dist/components/alert.js.map +1 -1
  16. package/dist/components/app-shell.js +1 -0
  17. package/dist/components/app-shell.js.map +1 -1
  18. package/dist/components/attachment.js +1 -0
  19. package/dist/components/attachment.js.map +1 -1
  20. package/dist/components/audio-player.js +1 -0
  21. package/dist/components/audio-player.js.map +1 -1
  22. package/dist/components/avatar.d.ts +1 -1
  23. package/dist/components/avatar.js +7 -6
  24. package/dist/components/avatar.js.map +1 -1
  25. package/dist/components/badge.js +3 -3
  26. package/dist/components/badge.js.map +1 -1
  27. package/dist/components/breadcrumb.js +3 -3
  28. package/dist/components/breadcrumb.js.map +1 -1
  29. package/dist/components/button.d.ts +2 -2
  30. package/dist/components/button.js +3 -3
  31. package/dist/components/button.js.map +1 -1
  32. package/dist/components/card.d.ts +1 -1
  33. package/dist/components/card.js +1 -0
  34. package/dist/components/card.js.map +1 -1
  35. package/dist/components/chat-history.js +1 -0
  36. package/dist/components/chat-history.js.map +1 -1
  37. package/dist/components/chat-layout.js +1 -0
  38. package/dist/components/chat-layout.js.map +1 -1
  39. package/dist/components/checkbox-card.d.ts +1 -1
  40. package/dist/components/checkbox-card.js +3 -3
  41. package/dist/components/checkbox-card.js.map +1 -1
  42. package/dist/components/checkbox.d.ts +1 -1
  43. package/dist/components/checkbox.js +6 -5
  44. package/dist/components/checkbox.js.map +1 -1
  45. package/dist/components/collapsible.d.ts +1 -1
  46. package/dist/components/collapsible.js +7 -6
  47. package/dist/components/collapsible.js.map +1 -1
  48. package/dist/components/combobox.js +1 -0
  49. package/dist/components/combobox.js.map +1 -1
  50. package/dist/components/command.d.ts +1 -1
  51. package/dist/components/command.js +12 -11
  52. package/dist/components/command.js.map +1 -1
  53. package/dist/components/composer.js +1 -0
  54. package/dist/components/composer.js.map +1 -1
  55. package/dist/components/connection-status.js +1 -0
  56. package/dist/components/connection-status.js.map +1 -1
  57. package/dist/components/context-menu.d.ts +1 -1
  58. package/dist/components/context-menu.js +19 -18
  59. package/dist/components/context-menu.js.map +1 -1
  60. package/dist/components/conversation.js +1 -0
  61. package/dist/components/conversation.js.map +1 -1
  62. package/dist/components/copy-button.js +1 -0
  63. package/dist/components/copy-button.js.map +1 -1
  64. package/dist/components/data-table.js +4 -2
  65. package/dist/components/data-table.js.map +1 -1
  66. package/dist/components/dialog.d.ts +1 -1
  67. package/dist/components/dialog.js +13 -12
  68. package/dist/components/dialog.js.map +1 -1
  69. package/dist/components/dropdown-menu.d.ts +1 -1
  70. package/dist/components/dropdown-menu.js +19 -18
  71. package/dist/components/dropdown-menu.js.map +1 -1
  72. package/dist/components/editor-tabs.js +1 -0
  73. package/dist/components/editor-tabs.js.map +1 -1
  74. package/dist/components/empty-state.js +1 -0
  75. package/dist/components/empty-state.js.map +1 -1
  76. package/dist/components/field.js +1 -0
  77. package/dist/components/field.js.map +1 -1
  78. package/dist/components/icon-button.js +1 -0
  79. package/dist/components/icon-button.js.map +1 -1
  80. package/dist/components/input.js +1 -0
  81. package/dist/components/input.js.map +1 -1
  82. package/dist/components/kbd.js +1 -0
  83. package/dist/components/kbd.js.map +1 -1
  84. package/dist/components/label.d.ts +1 -1
  85. package/dist/components/label.js +5 -4
  86. package/dist/components/label.js.map +1 -1
  87. package/dist/components/markdown.js +1 -0
  88. package/dist/components/markdown.js.map +1 -1
  89. package/dist/components/menubar.d.ts +1 -1
  90. package/dist/components/menubar.js +20 -19
  91. package/dist/components/menubar.js.map +1 -1
  92. package/dist/components/message-actions.js +1 -0
  93. package/dist/components/message-actions.js.map +1 -1
  94. package/dist/components/message.js +1 -0
  95. package/dist/components/message.js.map +1 -1
  96. package/dist/components/mobile-nav.js +1 -0
  97. package/dist/components/mobile-nav.js.map +1 -1
  98. package/dist/components/navigation-menu.d.ts +1 -1
  99. package/dist/components/navigation-menu.js +12 -11
  100. package/dist/components/navigation-menu.js.map +1 -1
  101. package/dist/components/onboarding-checklist.js +1 -0
  102. package/dist/components/onboarding-checklist.js.map +1 -1
  103. package/dist/components/page-header.js +1 -0
  104. package/dist/components/page-header.js.map +1 -1
  105. package/dist/components/pagination.js +3 -2
  106. package/dist/components/pagination.js.map +1 -1
  107. package/dist/components/popover.d.ts +1 -1
  108. package/dist/components/popover.js +8 -7
  109. package/dist/components/popover.js.map +1 -1
  110. package/dist/components/progress.d.ts +1 -1
  111. package/dist/components/progress.js +6 -5
  112. package/dist/components/progress.js.map +1 -1
  113. package/dist/components/radio-group.d.ts +1 -1
  114. package/dist/components/radio-group.js +7 -6
  115. package/dist/components/radio-group.js.map +1 -1
  116. package/dist/components/reasoning.js +5 -4
  117. package/dist/components/reasoning.js.map +1 -1
  118. package/dist/components/resizable.js +1 -0
  119. package/dist/components/resizable.js.map +1 -1
  120. package/dist/components/scroll-area.d.ts +1 -1
  121. package/dist/components/scroll-area.js +9 -8
  122. package/dist/components/scroll-area.js.map +1 -1
  123. package/dist/components/secret-input.js +1 -0
  124. package/dist/components/secret-input.js.map +1 -1
  125. package/dist/components/select.d.ts +1 -1
  126. package/dist/components/select.js +23 -18
  127. package/dist/components/select.js.map +1 -1
  128. package/dist/components/separator.d.ts +1 -1
  129. package/dist/components/separator.js +5 -4
  130. package/dist/components/separator.js.map +1 -1
  131. package/dist/components/sheet.d.ts +1 -1
  132. package/dist/components/sheet.js +10 -9
  133. package/dist/components/sheet.js.map +1 -1
  134. package/dist/components/skeleton.js +1 -0
  135. package/dist/components/skeleton.js.map +1 -1
  136. package/dist/components/slider.js +1 -0
  137. package/dist/components/slider.js.map +1 -1
  138. package/dist/components/source.js +1 -0
  139. package/dist/components/source.js.map +1 -1
  140. package/dist/components/spinner.js +1 -0
  141. package/dist/components/spinner.js.map +1 -1
  142. package/dist/components/stat-card.js +1 -0
  143. package/dist/components/stat-card.js.map +1 -1
  144. package/dist/components/status.js +1 -0
  145. package/dist/components/status.js.map +1 -1
  146. package/dist/components/steps.js +1 -0
  147. package/dist/components/steps.js.map +1 -1
  148. package/dist/components/switch.d.ts +1 -1
  149. package/dist/components/switch.js +6 -5
  150. package/dist/components/switch.js.map +1 -1
  151. package/dist/components/table.js +1 -0
  152. package/dist/components/table.js.map +1 -1
  153. package/dist/components/tabs.d.ts +1 -1
  154. package/dist/components/tabs.js +8 -7
  155. package/dist/components/tabs.js.map +1 -1
  156. package/dist/components/textarea.js +1 -0
  157. package/dist/components/textarea.js.map +1 -1
  158. package/dist/components/toast.d.ts +1 -1
  159. package/dist/components/toast.js +11 -10
  160. package/dist/components/toast.js.map +1 -1
  161. package/dist/components/toaster.js +1 -0
  162. package/dist/components/toaster.js.map +1 -1
  163. package/dist/components/tool-call.js +5 -4
  164. package/dist/components/tool-call.js.map +1 -1
  165. package/dist/components/toolbar.js +1 -0
  166. package/dist/components/toolbar.js.map +1 -1
  167. package/dist/components/tooltip.d.ts +1 -1
  168. package/dist/components/tooltip.js +10 -9
  169. package/dist/components/tooltip.js.map +1 -1
  170. package/dist/components/tour.js +8 -6
  171. package/dist/components/tour.js.map +1 -1
  172. package/dist/components/tree-view.js +1 -0
  173. package/dist/components/tree-view.js.map +1 -1
  174. package/dist/components/voice-recorder.js +1 -0
  175. package/dist/components/voice-recorder.js.map +1 -1
  176. package/dist/primitives/vendor/cmdk/command-score.d.ts +1 -0
  177. package/dist/primitives/vendor/cmdk/command-score.js +64 -0
  178. package/dist/primitives/vendor/cmdk/command-score.js.map +1 -0
  179. package/dist/primitives/vendor/cmdk/index.d.ts +384 -0
  180. package/dist/primitives/vendor/cmdk/index.js +687 -0
  181. package/dist/primitives/vendor/cmdk/index.js.map +1 -0
  182. package/dist/primitives/vendor/radix/number/index.d.ts +1 -0
  183. package/dist/primitives/vendor/radix/number/number.d.ts +2 -0
  184. package/dist/primitives/vendor/radix/number/number.js +9 -0
  185. package/dist/primitives/vendor/radix/number/number.js.map +1 -0
  186. package/dist/primitives/vendor/radix/primitive/index.d.ts +2 -0
  187. package/dist/primitives/vendor/radix/primitive/is-development.d.ts +1 -0
  188. package/dist/primitives/vendor/radix/primitive/is-development.js +7 -0
  189. package/dist/primitives/vendor/radix/primitive/is-development.js.map +1 -0
  190. package/dist/primitives/vendor/radix/primitive/primitive.d.ts +14 -0
  191. package/dist/primitives/vendor/radix/primitive/primitive.js +12 -0
  192. package/dist/primitives/vendor/radix/primitive/primitive.js.map +1 -0
  193. package/dist/primitives/vendor/radix/primitive/types.d.ts +5 -0
  194. package/dist/primitives/vendor/radix/react-accordion/accordion.d.ts +112 -0
  195. package/dist/primitives/vendor/radix/react-accordion/accordion.js +266 -0
  196. package/dist/primitives/vendor/radix/react-accordion/accordion.js.map +1 -0
  197. package/dist/primitives/vendor/radix/react-accordion/index.d.ts +2 -0
  198. package/dist/primitives/vendor/radix/react-alert-dialog/alert-dialog.d.ts +49 -0
  199. package/dist/primitives/vendor/radix/react-alert-dialog/alert-dialog.js +122 -0
  200. package/dist/primitives/vendor/radix/react-alert-dialog/alert-dialog.js.map +1 -0
  201. package/dist/primitives/vendor/radix/react-alert-dialog/index.d.ts +2 -0
  202. package/dist/primitives/vendor/radix/react-arrow/arrow.d.ts +9 -0
  203. package/dist/primitives/vendor/radix/react-arrow/arrow.js +22 -0
  204. package/dist/primitives/vendor/radix/react-arrow/arrow.js.map +1 -0
  205. package/dist/primitives/vendor/radix/react-arrow/index.d.ts +2 -0
  206. package/dist/primitives/vendor/radix/react-avatar/avatar.d.ts +19 -0
  207. package/dist/primitives/vendor/radix/react-avatar/avatar.js +132 -0
  208. package/dist/primitives/vendor/radix/react-avatar/avatar.js.map +1 -0
  209. package/dist/primitives/vendor/radix/react-avatar/index.d.ts +2 -0
  210. package/dist/primitives/vendor/radix/react-checkbox/checkbox.d.ts +47 -0
  211. package/dist/primitives/vendor/radix/react-checkbox/checkbox.js +197 -0
  212. package/dist/primitives/vendor/radix/react-checkbox/checkbox.js.map +1 -0
  213. package/dist/primitives/vendor/radix/react-checkbox/index.d.ts +2 -0
  214. package/dist/primitives/vendor/radix/react-collapsible/collapsible.d.ts +31 -0
  215. package/dist/primitives/vendor/radix/react-collapsible/collapsible.js +133 -0
  216. package/dist/primitives/vendor/radix/react-collapsible/collapsible.js.map +1 -0
  217. package/dist/primitives/vendor/radix/react-collapsible/index.d.ts +2 -0
  218. package/dist/primitives/vendor/radix/react-collection/collection-legacy.d.ts +21 -0
  219. package/dist/primitives/vendor/radix/react-collection/collection-legacy.js +84 -0
  220. package/dist/primitives/vendor/radix/react-collection/collection-legacy.js.map +1 -0
  221. package/dist/primitives/vendor/radix/react-collection/collection.d.ts +32 -0
  222. package/dist/primitives/vendor/radix/react-collection/index.d.ts +4 -0
  223. package/dist/primitives/vendor/radix/react-collection/ordered-dictionary.d.ts +51 -0
  224. package/dist/primitives/vendor/radix/react-compose-refs/compose-refs.d.ts +13 -0
  225. package/dist/primitives/vendor/radix/react-compose-refs/compose-refs.js +43 -0
  226. package/dist/primitives/vendor/radix/react-compose-refs/compose-refs.js.map +1 -0
  227. package/dist/primitives/vendor/radix/react-compose-refs/index.d.ts +1 -0
  228. package/dist/primitives/vendor/radix/react-context/create-context.d.ts +45 -0
  229. package/dist/primitives/vendor/radix/react-context/create-context.js +74 -0
  230. package/dist/primitives/vendor/radix/react-context/create-context.js.map +1 -0
  231. package/dist/primitives/vendor/radix/react-context/index.d.ts +2 -0
  232. package/dist/primitives/vendor/radix/react-context-menu/context-menu.d.ts +95 -0
  233. package/dist/primitives/vendor/radix/react-context-menu/context-menu.js +279 -0
  234. package/dist/primitives/vendor/radix/react-context-menu/context-menu.js.map +1 -0
  235. package/dist/primitives/vendor/radix/react-context-menu/index.d.ts +2 -0
  236. package/dist/primitives/vendor/radix/react-dialog/dialog.d.ts +97 -0
  237. package/dist/primitives/vendor/radix/react-dialog/dialog.js +262 -0
  238. package/dist/primitives/vendor/radix/react-dialog/dialog.js.map +1 -0
  239. package/dist/primitives/vendor/radix/react-dialog/index.d.ts +4 -0
  240. package/dist/primitives/vendor/radix/react-direction/direction.d.ts +10 -0
  241. package/dist/primitives/vendor/radix/react-direction/direction.js +13 -0
  242. package/dist/primitives/vendor/radix/react-direction/direction.js.map +1 -0
  243. package/dist/primitives/vendor/radix/react-direction/index.d.ts +1 -0
  244. package/dist/primitives/vendor/radix/react-dismissable-layer/dismissable-layer.d.ts +61 -0
  245. package/dist/primitives/vendor/radix/react-dismissable-layer/dismissable-layer.js +336 -0
  246. package/dist/primitives/vendor/radix/react-dismissable-layer/dismissable-layer.js.map +1 -0
  247. package/dist/primitives/vendor/radix/react-dismissable-layer/index.d.ts +4 -0
  248. package/dist/primitives/vendor/radix/react-dropdown-menu/dropdown-menu.d.ts +95 -0
  249. package/dist/primitives/vendor/radix/react-dropdown-menu/dropdown-menu.js +257 -0
  250. package/dist/primitives/vendor/radix/react-dropdown-menu/dropdown-menu.js.map +1 -0
  251. package/dist/primitives/vendor/radix/react-dropdown-menu/index.d.ts +2 -0
  252. package/dist/primitives/vendor/radix/react-focus-guards/focus-guards.d.ts +11 -0
  253. package/dist/primitives/vendor/radix/react-focus-guards/focus-guards.js +49 -0
  254. package/dist/primitives/vendor/radix/react-focus-guards/focus-guards.js.map +1 -0
  255. package/dist/primitives/vendor/radix/react-focus-guards/index.d.ts +1 -0
  256. package/dist/primitives/vendor/radix/react-focus-scope/focus-scope.d.ts +31 -0
  257. package/dist/primitives/vendor/radix/react-focus-scope/focus-scope.js +221 -0
  258. package/dist/primitives/vendor/radix/react-focus-scope/focus-scope.js.map +1 -0
  259. package/dist/primitives/vendor/radix/react-focus-scope/index.d.ts +1 -0
  260. package/dist/primitives/vendor/radix/react-id/id.d.ts +2 -0
  261. package/dist/primitives/vendor/radix/react-id/id.js +17 -0
  262. package/dist/primitives/vendor/radix/react-id/id.js.map +1 -0
  263. package/dist/primitives/vendor/radix/react-id/index.d.ts +1 -0
  264. package/dist/primitives/vendor/radix/react-label/index.d.ts +2 -0
  265. package/dist/primitives/vendor/radix/react-label/label.d.ts +9 -0
  266. package/dist/primitives/vendor/radix/react-label/label.js +21 -0
  267. package/dist/primitives/vendor/radix/react-label/label.js.map +1 -0
  268. package/dist/primitives/vendor/radix/react-menu/index.d.ts +2 -0
  269. package/dist/primitives/vendor/radix/react-menu/menu.d.ts +173 -0
  270. package/dist/primitives/vendor/radix/react-menu/menu.js +806 -0
  271. package/dist/primitives/vendor/radix/react-menu/menu.js.map +1 -0
  272. package/dist/primitives/vendor/radix/react-menubar/index.d.ts +2 -0
  273. package/dist/primitives/vendor/radix/react-menubar/menubar.d.ts +106 -0
  274. package/dist/primitives/vendor/radix/react-menubar/menubar.js +377 -0
  275. package/dist/primitives/vendor/radix/react-menubar/menubar.js.map +1 -0
  276. package/dist/primitives/vendor/radix/react-navigation-menu/index.d.ts +2 -0
  277. package/dist/primitives/vendor/radix/react-navigation-menu/navigation-menu.d.ts +124 -0
  278. package/dist/primitives/vendor/radix/react-navigation-menu/navigation-menu.js +743 -0
  279. package/dist/primitives/vendor/radix/react-navigation-menu/navigation-menu.js.map +1 -0
  280. package/dist/primitives/vendor/radix/react-popover/index.d.ts +1 -0
  281. package/dist/primitives/vendor/radix/react-popover/popover.d.ts +83 -0
  282. package/dist/primitives/vendor/radix/react-popover/popover.js +236 -0
  283. package/dist/primitives/vendor/radix/react-popover/popover.js.map +1 -0
  284. package/dist/primitives/vendor/radix/react-popper/index.d.ts +2 -0
  285. package/dist/primitives/vendor/radix/react-popper/popper.d.ts +44 -0
  286. package/dist/primitives/vendor/radix/react-popper/popper.js +276 -0
  287. package/dist/primitives/vendor/radix/react-popper/popper.js.map +1 -0
  288. package/dist/primitives/vendor/radix/react-portal/index.d.ts +2 -0
  289. package/dist/primitives/vendor/radix/react-portal/portal.d.ts +13 -0
  290. package/dist/primitives/vendor/radix/react-portal/portal.js +21 -0
  291. package/dist/primitives/vendor/radix/react-portal/portal.js.map +1 -0
  292. package/dist/primitives/vendor/radix/react-presence/index.d.ts +2 -0
  293. package/dist/primitives/vendor/radix/react-presence/presence.d.ts +11 -0
  294. package/dist/primitives/vendor/radix/react-presence/presence.js +152 -0
  295. package/dist/primitives/vendor/radix/react-presence/presence.js.map +1 -0
  296. package/dist/primitives/vendor/radix/react-presence/use-state-machine.d.ts +10 -0
  297. package/dist/primitives/vendor/radix/react-presence/use-state-machine.js +12 -0
  298. package/dist/primitives/vendor/radix/react-presence/use-state-machine.js.map +1 -0
  299. package/dist/primitives/vendor/radix/react-primitive/index.d.ts +2 -0
  300. package/dist/primitives/vendor/radix/react-primitive/primitive.d.ts +56 -0
  301. package/dist/primitives/vendor/radix/react-primitive/primitive.js +84 -0
  302. package/dist/primitives/vendor/radix/react-primitive/primitive.js.map +1 -0
  303. package/dist/primitives/vendor/radix/react-progress/index.d.ts +2 -0
  304. package/dist/primitives/vendor/radix/react-progress/progress.d.ts +17 -0
  305. package/dist/primitives/vendor/radix/react-progress/progress.js +79 -0
  306. package/dist/primitives/vendor/radix/react-progress/progress.js.map +1 -0
  307. package/dist/primitives/vendor/radix/react-radio-group/index.d.ts +2 -0
  308. package/dist/primitives/vendor/radix/react-radio-group/radio-group.d.ts +55 -0
  309. package/dist/primitives/vendor/radix/react-radio-group/radio-group.js +173 -0
  310. package/dist/primitives/vendor/radix/react-radio-group/radio-group.js.map +1 -0
  311. package/dist/primitives/vendor/radix/react-radio-group/radio.d.ts +62 -0
  312. package/dist/primitives/vendor/radix/react-radio-group/radio.js +150 -0
  313. package/dist/primitives/vendor/radix/react-radio-group/radio.js.map +1 -0
  314. package/dist/primitives/vendor/radix/react-roving-focus/index.d.ts +2 -0
  315. package/dist/primitives/vendor/radix/react-roving-focus/roving-focus-group.d.ts +47 -0
  316. package/dist/primitives/vendor/radix/react-roving-focus/roving-focus-group.js +218 -0
  317. package/dist/primitives/vendor/radix/react-roving-focus/roving-focus-group.js.map +1 -0
  318. package/dist/primitives/vendor/radix/react-scroll-area/index.d.ts +2 -0
  319. package/dist/primitives/vendor/radix/react-scroll-area/scroll-area.d.ts +121 -0
  320. package/dist/primitives/vendor/radix/react-scroll-area/scroll-area.js +713 -0
  321. package/dist/primitives/vendor/radix/react-scroll-area/scroll-area.js.map +1 -0
  322. package/dist/primitives/vendor/radix/react-scroll-area/use-state-machine.d.ts +10 -0
  323. package/dist/primitives/vendor/radix/react-scroll-area/use-state-machine.js +12 -0
  324. package/dist/primitives/vendor/radix/react-scroll-area/use-state-machine.js.map +1 -0
  325. package/dist/primitives/vendor/radix/react-select/index.d.ts +2 -0
  326. package/dist/primitives/vendor/radix/react-select/select.d.ts +163 -0
  327. package/dist/primitives/vendor/radix/react-select/select.js +1040 -0
  328. package/dist/primitives/vendor/radix/react-select/select.js.map +1 -0
  329. package/dist/primitives/vendor/radix/react-separator/index.d.ts +2 -0
  330. package/dist/primitives/vendor/radix/react-separator/separator.d.ts +20 -0
  331. package/dist/primitives/vendor/radix/react-separator/separator.js +29 -0
  332. package/dist/primitives/vendor/radix/react-separator/separator.js.map +1 -0
  333. package/dist/primitives/vendor/radix/react-slot/index.d.ts +1 -0
  334. package/dist/primitives/vendor/radix/react-slot/slot.d.ts +29 -0
  335. package/dist/primitives/vendor/radix/react-slot/slot.js +107 -0
  336. package/dist/primitives/vendor/radix/react-slot/slot.js.map +1 -0
  337. package/dist/primitives/vendor/radix/react-switch/index.d.ts +2 -0
  338. package/dist/primitives/vendor/radix/react-switch/switch.d.ts +41 -0
  339. package/dist/primitives/vendor/radix/react-switch/switch.js +185 -0
  340. package/dist/primitives/vendor/radix/react-switch/switch.js.map +1 -0
  341. package/dist/primitives/vendor/radix/react-tabs/index.d.ts +2 -0
  342. package/dist/primitives/vendor/radix/react-tabs/tabs.d.ts +54 -0
  343. package/dist/primitives/vendor/radix/react-tabs/tabs.js +145 -0
  344. package/dist/primitives/vendor/radix/react-tabs/tabs.js.map +1 -0
  345. package/dist/primitives/vendor/radix/react-toast/index.d.ts +2 -0
  346. package/dist/primitives/vendor/radix/react-toast/toast.d.ts +125 -0
  347. package/dist/primitives/vendor/radix/react-toast/toast.js +557 -0
  348. package/dist/primitives/vendor/radix/react-toast/toast.js.map +1 -0
  349. package/dist/primitives/vendor/radix/react-tooltip/index.d.ts +2 -0
  350. package/dist/primitives/vendor/radix/react-tooltip/tooltip.d.ts +99 -0
  351. package/dist/primitives/vendor/radix/react-tooltip/tooltip.js +503 -0
  352. package/dist/primitives/vendor/radix/react-tooltip/tooltip.js.map +1 -0
  353. package/dist/primitives/vendor/radix/react-use-callback-ref/index.d.ts +1 -0
  354. package/dist/primitives/vendor/radix/react-use-callback-ref/use-callback-ref.d.ts +6 -0
  355. package/dist/primitives/vendor/radix/react-use-callback-ref/use-callback-ref.js +18 -0
  356. package/dist/primitives/vendor/radix/react-use-callback-ref/use-callback-ref.js.map +1 -0
  357. package/dist/primitives/vendor/radix/react-use-controllable-state/index.d.ts +2 -0
  358. package/dist/primitives/vendor/radix/react-use-controllable-state/use-controllable-state-reducer.d.ts +28 -0
  359. package/dist/primitives/vendor/radix/react-use-controllable-state/use-controllable-state.d.ts +11 -0
  360. package/dist/primitives/vendor/radix/react-use-controllable-state/use-controllable-state.js +59 -0
  361. package/dist/primitives/vendor/radix/react-use-controllable-state/use-controllable-state.js.map +1 -0
  362. package/dist/primitives/vendor/radix/react-use-effect-event/index.d.ts +1 -0
  363. package/dist/primitives/vendor/radix/react-use-effect-event/use-effect-event.d.ts +7 -0
  364. package/dist/primitives/vendor/radix/react-use-is-hydrated/index.d.ts +1 -0
  365. package/dist/primitives/vendor/radix/react-use-is-hydrated/use-is-hydrated-legacy.d.ts +1 -0
  366. package/dist/primitives/vendor/radix/react-use-is-hydrated/use-is-hydrated-legacy.js +18 -0
  367. package/dist/primitives/vendor/radix/react-use-is-hydrated/use-is-hydrated-legacy.js.map +1 -0
  368. package/dist/primitives/vendor/radix/react-use-is-hydrated/use-is-hydrated.d.ts +6 -0
  369. package/dist/primitives/vendor/radix/react-use-is-hydrated/use-is-hydrated.js +19 -0
  370. package/dist/primitives/vendor/radix/react-use-is-hydrated/use-is-hydrated.js.map +1 -0
  371. package/dist/primitives/vendor/radix/react-use-layout-effect/index.d.ts +1 -0
  372. package/dist/primitives/vendor/radix/react-use-layout-effect/use-layout-effect.d.ts +10 -0
  373. package/dist/primitives/vendor/radix/react-use-layout-effect/use-layout-effect.js +15 -0
  374. package/dist/primitives/vendor/radix/react-use-layout-effect/use-layout-effect.js.map +1 -0
  375. package/dist/primitives/vendor/radix/react-use-previous/index.d.ts +1 -0
  376. package/dist/primitives/vendor/radix/react-use-previous/use-previous.d.ts +2 -0
  377. package/dist/primitives/vendor/radix/react-use-previous/use-previous.js +20 -0
  378. package/dist/primitives/vendor/radix/react-use-previous/use-previous.js.map +1 -0
  379. package/dist/primitives/vendor/radix/react-use-size/index.d.ts +1 -0
  380. package/dist/primitives/vendor/radix/react-use-size/use-size.d.ts +5 -0
  381. package/dist/primitives/vendor/radix/react-use-size/use-size.js +42 -0
  382. package/dist/primitives/vendor/radix/react-use-size/use-size.js.map +1 -0
  383. package/dist/primitives/vendor/radix/react-visually-hidden/index.d.ts +2 -0
  384. package/dist/primitives/vendor/radix/react-visually-hidden/visually-hidden.d.ts +21 -0
  385. package/dist/primitives/vendor/radix/react-visually-hidden/visually-hidden.js +32 -0
  386. package/dist/primitives/vendor/radix/react-visually-hidden/visually-hidden.js.map +1 -0
  387. package/dist/primitives/vendor/radix/rect/index.d.ts +2 -0
  388. package/dist/primitives/vendor/radix/rect/observe-element-rect.d.ts +16 -0
  389. package/dist/styles.css +1 -1
  390. package/package.json +21 -11
  391. package/vendor-manifest.json +1101 -0
@@ -1 +1 @@
1
- {"version":3,"file":"stat-card.js","names":[],"sources":["../../src/components/stat-card.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { cn } from '../lib/utils';\n\nimport { Card } from './card';\n\nexport interface StatCardProps extends React.ComponentProps<typeof Card> {\n label: React.ReactNode;\n value: React.ReactNode;\n icon?: React.ReactNode;\n detail?: React.ReactNode;\n trend?: React.ReactNode;\n}\n\nfunction StatCard({ label, value, icon, detail, trend, className, ...props }: StatCardProps) {\n return (\n <Card density=\"compact\" className={cn('min-w-0', className)} {...props}>\n <div className=\"flex items-start justify-between gap-4 p-4\">\n <div className=\"min-w-0\">\n <div className=\"text-[11px] font-semibold tracking-[0.08em] text-muted-foreground uppercase\">\n {label}\n </div>\n <div className=\"mt-1 truncate text-2xl font-semibold tracking-[-0.035em] text-foreground\">\n {value}\n </div>\n {detail ? <div className=\"mt-1 text-xs text-muted-foreground\">{detail}</div> : null}\n </div>\n {icon ? (\n <div className=\"grid size-9 shrink-0 place-items-center rounded-lg border border-brand/15 bg-brand-soft text-brand [&_svg]:size-4.5\">\n {icon}\n </div>\n ) : null}\n </div>\n {trend ? <div className=\"border-t border-border px-4 py-2.5 text-xs\">{trend}</div> : null}\n </Card>\n );\n}\n\nexport { StatCard };\n"],"mappings":";;;;;AAcA,SAAS,SAAS,EAAE,OAAO,OAAO,MAAM,QAAQ,OAAO,WAAW,GAAG,SAAwB;CAC3F,OACE,qBAAC,MAAD;EAAM,SAAQ;EAAU,WAAW,GAAG,WAAW,SAAS;EAAG,GAAI;EAAjE,UAAA,CACE,qBAAC,OAAD;GAAK,WAAU;GAAf,UAAA,CACE,qBAAC,OAAD;IAAK,WAAU;IAAf,UAAA;KACE,oBAAC,OAAD;MAAK,WAAU;MACZ,UAAA;KACE,CAAA;KACL,oBAAC,OAAD;MAAK,WAAU;MACZ,UAAA;KACE,CAAA;KACJ,SAAS,oBAAC,OAAD;MAAK,WAAU;MAAsC,UAAA;KAAY,CAAA,IAAI;IAC5E;GACJ,CAAA,GAAA,OACC,oBAAC,OAAD;IAAK,WAAU;IACZ,UAAA;GACE,CAAA,IACH,IACD;EACJ,CAAA,GAAA,QAAQ,oBAAC,OAAD;GAAK,WAAU;GAA8C,UAAA;EAAW,CAAA,IAAI,IACjF;;AAEV"}
1
+ {"version":3,"file":"stat-card.js","names":[],"sources":["../../src/components/stat-card.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { cn } from '../lib/utils';\n\nimport { Card } from './card';\n\nexport interface StatCardProps extends React.ComponentProps<typeof Card> {\n label: React.ReactNode;\n value: React.ReactNode;\n icon?: React.ReactNode;\n detail?: React.ReactNode;\n trend?: React.ReactNode;\n}\n\nfunction StatCard({ label, value, icon, detail, trend, className, ...props }: StatCardProps) {\n return (\n <Card density=\"compact\" className={cn('min-w-0', className)} {...props}>\n <div className=\"flex items-start justify-between gap-4 p-4\">\n <div className=\"min-w-0\">\n <div className=\"text-[11px] font-semibold tracking-[0.08em] text-muted-foreground uppercase\">\n {label}\n </div>\n <div className=\"mt-1 truncate text-2xl font-semibold tracking-[-0.035em] text-foreground\">\n {value}\n </div>\n {detail ? <div className=\"mt-1 text-xs text-muted-foreground\">{detail}</div> : null}\n </div>\n {icon ? (\n <div className=\"grid size-9 shrink-0 place-items-center rounded-lg border border-brand/15 bg-brand-soft text-brand [&_svg]:size-4.5\">\n {icon}\n </div>\n ) : null}\n </div>\n {trend ? <div className=\"border-t border-border px-4 py-2.5 text-xs\">{trend}</div> : null}\n </Card>\n );\n}\n\nexport { StatCard };\n"],"mappings":";;;;;;AAcA,SAAS,SAAS,EAAE,OAAO,OAAO,MAAM,QAAQ,OAAO,WAAW,GAAG,SAAwB;CAC3F,OACE,qBAAC,MAAD;EAAM,SAAQ;EAAU,WAAW,GAAG,WAAW,SAAS;EAAG,GAAI;EAAjE,UAAA,CACE,qBAAC,OAAD;GAAK,WAAU;GAAf,UAAA,CACE,qBAAC,OAAD;IAAK,WAAU;IAAf,UAAA;KACE,oBAAC,OAAD;MAAK,WAAU;MACZ,UAAA;KACE,CAAA;KACL,oBAAC,OAAD;MAAK,WAAU;MACZ,UAAA;KACE,CAAA;KACJ,SAAS,oBAAC,OAAD;MAAK,WAAU;MAAsC,UAAA;KAAY,CAAA,IAAI;IAC5E;GACJ,CAAA,GAAA,OACC,oBAAC,OAAD;IAAK,WAAU;IACZ,UAAA;GACE,CAAA,IACH,IACD;EACJ,CAAA,GAAA,QAAQ,oBAAC,OAAD;GAAK,WAAU;GAA8C,UAAA;EAAW,CAAA,IAAI,IACjF;;AAEV"}
@@ -1,3 +1,4 @@
1
+ "use client";
1
2
  import { cn } from "../lib/utils.js";
2
3
  import "react";
3
4
  import { jsx, jsxs } from "react/jsx-runtime";
@@ -1 +1 @@
1
- {"version":3,"file":"status.js","names":[],"sources":["../../src/components/status.tsx"],"sourcesContent":["import { cva, type VariantProps } from 'class-variance-authority';\nimport * as React from 'react';\n\nimport { cn } from '../lib/utils';\n\nconst statusDotVariants = cva('size-2 shrink-0 rounded-full ring-2 ring-current/10', {\n variants: {\n status: {\n neutral: 'bg-muted-foreground text-muted-foreground',\n brand: 'bg-brand text-brand',\n success: 'bg-success text-success',\n warning: 'bg-warning text-warning',\n danger: 'bg-destructive text-destructive',\n info: 'bg-info text-info',\n },\n },\n defaultVariants: { status: 'neutral' },\n});\n\nfunction StatusDot({\n className,\n status,\n pulse = false,\n ...props\n}: React.ComponentProps<'span'> & VariantProps<typeof statusDotVariants> & { pulse?: boolean }) {\n return (\n <span\n data-slot=\"status-dot\"\n className={cn('relative inline-flex', className)}\n aria-hidden=\"true\"\n {...props}\n >\n {pulse ? (\n <span\n className={cn(\n statusDotVariants({ status }),\n 'absolute inset-0 animate-ping opacity-40 motion-reduce:hidden',\n )}\n />\n ) : null}\n <span className={statusDotVariants({ status })} />\n </span>\n );\n}\n\nfunction Status({\n className,\n status,\n pulse,\n children,\n ...props\n}: React.ComponentProps<'span'> & VariantProps<typeof statusDotVariants> & { pulse?: boolean }) {\n return (\n <span\n data-slot=\"status\"\n className={cn(\n 'inline-flex items-center gap-2 text-xs font-medium text-muted-foreground',\n className,\n )}\n {...props}\n >\n <StatusDot status={status} pulse={pulse} />\n {children}\n </span>\n );\n}\n\nexport { Status, StatusDot, statusDotVariants };\n"],"mappings":";;;;;AAKA,IAAM,oBAAoB,IAAI,uDAAuD;CACnF,UAAU,EACR,QAAQ;EACN,SAAS;EACT,OAAO;EACP,SAAS;EACT,SAAS;EACT,QAAQ;EACR,MAAM;CACR,EACF;CACA,iBAAiB,EAAE,QAAQ,UAAU;AACvC,CAAC;AAED,SAAS,UAAU,EACjB,WACA,QACA,QAAQ,OACR,GAAG,SAC2F;CAC9F,OACE,qBAAC,QAAD;EACE,aAAU;EACV,WAAW,GAAG,wBAAwB,SAAS;EAC/C,eAAY;EACZ,GAAI;EAJN,UAAA,CAMG,QACC,oBAAC,QAAD,EACE,WAAW,GACT,kBAAkB,EAAE,OAAO,CAAC,GAC5B,+DACF,EACD,CAAA,IACC,MACJ,oBAAC,QAAD,EAAM,WAAW,kBAAkB,EAAE,OAAO,CAAC,EAAI,CAAA,CAC7C;;AAEV;AAEA,SAAS,OAAO,EACd,WACA,QACA,OACA,UACA,GAAG,SAC2F;CAC9F,OACE,qBAAC,QAAD;EACE,aAAU;EACV,WAAW,GACT,4EACA,SACF;EACA,GAAI;EANN,UAAA,CAQE,oBAAC,WAAD;GAAmB;GAAe;EAAQ,CAAA,GACzC,QACG;;AAEV"}
1
+ {"version":3,"file":"status.js","names":[],"sources":["../../src/components/status.tsx"],"sourcesContent":["import { cva, type VariantProps } from 'class-variance-authority';\nimport * as React from 'react';\n\nimport { cn } from '../lib/utils';\n\nconst statusDotVariants = cva('size-2 shrink-0 rounded-full ring-2 ring-current/10', {\n variants: {\n status: {\n neutral: 'bg-muted-foreground text-muted-foreground',\n brand: 'bg-brand text-brand',\n success: 'bg-success text-success',\n warning: 'bg-warning text-warning',\n danger: 'bg-destructive text-destructive',\n info: 'bg-info text-info',\n },\n },\n defaultVariants: { status: 'neutral' },\n});\n\nfunction StatusDot({\n className,\n status,\n pulse = false,\n ...props\n}: React.ComponentProps<'span'> & VariantProps<typeof statusDotVariants> & { pulse?: boolean }) {\n return (\n <span\n data-slot=\"status-dot\"\n className={cn('relative inline-flex', className)}\n aria-hidden=\"true\"\n {...props}\n >\n {pulse ? (\n <span\n className={cn(\n statusDotVariants({ status }),\n 'absolute inset-0 animate-ping opacity-40 motion-reduce:hidden',\n )}\n />\n ) : null}\n <span className={statusDotVariants({ status })} />\n </span>\n );\n}\n\nfunction Status({\n className,\n status,\n pulse,\n children,\n ...props\n}: React.ComponentProps<'span'> & VariantProps<typeof statusDotVariants> & { pulse?: boolean }) {\n return (\n <span\n data-slot=\"status\"\n className={cn(\n 'inline-flex items-center gap-2 text-xs font-medium text-muted-foreground',\n className,\n )}\n {...props}\n >\n <StatusDot status={status} pulse={pulse} />\n {children}\n </span>\n );\n}\n\nexport { Status, StatusDot, statusDotVariants };\n"],"mappings":";;;;;;AAKA,IAAM,oBAAoB,IAAI,uDAAuD;CACnF,UAAU,EACR,QAAQ;EACN,SAAS;EACT,OAAO;EACP,SAAS;EACT,SAAS;EACT,QAAQ;EACR,MAAM;CACR,EACF;CACA,iBAAiB,EAAE,QAAQ,UAAU;AACvC,CAAC;AAED,SAAS,UAAU,EACjB,WACA,QACA,QAAQ,OACR,GAAG,SAC2F;CAC9F,OACE,qBAAC,QAAD;EACE,aAAU;EACV,WAAW,GAAG,wBAAwB,SAAS;EAC/C,eAAY;EACZ,GAAI;EAJN,UAAA,CAMG,QACC,oBAAC,QAAD,EACE,WAAW,GACT,kBAAkB,EAAE,OAAO,CAAC,GAC5B,+DACF,EACD,CAAA,IACC,MACJ,oBAAC,QAAD,EAAM,WAAW,kBAAkB,EAAE,OAAO,CAAC,EAAI,CAAA,CAC7C;;AAEV;AAEA,SAAS,OAAO,EACd,WACA,QACA,OACA,UACA,GAAG,SAC2F;CAC9F,OACE,qBAAC,QAAD;EACE,aAAU;EACV,WAAW,GACT,4EACA,SACF;EACA,GAAI;EANN,UAAA,CAQE,oBAAC,WAAD;GAAmB;GAAe;EAAQ,CAAA,GACzC,QACG;;AAEV"}
@@ -1,3 +1,4 @@
1
+ "use client";
1
2
  import { cn } from "../lib/utils.js";
2
3
  import "react";
3
4
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
@@ -1 +1 @@
1
- {"version":3,"file":"steps.js","names":["_Fragment"],"sources":["../../src/components/steps.tsx"],"sourcesContent":["import Check from '@burtson-labs/icons/react/check';\nimport * as React from 'react';\n\nimport { cn } from '../lib/utils';\n\nexport interface StepItem {\n title: React.ReactNode;\n description?: React.ReactNode;\n}\n\nexport type StepsBreakpoint = 'sm' | 'md' | 'lg';\n\nexport interface StepsProps extends React.ComponentProps<'ol'> {\n items: StepItem[];\n /** 0-based index of the step in progress; earlier steps show as done. */\n current: number;\n orientation?: 'horizontal' | 'vertical';\n /**\n * Below this width a horizontal Steps shows only where you are: the step's\n * title, \"Step 2 of 5\" and a segmented progress bar. `sm` (640px) by\n * default for horizontal steps; `false` keeps every step visible.\n */\n compactBelow?: StepsBreakpoint | false;\n /** The compact counter's text. */\n formatCounter?: (step: number, total: number) => string;\n}\n\n// Written out in full per breakpoint so Tailwind finds every class.\nconst compactClasses: Record<\n StepsBreakpoint,\n { other: string; item: string; marker: string; counter: string; bar: string; text: string }\n> = {\n sm: {\n other: 'max-sm:hidden',\n item: 'max-sm:grid max-sm:grid-cols-[minmax(0,1fr)_auto] max-sm:items-baseline max-sm:gap-x-3 max-sm:gap-y-2',\n marker: 'max-sm:hidden',\n counter: 'hidden max-sm:block',\n bar: 'hidden max-sm:flex max-sm:col-span-2',\n text: 'max-sm:pt-0',\n },\n md: {\n other: 'max-md:hidden',\n item: 'max-md:grid max-md:grid-cols-[minmax(0,1fr)_auto] max-md:items-baseline max-md:gap-x-3 max-md:gap-y-2',\n marker: 'max-md:hidden',\n counter: 'hidden max-md:block',\n bar: 'hidden max-md:flex max-md:col-span-2',\n text: 'max-md:pt-0',\n },\n lg: {\n other: 'max-lg:hidden',\n item: 'max-lg:grid max-lg:grid-cols-[minmax(0,1fr)_auto] max-lg:items-baseline max-lg:gap-x-3 max-lg:gap-y-2',\n marker: 'max-lg:hidden',\n counter: 'hidden max-lg:block',\n bar: 'hidden max-lg:flex max-lg:col-span-2',\n text: 'max-lg:pt-0',\n },\n};\n\n/**\n * Progress through a short multi-step flow (a wizard, an onboarding). On a\n * phone a horizontal Steps collapses to the current step, \"Step 2 of 5\" and\n * a progress bar, instead of squeezing every title into a few letters.\n */\nfunction Steps({\n items,\n current,\n orientation = 'horizontal',\n compactBelow = orientation === 'horizontal' ? 'sm' : false,\n formatCounter = (step, total) => `Step ${step} of ${total}`,\n className,\n ...props\n}: StepsProps) {\n const compact = compactBelow ? compactClasses[compactBelow] : null;\n // The step the compact form shows: the current one, or the last when all are done.\n const focus = Math.min(Math.max(0, current), items.length - 1);\n return (\n <ol\n data-slot=\"steps\"\n data-orientation={orientation}\n className={cn(\n 'flex gap-3',\n orientation === 'horizontal' ? 'flex-row items-start' : 'flex-col',\n className,\n )}\n {...props}\n >\n {items.map((item, i) => {\n const state = i < current ? 'complete' : i === current ? 'current' : 'upcoming';\n const isFocus = compact && i === focus;\n return (\n <li\n key={i}\n data-state={state}\n aria-current={state === 'current' ? 'step' : undefined}\n className={cn(\n 'flex min-w-0 items-start gap-2.5',\n orientation === 'horizontal' && 'flex-1',\n compact && (isFocus ? compact.item : compact.other),\n )}\n >\n <span\n className={cn(\n 'grid size-6 shrink-0 place-items-center rounded-full border text-xs font-semibold tabular-nums',\n state === 'complete' && 'border-primary bg-primary text-primary-foreground',\n state === 'current' && 'border-brand bg-brand-soft text-brand',\n state === 'upcoming' && 'border-border-strong text-muted-foreground',\n isFocus && compact.marker,\n )}\n >\n {state === 'complete' ? <Check className=\"size-3.5\" aria-hidden /> : i + 1}\n </span>\n <span className={cn('grid min-w-0 gap-0.5 pt-0.5', isFocus && compact.text)}>\n <span\n className={cn(\n 'break-words text-[13px] font-semibold',\n state === 'upcoming' && 'text-muted-foreground',\n )}\n >\n {item.title}\n <span className=\"sr-only\">\n {state === 'complete' ? ' (done)' : state === 'current' ? ' (current)' : ''}\n </span>\n </span>\n {item.description && (\n <span className=\"text-xs text-muted-foreground\">{item.description}</span>\n )}\n </span>\n {isFocus && (\n <>\n <span\n data-slot=\"steps-counter\"\n className={cn(\n 'text-xs whitespace-nowrap text-muted-foreground tabular-nums',\n compact.counter,\n )}\n >\n {formatCounter(focus + 1, items.length)}\n </span>\n <span data-slot=\"steps-bar\" aria-hidden className={cn('gap-1', compact.bar)}>\n {items.map((_, j) => (\n <span\n key={j}\n className={cn(\n 'h-1 flex-1 rounded-full',\n j <= current ? 'bg-brand' : 'bg-muted',\n )}\n />\n ))}\n </span>\n </>\n )}\n </li>\n );\n })}\n </ol>\n );\n}\n\nexport { Steps };\n"],"mappings":";;;;;AA4BA,IAAM,iBAGF;CACF,IAAI;EACF,OAAO;EACP,MAAM;EACN,QAAQ;EACR,SAAS;EACT,KAAK;EACL,MAAM;CACR;CACA,IAAI;EACF,OAAO;EACP,MAAM;EACN,QAAQ;EACR,SAAS;EACT,KAAK;EACL,MAAM;CACR;CACA,IAAI;EACF,OAAO;EACP,MAAM;EACN,QAAQ;EACR,SAAS;EACT,KAAK;EACL,MAAM;CACR;AACF;;;;;;AAOA,SAAS,MAAM,EACb,OACA,SACA,cAAc,cACd,eAAe,gBAAgB,eAAe,OAAO,OACrD,iBAAiB,MAAM,UAAU,QAAQ,KAAK,MAAM,SACpD,WACA,GAAG,SACU;CACb,MAAM,UAAU,eAAe,eAAe,gBAAgB;CAE9D,MAAM,QAAQ,KAAK,IAAI,KAAK,IAAI,GAAG,OAAO,GAAG,MAAM,SAAS,CAAC;CAC7D,OACE,oBAAC,MAAD;EACE,aAAU;EACV,oBAAkB;EAClB,WAAW,GACT,cACA,gBAAgB,eAAe,yBAAyB,YACxD,SACF;EACA,GAAI;EAEH,UAAA,MAAM,KAAK,MAAM,MAAM;GACtB,MAAM,QAAQ,IAAI,UAAU,aAAa,MAAM,UAAU,YAAY;GACrE,MAAM,UAAU,WAAW,MAAM;GACjC,OACE,qBAAC,MAAD;IAEE,cAAY;IACZ,gBAAc,UAAU,YAAY,SAAS,KAAA;IAC7C,WAAW,GACT,oCACA,gBAAgB,gBAAgB,UAChC,YAAY,UAAU,QAAQ,OAAO,QAAQ,MAC/C;IARF,UAAA;KAUE,oBAAC,QAAD;MACE,WAAW,GACT,kGACA,UAAU,cAAc,qDACxB,UAAU,aAAa,yCACvB,UAAU,cAAc,8CACxB,WAAW,QAAQ,MACrB;MAEC,UAAA,UAAU,aAAa,oBAAC,OAAD;OAAO,WAAU;OAAW,eAAA;MAAa,CAAA,IAAI,IAAI;KACrE,CAAA;KACN,qBAAC,QAAD;MAAM,WAAW,GAAG,+BAA+B,WAAW,QAAQ,IAAI;MAA1E,UAAA,CACE,qBAAC,QAAD;OACE,WAAW,GACT,yCACA,UAAU,cAAc,uBAC1B;OAJF,UAAA,CAMG,KAAK,OACN,oBAAC,QAAD;QAAM,WAAU;QACb,UAAA,UAAU,aAAa,YAAY,UAAU,YAAY,eAAe;OACrE,CAAA,CACF;MACL,CAAA,GAAA,KAAK,eACJ,oBAAC,QAAD;OAAM,WAAU;OAAiC,UAAA,KAAK;MAAkB,CAAA,CAEtE;;KACL,WACC,qBAAAA,UAAA,EAAA,UAAA,CACE,oBAAC,QAAD;MACE,aAAU;MACV,WAAW,GACT,gEACA,QAAQ,OACV;MAEC,UAAA,cAAc,QAAQ,GAAG,MAAM,MAAM;KAClC,CAAA,GACN,oBAAC,QAAD;MAAM,aAAU;MAAY,eAAA;MAAY,WAAW,GAAG,SAAS,QAAQ,GAAG;MACvE,UAAA,MAAM,KAAK,GAAG,MACb,oBAAC,QAAD,EAEE,WAAW,GACT,2BACA,KAAK,UAAU,aAAa,UAC9B,EACD,GALM,CAKN,CACF;KACG,CAAA,CACN,EAAA,CAAA;IAEF;GA5DG,GAAA,CA4DH;EAER,CAAC;CACC,CAAA;AAER"}
1
+ {"version":3,"file":"steps.js","names":["_Fragment"],"sources":["../../src/components/steps.tsx"],"sourcesContent":["import Check from '@burtson-labs/icons/react/check';\nimport * as React from 'react';\n\nimport { cn } from '../lib/utils';\n\nexport interface StepItem {\n title: React.ReactNode;\n description?: React.ReactNode;\n}\n\nexport type StepsBreakpoint = 'sm' | 'md' | 'lg';\n\nexport interface StepsProps extends React.ComponentProps<'ol'> {\n items: StepItem[];\n /** 0-based index of the step in progress; earlier steps show as done. */\n current: number;\n orientation?: 'horizontal' | 'vertical';\n /**\n * Below this width a horizontal Steps shows only where you are: the step's\n * title, \"Step 2 of 5\" and a segmented progress bar. `sm` (640px) by\n * default for horizontal steps; `false` keeps every step visible.\n */\n compactBelow?: StepsBreakpoint | false;\n /** The compact counter's text. */\n formatCounter?: (step: number, total: number) => string;\n}\n\n// Written out in full per breakpoint so Tailwind finds every class.\nconst compactClasses: Record<\n StepsBreakpoint,\n { other: string; item: string; marker: string; counter: string; bar: string; text: string }\n> = {\n sm: {\n other: 'max-sm:hidden',\n item: 'max-sm:grid max-sm:grid-cols-[minmax(0,1fr)_auto] max-sm:items-baseline max-sm:gap-x-3 max-sm:gap-y-2',\n marker: 'max-sm:hidden',\n counter: 'hidden max-sm:block',\n bar: 'hidden max-sm:flex max-sm:col-span-2',\n text: 'max-sm:pt-0',\n },\n md: {\n other: 'max-md:hidden',\n item: 'max-md:grid max-md:grid-cols-[minmax(0,1fr)_auto] max-md:items-baseline max-md:gap-x-3 max-md:gap-y-2',\n marker: 'max-md:hidden',\n counter: 'hidden max-md:block',\n bar: 'hidden max-md:flex max-md:col-span-2',\n text: 'max-md:pt-0',\n },\n lg: {\n other: 'max-lg:hidden',\n item: 'max-lg:grid max-lg:grid-cols-[minmax(0,1fr)_auto] max-lg:items-baseline max-lg:gap-x-3 max-lg:gap-y-2',\n marker: 'max-lg:hidden',\n counter: 'hidden max-lg:block',\n bar: 'hidden max-lg:flex max-lg:col-span-2',\n text: 'max-lg:pt-0',\n },\n};\n\n/**\n * Progress through a short multi-step flow (a wizard, an onboarding). On a\n * phone a horizontal Steps collapses to the current step, \"Step 2 of 5\" and\n * a progress bar, instead of squeezing every title into a few letters.\n */\nfunction Steps({\n items,\n current,\n orientation = 'horizontal',\n compactBelow = orientation === 'horizontal' ? 'sm' : false,\n formatCounter = (step, total) => `Step ${step} of ${total}`,\n className,\n ...props\n}: StepsProps) {\n const compact = compactBelow ? compactClasses[compactBelow] : null;\n // The step the compact form shows: the current one, or the last when all are done.\n const focus = Math.min(Math.max(0, current), items.length - 1);\n return (\n <ol\n data-slot=\"steps\"\n data-orientation={orientation}\n className={cn(\n 'flex gap-3',\n orientation === 'horizontal' ? 'flex-row items-start' : 'flex-col',\n className,\n )}\n {...props}\n >\n {items.map((item, i) => {\n const state = i < current ? 'complete' : i === current ? 'current' : 'upcoming';\n const isFocus = compact && i === focus;\n return (\n <li\n key={i}\n data-state={state}\n aria-current={state === 'current' ? 'step' : undefined}\n className={cn(\n 'flex min-w-0 items-start gap-2.5',\n orientation === 'horizontal' && 'flex-1',\n compact && (isFocus ? compact.item : compact.other),\n )}\n >\n <span\n className={cn(\n 'grid size-6 shrink-0 place-items-center rounded-full border text-xs font-semibold tabular-nums',\n state === 'complete' && 'border-primary bg-primary text-primary-foreground',\n state === 'current' && 'border-brand bg-brand-soft text-brand',\n state === 'upcoming' && 'border-border-strong text-muted-foreground',\n isFocus && compact.marker,\n )}\n >\n {state === 'complete' ? <Check className=\"size-3.5\" aria-hidden /> : i + 1}\n </span>\n <span className={cn('grid min-w-0 gap-0.5 pt-0.5', isFocus && compact.text)}>\n <span\n className={cn(\n 'break-words text-[13px] font-semibold',\n state === 'upcoming' && 'text-muted-foreground',\n )}\n >\n {item.title}\n <span className=\"sr-only\">\n {state === 'complete' ? ' (done)' : state === 'current' ? ' (current)' : ''}\n </span>\n </span>\n {item.description && (\n <span className=\"text-xs text-muted-foreground\">{item.description}</span>\n )}\n </span>\n {isFocus && (\n <>\n <span\n data-slot=\"steps-counter\"\n className={cn(\n 'text-xs whitespace-nowrap text-muted-foreground tabular-nums',\n compact.counter,\n )}\n >\n {formatCounter(focus + 1, items.length)}\n </span>\n <span data-slot=\"steps-bar\" aria-hidden className={cn('gap-1', compact.bar)}>\n {items.map((_, j) => (\n <span\n key={j}\n className={cn(\n 'h-1 flex-1 rounded-full',\n j <= current ? 'bg-brand' : 'bg-muted',\n )}\n />\n ))}\n </span>\n </>\n )}\n </li>\n );\n })}\n </ol>\n );\n}\n\nexport { Steps };\n"],"mappings":";;;;;;AA4BA,IAAM,iBAGF;CACF,IAAI;EACF,OAAO;EACP,MAAM;EACN,QAAQ;EACR,SAAS;EACT,KAAK;EACL,MAAM;CACR;CACA,IAAI;EACF,OAAO;EACP,MAAM;EACN,QAAQ;EACR,SAAS;EACT,KAAK;EACL,MAAM;CACR;CACA,IAAI;EACF,OAAO;EACP,MAAM;EACN,QAAQ;EACR,SAAS;EACT,KAAK;EACL,MAAM;CACR;AACF;;;;;;AAOA,SAAS,MAAM,EACb,OACA,SACA,cAAc,cACd,eAAe,gBAAgB,eAAe,OAAO,OACrD,iBAAiB,MAAM,UAAU,QAAQ,KAAK,MAAM,SACpD,WACA,GAAG,SACU;CACb,MAAM,UAAU,eAAe,eAAe,gBAAgB;CAE9D,MAAM,QAAQ,KAAK,IAAI,KAAK,IAAI,GAAG,OAAO,GAAG,MAAM,SAAS,CAAC;CAC7D,OACE,oBAAC,MAAD;EACE,aAAU;EACV,oBAAkB;EAClB,WAAW,GACT,cACA,gBAAgB,eAAe,yBAAyB,YACxD,SACF;EACA,GAAI;EAEH,UAAA,MAAM,KAAK,MAAM,MAAM;GACtB,MAAM,QAAQ,IAAI,UAAU,aAAa,MAAM,UAAU,YAAY;GACrE,MAAM,UAAU,WAAW,MAAM;GACjC,OACE,qBAAC,MAAD;IAEE,cAAY;IACZ,gBAAc,UAAU,YAAY,SAAS,KAAA;IAC7C,WAAW,GACT,oCACA,gBAAgB,gBAAgB,UAChC,YAAY,UAAU,QAAQ,OAAO,QAAQ,MAC/C;IARF,UAAA;KAUE,oBAAC,QAAD;MACE,WAAW,GACT,kGACA,UAAU,cAAc,qDACxB,UAAU,aAAa,yCACvB,UAAU,cAAc,8CACxB,WAAW,QAAQ,MACrB;MAEC,UAAA,UAAU,aAAa,oBAAC,OAAD;OAAO,WAAU;OAAW,eAAA;MAAa,CAAA,IAAI,IAAI;KACrE,CAAA;KACN,qBAAC,QAAD;MAAM,WAAW,GAAG,+BAA+B,WAAW,QAAQ,IAAI;MAA1E,UAAA,CACE,qBAAC,QAAD;OACE,WAAW,GACT,yCACA,UAAU,cAAc,uBAC1B;OAJF,UAAA,CAMG,KAAK,OACN,oBAAC,QAAD;QAAM,WAAU;QACb,UAAA,UAAU,aAAa,YAAY,UAAU,YAAY,eAAe;OACrE,CAAA,CACF;MACL,CAAA,GAAA,KAAK,eACJ,oBAAC,QAAD;OAAM,WAAU;OAAiC,UAAA,KAAK;MAAkB,CAAA,CAEtE;;KACL,WACC,qBAAAA,UAAA,EAAA,UAAA,CACE,oBAAC,QAAD;MACE,aAAU;MACV,WAAW,GACT,gEACA,QAAQ,OACV;MAEC,UAAA,cAAc,QAAQ,GAAG,MAAM,MAAM;KAClC,CAAA,GACN,oBAAC,QAAD;MAAM,aAAU;MAAY,eAAA;MAAY,WAAW,GAAG,SAAS,QAAQ,GAAG;MACvE,UAAA,MAAM,KAAK,GAAG,MACb,oBAAC,QAAD,EAEE,WAAW,GACT,2BACA,KAAK,UAAU,aAAa,UAC9B,EACD,GALM,CAKN,CACF;KACG,CAAA,CACN,EAAA,CAAA;IAEF;GA5DG,GAAA,CA4DH;EAER,CAAC;CACC,CAAA;AAER"}
@@ -1,4 +1,4 @@
1
- import { Switch as SwitchPrimitive } from 'radix-ui';
2
1
  import * as React from 'react';
2
+ import * as SwitchPrimitive from '../primitives/vendor/radix/react-switch';
3
3
  declare function Switch({ className, ...props }: React.ComponentProps<typeof SwitchPrimitive.Root>): React.JSX.Element;
4
4
  export { Switch };
@@ -1,20 +1,21 @@
1
+ "use client";
1
2
  import { cn } from "../lib/utils.js";
2
- import { Switch } from "radix-ui";
3
+ import { Root as Switch$1, SwitchThumb } from "../primitives/vendor/radix/react-switch/switch.js";
3
4
  import "react";
4
5
  import { jsx } from "react/jsx-runtime";
5
6
  //#region src/components/switch.tsx
6
- function Switch$1({ className, ...props }) {
7
- return /* @__PURE__ */ jsx(Switch.Root, {
7
+ function Switch({ className, ...props }) {
8
+ return /* @__PURE__ */ jsx(Switch$1, {
8
9
  "data-slot": "switch",
9
10
  className: cn("peer inline-flex h-5 w-9 shrink-0 items-center rounded-full border border-transparent shadow-xs transition-colors outline-none focus-visible:ring-[3px] focus-visible:ring-ring/20 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-border-strong", className),
10
11
  ...props,
11
- children: /* @__PURE__ */ jsx(Switch.Thumb, {
12
+ children: /* @__PURE__ */ jsx(SwitchThumb, {
12
13
  "data-slot": "switch-thumb",
13
14
  className: "pointer-events-none block size-4 rounded-full bg-background shadow-sm ring-0 transition-transform data-[state=checked]:translate-x-[calc(100%-1px)] data-[state=unchecked]:translate-x-px dark:data-[state=checked]:bg-primary-foreground dark:data-[state=unchecked]:bg-foreground/80"
14
15
  })
15
16
  });
16
17
  }
17
18
  //#endregion
18
- export { Switch$1 as Switch };
19
+ export { Switch };
19
20
 
20
21
  //# sourceMappingURL=switch.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"switch.js","names":["Switch","SwitchPrimitive"],"sources":["../../src/components/switch.tsx"],"sourcesContent":["import { Switch as SwitchPrimitive } from 'radix-ui';\nimport * as React from 'react';\n\nimport { cn } from '../lib/utils';\n\nfunction Switch({ className, ...props }: React.ComponentProps<typeof SwitchPrimitive.Root>) {\n return (\n <SwitchPrimitive.Root\n data-slot=\"switch\"\n className={cn(\n 'peer inline-flex h-5 w-9 shrink-0 items-center rounded-full border border-transparent shadow-xs transition-colors outline-none focus-visible:ring-[3px] focus-visible:ring-ring/20 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-border-strong',\n className,\n )}\n {...props}\n >\n <SwitchPrimitive.Thumb\n data-slot=\"switch-thumb\"\n className=\"pointer-events-none block size-4 rounded-full bg-background shadow-sm ring-0 transition-transform data-[state=checked]:translate-x-[calc(100%-1px)] data-[state=unchecked]:translate-x-px dark:data-[state=checked]:bg-primary-foreground dark:data-[state=unchecked]:bg-foreground/80\"\n />\n </SwitchPrimitive.Root>\n );\n}\n\nexport { Switch };\n"],"mappings":";;;;;AAKA,SAASA,SAAO,EAAE,WAAW,GAAG,SAA4D;CAC1F,OACE,oBAACC,OAAgB,MAAjB;EACE,aAAU;EACV,WAAW,GACT,8SACA,SACF;EACA,GAAI;EAEJ,UAAA,oBAACA,OAAgB,OAAjB;GACE,aAAU;GACV,WAAU;EACX,CAAA;CACmB,CAAA;AAE1B"}
1
+ {"version":3,"file":"switch.js","names":["SwitchPrimitive.Root","SwitchPrimitive.Thumb"],"sources":["../../src/components/switch.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { cn } from '../lib/utils';\nimport * as SwitchPrimitive from '../primitives/vendor/radix/react-switch';\n\nfunction Switch({ className, ...props }: React.ComponentProps<typeof SwitchPrimitive.Root>) {\n return (\n <SwitchPrimitive.Root\n data-slot=\"switch\"\n className={cn(\n 'peer inline-flex h-5 w-9 shrink-0 items-center rounded-full border border-transparent shadow-xs transition-colors outline-none focus-visible:ring-[3px] focus-visible:ring-ring/20 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-border-strong',\n className,\n )}\n {...props}\n >\n <SwitchPrimitive.Thumb\n data-slot=\"switch-thumb\"\n className=\"pointer-events-none block size-4 rounded-full bg-background shadow-sm ring-0 transition-transform data-[state=checked]:translate-x-[calc(100%-1px)] data-[state=unchecked]:translate-x-px dark:data-[state=checked]:bg-primary-foreground dark:data-[state=unchecked]:bg-foreground/80\"\n />\n </SwitchPrimitive.Root>\n );\n}\n\nexport { Switch };\n"],"mappings":";;;;;;AAKA,SAAS,OAAO,EAAE,WAAW,GAAG,SAA4D;CAC1F,OACE,oBAACA,UAAD;EACE,aAAU;EACV,WAAW,GACT,8SACA,SACF;EACA,GAAI;EAEJ,UAAA,oBAACC,aAAD;GACE,aAAU;GACV,WAAU;EACX,CAAA;CACmB,CAAA;AAE1B"}
@@ -1,3 +1,4 @@
1
+ "use client";
1
2
  import { cn } from "../lib/utils.js";
2
3
  import * as React from "react";
3
4
  import { jsx } from "react/jsx-runtime";
@@ -1 +1 @@
1
- {"version":3,"file":"table.js","names":[],"sources":["../../src/components/table.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { cn } from '../lib/utils';\n\nexport interface TableProps extends React.ComponentProps<'table'> {\n /** `compact` for dense ops screens (32px rows), `default` 40px. */\n density?: 'compact' | 'default';\n /** Keep the header visible while the container scrolls; give it a height. */\n stickyHeader?: boolean;\n containerClassName?: string;\n /**\n * Props for the scrolling wrapper (`tabIndex`, `role`, `aria-*`, `ref`, ...).\n * Anything set here wins over what `scrollLabel` sets.\n */\n containerProps?: React.ComponentProps<'div'>;\n /**\n * Accessible name for the scroll container. With it (or an `aria-label` /\n * `aria-labelledby` in `containerProps`) the wrapper becomes a named region\n * that joins the tab order while its content overflows, so keyboard users\n * can scroll it (WCAG 2.1.1, axe scrollable-region-focusable).\n */\n scrollLabel?: string;\n}\n\n/** True while the element's content is larger than its box. */\nfunction useOverflows(ref: React.RefObject<HTMLElement | null>, enabled: boolean): boolean {\n const [overflows, setOverflows] = React.useState(false);\n React.useEffect(() => {\n const el = ref.current;\n if (!enabled || !el) return;\n const update = () =>\n setOverflows(el.scrollWidth > el.clientWidth || el.scrollHeight > el.clientHeight);\n update();\n if (typeof ResizeObserver === 'undefined') return;\n const ro = new ResizeObserver(update);\n ro.observe(el);\n if (el.firstElementChild) ro.observe(el.firstElementChild);\n return () => ro.disconnect();\n }, [ref, enabled]);\n return overflows;\n}\n\nfunction assignRef<T>(ref: React.Ref<T> | undefined, node: T | null) {\n if (typeof ref === 'function') ref(node);\n else if (ref) ref.current = node;\n}\n\nfunction Table({\n className,\n density = 'default',\n stickyHeader = false,\n containerClassName,\n containerProps,\n scrollLabel,\n ...props\n}: TableProps) {\n const {\n className: containerPropsClassName,\n ref: containerRef,\n ...wrapperProps\n } = containerProps ?? {};\n const local = React.useRef<HTMLDivElement | null>(null);\n const setRef = React.useCallback(\n (node: HTMLDivElement | null) => {\n local.current = node;\n assignRef(containerRef, node);\n },\n [containerRef],\n );\n const named = Boolean(\n scrollLabel || wrapperProps['aria-label'] || wrapperProps['aria-labelledby'],\n );\n const overflows = useOverflows(local, named);\n return (\n <div\n data-slot=\"table-container\"\n data-density={density}\n data-sticky={stickyHeader || undefined}\n role={named ? 'region' : undefined}\n aria-label={scrollLabel}\n // A scrollable region must be reachable by keyboard; only while it scrolls.\n tabIndex={named && overflows ? 0 : undefined}\n {...wrapperProps}\n ref={setRef}\n className={cn(\n 'group/table relative w-full overflow-auto',\n containerClassName,\n containerPropsClassName,\n )}\n >\n <table\n data-slot=\"table\"\n className={cn('w-full caption-bottom text-[13px]', className)}\n {...props}\n />\n </div>\n );\n}\n\nfunction TableHeader({ className, ...props }: React.ComponentProps<'thead'>) {\n return (\n <thead\n data-slot=\"table-header\"\n className={cn(\n 'bg-surface-muted [&_tr]:border-b group-data-[sticky]/table:sticky group-data-[sticky]/table:top-0 group-data-[sticky]/table:z-10',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction TableBody({ className, ...props }: React.ComponentProps<'tbody'>) {\n return (\n <tbody\n data-slot=\"table-body\"\n className={cn('[&_tr:last-child]:border-0', className)}\n {...props}\n />\n );\n}\n\nfunction TableFooter({ className, ...props }: React.ComponentProps<'tfoot'>) {\n return (\n <tfoot\n data-slot=\"table-footer\"\n className={cn('border-t bg-surface-muted font-medium [&>tr]:last:border-b-0', className)}\n {...props}\n />\n );\n}\n\n/** Set `data-state=\"selected\"` (or `selected`) to mark a chosen row. */\nfunction TableRow({\n className,\n selected,\n ...props\n}: React.ComponentProps<'tr'> & { selected?: boolean }) {\n return (\n <tr\n data-slot=\"table-row\"\n data-state={selected ? 'selected' : undefined}\n aria-selected={selected || undefined}\n className={cn(\n 'border-b transition-colors hover:bg-muted/60 data-[state=selected]:bg-brand-soft/60 data-[state=selected]:shadow-[inset_2px_0_0_var(--color-brand)]',\n className,\n )}\n {...props}\n />\n );\n}\n\n/** `numeric` right-aligns with tabular figures, for counts, money and durations. */\nfunction TableHead({\n className,\n numeric,\n ...props\n}: React.ComponentProps<'th'> & { numeric?: boolean }) {\n return (\n <th\n data-slot=\"table-head\"\n className={cn(\n 'h-9 px-3 text-left align-middle text-[11px] font-semibold tracking-[0.06em] whitespace-nowrap text-muted-foreground uppercase group-data-[density=compact]/table:h-8 [&:has([role=checkbox])]:w-10 [&:has([role=checkbox])]:pr-0',\n numeric && 'text-right tabular-nums',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction TableCell({\n className,\n numeric,\n ...props\n}: React.ComponentProps<'td'> & { numeric?: boolean }) {\n return (\n <td\n data-slot=\"table-cell\"\n className={cn(\n 'h-10 px-3 align-middle whitespace-nowrap group-data-[density=compact]/table:h-8 [&:has([role=checkbox])]:pr-0',\n numeric && 'text-right font-mono text-[12.5px] tabular-nums',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction TableCaption({ className, ...props }: React.ComponentProps<'caption'>) {\n return (\n <caption\n data-slot=\"table-caption\"\n className={cn('mt-3 text-xs text-muted-foreground', className)}\n {...props}\n />\n );\n}\n\nexport { Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow };\n"],"mappings":"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"}
1
+ {"version":3,"file":"table.js","names":[],"sources":["../../src/components/table.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { cn } from '../lib/utils';\n\nexport interface TableProps extends React.ComponentProps<'table'> {\n /** `compact` for dense ops screens (32px rows), `default` 40px. */\n density?: 'compact' | 'default';\n /** Keep the header visible while the container scrolls; give it a height. */\n stickyHeader?: boolean;\n containerClassName?: string;\n /**\n * Props for the scrolling wrapper (`tabIndex`, `role`, `aria-*`, `ref`, ...).\n * Anything set here wins over what `scrollLabel` sets.\n */\n containerProps?: React.ComponentProps<'div'>;\n /**\n * Accessible name for the scroll container. With it (or an `aria-label` /\n * `aria-labelledby` in `containerProps`) the wrapper becomes a named region\n * that joins the tab order while its content overflows, so keyboard users\n * can scroll it (WCAG 2.1.1, axe scrollable-region-focusable).\n */\n scrollLabel?: string;\n}\n\n/** True while the element's content is larger than its box. */\nfunction useOverflows(ref: React.RefObject<HTMLElement | null>, enabled: boolean): boolean {\n const [overflows, setOverflows] = React.useState(false);\n React.useEffect(() => {\n const el = ref.current;\n if (!enabled || !el) return;\n const update = () =>\n setOverflows(el.scrollWidth > el.clientWidth || el.scrollHeight > el.clientHeight);\n update();\n if (typeof ResizeObserver === 'undefined') return;\n const ro = new ResizeObserver(update);\n ro.observe(el);\n if (el.firstElementChild) ro.observe(el.firstElementChild);\n return () => ro.disconnect();\n }, [ref, enabled]);\n return overflows;\n}\n\nfunction assignRef<T>(ref: React.Ref<T> | undefined, node: T | null) {\n if (typeof ref === 'function') ref(node);\n else if (ref) ref.current = node;\n}\n\nfunction Table({\n className,\n density = 'default',\n stickyHeader = false,\n containerClassName,\n containerProps,\n scrollLabel,\n ...props\n}: TableProps) {\n const {\n className: containerPropsClassName,\n ref: containerRef,\n ...wrapperProps\n } = containerProps ?? {};\n const local = React.useRef<HTMLDivElement | null>(null);\n const setRef = React.useCallback(\n (node: HTMLDivElement | null) => {\n local.current = node;\n assignRef(containerRef, node);\n },\n [containerRef],\n );\n const named = Boolean(\n scrollLabel || wrapperProps['aria-label'] || wrapperProps['aria-labelledby'],\n );\n const overflows = useOverflows(local, named);\n return (\n <div\n data-slot=\"table-container\"\n data-density={density}\n data-sticky={stickyHeader || undefined}\n role={named ? 'region' : undefined}\n aria-label={scrollLabel}\n // A scrollable region must be reachable by keyboard; only while it scrolls.\n tabIndex={named && overflows ? 0 : undefined}\n {...wrapperProps}\n ref={setRef}\n className={cn(\n 'group/table relative w-full overflow-auto',\n containerClassName,\n containerPropsClassName,\n )}\n >\n <table\n data-slot=\"table\"\n className={cn('w-full caption-bottom text-[13px]', className)}\n {...props}\n />\n </div>\n );\n}\n\nfunction TableHeader({ className, ...props }: React.ComponentProps<'thead'>) {\n return (\n <thead\n data-slot=\"table-header\"\n className={cn(\n 'bg-surface-muted [&_tr]:border-b group-data-[sticky]/table:sticky group-data-[sticky]/table:top-0 group-data-[sticky]/table:z-10',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction TableBody({ className, ...props }: React.ComponentProps<'tbody'>) {\n return (\n <tbody\n data-slot=\"table-body\"\n className={cn('[&_tr:last-child]:border-0', className)}\n {...props}\n />\n );\n}\n\nfunction TableFooter({ className, ...props }: React.ComponentProps<'tfoot'>) {\n return (\n <tfoot\n data-slot=\"table-footer\"\n className={cn('border-t bg-surface-muted font-medium [&>tr]:last:border-b-0', className)}\n {...props}\n />\n );\n}\n\n/** Set `data-state=\"selected\"` (or `selected`) to mark a chosen row. */\nfunction TableRow({\n className,\n selected,\n ...props\n}: React.ComponentProps<'tr'> & { selected?: boolean }) {\n return (\n <tr\n data-slot=\"table-row\"\n data-state={selected ? 'selected' : undefined}\n aria-selected={selected || undefined}\n className={cn(\n 'border-b transition-colors hover:bg-muted/60 data-[state=selected]:bg-brand-soft/60 data-[state=selected]:shadow-[inset_2px_0_0_var(--color-brand)]',\n className,\n )}\n {...props}\n />\n );\n}\n\n/** `numeric` right-aligns with tabular figures, for counts, money and durations. */\nfunction TableHead({\n className,\n numeric,\n ...props\n}: React.ComponentProps<'th'> & { numeric?: boolean }) {\n return (\n <th\n data-slot=\"table-head\"\n className={cn(\n 'h-9 px-3 text-left align-middle text-[11px] font-semibold tracking-[0.06em] whitespace-nowrap text-muted-foreground uppercase group-data-[density=compact]/table:h-8 [&:has([role=checkbox])]:w-10 [&:has([role=checkbox])]:pr-0',\n numeric && 'text-right tabular-nums',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction TableCell({\n className,\n numeric,\n ...props\n}: React.ComponentProps<'td'> & { numeric?: boolean }) {\n return (\n <td\n data-slot=\"table-cell\"\n className={cn(\n 'h-10 px-3 align-middle whitespace-nowrap group-data-[density=compact]/table:h-8 [&:has([role=checkbox])]:pr-0',\n numeric && 'text-right font-mono text-[12.5px] tabular-nums',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction TableCaption({ className, ...props }: React.ComponentProps<'caption'>) {\n return (\n <caption\n data-slot=\"table-caption\"\n className={cn('mt-3 text-xs text-muted-foreground', className)}\n {...props}\n />\n );\n}\n\nexport { Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow };\n"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- import { Tabs as TabsPrimitive } from 'radix-ui';
2
1
  import * as React from 'react';
2
+ import * as TabsPrimitive from '../primitives/vendor/radix/react-tabs';
3
3
  declare function Tabs({ className, ...props }: React.ComponentProps<typeof TabsPrimitive.Root>): React.JSX.Element;
4
4
  declare function TabsList({ className, ...props }: React.ComponentProps<typeof TabsPrimitive.List>): React.JSX.Element;
5
5
  declare function TabsTrigger({ className, ...props }: React.ComponentProps<typeof TabsPrimitive.Trigger>): React.JSX.Element;
@@ -1,37 +1,38 @@
1
+ "use client";
1
2
  import { cn } from "../lib/utils.js";
2
- import { Tabs } from "radix-ui";
3
+ import { Content, List, Root, Trigger } from "../primitives/vendor/radix/react-tabs/tabs.js";
3
4
  import "react";
4
5
  import { jsx } from "react/jsx-runtime";
5
6
  //#region src/components/tabs.tsx
6
- function Tabs$1({ className, ...props }) {
7
- return /* @__PURE__ */ jsx(Tabs.Root, {
7
+ function Tabs({ className, ...props }) {
8
+ return /* @__PURE__ */ jsx(Root, {
8
9
  "data-slot": "tabs",
9
10
  className: cn("flex flex-col gap-3", className),
10
11
  ...props
11
12
  });
12
13
  }
13
14
  function TabsList({ className, ...props }) {
14
- return /* @__PURE__ */ jsx(Tabs.List, {
15
+ return /* @__PURE__ */ jsx(List, {
15
16
  "data-slot": "tabs-list",
16
17
  className: cn("inline-flex h-9 w-fit items-center gap-0.5 rounded-md border border-border bg-surface-muted p-1 text-muted-foreground", className),
17
18
  ...props
18
19
  });
19
20
  }
20
21
  function TabsTrigger({ className, ...props }) {
21
- return /* @__PURE__ */ jsx(Tabs.Trigger, {
22
+ return /* @__PURE__ */ jsx(Trigger, {
22
23
  "data-slot": "tabs-trigger",
23
24
  className: cn("inline-flex h-7 min-w-0 items-center justify-center gap-1.5 rounded-sm px-2.5 text-[13px] font-semibold whitespace-nowrap outline-none transition-[background-color,color,box-shadow] focus-visible:ring-[3px] focus-visible:ring-ring/20 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-surface data-[state=active]:text-foreground data-[state=active]:shadow-xs hover:text-foreground [&_svg]:size-3.5", className),
24
25
  ...props
25
26
  });
26
27
  }
27
28
  function TabsContent({ className, ...props }) {
28
- return /* @__PURE__ */ jsx(Tabs.Content, {
29
+ return /* @__PURE__ */ jsx(Content, {
29
30
  "data-slot": "tabs-content",
30
31
  className: cn("min-w-0 flex-1 outline-none data-[state=active]:animate-fade-in", className),
31
32
  ...props
32
33
  });
33
34
  }
34
35
  //#endregion
35
- export { Tabs$1 as Tabs, TabsContent, TabsList, TabsTrigger };
36
+ export { Tabs, TabsContent, TabsList, TabsTrigger };
36
37
 
37
38
  //# sourceMappingURL=tabs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tabs.js","names":["Tabs","TabsPrimitive"],"sources":["../../src/components/tabs.tsx"],"sourcesContent":["import { Tabs as TabsPrimitive } from 'radix-ui';\nimport * as React from 'react';\n\nimport { cn } from '../lib/utils';\n\nfunction Tabs({ className, ...props }: React.ComponentProps<typeof TabsPrimitive.Root>) {\n return (\n <TabsPrimitive.Root\n data-slot=\"tabs\"\n className={cn('flex flex-col gap-3', className)}\n {...props}\n />\n );\n}\n\nfunction TabsList({ className, ...props }: React.ComponentProps<typeof TabsPrimitive.List>) {\n return (\n <TabsPrimitive.List\n data-slot=\"tabs-list\"\n className={cn(\n 'inline-flex h-9 w-fit items-center gap-0.5 rounded-md border border-border bg-surface-muted p-1 text-muted-foreground',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction TabsTrigger({ className, ...props }: React.ComponentProps<typeof TabsPrimitive.Trigger>) {\n return (\n <TabsPrimitive.Trigger\n data-slot=\"tabs-trigger\"\n className={cn(\n 'inline-flex h-7 min-w-0 items-center justify-center gap-1.5 rounded-sm px-2.5 text-[13px] font-semibold whitespace-nowrap outline-none transition-[background-color,color,box-shadow] focus-visible:ring-[3px] focus-visible:ring-ring/20 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-surface data-[state=active]:text-foreground data-[state=active]:shadow-xs hover:text-foreground [&_svg]:size-3.5',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction TabsContent({ className, ...props }: React.ComponentProps<typeof TabsPrimitive.Content>) {\n return (\n <TabsPrimitive.Content\n data-slot=\"tabs-content\"\n className={cn('min-w-0 flex-1 outline-none data-[state=active]:animate-fade-in', className)}\n {...props}\n />\n );\n}\n\nexport { Tabs, TabsContent, TabsList, TabsTrigger };\n"],"mappings":";;;;;AAKA,SAASA,OAAK,EAAE,WAAW,GAAG,SAA0D;CACtF,OACE,oBAACC,KAAc,MAAf;EACE,aAAU;EACV,WAAW,GAAG,uBAAuB,SAAS;EAC9C,GAAI;CACL,CAAA;AAEL;AAEA,SAAS,SAAS,EAAE,WAAW,GAAG,SAA0D;CAC1F,OACE,oBAACA,KAAc,MAAf;EACE,aAAU;EACV,WAAW,GACT,yHACA,SACF;EACA,GAAI;CACL,CAAA;AAEL;AAEA,SAAS,YAAY,EAAE,WAAW,GAAG,SAA6D;CAChG,OACE,oBAACA,KAAc,SAAf;EACE,aAAU;EACV,WAAW,GACT,saACA,SACF;EACA,GAAI;CACL,CAAA;AAEL;AAEA,SAAS,YAAY,EAAE,WAAW,GAAG,SAA6D;CAChG,OACE,oBAACA,KAAc,SAAf;EACE,aAAU;EACV,WAAW,GAAG,mEAAmE,SAAS;EAC1F,GAAI;CACL,CAAA;AAEL"}
1
+ {"version":3,"file":"tabs.js","names":["TabsPrimitive.Root","TabsPrimitive.List","TabsPrimitive.Trigger","TabsPrimitive.Content"],"sources":["../../src/components/tabs.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { cn } from '../lib/utils';\nimport * as TabsPrimitive from '../primitives/vendor/radix/react-tabs';\n\nfunction Tabs({ className, ...props }: React.ComponentProps<typeof TabsPrimitive.Root>) {\n return (\n <TabsPrimitive.Root\n data-slot=\"tabs\"\n className={cn('flex flex-col gap-3', className)}\n {...props}\n />\n );\n}\n\nfunction TabsList({ className, ...props }: React.ComponentProps<typeof TabsPrimitive.List>) {\n return (\n <TabsPrimitive.List\n data-slot=\"tabs-list\"\n className={cn(\n 'inline-flex h-9 w-fit items-center gap-0.5 rounded-md border border-border bg-surface-muted p-1 text-muted-foreground',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction TabsTrigger({ className, ...props }: React.ComponentProps<typeof TabsPrimitive.Trigger>) {\n return (\n <TabsPrimitive.Trigger\n data-slot=\"tabs-trigger\"\n className={cn(\n 'inline-flex h-7 min-w-0 items-center justify-center gap-1.5 rounded-sm px-2.5 text-[13px] font-semibold whitespace-nowrap outline-none transition-[background-color,color,box-shadow] focus-visible:ring-[3px] focus-visible:ring-ring/20 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-surface data-[state=active]:text-foreground data-[state=active]:shadow-xs hover:text-foreground [&_svg]:size-3.5',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction TabsContent({ className, ...props }: React.ComponentProps<typeof TabsPrimitive.Content>) {\n return (\n <TabsPrimitive.Content\n data-slot=\"tabs-content\"\n className={cn('min-w-0 flex-1 outline-none data-[state=active]:animate-fade-in', className)}\n {...props}\n />\n );\n}\n\nexport { Tabs, TabsContent, TabsList, TabsTrigger };\n"],"mappings":";;;;;;AAKA,SAAS,KAAK,EAAE,WAAW,GAAG,SAA0D;CACtF,OACE,oBAACA,MAAD;EACE,aAAU;EACV,WAAW,GAAG,uBAAuB,SAAS;EAC9C,GAAI;CACL,CAAA;AAEL;AAEA,SAAS,SAAS,EAAE,WAAW,GAAG,SAA0D;CAC1F,OACE,oBAACC,MAAD;EACE,aAAU;EACV,WAAW,GACT,yHACA,SACF;EACA,GAAI;CACL,CAAA;AAEL;AAEA,SAAS,YAAY,EAAE,WAAW,GAAG,SAA6D;CAChG,OACE,oBAACC,SAAD;EACE,aAAU;EACV,WAAW,GACT,saACA,SACF;EACA,GAAI;CACL,CAAA;AAEL;AAEA,SAAS,YAAY,EAAE,WAAW,GAAG,SAA6D;CAChG,OACE,oBAACC,SAAD;EACE,aAAU;EACV,WAAW,GAAG,mEAAmE,SAAS;EAC1F,GAAI;CACL,CAAA;AAEL"}
@@ -1,3 +1,4 @@
1
+ "use client";
1
2
  import { cn } from "../lib/utils.js";
2
3
  import { fieldClasses } from "./input.js";
3
4
  import * as React from "react";
@@ -1 +1 @@
1
- {"version":3,"file":"textarea.js","names":[],"sources":["../../src/components/textarea.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { cn } from '../lib/utils';\n\nimport { fieldClasses } from './input';\n\nconst Textarea = React.forwardRef<HTMLTextAreaElement, React.ComponentProps<'textarea'>>(\n function Textarea({ className, ...props }: React.ComponentProps<'textarea'>, ref) {\n return (\n <textarea\n ref={ref}\n data-slot=\"textarea\"\n className={cn(fieldClasses, 'min-h-24 resize-y py-2.5 leading-5', className)}\n {...props}\n />\n );\n },\n);\n\nexport { Textarea };\n"],"mappings":";;;;;AAMA,IAAM,WAAW,MAAM,WACrB,SAAS,SAAS,EAAE,WAAW,GAAG,SAA2C,KAAK;CAChF,OACE,oBAAC,YAAD;EACO;EACL,aAAU;EACV,WAAW,GAAG,cAAc,sCAAsC,SAAS;EAC3E,GAAI;CACL,CAAA;AAEL,CACF"}
1
+ {"version":3,"file":"textarea.js","names":[],"sources":["../../src/components/textarea.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { cn } from '../lib/utils';\n\nimport { fieldClasses } from './input';\n\nconst Textarea = React.forwardRef<HTMLTextAreaElement, React.ComponentProps<'textarea'>>(\n function Textarea({ className, ...props }: React.ComponentProps<'textarea'>, ref) {\n return (\n <textarea\n ref={ref}\n data-slot=\"textarea\"\n className={cn(fieldClasses, 'min-h-24 resize-y py-2.5 leading-5', className)}\n {...props}\n />\n );\n },\n);\n\nexport { Textarea };\n"],"mappings":";;;;;;AAMA,IAAM,WAAW,MAAM,WACrB,SAAS,SAAS,EAAE,WAAW,GAAG,SAA2C,KAAK;CAChF,OACE,oBAAC,YAAD;EACO;EACL,aAAU;EACV,WAAW,GAAG,cAAc,sCAAsC,SAAS;EAC3E,GAAI;CACL,CAAA;AAEL,CACF"}
@@ -1,6 +1,6 @@
1
1
  import { type VariantProps } from 'class-variance-authority';
2
- import { Toast as ToastPrimitive } from 'radix-ui';
3
2
  import * as React from 'react';
3
+ import * as ToastPrimitive from '../primitives/vendor/radix/react-toast';
4
4
  /**
5
5
  * Brief, non-blocking notices ("Message sent", "Update available"). Put one
6
6
  * `ToastProvider` + `ToastViewport` near the root and render `Toast`s with
@@ -1,5 +1,6 @@
1
+ "use client";
1
2
  import { cn } from "../lib/utils.js";
2
- import { Toast } from "radix-ui";
3
+ import { Action, Close, Description, Provider, Root, Title, Viewport } from "../primitives/vendor/radix/react-toast/toast.js";
3
4
  import "react";
4
5
  import { jsx } from "react/jsx-runtime";
5
6
  import { cva } from "class-variance-authority";
@@ -10,9 +11,9 @@ import X from "@burtson-labs/icons/react/x";
10
11
  * `ToastProvider` + `ToastViewport` near the root and render `Toast`s with
11
12
  * `open` state; Radix handles timing, swipe-to-dismiss and the live region.
12
13
  */
13
- var ToastProvider = Toast.Provider;
14
+ var ToastProvider = Provider;
14
15
  function ToastViewport({ className, ...props }) {
15
- return /* @__PURE__ */ jsx(Toast.Viewport, {
16
+ return /* @__PURE__ */ jsx(Viewport, {
16
17
  "data-slot": "toast-viewport",
17
18
  className: cn("fixed right-0 bottom-0 z-[100] flex max-h-dvh w-full flex-col-reverse gap-2 p-4 outline-none sm:max-w-sm", className),
18
19
  ...props
@@ -26,22 +27,22 @@ var toastVariants = cva("group pointer-events-auto relative grid w-full grid-col
26
27
  } },
27
28
  defaultVariants: { variant: "default" }
28
29
  });
29
- function Toast$1({ className, variant, ...props }) {
30
- return /* @__PURE__ */ jsx(Toast.Root, {
30
+ function Toast({ className, variant, ...props }) {
31
+ return /* @__PURE__ */ jsx(Root, {
31
32
  "data-slot": "toast",
32
33
  className: cn(toastVariants({ variant }), className),
33
34
  ...props
34
35
  });
35
36
  }
36
37
  function ToastTitle({ className, ...props }) {
37
- return /* @__PURE__ */ jsx(Toast.Title, {
38
+ return /* @__PURE__ */ jsx(Title, {
38
39
  "data-slot": "toast-title",
39
40
  className: cn("col-start-1 font-semibold tracking-[-0.01em]", className),
40
41
  ...props
41
42
  });
42
43
  }
43
44
  function ToastDescription({ className, ...props }) {
44
- return /* @__PURE__ */ jsx(Toast.Description, {
45
+ return /* @__PURE__ */ jsx(Description, {
45
46
  "data-slot": "toast-description",
46
47
  className: cn("col-start-1 text-[13px] leading-5 text-muted-foreground", className),
47
48
  ...props
@@ -49,14 +50,14 @@ function ToastDescription({ className, ...props }) {
49
50
  }
50
51
  /** A button inside the toast; `altText` tells screen readers how to do it without the toast. */
51
52
  function ToastAction({ className, ...props }) {
52
- return /* @__PURE__ */ jsx(Toast.Action, {
53
+ return /* @__PURE__ */ jsx(Action, {
53
54
  "data-slot": "toast-action",
54
55
  className: cn("col-start-2 row-span-2 row-start-1 inline-flex h-8 shrink-0 items-center justify-center self-center rounded-md border border-border-strong bg-surface px-3 text-[13px] font-semibold transition-colors outline-none hover:bg-muted focus-visible:ring-[3px] focus-visible:ring-ring/20", className),
55
56
  ...props
56
57
  });
57
58
  }
58
59
  function ToastClose({ className, ...props }) {
59
- return /* @__PURE__ */ jsx(Toast.Close, {
60
+ return /* @__PURE__ */ jsx(Close, {
60
61
  "data-slot": "toast-close",
61
62
  "aria-label": "Dismiss",
62
63
  className: cn("absolute top-3 right-3 grid size-6 place-items-center rounded-sm text-muted-foreground transition-colors outline-none hover:bg-muted hover:text-foreground focus-visible:ring-[3px] focus-visible:ring-ring/20 [&_svg]:size-3.5", className),
@@ -65,6 +66,6 @@ function ToastClose({ className, ...props }) {
65
66
  });
66
67
  }
67
68
  //#endregion
68
- export { Toast$1 as Toast, ToastAction, ToastClose, ToastDescription, ToastProvider, ToastTitle, ToastViewport, toastVariants };
69
+ export { Toast, ToastAction, ToastClose, ToastDescription, ToastProvider, ToastTitle, ToastViewport, toastVariants };
69
70
 
70
71
  //# sourceMappingURL=toast.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"toast.js","names":["ToastPrimitive","Toast"],"sources":["../../src/components/toast.tsx"],"sourcesContent":["import X from '@burtson-labs/icons/react/x';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { Toast as ToastPrimitive } from 'radix-ui';\nimport * as React from 'react';\n\nimport { cn } from '../lib/utils';\n\n/**\n * Brief, non-blocking notices (\"Message sent\", \"Update available\"). Put one\n * `ToastProvider` + `ToastViewport` near the root and render `Toast`s with\n * `open` state; Radix handles timing, swipe-to-dismiss and the live region.\n */\nconst ToastProvider = ToastPrimitive.Provider;\n\nfunction ToastViewport({\n className,\n ...props\n}: React.ComponentProps<typeof ToastPrimitive.Viewport>) {\n return (\n <ToastPrimitive.Viewport\n data-slot=\"toast-viewport\"\n className={cn(\n 'fixed right-0 bottom-0 z-[100] flex max-h-dvh w-full flex-col-reverse gap-2 p-4 outline-none sm:max-w-sm',\n className,\n )}\n {...props}\n />\n );\n}\n\nconst toastVariants = cva(\n 'group pointer-events-auto relative grid w-full grid-cols-[1fr_auto] items-start gap-x-3 gap-y-1 overflow-hidden rounded-lg border p-4 pr-10 text-sm shadow-[0_16px_48px_rgb(0_0_0_/_0.18)] [--bl-ty:12px] [--bl-scale:0.98] data-[state=closed]:animate-out data-[state=open]:animate-in data-[swipe=cancel]:translate-x-0 data-[swipe=end]:translate-x-(--radix-toast-swipe-end-x) data-[swipe=move]:translate-x-(--radix-toast-swipe-move-x) data-[swipe=move]:transition-none',\n {\n variants: {\n variant: {\n default: 'border-border-strong bg-surface-raised text-foreground',\n success:\n 'border-success/30 bg-surface-raised text-foreground [&_[data-slot=toast-title]]:text-success',\n destructive:\n 'border-destructive/30 bg-surface-raised text-foreground [&_[data-slot=toast-title]]:text-destructive',\n },\n },\n defaultVariants: { variant: 'default' },\n },\n);\n\nfunction Toast({\n className,\n variant,\n ...props\n}: React.ComponentProps<typeof ToastPrimitive.Root> & VariantProps<typeof toastVariants>) {\n return (\n <ToastPrimitive.Root\n data-slot=\"toast\"\n className={cn(toastVariants({ variant }), className)}\n {...props}\n />\n );\n}\n\nfunction ToastTitle({ className, ...props }: React.ComponentProps<typeof ToastPrimitive.Title>) {\n return (\n <ToastPrimitive.Title\n data-slot=\"toast-title\"\n className={cn('col-start-1 font-semibold tracking-[-0.01em]', className)}\n {...props}\n />\n );\n}\n\nfunction ToastDescription({\n className,\n ...props\n}: React.ComponentProps<typeof ToastPrimitive.Description>) {\n return (\n <ToastPrimitive.Description\n data-slot=\"toast-description\"\n className={cn('col-start-1 text-[13px] leading-5 text-muted-foreground', className)}\n {...props}\n />\n );\n}\n\n/** A button inside the toast; `altText` tells screen readers how to do it without the toast. */\nfunction ToastAction({ className, ...props }: React.ComponentProps<typeof ToastPrimitive.Action>) {\n return (\n <ToastPrimitive.Action\n data-slot=\"toast-action\"\n className={cn(\n 'col-start-2 row-span-2 row-start-1 inline-flex h-8 shrink-0 items-center justify-center self-center rounded-md border border-border-strong bg-surface px-3 text-[13px] font-semibold transition-colors outline-none hover:bg-muted focus-visible:ring-[3px] focus-visible:ring-ring/20',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction ToastClose({ className, ...props }: React.ComponentProps<typeof ToastPrimitive.Close>) {\n return (\n <ToastPrimitive.Close\n data-slot=\"toast-close\"\n aria-label=\"Dismiss\"\n className={cn(\n 'absolute top-3 right-3 grid size-6 place-items-center rounded-sm text-muted-foreground transition-colors outline-none hover:bg-muted hover:text-foreground focus-visible:ring-[3px] focus-visible:ring-ring/20 [&_svg]:size-3.5',\n className,\n )}\n {...props}\n >\n <X aria-hidden />\n </ToastPrimitive.Close>\n );\n}\n\nexport {\n Toast,\n ToastAction,\n ToastClose,\n ToastDescription,\n ToastProvider,\n ToastTitle,\n toastVariants,\n ToastViewport,\n};\n"],"mappings":";;;;;;;;;;;;AAYA,IAAM,gBAAgBA,MAAe;AAErC,SAAS,cAAc,EACrB,WACA,GAAG,SACoD;CACvD,OACE,oBAACA,MAAe,UAAhB;EACE,aAAU;EACV,WAAW,GACT,4GACA,SACF;EACA,GAAI;CACL,CAAA;AAEL;AAEA,IAAM,gBAAgB,IACpB,odACA;CACE,UAAU,EACR,SAAS;EACP,SAAS;EACT,SACE;EACF,aACE;CACJ,EACF;CACA,iBAAiB,EAAE,SAAS,UAAU;AACxC,CACF;AAEA,SAASC,QAAM,EACb,WACA,SACA,GAAG,SACqF;CACxF,OACE,oBAACD,MAAe,MAAhB;EACE,aAAU;EACV,WAAW,GAAG,cAAc,EAAE,QAAQ,CAAC,GAAG,SAAS;EACnD,GAAI;CACL,CAAA;AAEL;AAEA,SAAS,WAAW,EAAE,WAAW,GAAG,SAA4D;CAC9F,OACE,oBAACA,MAAe,OAAhB;EACE,aAAU;EACV,WAAW,GAAG,gDAAgD,SAAS;EACvE,GAAI;CACL,CAAA;AAEL;AAEA,SAAS,iBAAiB,EACxB,WACA,GAAG,SACuD;CAC1D,OACE,oBAACA,MAAe,aAAhB;EACE,aAAU;EACV,WAAW,GAAG,2DAA2D,SAAS;EAClF,GAAI;CACL,CAAA;AAEL;;AAGA,SAAS,YAAY,EAAE,WAAW,GAAG,SAA6D;CAChG,OACE,oBAACA,MAAe,QAAhB;EACE,aAAU;EACV,WAAW,GACT,0RACA,SACF;EACA,GAAI;CACL,CAAA;AAEL;AAEA,SAAS,WAAW,EAAE,WAAW,GAAG,SAA4D;CAC9F,OACE,oBAACA,MAAe,OAAhB;EACE,aAAU;EACV,cAAW;EACX,WAAW,GACT,mOACA,SACF;EACA,GAAI;EAEJ,UAAA,oBAAC,GAAD,EAAG,eAAA,KAAa,CAAA;CACI,CAAA;AAE1B"}
1
+ {"version":3,"file":"toast.js","names":["ToastPrimitive.Provider","ToastPrimitive.Viewport","ToastPrimitive.Root","ToastPrimitive.Title","ToastPrimitive.Description","ToastPrimitive.Action","ToastPrimitive.Close"],"sources":["../../src/components/toast.tsx"],"sourcesContent":["import X from '@burtson-labs/icons/react/x';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport * as React from 'react';\n\nimport { cn } from '../lib/utils';\nimport * as ToastPrimitive from '../primitives/vendor/radix/react-toast';\n\n/**\n * Brief, non-blocking notices (\"Message sent\", \"Update available\"). Put one\n * `ToastProvider` + `ToastViewport` near the root and render `Toast`s with\n * `open` state; Radix handles timing, swipe-to-dismiss and the live region.\n */\nconst ToastProvider = ToastPrimitive.Provider;\n\nfunction ToastViewport({\n className,\n ...props\n}: React.ComponentProps<typeof ToastPrimitive.Viewport>) {\n return (\n <ToastPrimitive.Viewport\n data-slot=\"toast-viewport\"\n className={cn(\n 'fixed right-0 bottom-0 z-[100] flex max-h-dvh w-full flex-col-reverse gap-2 p-4 outline-none sm:max-w-sm',\n className,\n )}\n {...props}\n />\n );\n}\n\nconst toastVariants = cva(\n 'group pointer-events-auto relative grid w-full grid-cols-[1fr_auto] items-start gap-x-3 gap-y-1 overflow-hidden rounded-lg border p-4 pr-10 text-sm shadow-[0_16px_48px_rgb(0_0_0_/_0.18)] [--bl-ty:12px] [--bl-scale:0.98] data-[state=closed]:animate-out data-[state=open]:animate-in data-[swipe=cancel]:translate-x-0 data-[swipe=end]:translate-x-(--radix-toast-swipe-end-x) data-[swipe=move]:translate-x-(--radix-toast-swipe-move-x) data-[swipe=move]:transition-none',\n {\n variants: {\n variant: {\n default: 'border-border-strong bg-surface-raised text-foreground',\n success:\n 'border-success/30 bg-surface-raised text-foreground [&_[data-slot=toast-title]]:text-success',\n destructive:\n 'border-destructive/30 bg-surface-raised text-foreground [&_[data-slot=toast-title]]:text-destructive',\n },\n },\n defaultVariants: { variant: 'default' },\n },\n);\n\nfunction Toast({\n className,\n variant,\n ...props\n}: React.ComponentProps<typeof ToastPrimitive.Root> & VariantProps<typeof toastVariants>) {\n return (\n <ToastPrimitive.Root\n data-slot=\"toast\"\n className={cn(toastVariants({ variant }), className)}\n {...props}\n />\n );\n}\n\nfunction ToastTitle({ className, ...props }: React.ComponentProps<typeof ToastPrimitive.Title>) {\n return (\n <ToastPrimitive.Title\n data-slot=\"toast-title\"\n className={cn('col-start-1 font-semibold tracking-[-0.01em]', className)}\n {...props}\n />\n );\n}\n\nfunction ToastDescription({\n className,\n ...props\n}: React.ComponentProps<typeof ToastPrimitive.Description>) {\n return (\n <ToastPrimitive.Description\n data-slot=\"toast-description\"\n className={cn('col-start-1 text-[13px] leading-5 text-muted-foreground', className)}\n {...props}\n />\n );\n}\n\n/** A button inside the toast; `altText` tells screen readers how to do it without the toast. */\nfunction ToastAction({ className, ...props }: React.ComponentProps<typeof ToastPrimitive.Action>) {\n return (\n <ToastPrimitive.Action\n data-slot=\"toast-action\"\n className={cn(\n 'col-start-2 row-span-2 row-start-1 inline-flex h-8 shrink-0 items-center justify-center self-center rounded-md border border-border-strong bg-surface px-3 text-[13px] font-semibold transition-colors outline-none hover:bg-muted focus-visible:ring-[3px] focus-visible:ring-ring/20',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction ToastClose({ className, ...props }: React.ComponentProps<typeof ToastPrimitive.Close>) {\n return (\n <ToastPrimitive.Close\n data-slot=\"toast-close\"\n aria-label=\"Dismiss\"\n className={cn(\n 'absolute top-3 right-3 grid size-6 place-items-center rounded-sm text-muted-foreground transition-colors outline-none hover:bg-muted hover:text-foreground focus-visible:ring-[3px] focus-visible:ring-ring/20 [&_svg]:size-3.5',\n className,\n )}\n {...props}\n >\n <X aria-hidden />\n </ToastPrimitive.Close>\n );\n}\n\nexport {\n Toast,\n ToastAction,\n ToastClose,\n ToastDescription,\n ToastProvider,\n ToastTitle,\n toastVariants,\n ToastViewport,\n};\n"],"mappings":";;;;;;;;;;;;;AAYA,IAAM,gBAAgBA;AAEtB,SAAS,cAAc,EACrB,WACA,GAAG,SACoD;CACvD,OACE,oBAACC,UAAD;EACE,aAAU;EACV,WAAW,GACT,4GACA,SACF;EACA,GAAI;CACL,CAAA;AAEL;AAEA,IAAM,gBAAgB,IACpB,odACA;CACE,UAAU,EACR,SAAS;EACP,SAAS;EACT,SACE;EACF,aACE;CACJ,EACF;CACA,iBAAiB,EAAE,SAAS,UAAU;AACxC,CACF;AAEA,SAAS,MAAM,EACb,WACA,SACA,GAAG,SACqF;CACxF,OACE,oBAACC,MAAD;EACE,aAAU;EACV,WAAW,GAAG,cAAc,EAAE,QAAQ,CAAC,GAAG,SAAS;EACnD,GAAI;CACL,CAAA;AAEL;AAEA,SAAS,WAAW,EAAE,WAAW,GAAG,SAA4D;CAC9F,OACE,oBAACC,OAAD;EACE,aAAU;EACV,WAAW,GAAG,gDAAgD,SAAS;EACvE,GAAI;CACL,CAAA;AAEL;AAEA,SAAS,iBAAiB,EACxB,WACA,GAAG,SACuD;CAC1D,OACE,oBAACC,aAAD;EACE,aAAU;EACV,WAAW,GAAG,2DAA2D,SAAS;EAClF,GAAI;CACL,CAAA;AAEL;;AAGA,SAAS,YAAY,EAAE,WAAW,GAAG,SAA6D;CAChG,OACE,oBAACC,QAAD;EACE,aAAU;EACV,WAAW,GACT,0RACA,SACF;EACA,GAAI;CACL,CAAA;AAEL;AAEA,SAAS,WAAW,EAAE,WAAW,GAAG,SAA4D;CAC9F,OACE,oBAACC,OAAD;EACE,aAAU;EACV,cAAW;EACX,WAAW,GACT,mOACA,SACF;EACA,GAAI;EAEJ,UAAA,oBAAC,GAAD,EAAG,eAAA,KAAa,CAAA;CACI,CAAA;AAE1B"}
@@ -1,3 +1,4 @@
1
+ "use client";
1
2
  import { Toast, ToastClose, ToastDescription, ToastProvider, ToastTitle, ToastViewport } from "./toast.js";
2
3
  import * as React from "react";
3
4
  import { jsx, jsxs } from "react/jsx-runtime";
@@ -1 +1 @@
1
- {"version":3,"file":"toaster.js","names":[],"sources":["../../src/components/toaster.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Toast,\n ToastClose,\n ToastDescription,\n ToastProvider,\n ToastTitle,\n ToastViewport,\n} from './toast';\n\n/**\n * Imperative toasts: call `toast({ title, description, variant })` from\n * anywhere (event handlers, data hooks) and one mounted `<Toaster />` renders\n * them on the Toast primitives. Mount the Toaster once near the root.\n */\nexport type ToastVariant = 'default' | 'success' | 'destructive';\n\nexport interface ToastOptions {\n title: string;\n description?: string;\n variant?: ToastVariant;\n /** Milliseconds before it closes (Radix pauses on hover and focus). */\n duration?: number;\n}\n\ninterface ToastRecord extends ToastOptions {\n id: number;\n open: boolean;\n}\n\nlet records: ToastRecord[] = [];\nlet nextId = 1;\nconst listeners = new Set<() => void>();\nconst emit = () => listeners.forEach((listener) => listener());\n\nfunction close(id: number) {\n records = records.map((r) => (r.id === id ? { ...r, open: false } : r));\n emit();\n // Leave time for the exit animation before dropping the record.\n setTimeout(() => {\n records = records.filter((r) => r.id !== id);\n emit();\n }, 400);\n}\n\n/** Show a brief notice. Returns a function that closes it early. */\nfunction toast(options: ToastOptions | string): () => void {\n const opts = typeof options === 'string' ? { title: options } : options;\n const id = nextId++;\n // Keep the stack short: the oldest go first.\n records = [...records.slice(-3), { ...opts, id, open: true }];\n emit();\n return () => close(id);\n}\n\nconst subscribe = (listener: () => void) => {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n};\nconst snapshot = () => records;\n\nfunction Toaster({ className }: { className?: string }) {\n const list = React.useSyncExternalStore(subscribe, snapshot, snapshot);\n return (\n <ToastProvider swipeDirection=\"right\">\n {list.map((r) => (\n <Toast\n key={r.id}\n open={r.open}\n variant={r.variant}\n duration={r.duration ?? (r.variant === 'destructive' ? 8000 : 4000)}\n onOpenChange={(open) => {\n if (!open) close(r.id);\n }}\n >\n <ToastTitle>{r.title}</ToastTitle>\n {r.description && <ToastDescription>{r.description}</ToastDescription>}\n <ToastClose />\n </Toast>\n ))}\n <ToastViewport className={className} />\n </ToastProvider>\n );\n}\n\nexport { toast, Toaster };\n"],"mappings":";;;;AA+BA,IAAI,UAAyB,CAAC;AAC9B,IAAI,SAAS;AACb,IAAM,4BAAY,IAAI,IAAgB;AACtC,IAAM,aAAa,UAAU,SAAS,aAAa,SAAS,CAAC;AAE7D,SAAS,MAAM,IAAY;CACzB,UAAU,QAAQ,KAAK,MAAO,EAAE,OAAO,KAAK;EAAE,GAAG;EAAG,MAAM;CAAM,IAAI,CAAE;CACtE,KAAK;CAEL,iBAAiB;EACf,UAAU,QAAQ,QAAQ,MAAM,EAAE,OAAO,EAAE;EAC3C,KAAK;CACP,GAAG,GAAG;AACR;;AAGA,SAAS,MAAM,SAA4C;CACzD,MAAM,OAAO,OAAO,YAAY,WAAW,EAAE,OAAO,QAAQ,IAAI;CAChE,MAAM,KAAK;CAEX,UAAU,CAAC,GAAG,QAAQ,MAAM,EAAE,GAAG;EAAE,GAAG;EAAM;EAAI,MAAM;CAAK,CAAC;CAC5D,KAAK;CACL,aAAa,MAAM,EAAE;AACvB;AAEA,IAAM,aAAa,aAAyB;CAC1C,UAAU,IAAI,QAAQ;CACtB,aAAa;EACX,UAAU,OAAO,QAAQ;CAC3B;AACF;AACA,IAAM,iBAAiB;AAEvB,SAAS,QAAQ,EAAE,aAAqC;CACtD,MAAM,OAAO,MAAM,qBAAqB,WAAW,UAAU,QAAQ;CACrE,OACE,qBAAC,eAAD;EAAe,gBAAe;EAA9B,UAAA,CACG,KAAK,KAAK,MACT,qBAAC,OAAD;GAEE,MAAM,EAAE;GACR,SAAS,EAAE;GACX,UAAU,EAAE,aAAa,EAAE,YAAY,gBAAgB,MAAO;GAC9D,eAAe,SAAS;IACtB,IAAI,CAAC,MAAM,MAAM,EAAE,EAAE;GACvB;GAPF,UAAA;IASE,oBAAC,YAAD,EAAA,UAAa,EAAE,MAAkB,CAAA;IAChC,EAAE,eAAe,oBAAC,kBAAD,EAAA,UAAmB,EAAE,YAA8B,CAAA;IACrE,oBAAC,YAAD,CAAa,CAAA;GACR;EAXA,GAAA,EAAE,EAWF,CACR,GACD,oBAAC,eAAD,EAA0B,UAAY,CAAA,CACzB;;AAEnB"}
1
+ {"version":3,"file":"toaster.js","names":[],"sources":["../../src/components/toaster.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Toast,\n ToastClose,\n ToastDescription,\n ToastProvider,\n ToastTitle,\n ToastViewport,\n} from './toast';\n\n/**\n * Imperative toasts: call `toast({ title, description, variant })` from\n * anywhere (event handlers, data hooks) and one mounted `<Toaster />` renders\n * them on the Toast primitives. Mount the Toaster once near the root.\n */\nexport type ToastVariant = 'default' | 'success' | 'destructive';\n\nexport interface ToastOptions {\n title: string;\n description?: string;\n variant?: ToastVariant;\n /** Milliseconds before it closes (Radix pauses on hover and focus). */\n duration?: number;\n}\n\ninterface ToastRecord extends ToastOptions {\n id: number;\n open: boolean;\n}\n\nlet records: ToastRecord[] = [];\nlet nextId = 1;\nconst listeners = new Set<() => void>();\nconst emit = () => listeners.forEach((listener) => listener());\n\nfunction close(id: number) {\n records = records.map((r) => (r.id === id ? { ...r, open: false } : r));\n emit();\n // Leave time for the exit animation before dropping the record.\n setTimeout(() => {\n records = records.filter((r) => r.id !== id);\n emit();\n }, 400);\n}\n\n/** Show a brief notice. Returns a function that closes it early. */\nfunction toast(options: ToastOptions | string): () => void {\n const opts = typeof options === 'string' ? { title: options } : options;\n const id = nextId++;\n // Keep the stack short: the oldest go first.\n records = [...records.slice(-3), { ...opts, id, open: true }];\n emit();\n return () => close(id);\n}\n\nconst subscribe = (listener: () => void) => {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n};\nconst snapshot = () => records;\n\nfunction Toaster({ className }: { className?: string }) {\n const list = React.useSyncExternalStore(subscribe, snapshot, snapshot);\n return (\n <ToastProvider swipeDirection=\"right\">\n {list.map((r) => (\n <Toast\n key={r.id}\n open={r.open}\n variant={r.variant}\n duration={r.duration ?? (r.variant === 'destructive' ? 8000 : 4000)}\n onOpenChange={(open) => {\n if (!open) close(r.id);\n }}\n >\n <ToastTitle>{r.title}</ToastTitle>\n {r.description && <ToastDescription>{r.description}</ToastDescription>}\n <ToastClose />\n </Toast>\n ))}\n <ToastViewport className={className} />\n </ToastProvider>\n );\n}\n\nexport { toast, Toaster };\n"],"mappings":";;;;;AA+BA,IAAI,UAAyB,CAAC;AAC9B,IAAI,SAAS;AACb,IAAM,4BAAY,IAAI,IAAgB;AACtC,IAAM,aAAa,UAAU,SAAS,aAAa,SAAS,CAAC;AAE7D,SAAS,MAAM,IAAY;CACzB,UAAU,QAAQ,KAAK,MAAO,EAAE,OAAO,KAAK;EAAE,GAAG;EAAG,MAAM;CAAM,IAAI,CAAE;CACtE,KAAK;CAEL,iBAAiB;EACf,UAAU,QAAQ,QAAQ,MAAM,EAAE,OAAO,EAAE;EAC3C,KAAK;CACP,GAAG,GAAG;AACR;;AAGA,SAAS,MAAM,SAA4C;CACzD,MAAM,OAAO,OAAO,YAAY,WAAW,EAAE,OAAO,QAAQ,IAAI;CAChE,MAAM,KAAK;CAEX,UAAU,CAAC,GAAG,QAAQ,MAAM,EAAE,GAAG;EAAE,GAAG;EAAM;EAAI,MAAM;CAAK,CAAC;CAC5D,KAAK;CACL,aAAa,MAAM,EAAE;AACvB;AAEA,IAAM,aAAa,aAAyB;CAC1C,UAAU,IAAI,QAAQ;CACtB,aAAa;EACX,UAAU,OAAO,QAAQ;CAC3B;AACF;AACA,IAAM,iBAAiB;AAEvB,SAAS,QAAQ,EAAE,aAAqC;CACtD,MAAM,OAAO,MAAM,qBAAqB,WAAW,UAAU,QAAQ;CACrE,OACE,qBAAC,eAAD;EAAe,gBAAe;EAA9B,UAAA,CACG,KAAK,KAAK,MACT,qBAAC,OAAD;GAEE,MAAM,EAAE;GACR,SAAS,EAAE;GACX,UAAU,EAAE,aAAa,EAAE,YAAY,gBAAgB,MAAO;GAC9D,eAAe,SAAS;IACtB,IAAI,CAAC,MAAM,MAAM,EAAE,EAAE;GACvB;GAPF,UAAA;IASE,oBAAC,YAAD,EAAA,UAAa,EAAE,MAAkB,CAAA;IAChC,EAAE,eAAe,oBAAC,kBAAD,EAAA,UAAmB,EAAE,YAA8B,CAAA;IACrE,oBAAC,YAAD,CAAa,CAAA;GACR;EAXA,GAAA,EAAE,EAWF,CACR,GACD,oBAAC,eAAD,EAA0B,UAAY,CAAA,CACzB;;AAEnB"}
@@ -1,7 +1,8 @@
1
+ "use client";
1
2
  import { cn } from "../lib/utils.js";
3
+ import { Content, Root, Trigger } from "../primitives/vendor/radix/react-collapsible/collapsible.js";
2
4
  import { Button } from "./button.js";
3
5
  import { StatusDot } from "./status.js";
4
- import { Collapsible } from "radix-ui";
5
6
  import "react";
6
7
  import { jsx, jsxs } from "react/jsx-runtime";
7
8
  import ChevronRight from "@burtson-labs/icons/react/chevron-right";
@@ -38,7 +39,7 @@ var json = (value) => {
38
39
  /** A tool call an agent made: name, live status, and collapsible arguments and result. */
39
40
  function ToolCall({ name, status, args, result, error, durationMs, defaultOpen = false, className, ...props }) {
40
41
  const hasDetail = args !== void 0 || result !== void 0 || Boolean(error);
41
- return /* @__PURE__ */ jsx(Collapsible.Root, {
42
+ return /* @__PURE__ */ jsx(Root, {
42
43
  defaultOpen,
43
44
  disabled: !hasDetail,
44
45
  children: /* @__PURE__ */ jsxs("div", {
@@ -46,7 +47,7 @@ function ToolCall({ name, status, args, result, error, durationMs, defaultOpen =
46
47
  "data-status": status,
47
48
  className: cn("animate-in overflow-hidden rounded-md border bg-surface text-[13px]", status === "error" && "border-destructive/30", className),
48
49
  ...props,
49
- children: [/* @__PURE__ */ jsxs(Collapsible.Trigger, {
50
+ children: [/* @__PURE__ */ jsxs(Trigger, {
50
51
  className: "group/tool flex h-9 w-full items-center gap-2 px-3 text-left outline-none hover:bg-muted/60 focus-visible:ring-[3px] focus-visible:ring-ring/20 disabled:cursor-default disabled:hover:bg-transparent",
51
52
  children: [
52
53
  /* @__PURE__ */ jsx(Wrench, {
@@ -80,7 +81,7 @@ function ToolCall({ name, status, args, result, error, durationMs, defaultOpen =
80
81
  className: "size-3.5 text-muted-foreground transition-transform group-data-[state=open]/tool:rotate-90"
81
82
  })
82
83
  ]
83
- }), /* @__PURE__ */ jsx(Collapsible.Content, {
84
+ }), /* @__PURE__ */ jsx(Content, {
84
85
  className: "overflow-hidden data-[state=closed]:animate-collapsible-up data-[state=open]:animate-collapsible-down",
85
86
  children: /* @__PURE__ */ jsxs("div", {
86
87
  className: "grid gap-2 border-t p-3",
@@ -1 +1 @@
1
- {"version":3,"file":"tool-call.js","names":["CollapsiblePrimitive"],"sources":["../../src/components/tool-call.tsx"],"sourcesContent":["import ChevronRight from '@burtson-labs/icons/react/chevron-right';\nimport Wrench from '@burtson-labs/icons/react/wrench';\nimport { Collapsible as CollapsiblePrimitive } from 'radix-ui';\nimport * as React from 'react';\n\nimport { cn } from '../lib/utils';\n\nimport { Button } from './button';\nimport { StatusDot } from './status';\n\nexport type ToolCallStatus = 'pending' | 'running' | 'success' | 'error';\n\nconst statusText: Record<ToolCallStatus, string> = {\n pending: 'Queued',\n running: 'Running',\n success: 'Done',\n error: 'Failed',\n};\nconst statusDot = {\n pending: 'neutral',\n running: 'brand',\n success: 'success',\n error: 'danger',\n} as const;\n\nconst json = (value: unknown) => {\n if (typeof value === 'string') return value;\n const seen = new WeakSet<object>();\n try {\n return (\n JSON.stringify(\n value,\n (_key, item: unknown) => {\n if (typeof item === 'bigint') return item.toString();\n if (item && typeof item === 'object') {\n if (seen.has(item)) return '[Repeated reference]';\n seen.add(item);\n }\n return item;\n },\n 2,\n ) ?? String(value)\n );\n } catch {\n return '[Value could not be displayed]';\n }\n};\n\nexport interface ToolCallProps extends Omit<React.ComponentProps<'div'>, 'title'> {\n /** The tool's name, e.g. `get_load`. */\n name: string;\n status: ToolCallStatus;\n /** Arguments the agent passed; shown as formatted JSON. */\n args?: unknown;\n /** What the tool returned; shown as formatted JSON. */\n result?: unknown;\n /** Error message when the call failed. */\n error?: string;\n durationMs?: number;\n defaultOpen?: boolean;\n}\n\n/** A tool call an agent made: name, live status, and collapsible arguments and result. */\nfunction ToolCall({\n name,\n status,\n args,\n result,\n error,\n durationMs,\n defaultOpen = false,\n className,\n ...props\n}: ToolCallProps) {\n const hasDetail = args !== undefined || result !== undefined || Boolean(error);\n return (\n <CollapsiblePrimitive.Root defaultOpen={defaultOpen} disabled={!hasDetail}>\n <div\n data-slot=\"tool-call\"\n data-status={status}\n className={cn(\n 'animate-in overflow-hidden rounded-md border bg-surface text-[13px]',\n status === 'error' && 'border-destructive/30',\n className,\n )}\n {...props}\n >\n <CollapsiblePrimitive.Trigger className=\"group/tool flex h-9 w-full items-center gap-2 px-3 text-left outline-none hover:bg-muted/60 focus-visible:ring-[3px] focus-visible:ring-ring/20 disabled:cursor-default disabled:hover:bg-transparent\">\n <Wrench className=\"size-3.5 shrink-0 text-muted-foreground\" aria-hidden />\n <span className=\"min-w-0 flex-1 truncate font-mono text-[12.5px]\">{name}</span>\n <span className=\"inline-flex items-center gap-1.5 text-xs text-muted-foreground\">\n <StatusDot status={statusDot[status]} pulse={status === 'running'} />\n {statusText[status]}\n {durationMs !== undefined && status !== 'running' && (\n <span className=\"tabular-nums\">· {(durationMs / 1000).toFixed(1)}s</span>\n )}\n </span>\n {hasDetail && (\n <ChevronRight\n aria-hidden\n className=\"size-3.5 text-muted-foreground transition-transform group-data-[state=open]/tool:rotate-90\"\n />\n )}\n </CollapsiblePrimitive.Trigger>\n <CollapsiblePrimitive.Content className=\"overflow-hidden data-[state=closed]:animate-collapsible-up data-[state=open]:animate-collapsible-down\">\n <div className=\"grid gap-2 border-t p-3\">\n {args !== undefined && (\n <section className=\"grid gap-1\">\n <h4 className=\"text-[11px] font-semibold tracking-[0.06em] text-muted-foreground uppercase\">\n Arguments\n </h4>\n <pre className=\"overflow-x-auto rounded-sm bg-muted/60 p-2 font-mono text-[12px] leading-5\">\n {json(args)}\n </pre>\n </section>\n )}\n {error ? (\n <p role=\"alert\" className=\"text-xs font-medium text-destructive\">\n {error}\n </p>\n ) : (\n result !== undefined && (\n <section className=\"grid gap-1\">\n <h4 className=\"text-[11px] font-semibold tracking-[0.06em] text-muted-foreground uppercase\">\n Result\n </h4>\n <pre className=\"max-h-64 overflow-auto rounded-sm bg-muted/60 p-2 font-mono text-[12px] leading-5\">\n {json(result)}\n </pre>\n </section>\n )\n )}\n </div>\n </CollapsiblePrimitive.Content>\n </div>\n </CollapsiblePrimitive.Root>\n );\n}\n\nexport interface ToolApprovalProps extends Omit<React.ComponentProps<'div'>, 'title'> {\n name: string;\n /** What will happen, in plain words, e.g. \"Approve L-1042 and send it to Gravitate\". */\n description: React.ReactNode;\n args?: unknown;\n /** `pending` shows the buttons; the others record the decision. */\n state?: 'pending' | 'approved' | 'denied';\n /** Disable decision controls while the application records the choice. */\n busy?: boolean;\n onApprove?: () => void;\n onDeny?: () => void;\n approveLabel?: string;\n denyLabel?: string;\n}\n\n/** A gate before an agent runs a tool with side effects: the person approves or denies it. */\nfunction ToolApproval({\n name,\n description,\n args,\n state = 'pending',\n busy = false,\n onApprove,\n onDeny,\n approveLabel = 'Approve',\n denyLabel = 'Deny',\n className,\n ...props\n}: ToolApprovalProps) {\n return (\n <div\n data-slot=\"tool-approval\"\n aria-busy={busy || undefined}\n data-state={state}\n className={cn(\n 'grid animate-in gap-3 rounded-md border p-3 text-[13px]',\n state === 'pending' ? 'border-warning/40 bg-warning/5' : 'bg-surface',\n className,\n )}\n {...props}\n >\n <div className=\"flex items-center gap-2\">\n <Wrench className=\"size-3.5 text-muted-foreground\" aria-hidden />\n <span className=\"font-mono text-[12.5px]\">{name}</span>\n <span className=\"ml-auto text-xs text-muted-foreground\">\n {state === 'pending'\n ? 'Needs your approval'\n : state === 'approved'\n ? 'Approved'\n : 'Denied'}\n </span>\n </div>\n <p className=\"text-sm\">{description}</p>\n {args !== undefined && (\n <pre className=\"overflow-x-auto rounded-sm bg-muted/60 p-2 font-mono text-[12px] leading-5\">\n {json(args)}\n </pre>\n )}\n {state === 'pending' && (\n <div className=\"flex justify-end gap-2\">\n <Button size=\"sm\" variant=\"outline\" onClick={onDeny} disabled={busy || !onDeny}>\n {denyLabel}\n </Button>\n <Button size=\"sm\" onClick={onApprove} disabled={busy || !onApprove}>\n {approveLabel}\n </Button>\n </div>\n )}\n </div>\n );\n}\n\nexport { ToolApproval, ToolCall };\n"],"mappings":"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"}
1
+ {"version":3,"file":"tool-call.js","names":["CollapsiblePrimitive.Root","CollapsiblePrimitive.Trigger","CollapsiblePrimitive.Content"],"sources":["../../src/components/tool-call.tsx"],"sourcesContent":["import ChevronRight from '@burtson-labs/icons/react/chevron-right';\nimport Wrench from '@burtson-labs/icons/react/wrench';\nimport * as React from 'react';\n\nimport { cn } from '../lib/utils';\nimport * as CollapsiblePrimitive from '../primitives/vendor/radix/react-collapsible';\n\nimport { Button } from './button';\nimport { StatusDot } from './status';\n\nexport type ToolCallStatus = 'pending' | 'running' | 'success' | 'error';\n\nconst statusText: Record<ToolCallStatus, string> = {\n pending: 'Queued',\n running: 'Running',\n success: 'Done',\n error: 'Failed',\n};\nconst statusDot = {\n pending: 'neutral',\n running: 'brand',\n success: 'success',\n error: 'danger',\n} as const;\n\nconst json = (value: unknown) => {\n if (typeof value === 'string') return value;\n const seen = new WeakSet<object>();\n try {\n return (\n JSON.stringify(\n value,\n (_key, item: unknown) => {\n if (typeof item === 'bigint') return item.toString();\n if (item && typeof item === 'object') {\n if (seen.has(item)) return '[Repeated reference]';\n seen.add(item);\n }\n return item;\n },\n 2,\n ) ?? String(value)\n );\n } catch {\n return '[Value could not be displayed]';\n }\n};\n\nexport interface ToolCallProps extends Omit<React.ComponentProps<'div'>, 'title'> {\n /** The tool's name, e.g. `get_load`. */\n name: string;\n status: ToolCallStatus;\n /** Arguments the agent passed; shown as formatted JSON. */\n args?: unknown;\n /** What the tool returned; shown as formatted JSON. */\n result?: unknown;\n /** Error message when the call failed. */\n error?: string;\n durationMs?: number;\n defaultOpen?: boolean;\n}\n\n/** A tool call an agent made: name, live status, and collapsible arguments and result. */\nfunction ToolCall({\n name,\n status,\n args,\n result,\n error,\n durationMs,\n defaultOpen = false,\n className,\n ...props\n}: ToolCallProps) {\n const hasDetail = args !== undefined || result !== undefined || Boolean(error);\n return (\n <CollapsiblePrimitive.Root defaultOpen={defaultOpen} disabled={!hasDetail}>\n <div\n data-slot=\"tool-call\"\n data-status={status}\n className={cn(\n 'animate-in overflow-hidden rounded-md border bg-surface text-[13px]',\n status === 'error' && 'border-destructive/30',\n className,\n )}\n {...props}\n >\n <CollapsiblePrimitive.Trigger className=\"group/tool flex h-9 w-full items-center gap-2 px-3 text-left outline-none hover:bg-muted/60 focus-visible:ring-[3px] focus-visible:ring-ring/20 disabled:cursor-default disabled:hover:bg-transparent\">\n <Wrench className=\"size-3.5 shrink-0 text-muted-foreground\" aria-hidden />\n <span className=\"min-w-0 flex-1 truncate font-mono text-[12.5px]\">{name}</span>\n <span className=\"inline-flex items-center gap-1.5 text-xs text-muted-foreground\">\n <StatusDot status={statusDot[status]} pulse={status === 'running'} />\n {statusText[status]}\n {durationMs !== undefined && status !== 'running' && (\n <span className=\"tabular-nums\">· {(durationMs / 1000).toFixed(1)}s</span>\n )}\n </span>\n {hasDetail && (\n <ChevronRight\n aria-hidden\n className=\"size-3.5 text-muted-foreground transition-transform group-data-[state=open]/tool:rotate-90\"\n />\n )}\n </CollapsiblePrimitive.Trigger>\n <CollapsiblePrimitive.Content className=\"overflow-hidden data-[state=closed]:animate-collapsible-up data-[state=open]:animate-collapsible-down\">\n <div className=\"grid gap-2 border-t p-3\">\n {args !== undefined && (\n <section className=\"grid gap-1\">\n <h4 className=\"text-[11px] font-semibold tracking-[0.06em] text-muted-foreground uppercase\">\n Arguments\n </h4>\n <pre className=\"overflow-x-auto rounded-sm bg-muted/60 p-2 font-mono text-[12px] leading-5\">\n {json(args)}\n </pre>\n </section>\n )}\n {error ? (\n <p role=\"alert\" className=\"text-xs font-medium text-destructive\">\n {error}\n </p>\n ) : (\n result !== undefined && (\n <section className=\"grid gap-1\">\n <h4 className=\"text-[11px] font-semibold tracking-[0.06em] text-muted-foreground uppercase\">\n Result\n </h4>\n <pre className=\"max-h-64 overflow-auto rounded-sm bg-muted/60 p-2 font-mono text-[12px] leading-5\">\n {json(result)}\n </pre>\n </section>\n )\n )}\n </div>\n </CollapsiblePrimitive.Content>\n </div>\n </CollapsiblePrimitive.Root>\n );\n}\n\nexport interface ToolApprovalProps extends Omit<React.ComponentProps<'div'>, 'title'> {\n name: string;\n /** What will happen, in plain words, e.g. \"Approve L-1042 and send it to Gravitate\". */\n description: React.ReactNode;\n args?: unknown;\n /** `pending` shows the buttons; the others record the decision. */\n state?: 'pending' | 'approved' | 'denied';\n /** Disable decision controls while the application records the choice. */\n busy?: boolean;\n onApprove?: () => void;\n onDeny?: () => void;\n approveLabel?: string;\n denyLabel?: string;\n}\n\n/** A gate before an agent runs a tool with side effects: the person approves or denies it. */\nfunction ToolApproval({\n name,\n description,\n args,\n state = 'pending',\n busy = false,\n onApprove,\n onDeny,\n approveLabel = 'Approve',\n denyLabel = 'Deny',\n className,\n ...props\n}: ToolApprovalProps) {\n return (\n <div\n data-slot=\"tool-approval\"\n aria-busy={busy || undefined}\n data-state={state}\n className={cn(\n 'grid animate-in gap-3 rounded-md border p-3 text-[13px]',\n state === 'pending' ? 'border-warning/40 bg-warning/5' : 'bg-surface',\n className,\n )}\n {...props}\n >\n <div className=\"flex items-center gap-2\">\n <Wrench className=\"size-3.5 text-muted-foreground\" aria-hidden />\n <span className=\"font-mono text-[12.5px]\">{name}</span>\n <span className=\"ml-auto text-xs text-muted-foreground\">\n {state === 'pending'\n ? 'Needs your approval'\n : state === 'approved'\n ? 'Approved'\n : 'Denied'}\n </span>\n </div>\n <p className=\"text-sm\">{description}</p>\n {args !== undefined && (\n <pre className=\"overflow-x-auto rounded-sm bg-muted/60 p-2 font-mono text-[12px] leading-5\">\n {json(args)}\n </pre>\n )}\n {state === 'pending' && (\n <div className=\"flex justify-end gap-2\">\n <Button size=\"sm\" variant=\"outline\" onClick={onDeny} disabled={busy || !onDeny}>\n {denyLabel}\n </Button>\n <Button size=\"sm\" onClick={onApprove} disabled={busy || !onApprove}>\n {approveLabel}\n </Button>\n </div>\n )}\n </div>\n );\n}\n\nexport { ToolApproval, ToolCall };\n"],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ "use client";
1
2
  import { cn } from "../lib/utils.js";
2
3
  import "react";
3
4
  import { jsx } from "react/jsx-runtime";
@@ -1 +1 @@
1
- {"version":3,"file":"toolbar.js","names":[],"sources":["../../src/components/toolbar.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { cn } from '../lib/utils';\n\nfunction Toolbar({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"toolbar\"\n role=\"group\"\n className={cn(\n 'flex min-h-10 flex-wrap items-center gap-1 rounded-lg border border-border bg-surface p-1.5 shadow-xs',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction ToolbarGroup({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"toolbar-group\"\n className={cn('flex items-center gap-1', className)}\n {...props}\n />\n );\n}\n\nfunction ToolbarSeparator({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"toolbar-separator\"\n aria-hidden=\"true\"\n className={cn('mx-1 h-5 w-px bg-border', className)}\n {...props}\n />\n );\n}\n\nfunction ToolbarSpacer({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"toolbar-spacer\"\n aria-hidden=\"true\"\n className={cn('min-w-2 flex-1', className)}\n {...props}\n />\n );\n}\n\nexport { Toolbar, ToolbarGroup, ToolbarSeparator, ToolbarSpacer };\n"],"mappings":";;;;AAIA,SAAS,QAAQ,EAAE,WAAW,GAAG,SAAsC;CACrE,OACE,oBAAC,OAAD;EACE,aAAU;EACV,MAAK;EACL,WAAW,GACT,yGACA,SACF;EACA,GAAI;CACL,CAAA;AAEL;AAEA,SAAS,aAAa,EAAE,WAAW,GAAG,SAAsC;CAC1E,OACE,oBAAC,OAAD;EACE,aAAU;EACV,WAAW,GAAG,2BAA2B,SAAS;EAClD,GAAI;CACL,CAAA;AAEL;AAEA,SAAS,iBAAiB,EAAE,WAAW,GAAG,SAAsC;CAC9E,OACE,oBAAC,OAAD;EACE,aAAU;EACV,eAAY;EACZ,WAAW,GAAG,2BAA2B,SAAS;EAClD,GAAI;CACL,CAAA;AAEL;AAEA,SAAS,cAAc,EAAE,WAAW,GAAG,SAAsC;CAC3E,OACE,oBAAC,OAAD;EACE,aAAU;EACV,eAAY;EACZ,WAAW,GAAG,kBAAkB,SAAS;EACzC,GAAI;CACL,CAAA;AAEL"}
1
+ {"version":3,"file":"toolbar.js","names":[],"sources":["../../src/components/toolbar.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { cn } from '../lib/utils';\n\nfunction Toolbar({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"toolbar\"\n role=\"group\"\n className={cn(\n 'flex min-h-10 flex-wrap items-center gap-1 rounded-lg border border-border bg-surface p-1.5 shadow-xs',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction ToolbarGroup({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"toolbar-group\"\n className={cn('flex items-center gap-1', className)}\n {...props}\n />\n );\n}\n\nfunction ToolbarSeparator({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"toolbar-separator\"\n aria-hidden=\"true\"\n className={cn('mx-1 h-5 w-px bg-border', className)}\n {...props}\n />\n );\n}\n\nfunction ToolbarSpacer({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"toolbar-spacer\"\n aria-hidden=\"true\"\n className={cn('min-w-2 flex-1', className)}\n {...props}\n />\n );\n}\n\nexport { Toolbar, ToolbarGroup, ToolbarSeparator, ToolbarSpacer };\n"],"mappings":";;;;;AAIA,SAAS,QAAQ,EAAE,WAAW,GAAG,SAAsC;CACrE,OACE,oBAAC,OAAD;EACE,aAAU;EACV,MAAK;EACL,WAAW,GACT,yGACA,SACF;EACA,GAAI;CACL,CAAA;AAEL;AAEA,SAAS,aAAa,EAAE,WAAW,GAAG,SAAsC;CAC1E,OACE,oBAAC,OAAD;EACE,aAAU;EACV,WAAW,GAAG,2BAA2B,SAAS;EAClD,GAAI;CACL,CAAA;AAEL;AAEA,SAAS,iBAAiB,EAAE,WAAW,GAAG,SAAsC;CAC9E,OACE,oBAAC,OAAD;EACE,aAAU;EACV,eAAY;EACZ,WAAW,GAAG,2BAA2B,SAAS;EAClD,GAAI;CACL,CAAA;AAEL;AAEA,SAAS,cAAc,EAAE,WAAW,GAAG,SAAsC;CAC3E,OACE,oBAAC,OAAD;EACE,aAAU;EACV,eAAY;EACZ,WAAW,GAAG,kBAAkB,SAAS;EACzC,GAAI;CACL,CAAA;AAEL"}
@@ -1,5 +1,5 @@
1
- import { Tooltip as TooltipPrimitive } from 'radix-ui';
2
1
  import * as React from 'react';
2
+ import * as TooltipPrimitive from '../primitives/vendor/radix/react-tooltip';
3
3
  declare function TooltipProvider({ delayDuration, ...props }: React.ComponentProps<typeof TooltipPrimitive.Provider>): React.JSX.Element;
4
4
  /** Wraps its own provider, so a lone tooltip works without app-level setup. */
5
5
  declare function Tooltip(props: React.ComponentProps<typeof TooltipPrimitive.Root>): React.JSX.Element;
@@ -1,5 +1,6 @@
1
+ "use client";
1
2
  import { cn } from "../lib/utils.js";
2
- import { Tooltip } from "radix-ui";
3
+ import { Arrow, Content, Portal, Provider, Root, Trigger } from "../primitives/vendor/radix/react-tooltip/tooltip.js";
3
4
  import * as React from "react";
4
5
  import { jsx, jsxs } from "react/jsx-runtime";
5
6
  //#region src/components/tooltip.tsx
@@ -7,7 +8,7 @@ var HasTooltipProvider = React.createContext(false);
7
8
  function TooltipProvider({ delayDuration = 200, ...props }) {
8
9
  return /* @__PURE__ */ jsx(HasTooltipProvider.Provider, {
9
10
  value: true,
10
- children: /* @__PURE__ */ jsx(Tooltip.Provider, {
11
+ children: /* @__PURE__ */ jsx(Provider, {
11
12
  "data-slot": "tooltip-provider",
12
13
  delayDuration,
13
14
  ...props
@@ -15,32 +16,32 @@ function TooltipProvider({ delayDuration = 200, ...props }) {
15
16
  });
16
17
  }
17
18
  /** Wraps its own provider, so a lone tooltip works without app-level setup. */
18
- function Tooltip$1(props) {
19
- if (React.useContext(HasTooltipProvider)) return /* @__PURE__ */ jsx(Tooltip.Root, {
19
+ function Tooltip(props) {
20
+ if (React.useContext(HasTooltipProvider)) return /* @__PURE__ */ jsx(Root, {
20
21
  "data-slot": "tooltip",
21
22
  ...props
22
23
  });
23
- return /* @__PURE__ */ jsx(TooltipProvider, { children: /* @__PURE__ */ jsx(Tooltip.Root, {
24
+ return /* @__PURE__ */ jsx(TooltipProvider, { children: /* @__PURE__ */ jsx(Root, {
24
25
  "data-slot": "tooltip",
25
26
  ...props
26
27
  }) });
27
28
  }
28
29
  function TooltipTrigger(props) {
29
- return /* @__PURE__ */ jsx(Tooltip.Trigger, {
30
+ return /* @__PURE__ */ jsx(Trigger, {
30
31
  "data-slot": "tooltip-trigger",
31
32
  ...props
32
33
  });
33
34
  }
34
35
  function TooltipContent({ className, sideOffset = 6, children, ...props }) {
35
- return /* @__PURE__ */ jsx(Tooltip.Portal, { children: /* @__PURE__ */ jsxs(Tooltip.Content, {
36
+ return /* @__PURE__ */ jsx(Portal, { children: /* @__PURE__ */ jsxs(Content, {
36
37
  "data-slot": "tooltip-content",
37
38
  sideOffset,
38
39
  className: cn("z-50 w-fit max-w-xs origin-(--radix-tooltip-content-transform-origin) animate-in [--bl-scale:0.98] data-[side=bottom]:[--bl-ty:-4px] data-[side=top]:[--bl-ty:4px] data-[side=left]:[--bl-tx:4px] data-[side=right]:[--bl-tx:-4px] rounded-sm border border-white/10 bg-code px-2 py-1 text-[11.5px] leading-4 font-medium text-balance text-code-foreground shadow-md data-[state=closed]:animate-out", className),
39
40
  ...props,
40
- children: [children, /* @__PURE__ */ jsx(Tooltip.Arrow, { className: "fill-code" })]
41
+ children: [children, /* @__PURE__ */ jsx(Arrow, { className: "fill-code" })]
41
42
  }) });
42
43
  }
43
44
  //#endregion
44
- export { Tooltip$1 as Tooltip, TooltipContent, TooltipProvider, TooltipTrigger };
45
+ export { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger };
45
46
 
46
47
  //# sourceMappingURL=tooltip.js.map