@cellarnode/ui 0.1.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 (378) hide show
  1. package/dist/chat/chat-api.d.ts +14 -0
  2. package/dist/chat/chat-api.d.ts.map +1 -0
  3. package/dist/chat/chat-api.js +36 -0
  4. package/dist/chat/chat-api.js.map +1 -0
  5. package/dist/chat/chat-toggle-button.d.ts +8 -0
  6. package/dist/chat/chat-toggle-button.d.ts.map +1 -0
  7. package/dist/chat/chat-toggle-button.js +8 -0
  8. package/dist/chat/chat-toggle-button.js.map +1 -0
  9. package/dist/chat/chat-ws.d.ts +61 -0
  10. package/dist/chat/chat-ws.d.ts.map +1 -0
  11. package/dist/chat/chat-ws.js +217 -0
  12. package/dist/chat/chat-ws.js.map +1 -0
  13. package/dist/chat/communication-hub-widget.d.ts +21 -0
  14. package/dist/chat/communication-hub-widget.d.ts.map +1 -0
  15. package/dist/chat/communication-hub-widget.js +49 -0
  16. package/dist/chat/communication-hub-widget.js.map +1 -0
  17. package/dist/chat/communication-panel.d.ts +3 -0
  18. package/dist/chat/communication-panel.d.ts.map +1 -0
  19. package/dist/chat/communication-panel.js +34 -0
  20. package/dist/chat/communication-panel.js.map +1 -0
  21. package/dist/chat/index.d.ts +17 -0
  22. package/dist/chat/index.d.ts.map +1 -0
  23. package/dist/chat/index.js +11 -0
  24. package/dist/chat/index.js.map +1 -0
  25. package/dist/chat/messenger-layout.d.ts +25 -0
  26. package/dist/chat/messenger-layout.d.ts.map +1 -0
  27. package/dist/chat/messenger-layout.js +70 -0
  28. package/dist/chat/messenger-layout.js.map +1 -0
  29. package/dist/chat/negotiation-event-card.d.ts +9 -0
  30. package/dist/chat/negotiation-event-card.d.ts.map +1 -0
  31. package/dist/chat/negotiation-event-card.js +39 -0
  32. package/dist/chat/negotiation-event-card.js.map +1 -0
  33. package/dist/chat/timeline-utils.d.ts +7 -0
  34. package/dist/chat/timeline-utils.d.ts.map +1 -0
  35. package/dist/chat/timeline-utils.js +40 -0
  36. package/dist/chat/timeline-utils.js.map +1 -0
  37. package/dist/chat/types.d.ts +132 -0
  38. package/dist/chat/types.d.ts.map +1 -0
  39. package/dist/chat/types.js +3 -0
  40. package/dist/chat/types.js.map +1 -0
  41. package/dist/chat/unified-timeline.d.ts +13 -0
  42. package/dist/chat/unified-timeline.d.ts.map +1 -0
  43. package/dist/chat/unified-timeline.js +97 -0
  44. package/dist/chat/unified-timeline.js.map +1 -0
  45. package/dist/chat/use-chat.d.ts +10 -0
  46. package/dist/chat/use-chat.d.ts.map +1 -0
  47. package/dist/chat/use-chat.js +280 -0
  48. package/dist/chat/use-chat.js.map +1 -0
  49. package/dist/components/accordion.d.ts +8 -0
  50. package/dist/components/accordion.d.ts.map +1 -0
  51. package/dist/components/accordion.js +19 -0
  52. package/dist/components/accordion.js.map +1 -0
  53. package/dist/components/alert.d.ts +29 -0
  54. package/dist/components/alert.d.ts.map +1 -0
  55. package/dist/components/alert.js +31 -0
  56. package/dist/components/alert.js.map +1 -0
  57. package/dist/components/animated-list.d.ts +20 -0
  58. package/dist/components/animated-list.d.ts.map +1 -0
  59. package/dist/components/animated-list.js +50 -0
  60. package/dist/components/animated-list.js.map +1 -0
  61. package/dist/components/avatar.d.ts +19 -0
  62. package/dist/components/avatar.d.ts.map +1 -0
  63. package/dist/components/avatar.js +18 -0
  64. package/dist/components/avatar.js.map +1 -0
  65. package/dist/components/badge.d.ts +39 -0
  66. package/dist/components/badge.d.ts.map +1 -0
  67. package/dist/components/badge.js +35 -0
  68. package/dist/components/badge.js.map +1 -0
  69. package/dist/components/button.d.ts +64 -0
  70. package/dist/components/button.d.ts.map +1 -0
  71. package/dist/components/button.js +174 -0
  72. package/dist/components/button.js.map +1 -0
  73. package/dist/components/button.stories.d.ts +13 -0
  74. package/dist/components/button.stories.d.ts.map +1 -0
  75. package/dist/components/button.stories.js +48 -0
  76. package/dist/components/button.stories.js.map +1 -0
  77. package/dist/components/card.d.ts +9 -0
  78. package/dist/components/card.d.ts.map +1 -0
  79. package/dist/components/card.js +17 -0
  80. package/dist/components/card.js.map +1 -0
  81. package/dist/components/checkbox.d.ts +37 -0
  82. package/dist/components/checkbox.d.ts.map +1 -0
  83. package/dist/components/checkbox.js +84 -0
  84. package/dist/components/checkbox.js.map +1 -0
  85. package/dist/components/combobox.d.ts +20 -0
  86. package/dist/components/combobox.d.ts.map +1 -0
  87. package/dist/components/combobox.js +87 -0
  88. package/dist/components/combobox.js.map +1 -0
  89. package/dist/components/command.d.ts +12 -0
  90. package/dist/components/command.d.ts.map +1 -0
  91. package/dist/components/command.js +31 -0
  92. package/dist/components/command.js.map +1 -0
  93. package/dist/components/description-list.d.ts +4 -0
  94. package/dist/components/description-list.d.ts.map +1 -0
  95. package/dist/components/description-list.js +12 -0
  96. package/dist/components/description-list.js.map +1 -0
  97. package/dist/components/dialog.d.ts +30 -0
  98. package/dist/components/dialog.d.ts.map +1 -0
  99. package/dist/components/dialog.js +32 -0
  100. package/dist/components/dialog.js.map +1 -0
  101. package/dist/components/divider.d.ts +4 -0
  102. package/dist/components/divider.d.ts.map +1 -0
  103. package/dist/components/divider.js +6 -0
  104. package/dist/components/divider.js.map +1 -0
  105. package/dist/components/drawer.d.ts +23 -0
  106. package/dist/components/drawer.d.ts.map +1 -0
  107. package/dist/components/drawer.js +23 -0
  108. package/dist/components/drawer.js.map +1 -0
  109. package/dist/components/dropdown-menu.d.ts +26 -0
  110. package/dist/components/dropdown-menu.d.ts.map +1 -0
  111. package/dist/components/dropdown-menu.js +52 -0
  112. package/dist/components/dropdown-menu.js.map +1 -0
  113. package/dist/components/dropdown.d.ts +37 -0
  114. package/dist/components/dropdown.d.ts.map +1 -0
  115. package/dist/components/dropdown.js +79 -0
  116. package/dist/components/dropdown.js.map +1 -0
  117. package/dist/components/fieldset.d.ts +22 -0
  118. package/dist/components/fieldset.d.ts.map +1 -0
  119. package/dist/components/fieldset.js +25 -0
  120. package/dist/components/fieldset.js.map +1 -0
  121. package/dist/components/form.d.ts +25 -0
  122. package/dist/components/form.d.ts.map +1 -0
  123. package/dist/components/form.js +60 -0
  124. package/dist/components/form.js.map +1 -0
  125. package/dist/components/heading.d.ts +7 -0
  126. package/dist/components/heading.d.ts.map +1 -0
  127. package/dist/components/heading.js +11 -0
  128. package/dist/components/heading.js.map +1 -0
  129. package/dist/components/input.d.ts +11 -0
  130. package/dist/components/input.d.ts.map +1 -0
  131. package/dist/components/input.js +57 -0
  132. package/dist/components/input.js.map +1 -0
  133. package/dist/components/kanban-board.d.ts +78 -0
  134. package/dist/components/kanban-board.d.ts.map +1 -0
  135. package/dist/components/kanban-board.js +18 -0
  136. package/dist/components/kanban-board.js.map +1 -0
  137. package/dist/components/kanban-board.stories.d.ts +10 -0
  138. package/dist/components/kanban-board.stories.d.ts.map +1 -0
  139. package/dist/components/kanban-board.stories.js +125 -0
  140. package/dist/components/kanban-board.stories.js.map +1 -0
  141. package/dist/components/kanban-card.d.ts +8 -0
  142. package/dist/components/kanban-card.d.ts.map +1 -0
  143. package/dist/components/kanban-card.js +13 -0
  144. package/dist/components/kanban-card.js.map +1 -0
  145. package/dist/components/kanban-dnd-board.d.ts +8 -0
  146. package/dist/components/kanban-dnd-board.d.ts.map +1 -0
  147. package/dist/components/kanban-dnd-board.js +104 -0
  148. package/dist/components/kanban-dnd-board.js.map +1 -0
  149. package/dist/components/label.d.ts +5 -0
  150. package/dist/components/label.d.ts.map +1 -0
  151. package/dist/components/label.js +9 -0
  152. package/dist/components/label.js.map +1 -0
  153. package/dist/components/link.d.ts +12 -0
  154. package/dist/components/link.d.ts.map +1 -0
  155. package/dist/components/link.js +14 -0
  156. package/dist/components/link.js.map +1 -0
  157. package/dist/components/listbox.d.ts +16 -0
  158. package/dist/components/listbox.d.ts.map +1 -0
  159. package/dist/components/listbox.js +88 -0
  160. package/dist/components/listbox.js.map +1 -0
  161. package/dist/components/pagination.d.ts +18 -0
  162. package/dist/components/pagination.d.ts.map +1 -0
  163. package/dist/components/pagination.js +22 -0
  164. package/dist/components/pagination.js.map +1 -0
  165. package/dist/components/popover.d.ts +11 -0
  166. package/dist/components/popover.d.ts.map +1 -0
  167. package/dist/components/popover.js +27 -0
  168. package/dist/components/popover.js.map +1 -0
  169. package/dist/components/radio.d.ts +38 -0
  170. package/dist/components/radio.d.ts.map +1 -0
  171. package/dist/components/radio.js +87 -0
  172. package/dist/components/radio.js.map +1 -0
  173. package/dist/components/scroll-area.d.ts +6 -0
  174. package/dist/components/scroll-area.d.ts.map +1 -0
  175. package/dist/components/scroll-area.js +14 -0
  176. package/dist/components/scroll-area.js.map +1 -0
  177. package/dist/components/select.d.ts +6 -0
  178. package/dist/components/select.d.ts.map +1 -0
  179. package/dist/components/select.js +41 -0
  180. package/dist/components/select.js.map +1 -0
  181. package/dist/components/separator.d.ts +5 -0
  182. package/dist/components/separator.d.ts.map +1 -0
  183. package/dist/components/separator.js +9 -0
  184. package/dist/components/separator.js.map +1 -0
  185. package/dist/components/shadcn-badge.d.ts +10 -0
  186. package/dist/components/shadcn-badge.d.ts.map +1 -0
  187. package/dist/components/shadcn-badge.js +25 -0
  188. package/dist/components/shadcn-badge.js.map +1 -0
  189. package/dist/components/shadcn-button.d.ts +11 -0
  190. package/dist/components/shadcn-button.d.ts.map +1 -0
  191. package/dist/components/shadcn-button.js +36 -0
  192. package/dist/components/shadcn-button.js.map +1 -0
  193. package/dist/components/shadcn-dialog.d.ts +18 -0
  194. package/dist/components/shadcn-dialog.d.ts.map +1 -0
  195. package/dist/components/shadcn-dialog.js +37 -0
  196. package/dist/components/shadcn-dialog.js.map +1 -0
  197. package/dist/components/shadcn-input.d.ts +4 -0
  198. package/dist/components/shadcn-input.d.ts.map +1 -0
  199. package/dist/components/shadcn-input.js +7 -0
  200. package/dist/components/shadcn-input.js.map +1 -0
  201. package/dist/components/shadcn-select.d.ts +14 -0
  202. package/dist/components/shadcn-select.d.ts.map +1 -0
  203. package/dist/components/shadcn-select.js +32 -0
  204. package/dist/components/shadcn-select.js.map +1 -0
  205. package/dist/components/shadcn-textarea.d.ts +4 -0
  206. package/dist/components/shadcn-textarea.d.ts.map +1 -0
  207. package/dist/components/shadcn-textarea.js +7 -0
  208. package/dist/components/shadcn-textarea.js.map +1 -0
  209. package/dist/components/sheet.d.ts +26 -0
  210. package/dist/components/sheet.d.ts.map +1 -0
  211. package/dist/components/sheet.js +37 -0
  212. package/dist/components/sheet.js.map +1 -0
  213. package/dist/components/sidebar.d.ts +68 -0
  214. package/dist/components/sidebar.d.ts.map +1 -0
  215. package/dist/components/sidebar.js +208 -0
  216. package/dist/components/sidebar.js.map +1 -0
  217. package/dist/components/skeleton.d.ts +3 -0
  218. package/dist/components/skeleton.d.ts.map +1 -0
  219. package/dist/components/skeleton.js +7 -0
  220. package/dist/components/skeleton.js.map +1 -0
  221. package/dist/components/slider.d.ts +5 -0
  222. package/dist/components/slider.d.ts.map +1 -0
  223. package/dist/components/slider.js +8 -0
  224. package/dist/components/slider.js.map +1 -0
  225. package/dist/components/sonner.d.ts +11 -0
  226. package/dist/components/sonner.d.ts.map +1 -0
  227. package/dist/components/sonner.js +14 -0
  228. package/dist/components/sonner.js.map +1 -0
  229. package/dist/components/switch.d.ts +30 -0
  230. package/dist/components/switch.d.ts.map +1 -0
  231. package/dist/components/switch.js +68 -0
  232. package/dist/components/switch.js.map +1 -0
  233. package/dist/components/table.d.ts +17 -0
  234. package/dist/components/table.d.ts.map +1 -0
  235. package/dist/components/table.js +41 -0
  236. package/dist/components/table.js.map +1 -0
  237. package/dist/components/tabs.d.ts +12 -0
  238. package/dist/components/tabs.d.ts.map +1 -0
  239. package/dist/components/tabs.js +30 -0
  240. package/dist/components/tabs.js.map +1 -0
  241. package/dist/components/text.d.ts +6 -0
  242. package/dist/components/text.d.ts.map +1 -0
  243. package/dist/components/text.js +16 -0
  244. package/dist/components/text.js.map +1 -0
  245. package/dist/components/textarea.d.ts +8 -0
  246. package/dist/components/textarea.d.ts.map +1 -0
  247. package/dist/components/textarea.js +38 -0
  248. package/dist/components/textarea.js.map +1 -0
  249. package/dist/components/toast.d.ts +16 -0
  250. package/dist/components/toast.d.ts.map +1 -0
  251. package/dist/components/toast.js +34 -0
  252. package/dist/components/toast.js.map +1 -0
  253. package/dist/components/toaster.d.ts +2 -0
  254. package/dist/components/toaster.d.ts.map +1 -0
  255. package/dist/components/toaster.js +10 -0
  256. package/dist/components/toaster.js.map +1 -0
  257. package/dist/components/tooltip.d.ts +8 -0
  258. package/dist/components/tooltip.d.ts.map +1 -0
  259. package/dist/components/tooltip.js +11 -0
  260. package/dist/components/tooltip.js.map +1 -0
  261. package/dist/components/use-toast.d.ts +3 -0
  262. package/dist/components/use-toast.d.ts.map +1 -0
  263. package/dist/components/use-toast.js +3 -0
  264. package/dist/components/use-toast.js.map +1 -0
  265. package/dist/globe/data/country-geo.d.ts +15 -0
  266. package/dist/globe/data/country-geo.d.ts.map +1 -0
  267. package/dist/globe/data/country-geo.js +81 -0
  268. package/dist/globe/data/country-geo.js.map +1 -0
  269. package/dist/globe/electron-arc.d.ts +30 -0
  270. package/dist/globe/electron-arc.d.ts.map +1 -0
  271. package/dist/globe/electron-arc.js +119 -0
  272. package/dist/globe/electron-arc.js.map +1 -0
  273. package/dist/globe/globe-theme.d.ts +34 -0
  274. package/dist/globe/globe-theme.d.ts.map +1 -0
  275. package/dist/globe/globe-theme.js +118 -0
  276. package/dist/globe/globe-theme.js.map +1 -0
  277. package/dist/globe/globe-types.d.ts +42 -0
  278. package/dist/globe/globe-types.d.ts.map +1 -0
  279. package/dist/globe/globe-types.js +5 -0
  280. package/dist/globe/globe-types.js.map +1 -0
  281. package/dist/globe/globe-view.d.ts +27 -0
  282. package/dist/globe/globe-view.d.ts.map +1 -0
  283. package/dist/globe/globe-view.js +601 -0
  284. package/dist/globe/globe-view.js.map +1 -0
  285. package/dist/globe/globe-view.stories.d.ts +42 -0
  286. package/dist/globe/globe-view.stories.d.ts.map +1 -0
  287. package/dist/globe/globe-view.stories.js +319 -0
  288. package/dist/globe/globe-view.stories.js.map +1 -0
  289. package/dist/globe/index.d.ts +12 -0
  290. package/dist/globe/index.d.ts.map +1 -0
  291. package/dist/globe/index.js +7 -0
  292. package/dist/globe/index.js.map +1 -0
  293. package/dist/globe/map/country-code-map.d.ts +10 -0
  294. package/dist/globe/map/country-code-map.d.ts.map +1 -0
  295. package/dist/globe/map/country-code-map.js +15 -0
  296. package/dist/globe/map/country-code-map.js.map +1 -0
  297. package/dist/globe/map/map-geometry.d.ts +10 -0
  298. package/dist/globe/map/map-geometry.d.ts.map +1 -0
  299. package/dist/globe/map/map-geometry.js +57 -0
  300. package/dist/globe/map/map-geometry.js.map +1 -0
  301. package/dist/globe/map/map-materials.d.ts +8 -0
  302. package/dist/globe/map/map-materials.d.ts.map +1 -0
  303. package/dist/globe/map/map-materials.js +32 -0
  304. package/dist/globe/map/map-materials.js.map +1 -0
  305. package/dist/globe/map/map-projection.d.ts +11 -0
  306. package/dist/globe/map/map-projection.d.ts.map +1 -0
  307. package/dist/globe/map/map-projection.js +17 -0
  308. package/dist/globe/map/map-projection.js.map +1 -0
  309. package/dist/globe/scene-extras.d.ts +10 -0
  310. package/dist/globe/scene-extras.d.ts.map +1 -0
  311. package/dist/globe/scene-extras.js +69 -0
  312. package/dist/globe/scene-extras.js.map +1 -0
  313. package/dist/hooks/use-kanban-dnd.d.ts +23 -0
  314. package/dist/hooks/use-kanban-dnd.d.ts.map +1 -0
  315. package/dist/hooks/use-kanban-dnd.js +22 -0
  316. package/dist/hooks/use-kanban-dnd.js.map +1 -0
  317. package/dist/hooks/use-mobile.d.ts +2 -0
  318. package/dist/hooks/use-mobile.d.ts.map +1 -0
  319. package/dist/hooks/use-mobile.js +16 -0
  320. package/dist/hooks/use-mobile.js.map +1 -0
  321. package/dist/hooks/use-toast.d.ts +45 -0
  322. package/dist/hooks/use-toast.d.ts.map +1 -0
  323. package/dist/hooks/use-toast.js +125 -0
  324. package/dist/hooks/use-toast.js.map +1 -0
  325. package/dist/index.d.ts +58 -0
  326. package/dist/index.d.ts.map +1 -0
  327. package/dist/index.js +68 -0
  328. package/dist/index.js.map +1 -0
  329. package/dist/lib/currencies.d.ts +33 -0
  330. package/dist/lib/currencies.d.ts.map +1 -0
  331. package/dist/lib/currencies.js +13 -0
  332. package/dist/lib/currencies.js.map +1 -0
  333. package/dist/lib/kanban-transitions.d.ts +12 -0
  334. package/dist/lib/kanban-transitions.d.ts.map +1 -0
  335. package/dist/lib/kanban-transitions.js +13 -0
  336. package/dist/lib/kanban-transitions.js.map +1 -0
  337. package/dist/lib/semantic-tones.d.ts +4 -0
  338. package/dist/lib/semantic-tones.d.ts.map +1 -0
  339. package/dist/lib/semantic-tones.js +35 -0
  340. package/dist/lib/semantic-tones.js.map +1 -0
  341. package/dist/lib/utils.d.ts +3 -0
  342. package/dist/lib/utils.d.ts.map +1 -0
  343. package/dist/lib/utils.js +6 -0
  344. package/dist/lib/utils.js.map +1 -0
  345. package/dist/offer/attachments-folder.d.ts +13 -0
  346. package/dist/offer/attachments-folder.d.ts.map +1 -0
  347. package/dist/offer/attachments-folder.js +20 -0
  348. package/dist/offer/attachments-folder.js.map +1 -0
  349. package/dist/offer/confirm-action-dialog.d.ts +18 -0
  350. package/dist/offer/confirm-action-dialog.d.ts.map +1 -0
  351. package/dist/offer/confirm-action-dialog.js +57 -0
  352. package/dist/offer/confirm-action-dialog.js.map +1 -0
  353. package/dist/offer/index.d.ts +11 -0
  354. package/dist/offer/index.d.ts.map +1 -0
  355. package/dist/offer/index.js +6 -0
  356. package/dist/offer/index.js.map +1 -0
  357. package/dist/offer/inline-counter-form.d.ts +19 -0
  358. package/dist/offer/inline-counter-form.d.ts.map +1 -0
  359. package/dist/offer/inline-counter-form.js +59 -0
  360. package/dist/offer/inline-counter-form.js.map +1 -0
  361. package/dist/offer/negotiation-event-card.d.ts +9 -0
  362. package/dist/offer/negotiation-event-card.d.ts.map +1 -0
  363. package/dist/offer/negotiation-event-card.js +39 -0
  364. package/dist/offer/negotiation-event-card.js.map +1 -0
  365. package/dist/offer/offer-status-badge.d.ts +8 -0
  366. package/dist/offer/offer-status-badge.d.ts.map +1 -0
  367. package/dist/offer/offer-status-badge.js +35 -0
  368. package/dist/offer/offer-status-badge.js.map +1 -0
  369. package/dist/offer/types.d.ts +43 -0
  370. package/dist/offer/types.d.ts.map +1 -0
  371. package/dist/offer/types.js +2 -0
  372. package/dist/offer/types.js.map +1 -0
  373. package/dist/theme/index.d.ts +2 -0
  374. package/dist/theme/index.d.ts.map +1 -0
  375. package/dist/theme/index.js +2 -0
  376. package/dist/theme/index.js.map +1 -0
  377. package/package.json +166 -0
  378. package/src/theme/tokens.css +475 -0
@@ -0,0 +1,280 @@
1
+ import { useEffect, useCallback, useState, useRef, useMemo } from "react";
2
+ import { useInfiniteQuery, useQueryClient, useMutation, infiniteQueryOptions, } from "@tanstack/react-query";
3
+ function dedupeMessages(messages) {
4
+ const seenIds = new Set();
5
+ const seenClientIds = new Set();
6
+ return messages.filter((message) => {
7
+ const clientMessageId = message.metadata?.clientMessageId;
8
+ if (seenIds.has(message.id))
9
+ return false;
10
+ if (clientMessageId && seenClientIds.has(clientMessageId))
11
+ return false;
12
+ seenIds.add(message.id);
13
+ if (clientMessageId)
14
+ seenClientIds.add(clientMessageId);
15
+ return true;
16
+ });
17
+ }
18
+ /** Add orgId to readBy of all messages in the cache (optimistic update) */
19
+ function addOrgToReadBy(old, orgId) {
20
+ if (!old || typeof old !== "object")
21
+ return old;
22
+ const existing = old;
23
+ return {
24
+ ...existing,
25
+ pages: existing.pages.map((page) => ({
26
+ ...page,
27
+ data: page.data.map((msg) => {
28
+ if (msg.readBy?.includes(orgId))
29
+ return msg;
30
+ return { ...msg, readBy: [...(msg.readBy ?? []), orgId] };
31
+ }),
32
+ })),
33
+ };
34
+ }
35
+ function chatMessagesQueryOptions(roomId, chatApi) {
36
+ return infiniteQueryOptions({
37
+ queryKey: ["chat", "messages", roomId],
38
+ queryFn: ({ pageParam }) => chatApi.getMessages(roomId, pageParam),
39
+ initialPageParam: undefined,
40
+ getNextPageParam: (lastPage) => lastPage.pagination.hasMore ? lastPage.pagination.nextCursor : undefined,
41
+ enabled: !!roomId,
42
+ });
43
+ }
44
+ export function useChat(roomId, currentOrgId, panelActive = true, options) {
45
+ const { chatApi, chatWs } = options;
46
+ const qc = useQueryClient();
47
+ const [isConnected, setIsConnected] = useState(false);
48
+ const [isTyping, setIsTyping] = useState(false);
49
+ const typingTimer = useRef(undefined);
50
+ const pollingTimer = useRef(undefined);
51
+ const typingSentAt = useRef(0);
52
+ const panelActiveRef = useRef(panelActive);
53
+ useEffect(() => {
54
+ panelActiveRef.current = panelActive;
55
+ }, [panelActive]);
56
+ const messagesQuery = useInfiniteQuery({
57
+ ...chatMessagesQueryOptions(roomId ?? "", chatApi),
58
+ enabled: !!roomId,
59
+ });
60
+ // Flatten pages into chronological messages (oldest first)
61
+ const messages = useMemo(() => messagesQuery.data?.pages
62
+ .flatMap((page) => page.data)
63
+ .reverse()
64
+ .filter((message) => !message.metadata?.hiddenFromTimeline) ?? [], [messagesQuery.data?.pages]);
65
+ // WebSocket connection and room subscription
66
+ useEffect(() => {
67
+ if (!roomId)
68
+ return;
69
+ const unsubConnection = chatWs.onConnectionChange((connected) => {
70
+ setIsConnected(connected);
71
+ });
72
+ const unsubMessage = chatWs.onMessage((msgRoomId, data) => {
73
+ if (msgRoomId !== roomId)
74
+ return;
75
+ const msg = data;
76
+ // If chat is open and message is from the other org, mark it read immediately
77
+ if (panelActiveRef.current &&
78
+ currentOrgId &&
79
+ msg.senderOrgId !== currentOrgId) {
80
+ // Optimistically add our orgId to readBy in the incoming message
81
+ if (!msg.readBy?.includes(currentOrgId)) {
82
+ msg.readBy = [...(msg.readBy ?? []), currentOrgId];
83
+ }
84
+ // Persist read status
85
+ if (chatWs.isConnected) {
86
+ chatWs.sendMarkRead(roomId, msg.id);
87
+ }
88
+ else {
89
+ chatApi.markRead(roomId, msg.id).catch(() => { });
90
+ }
91
+ }
92
+ // Append incoming message to query cache
93
+ qc.setQueryData(["chat", "messages", roomId], (old) => {
94
+ if (!old || typeof old !== "object")
95
+ return old;
96
+ const existing = old;
97
+ const firstPage = existing.pages[0];
98
+ if (!firstPage)
99
+ return existing;
100
+ const merged = dedupeMessages([msg, ...firstPage.data]);
101
+ return {
102
+ ...existing,
103
+ pages: [
104
+ { ...firstPage, data: merged },
105
+ ...existing.pages.slice(1),
106
+ ],
107
+ };
108
+ });
109
+ });
110
+ const unsubTyping = chatWs.onTyping((typingRoomId, senderOrgId) => {
111
+ if (typingRoomId !== roomId)
112
+ return;
113
+ if (senderOrgId === currentOrgId)
114
+ return;
115
+ setIsTyping(true);
116
+ clearTimeout(typingTimer.current);
117
+ typingTimer.current = setTimeout(() => setIsTyping(false), 3000);
118
+ });
119
+ // Listen for read events from other party
120
+ const unsubRead = chatWs.onRead((readRoomId, data) => {
121
+ if (readRoomId !== roomId || data.orgId === currentOrgId)
122
+ return;
123
+ qc.setQueryData(["chat", "messages", roomId], (old) => addOrgToReadBy(old, data.orgId));
124
+ });
125
+ void chatWs.connect();
126
+ chatWs.subscribe(roomId);
127
+ return () => {
128
+ chatWs.unsubscribe(roomId);
129
+ unsubConnection();
130
+ unsubMessage();
131
+ unsubTyping();
132
+ unsubRead();
133
+ clearTimeout(typingTimer.current);
134
+ };
135
+ }, [currentOrgId, roomId, qc, chatWs, chatApi]);
136
+ // Fallback: poll via REST if WebSocket fails
137
+ useEffect(() => {
138
+ if (!roomId)
139
+ return;
140
+ if (chatWs.hasFailed) {
141
+ pollingTimer.current = setInterval(() => {
142
+ void qc.invalidateQueries({ queryKey: ["chat", "messages", roomId] });
143
+ }, 5_000);
144
+ }
145
+ return () => {
146
+ clearInterval(pollingTimer.current);
147
+ };
148
+ }, [roomId, isConnected, qc, chatWs]);
149
+ const sendMessageMutation = useMutation({
150
+ mutationFn: async (content) => {
151
+ if (!roomId)
152
+ throw new Error("No room");
153
+ const clientMessageId = typeof crypto !== "undefined" && "randomUUID" in crypto
154
+ ? crypto.randomUUID()
155
+ : `client-${Date.now()}`;
156
+ const optimisticMessage = {
157
+ id: `optimistic:${clientMessageId}`,
158
+ roomId,
159
+ senderOrgId: currentOrgId ?? "unknown",
160
+ senderUserId: null,
161
+ content,
162
+ messageType: "text",
163
+ metadata: { clientMessageId, optimistic: true },
164
+ readBy: [],
165
+ createdAt: new Date().toISOString(),
166
+ };
167
+ qc.setQueryData(["chat", "messages", roomId], (old) => {
168
+ if (!old || typeof old !== "object")
169
+ return old;
170
+ const existing = old;
171
+ const firstPage = existing.pages[0];
172
+ if (!firstPage)
173
+ return existing;
174
+ return {
175
+ ...existing,
176
+ pages: [
177
+ {
178
+ ...firstPage,
179
+ data: dedupeMessages([optimisticMessage, ...firstPage.data]),
180
+ },
181
+ ...existing.pages.slice(1),
182
+ ],
183
+ };
184
+ });
185
+ const message = await chatApi.sendMessage(roomId, content, "text", {
186
+ clientMessageId,
187
+ });
188
+ return { message, clientMessageId };
189
+ },
190
+ onSuccess: ({ message, clientMessageId }) => {
191
+ if (!roomId)
192
+ return;
193
+ qc.setQueryData(["chat", "messages", roomId], (old) => {
194
+ if (!old || typeof old !== "object")
195
+ return old;
196
+ const existing = old;
197
+ const firstPage = existing.pages[0];
198
+ if (!firstPage)
199
+ return existing;
200
+ const cleaned = firstPage.data.filter((item) => item.id !== `optimistic:${clientMessageId}` &&
201
+ item.metadata?.clientMessageId !== clientMessageId);
202
+ return {
203
+ ...existing,
204
+ pages: [
205
+ {
206
+ ...firstPage,
207
+ data: dedupeMessages([message, ...cleaned]),
208
+ },
209
+ ...existing.pages.slice(1),
210
+ ],
211
+ };
212
+ });
213
+ },
214
+ onError: () => {
215
+ if (!roomId)
216
+ return;
217
+ void qc.invalidateQueries({ queryKey: ["chat", "messages", roomId] });
218
+ },
219
+ });
220
+ const sendMessage = useCallback((content) => {
221
+ sendMessageMutation.mutate(content);
222
+ }, [sendMessageMutation]);
223
+ // Compute unread count from readBy (survives refresh)
224
+ const unreadCount = useMemo(() => {
225
+ if (panelActive)
226
+ return 0;
227
+ if (!currentOrgId)
228
+ return 0;
229
+ return messages.filter((m) => m.senderOrgId !== currentOrgId &&
230
+ !m.id.startsWith("optimistic:") &&
231
+ !m.readBy?.includes(currentOrgId)).length;
232
+ }, [messages, currentOrgId, panelActive]);
233
+ // Mark all messages read when chat panel opens
234
+ const prevPanelActiveRef = useRef(panelActive);
235
+ useEffect(() => {
236
+ const wasActive = prevPanelActiveRef.current;
237
+ prevPanelActiveRef.current = panelActive;
238
+ if (panelActive && !wasActive && roomId && currentOrgId) {
239
+ // Optimistically update cache
240
+ qc.setQueryData(["chat", "messages", roomId], (old) => addOrgToReadBy(old, currentOrgId));
241
+ // Persist via WS or REST fallback
242
+ if (chatWs.isConnected) {
243
+ chatWs.sendMarkReadAll(roomId);
244
+ }
245
+ else {
246
+ chatApi.markReadBulk(roomId).catch(() => {
247
+ void qc.invalidateQueries({ queryKey: ["chat", "messages", roomId] });
248
+ });
249
+ }
250
+ }
251
+ }, [panelActive, roomId, currentOrgId, qc, chatWs, chatApi]);
252
+ // Re-mark all read on WS reconnect while panel is open
253
+ useEffect(() => {
254
+ if (isConnected && panelActive && roomId) {
255
+ chatWs.sendMarkReadAll(roomId);
256
+ }
257
+ }, [isConnected, panelActive, roomId, chatWs]);
258
+ const sendTyping = useCallback(() => {
259
+ if (roomId && chatWs.isConnected) {
260
+ const now = Date.now();
261
+ if (now - typingSentAt.current < 1500)
262
+ return;
263
+ typingSentAt.current = now;
264
+ chatWs.sendTyping(roomId);
265
+ }
266
+ }, [roomId, chatWs]);
267
+ return {
268
+ messages,
269
+ sendMessage,
270
+ sendTyping,
271
+ isConnected,
272
+ isTyping,
273
+ isLoading: messagesQuery.isLoading,
274
+ hasMore: messagesQuery.hasNextPage ?? false,
275
+ loadMore: messagesQuery.fetchNextPage,
276
+ isSending: sendMessageMutation.isPending,
277
+ unreadCount,
278
+ };
279
+ }
280
+ //# sourceMappingURL=use-chat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-chat.js","sourceRoot":"","sources":["../../src/chat/use-chat.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import * as React from "react";
2
+ import { Accordion as AccordionPrimitive } from "radix-ui";
3
+ declare function Accordion({ ...props }: React.ComponentProps<typeof AccordionPrimitive.Root>): import("react/jsx-runtime").JSX.Element;
4
+ declare function AccordionItem({ className, ...props }: React.ComponentProps<typeof AccordionPrimitive.Item>): import("react/jsx-runtime").JSX.Element;
5
+ declare function AccordionTrigger({ className, children, ...props }: React.ComponentProps<typeof AccordionPrimitive.Trigger>): import("react/jsx-runtime").JSX.Element;
6
+ declare function AccordionContent({ className, children, ...props }: React.ComponentProps<typeof AccordionPrimitive.Content>): import("react/jsx-runtime").JSX.Element;
7
+ export { Accordion, AccordionItem, AccordionTrigger, AccordionContent };
8
+ //# sourceMappingURL=accordion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accordion.d.ts","sourceRoot":"","sources":["../../src/components/accordion.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,EAAE,SAAS,IAAI,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAI1D,iBAAS,SAAS,CAAC,EACjB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,kBAAkB,CAAC,IAAI,CAAC,2CAEtD;AAED,iBAAS,aAAa,CAAC,EACrB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,kBAAkB,CAAC,IAAI,CAAC,2CAQtD;AAED,iBAAS,gBAAgB,CAAC,EACxB,SAAS,EACT,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,kBAAkB,CAAC,OAAO,CAAC,2CAgBzD;AAED,iBAAS,gBAAgB,CAAC,EACxB,SAAS,EACT,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,kBAAkB,CAAC,OAAO,CAAC,2CAUzD;AAED,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,CAAA"}
@@ -0,0 +1,19 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { ChevronDownIcon } from "lucide-react";
4
+ import { Accordion as AccordionPrimitive } from "radix-ui";
5
+ import { cn } from "../lib/utils";
6
+ function Accordion({ ...props }) {
7
+ return _jsx(AccordionPrimitive.Root, { "data-slot": "accordion", ...props });
8
+ }
9
+ function AccordionItem({ className, ...props }) {
10
+ return (_jsx(AccordionPrimitive.Item, { "data-slot": "accordion-item", className: cn("border-b last:border-b-0", className), ...props }));
11
+ }
12
+ function AccordionTrigger({ className, children, ...props }) {
13
+ return (_jsx(AccordionPrimitive.Header, { className: "flex", children: _jsxs(AccordionPrimitive.Trigger, { "data-slot": "accordion-trigger", className: cn("flex flex-1 items-start justify-between gap-4 rounded-md py-4 text-left text-sm font-medium transition-all outline-none hover:underline focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 [&[data-state=open]>svg]:rotate-180", className), ...props, children: [children, _jsx(ChevronDownIcon, { className: "pointer-events-none size-4 shrink-0 translate-y-0.5 text-muted-foreground transition-transform duration-200" })] }) }));
14
+ }
15
+ function AccordionContent({ className, children, ...props }) {
16
+ return (_jsx(AccordionPrimitive.Content, { "data-slot": "accordion-content", className: "overflow-hidden text-sm data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down", ...props, children: _jsx("div", { className: cn("pt-0 pb-4", className), children: children }) }));
17
+ }
18
+ export { Accordion, AccordionItem, AccordionTrigger, AccordionContent };
19
+ //# sourceMappingURL=accordion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accordion.js","sourceRoot":"","sources":["../../src/components/accordion.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAGZ,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAC9C,OAAO,EAAE,SAAS,IAAI,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAE1D,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAA;AAEjC,SAAS,SAAS,CAAC,EACjB,GAAG,KAAK,EAC6C;IACrD,OAAO,KAAC,kBAAkB,CAAC,IAAI,iBAAW,WAAW,KAAK,KAAK,GAAI,CAAA;AACrE,CAAC;AAED,SAAS,aAAa,CAAC,EACrB,SAAS,EACT,GAAG,KAAK,EAC6C;IACrD,OAAO,CACL,KAAC,kBAAkB,CAAC,IAAI,iBACZ,gBAAgB,EAC1B,SAAS,EAAE,EAAE,CAAC,0BAA0B,EAAE,SAAS,CAAC,KAChD,KAAK,GACT,CACH,CAAA;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,EACxB,SAAS,EACT,QAAQ,EACR,GAAG,KAAK,EACgD;IACxD,OAAO,CACL,KAAC,kBAAkB,CAAC,MAAM,IAAC,SAAS,EAAC,MAAM,YACzC,MAAC,kBAAkB,CAAC,OAAO,iBACf,mBAAmB,EAC7B,SAAS,EAAE,EAAE,CACX,4SAA4S,EAC5S,SAAS,CACV,KACG,KAAK,aAER,QAAQ,EACT,KAAC,eAAe,IAAC,SAAS,EAAC,6GAA6G,GAAG,IAChH,GACH,CAC7B,CAAA;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,EACxB,SAAS,EACT,QAAQ,EACR,GAAG,KAAK,EACgD;IACxD,OAAO,CACL,KAAC,kBAAkB,CAAC,OAAO,iBACf,mBAAmB,EAC7B,SAAS,EAAC,2GAA2G,KACjH,KAAK,YAET,cAAK,SAAS,EAAE,EAAE,CAAC,WAAW,EAAE,SAAS,CAAC,YAAG,QAAQ,GAAO,GACjC,CAC9B,CAAA;AACH,CAAC;AAED,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,CAAA"}
@@ -0,0 +1,29 @@
1
+ import * as Headless from '@headlessui/react';
2
+ import type React from 'react';
3
+ import { Text } from './text';
4
+ declare const sizes: {
5
+ xs: string;
6
+ sm: string;
7
+ md: string;
8
+ lg: string;
9
+ xl: string;
10
+ '2xl': string;
11
+ '3xl': string;
12
+ '4xl': string;
13
+ '5xl': string;
14
+ };
15
+ export declare function Alert({ size, className, children, ...props }: {
16
+ size?: keyof typeof sizes;
17
+ className?: string;
18
+ children: React.ReactNode;
19
+ } & Omit<Headless.DialogProps, 'as' | 'className'>): import("react/jsx-runtime").JSX.Element;
20
+ export declare function AlertTitle({ className, ...props }: {
21
+ className?: string;
22
+ } & Omit<Headless.DialogTitleProps, 'as' | 'className'>): import("react/jsx-runtime").JSX.Element;
23
+ export declare function AlertDescription({ className, ...props }: {
24
+ className?: string;
25
+ } & Omit<Headless.DescriptionProps<typeof Text>, 'as' | 'className'>): import("react/jsx-runtime").JSX.Element;
26
+ export declare function AlertBody({ className, ...props }: React.ComponentPropsWithoutRef<'div'>): import("react/jsx-runtime").JSX.Element;
27
+ export declare function AlertActions({ className, ...props }: React.ComponentPropsWithoutRef<'div'>): import("react/jsx-runtime").JSX.Element;
28
+ export {};
29
+ //# sourceMappingURL=alert.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alert.d.ts","sourceRoot":"","sources":["../../src/components/alert.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,mBAAmB,CAAA;AAE7C,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAE7B,QAAA,MAAM,KAAK;;;;;;;;;;CAUV,CAAA;AAED,wBAAgB,KAAK,CAAC,EACpB,IAAW,EACX,SAAS,EACT,QAAQ,EACR,GAAG,KAAK,EACT,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,OAAO,KAAK,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAAE,GAAG,IAAI,CACpF,QAAQ,CAAC,WAAW,EACpB,IAAI,GAAG,WAAW,CACnB,2CAyBA;AAED,wBAAgB,UAAU,CAAC,EACzB,SAAS,EACT,GAAG,KAAK,EACT,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE,IAAI,GAAG,WAAW,CAAC,2CAU9E;AAED,wBAAgB,gBAAgB,CAAC,EAC/B,SAAS,EACT,GAAG,KAAK,EACT,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,OAAO,IAAI,CAAC,EAAE,IAAI,GAAG,WAAW,CAAC,2CAQ3F;AAED,wBAAgB,SAAS,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,wBAAwB,CAAC,KAAK,CAAC,2CAEvF;AAED,wBAAgB,YAAY,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,wBAAwB,CAAC,KAAK,CAAC,2CAU1F"}
@@ -0,0 +1,31 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import * as Headless from '@headlessui/react';
3
+ import clsx from 'clsx';
4
+ import { Text } from './text';
5
+ const sizes = {
6
+ xs: 'sm:max-w-xs',
7
+ sm: 'sm:max-w-sm',
8
+ md: 'sm:max-w-md',
9
+ lg: 'sm:max-w-lg',
10
+ xl: 'sm:max-w-xl',
11
+ '2xl': 'sm:max-w-2xl',
12
+ '3xl': 'sm:max-w-3xl',
13
+ '4xl': 'sm:max-w-4xl',
14
+ '5xl': 'sm:max-w-5xl',
15
+ };
16
+ export function Alert({ size = 'md', className, children, ...props }) {
17
+ return (_jsxs(Headless.Dialog, { ...props, children: [_jsx(Headless.DialogBackdrop, { transition: true, className: "fixed inset-0 flex w-screen justify-center overflow-y-auto bg-zinc-950/15 px-2 py-2 transition duration-100 focus:outline-0 data-closed:opacity-0 data-enter:ease-out data-leave:ease-in sm:px-6 sm:py-8 lg:px-8 lg:py-16 dark:bg-zinc-950/50" }), _jsx("div", { className: "fixed inset-0 w-screen overflow-y-auto pt-6 sm:pt-0", children: _jsx("div", { className: "grid min-h-full grid-rows-[1fr_auto_1fr] justify-items-center p-8 sm:grid-rows-[1fr_auto_3fr] sm:p-4", children: _jsx(Headless.DialogPanel, { transition: true, className: clsx(className, sizes[size], 'row-start-2 w-full rounded-2xl bg-white p-8 shadow-lg ring-1 ring-zinc-950/10 sm:rounded-2xl sm:p-6 dark:bg-zinc-900 dark:ring-white/10 forced-colors:outline', 'transition duration-100 will-change-transform data-closed:opacity-0 data-enter:ease-out data-closed:data-enter:scale-95 data-leave:ease-in'), children: children }) }) })] }));
18
+ }
19
+ export function AlertTitle({ className, ...props }) {
20
+ return (_jsx(Headless.DialogTitle, { ...props, className: clsx(className, 'text-center text-base/6 font-semibold text-balance text-zinc-950 sm:text-left sm:text-sm/6 sm:text-wrap dark:text-white') }));
21
+ }
22
+ export function AlertDescription({ className, ...props }) {
23
+ return (_jsx(Headless.Description, { as: Text, ...props, className: clsx(className, 'mt-2 text-center text-pretty sm:text-left') }));
24
+ }
25
+ export function AlertBody({ className, ...props }) {
26
+ return _jsx("div", { ...props, className: clsx(className, 'mt-4') });
27
+ }
28
+ export function AlertActions({ className, ...props }) {
29
+ return (_jsx("div", { ...props, className: clsx(className, 'mt-6 flex flex-col-reverse items-center justify-end gap-3 *:w-full sm:mt-4 sm:flex-row sm:*:w-auto') }));
30
+ }
31
+ //# sourceMappingURL=alert.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alert.js","sourceRoot":"","sources":["../../src/components/alert.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,QAAQ,MAAM,mBAAmB,CAAA;AAC7C,OAAO,IAAI,MAAM,MAAM,CAAA;AAEvB,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAE7B,MAAM,KAAK,GAAG;IACZ,EAAE,EAAE,aAAa;IACjB,EAAE,EAAE,aAAa;IACjB,EAAE,EAAE,aAAa;IACjB,EAAE,EAAE,aAAa;IACjB,EAAE,EAAE,aAAa;IACjB,KAAK,EAAE,cAAc;IACrB,KAAK,EAAE,cAAc;IACrB,KAAK,EAAE,cAAc;IACrB,KAAK,EAAE,cAAc;CACtB,CAAA;AAED,MAAM,UAAU,KAAK,CAAC,EACpB,IAAI,GAAG,IAAI,EACX,SAAS,EACT,QAAQ,EACR,GAAG,KAAK,EAIT;IACC,OAAO,CACL,MAAC,QAAQ,CAAC,MAAM,OAAK,KAAK,aACxB,KAAC,QAAQ,CAAC,cAAc,IACtB,UAAU,QACV,SAAS,EAAC,+OAA+O,GACzP,EAEF,cAAK,SAAS,EAAC,qDAAqD,YAClE,cAAK,SAAS,EAAC,sGAAsG,YACnH,KAAC,QAAQ,CAAC,WAAW,IACnB,UAAU,QACV,SAAS,EAAE,IAAI,CACb,SAAS,EACT,KAAK,CAAC,IAAI,CAAC,EACX,+JAA+J,EAC/J,4IAA4I,CAC7I,YAEA,QAAQ,GACY,GACnB,GACF,IACU,CACnB,CAAA;AACH,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,EACzB,SAAS,EACT,GAAG,KAAK,EACqE;IAC7E,OAAO,CACL,KAAC,QAAQ,CAAC,WAAW,OACf,KAAK,EACT,SAAS,EAAE,IAAI,CACb,SAAS,EACT,yHAAyH,CAC1H,GACD,CACH,CAAA;AACH,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,EAC/B,SAAS,EACT,GAAG,KAAK,EACkF;IAC1F,OAAO,CACL,KAAC,QAAQ,CAAC,WAAW,IACnB,EAAE,EAAE,IAAI,KACJ,KAAK,EACT,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,2CAA2C,CAAC,GACvE,CACH,CAAA;AACH,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAyC;IACtF,OAAO,iBAAS,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,GAAI,CAAA;AAC/D,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAyC;IACzF,OAAO,CACL,iBACM,KAAK,EACT,SAAS,EAAE,IAAI,CACb,SAAS,EACT,oGAAoG,CACrG,GACD,CACH,CAAA;AACH,CAAC"}
@@ -0,0 +1,20 @@
1
+ export interface AnimatedListItem {
2
+ id: string | number;
3
+ content: React.ReactNode;
4
+ }
5
+ export interface AnimatedListProps {
6
+ items: AnimatedListItem[];
7
+ isLoading?: boolean;
8
+ skeletonCount?: number;
9
+ renderSkeleton?: () => React.ReactNode;
10
+ animationType?: "slide" | "fade" | "scale";
11
+ enterFrom?: "top" | "bottom" | "left" | "right";
12
+ staggerDelay?: number;
13
+ duration?: number;
14
+ itemGap?: number;
15
+ onItemClick?: (item: AnimatedListItem) => void;
16
+ className?: string;
17
+ emptyState?: React.ReactNode;
18
+ }
19
+ export declare function AnimatedList({ items, isLoading, skeletonCount, renderSkeleton, animationType, enterFrom, staggerDelay, duration, itemGap, onItemClick, className, emptyState, }: AnimatedListProps): import("react/jsx-runtime").JSX.Element;
20
+ //# sourceMappingURL=animated-list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"animated-list.d.ts","sourceRoot":"","sources":["../../src/components/animated-list.tsx"],"names":[],"mappings":"AAMA,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;IACpB,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC;CAC1B;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,KAAK,CAAC,SAAS,CAAC;IACvC,aAAa,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC;IAC3C,SAAS,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;IAChD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAC/C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC9B;AA0CD,wBAAgB,YAAY,CAAC,EAC3B,KAAK,EACL,SAAiB,EACjB,aAAiB,EACjB,cAAc,EACd,aAAuB,EACvB,SAAoB,EACpB,YAAiB,EACjB,QAAe,EACf,OAAY,EACZ,WAAW,EACX,SAAS,EACT,UAAU,GACX,EAAE,iBAAiB,2CAuCnB"}
@@ -0,0 +1,50 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { AnimatePresence, motion } from "motion/react";
3
+ import { cn } from "../lib/utils";
4
+ import { Skeleton } from "./skeleton";
5
+ /* ─── Animation variants ─── */
6
+ function getInitial(type, from) {
7
+ const base = { opacity: 0 };
8
+ if (type === "scale")
9
+ base.scale = 0.92;
10
+ switch (from) {
11
+ case "top":
12
+ base.y = -16;
13
+ break;
14
+ case "bottom":
15
+ base.y = 16;
16
+ break;
17
+ case "left":
18
+ base.x = -16;
19
+ break;
20
+ case "right":
21
+ base.x = 16;
22
+ break;
23
+ }
24
+ return base;
25
+ }
26
+ function getAnimate(type) {
27
+ const base = { opacity: 1, x: 0, y: 0 };
28
+ if (type === "scale")
29
+ base.scale = 1;
30
+ return base;
31
+ }
32
+ /* ─── Skeleton fallback ─── */
33
+ function DefaultSkeleton() {
34
+ return (_jsxs("div", { className: "flex items-center gap-3 rounded-lg border border-border bg-card p-4", children: [_jsx(Skeleton, { className: "size-10 shrink-0 rounded-full" }), _jsxs("div", { className: "flex-1 space-y-2", children: [_jsx(Skeleton, { className: "h-3.5 w-32" }), _jsx(Skeleton, { className: "h-3 w-48" })] }), _jsx(Skeleton, { className: "h-8 w-20 rounded-md" })] }));
35
+ }
36
+ /* ─── Component ─── */
37
+ export function AnimatedList({ items, isLoading = false, skeletonCount = 4, renderSkeleton, animationType = "slide", enterFrom = "bottom", staggerDelay = 50, duration = 0.35, itemGap = 12, onItemClick, className, emptyState, }) {
38
+ if (isLoading) {
39
+ return (_jsx("div", { className: cn("flex flex-col", className), style: { gap: itemGap }, children: Array.from({ length: skeletonCount }).map((_, i) => (_jsx("div", { children: renderSkeleton ? renderSkeleton() : _jsx(DefaultSkeleton, {}) }, i))) }));
40
+ }
41
+ if (items.length === 0 && emptyState) {
42
+ return _jsx(_Fragment, { children: emptyState });
43
+ }
44
+ return (_jsx("div", { className: cn("flex flex-col", className), style: { gap: itemGap }, children: _jsx(AnimatePresence, { initial: true, mode: "popLayout", children: items.map((item, index) => (_jsx(motion.div, { layout: true, initial: getInitial(animationType, enterFrom), animate: getAnimate(animationType), exit: { opacity: 0, scale: 0.95 }, transition: {
45
+ duration,
46
+ delay: index * (staggerDelay / 1000),
47
+ ease: [0.25, 0.46, 0.45, 0.94],
48
+ }, onClick: onItemClick ? () => onItemClick(item) : undefined, className: onItemClick ? "cursor-pointer" : undefined, children: item.content }, item.id))) }) }));
49
+ }
50
+ //# sourceMappingURL=animated-list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"animated-list.js","sourceRoot":"","sources":["../../src/components/animated-list.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import * as Headless from '@headlessui/react';
2
+ import React from 'react';
3
+ type AvatarProps = {
4
+ src?: string | null;
5
+ square?: boolean;
6
+ initials?: string;
7
+ alt?: string;
8
+ className?: string;
9
+ };
10
+ export declare function Avatar({ src, square, initials, alt, className, ...props }: AvatarProps & React.ComponentPropsWithoutRef<'span'>): import("react/jsx-runtime").JSX.Element;
11
+ export declare const AvatarButton: React.ForwardRefExoticComponent<(AvatarProps & (({
12
+ href?: never;
13
+ } & Omit<Headless.ButtonProps<"button">, "className" | "as">) | ({
14
+ href: string;
15
+ } & Omit<Omit<{
16
+ href: string;
17
+ } & Omit<React.DetailedHTMLProps<React.AnchorHTMLAttributes<HTMLAnchorElement>, HTMLAnchorElement>, "ref"> & React.RefAttributes<HTMLAnchorElement>, "ref">, "className">))) & React.RefAttributes<HTMLButtonElement>>;
18
+ export {};
19
+ //# sourceMappingURL=avatar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"avatar.d.ts","sourceRoot":"","sources":["../../src/components/avatar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,mBAAmB,CAAA;AAE7C,OAAO,KAAqB,MAAM,OAAO,CAAA;AAIzC,KAAK,WAAW,GAAG;IACjB,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACnB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,wBAAgB,MAAM,CAAC,EACrB,GAAU,EACV,MAAc,EACd,QAAQ,EACR,GAAQ,EACR,SAAS,EACT,GAAG,KAAK,EACT,EAAE,WAAW,GAAG,KAAK,CAAC,wBAAwB,CAAC,MAAM,CAAC,2CA6BtD;AAED,eAAO,MAAM,YAAY;WAUP,KAAK;;UACN,MAAM;;;sNAuBrB,CAAA"}
@@ -0,0 +1,18 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import * as Headless from '@headlessui/react';
3
+ import clsx from 'clsx';
4
+ import { forwardRef } from 'react';
5
+ import { TouchTarget } from './button';
6
+ import { Link } from './link';
7
+ export function Avatar({ src = null, square = false, initials, alt = '', className, ...props }) {
8
+ return (_jsxs("span", { "data-slot": "avatar", ...props, className: clsx(className,
9
+ // Basic layout
10
+ 'inline-grid shrink-0 align-middle [--avatar-radius:20%] *:col-start-1 *:row-start-1', 'outline -outline-offset-1 outline-black/10 dark:outline-white/10',
11
+ // Border radius
12
+ square ? 'rounded-(--avatar-radius) *:rounded-(--avatar-radius)' : 'rounded-full *:rounded-full'), children: [initials && (_jsxs("svg", { className: "size-full fill-current p-[5%] text-[48px] font-medium uppercase select-none", viewBox: "0 0 100 100", "aria-hidden": alt ? undefined : 'true', children: [alt && _jsx("title", { children: alt }), _jsx("text", { x: "50%", y: "50%", alignmentBaseline: "middle", dominantBaseline: "middle", textAnchor: "middle", dy: ".125em", children: initials })] })), src && _jsx("img", { className: "size-full", src: src, alt: alt })] }));
13
+ }
14
+ export const AvatarButton = forwardRef(function AvatarButton({ src, square = false, initials, alt, className, ...props }, ref) {
15
+ const classes = clsx(className, square ? 'rounded-[20%]' : 'rounded-full', 'relative inline-grid focus:not-data-focus:outline-hidden data-focus:outline-2 data-focus:outline-offset-2 data-focus:outline-blue-500');
16
+ return typeof props.href === 'string' ? (_jsx(Link, { ...props, className: classes, ref: ref, children: _jsx(TouchTarget, { children: _jsx(Avatar, { src: src, square: square, initials: initials, alt: alt }) }) })) : (_jsx(Headless.Button, { ...props, className: classes, ref: ref, children: _jsx(TouchTarget, { children: _jsx(Avatar, { src: src, square: square, initials: initials, alt: alt }) }) }));
17
+ });
18
+ //# sourceMappingURL=avatar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"avatar.js","sourceRoot":"","sources":["../../src/components/avatar.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,QAAQ,MAAM,mBAAmB,CAAA;AAC7C,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAc,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AACtC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAU7B,MAAM,UAAU,MAAM,CAAC,EACrB,GAAG,GAAG,IAAI,EACV,MAAM,GAAG,KAAK,EACd,QAAQ,EACR,GAAG,GAAG,EAAE,EACR,SAAS,EACT,GAAG,KAAK,EAC6C;IACrD,OAAO,CACL,6BACY,QAAQ,KACd,KAAK,EACT,SAAS,EAAE,IAAI,CACb,SAAS;QACT,eAAe;QACf,qFAAqF,EACrF,kEAAkE;QAClE,gBAAgB;QAChB,MAAM,CAAC,CAAC,CAAC,uDAAuD,CAAC,CAAC,CAAC,6BAA6B,CACjG,aAEA,QAAQ,IAAI,CACX,eACE,SAAS,EAAC,6EAA6E,EACvF,OAAO,EAAC,aAAa,iBACR,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,aAEpC,GAAG,IAAI,0BAAQ,GAAG,GAAS,EAC5B,eAAM,CAAC,EAAC,KAAK,EAAC,CAAC,EAAC,KAAK,EAAC,iBAAiB,EAAC,QAAQ,EAAC,gBAAgB,EAAC,QAAQ,EAAC,UAAU,EAAC,QAAQ,EAAC,EAAE,EAAC,QAAQ,YACvG,QAAQ,GACJ,IACH,CACP,EACA,GAAG,IAAI,cAAK,SAAS,EAAC,WAAW,EAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAI,IACpD,CACR,CAAA;AACH,CAAC;AAED,MAAM,CAAC,MAAM,YAAY,GAAG,UAAU,CAAC,SAAS,YAAY,CAC1D,EACE,GAAG,EACH,MAAM,GAAG,KAAK,EACd,QAAQ,EACR,GAAG,EACH,SAAS,EACT,GAAG,KAAK,EAKP,EACH,GAA0C;IAE1C,MAAM,OAAO,GAAG,IAAI,CAClB,SAAS,EACT,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,cAAc,EACzC,uIAAuI,CACxI,CAAA;IAED,OAAO,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CACtC,KAAC,IAAI,OAAK,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,EAAE,GAA4C,YACpF,KAAC,WAAW,cACV,KAAC,MAAM,IAAC,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,GAAI,GACtD,GACT,CACR,CAAC,CAAC,CAAC,CACF,KAAC,QAAQ,CAAC,MAAM,OAAK,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,YACtD,KAAC,WAAW,cACV,KAAC,MAAM,IAAC,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,GAAI,GACtD,GACE,CACnB,CAAA;AACH,CAAC,CAAC,CAAA"}
@@ -0,0 +1,39 @@
1
+ import * as Headless from '@headlessui/react';
2
+ import React from 'react';
3
+ declare const colors: {
4
+ red: string;
5
+ orange: string;
6
+ amber: string;
7
+ yellow: string;
8
+ lime: string;
9
+ green: string;
10
+ emerald: string;
11
+ brand: string;
12
+ teal: string;
13
+ cyan: string;
14
+ sky: string;
15
+ blue: string;
16
+ indigo: string;
17
+ violet: string;
18
+ purple: string;
19
+ fuchsia: string;
20
+ pink: string;
21
+ rose: string;
22
+ zinc: string;
23
+ };
24
+ type BadgeProps = {
25
+ color?: keyof typeof colors;
26
+ };
27
+ export declare function Badge({ color, className, ...props }: BadgeProps & React.ComponentPropsWithoutRef<'span'>): import("react/jsx-runtime").JSX.Element;
28
+ export declare const BadgeButton: React.ForwardRefExoticComponent<(BadgeProps & ({
29
+ className?: string;
30
+ children: React.ReactNode;
31
+ } & (({
32
+ href?: never;
33
+ } & Omit<Headless.ButtonProps<"button">, "className" | "as">) | ({
34
+ href: string;
35
+ } & Omit<Omit<{
36
+ href: string;
37
+ } & Omit<React.DetailedHTMLProps<React.AnchorHTMLAttributes<HTMLAnchorElement>, HTMLAnchorElement>, "ref"> & React.RefAttributes<HTMLAnchorElement>, "ref">, "className">)))) & React.RefAttributes<HTMLElement>>;
38
+ export {};
39
+ //# sourceMappingURL=badge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"badge.d.ts","sourceRoot":"","sources":["../../src/components/badge.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,mBAAmB,CAAA;AAE7C,OAAO,KAAqB,MAAM,OAAO,CAAA;AAIzC,QAAA,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;CA6BX,CAAA;AAED,KAAK,UAAU,GAAG;IAAE,KAAK,CAAC,EAAE,MAAM,OAAO,MAAM,CAAA;CAAE,CAAA;AAEjD,wBAAgB,KAAK,CAAC,EAAE,KAAc,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,UAAU,GAAG,KAAK,CAAC,wBAAwB,CAAC,MAAM,CAAC,2CAWjH;AAED,eAAO,MAAM,WAAW;gBAMQ,MAAM;cAAY,KAAK,CAAC,SAAS;;WAC/C,KAAK;;UACN,MAAM;;;iNAsBrB,CAAA"}
@@ -0,0 +1,35 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import * as Headless from '@headlessui/react';
3
+ import clsx from 'clsx';
4
+ import { forwardRef } from 'react';
5
+ import { TouchTarget } from './button';
6
+ import { Link } from './link';
7
+ const colors = {
8
+ red: 'bg-red-500/15 text-red-700 group-data-hover:bg-red-500/25 dark:bg-red-500/10 dark:text-red-400 dark:group-data-hover:bg-red-500/20',
9
+ orange: 'bg-orange-500/15 text-orange-700 group-data-hover:bg-orange-500/25 dark:bg-orange-500/10 dark:text-orange-400 dark:group-data-hover:bg-orange-500/20',
10
+ amber: 'bg-amber-400/20 text-amber-700 group-data-hover:bg-amber-400/30 dark:bg-amber-400/10 dark:text-amber-400 dark:group-data-hover:bg-amber-400/15',
11
+ yellow: 'bg-yellow-400/20 text-yellow-700 group-data-hover:bg-yellow-400/30 dark:bg-yellow-400/10 dark:text-yellow-300 dark:group-data-hover:bg-yellow-400/15',
12
+ lime: 'bg-lime-400/20 text-lime-700 group-data-hover:bg-lime-400/30 dark:bg-lime-400/10 dark:text-lime-300 dark:group-data-hover:bg-lime-400/15',
13
+ green: 'bg-green-500/15 text-green-700 group-data-hover:bg-green-500/25 dark:bg-green-500/10 dark:text-green-400 dark:group-data-hover:bg-green-500/20',
14
+ emerald: 'bg-primary/15 text-primary group-data-hover:bg-primary/25 dark:bg-primary/10 dark:text-primary-foreground/90 dark:group-data-hover:bg-primary/25',
15
+ brand: 'bg-primary/15 text-primary group-data-hover:bg-primary/25 dark:bg-primary/15 dark:text-primary-foreground dark:group-data-hover:bg-primary/25',
16
+ teal: 'bg-primary/15 text-primary group-data-hover:bg-primary/25 dark:bg-primary/15 dark:text-primary-foreground dark:group-data-hover:bg-primary/25',
17
+ cyan: 'bg-cyan-400/20 text-cyan-700 group-data-hover:bg-cyan-400/30 dark:bg-cyan-400/10 dark:text-cyan-300 dark:group-data-hover:bg-cyan-400/15',
18
+ sky: 'bg-sky-500/15 text-sky-700 group-data-hover:bg-sky-500/25 dark:bg-sky-500/10 dark:text-sky-300 dark:group-data-hover:bg-sky-500/20',
19
+ blue: 'bg-blue-500/15 text-blue-700 group-data-hover:bg-blue-500/25 dark:text-blue-400 dark:group-data-hover:bg-blue-500/25',
20
+ indigo: 'bg-indigo-500/15 text-indigo-700 group-data-hover:bg-indigo-500/25 dark:text-indigo-400 dark:group-data-hover:bg-indigo-500/20',
21
+ violet: 'bg-violet-500/15 text-violet-700 group-data-hover:bg-violet-500/25 dark:text-violet-400 dark:group-data-hover:bg-violet-500/20',
22
+ purple: 'bg-purple-500/15 text-purple-700 group-data-hover:bg-purple-500/25 dark:text-purple-400 dark:group-data-hover:bg-purple-500/20',
23
+ fuchsia: 'bg-fuchsia-400/15 text-fuchsia-700 group-data-hover:bg-fuchsia-400/25 dark:bg-fuchsia-400/10 dark:text-fuchsia-400 dark:group-data-hover:bg-fuchsia-400/20',
24
+ pink: 'bg-pink-400/15 text-pink-700 group-data-hover:bg-pink-400/25 dark:bg-pink-400/10 dark:text-pink-400 dark:group-data-hover:bg-pink-400/20',
25
+ rose: 'bg-rose-400/15 text-rose-700 group-data-hover:bg-rose-400/25 dark:bg-rose-400/10 dark:text-rose-400 dark:group-data-hover:bg-rose-400/20',
26
+ zinc: 'bg-zinc-600/10 text-zinc-700 group-data-hover:bg-zinc-600/20 dark:bg-white/5 dark:text-zinc-400 dark:group-data-hover:bg-white/10',
27
+ };
28
+ export function Badge({ color = 'zinc', className, ...props }) {
29
+ return (_jsx("span", { ...props, className: clsx(className, 'inline-flex items-center gap-x-1.5 rounded-md px-1.5 py-0.5 text-sm/5 font-medium sm:text-xs/5 forced-colors:outline', colors[color]) }));
30
+ }
31
+ export const BadgeButton = forwardRef(function BadgeButton({ color = 'zinc', className, children, ...props }, ref) {
32
+ const classes = clsx(className, 'group relative inline-flex rounded-md focus:not-data-focus:outline-hidden data-focus:outline-2 data-focus:outline-offset-2 data-focus:outline-ring');
33
+ return typeof props.href === 'string' ? (_jsx(Link, { ...props, className: classes, ref: ref, children: _jsx(TouchTarget, { children: _jsx(Badge, { color: color, children: children }) }) })) : (_jsx(Headless.Button, { ...props, className: classes, ref: ref, children: _jsx(TouchTarget, { children: _jsx(Badge, { color: color, children: children }) }) }));
34
+ });
35
+ //# sourceMappingURL=badge.js.map