@uisatin/ui 0.2.0 → 0.4.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 (359) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/README.md +10 -1
  3. package/{chunk-P4O6TGDR.js → chunk-3VVO5MY5.js} +28 -26
  4. package/chunk-47DDBME3.js +87 -0
  5. package/{chunk-SHDFUXYV.js → chunk-5663JVE5.js} +16 -18
  6. package/chunk-67CBFB6Y.js +99 -0
  7. package/chunk-6DWLTGRQ.js +130 -0
  8. package/chunk-6GNMUJQ4.js +45 -0
  9. package/chunk-6JTSZAGO.js +177 -0
  10. package/chunk-6RLSRMB5.js +14 -0
  11. package/chunk-6Y6CY2DP.js +55 -0
  12. package/{chunk-O7F3CIDV.js → chunk-7NV53EL5.js} +10 -12
  13. package/{chunk-BNZVTLHV.js → chunk-7SVMERPH.js} +25 -21
  14. package/chunk-A52HUWVM.js +24 -0
  15. package/chunk-AKEZCWNW.js +29 -0
  16. package/{chunk-SH6NG6VN.js → chunk-APRVUOD6.js} +6 -8
  17. package/{chunk-QUF2IPOZ.js → chunk-C435UD7V.js} +14 -15
  18. package/{chunk-B2K45IUR.js → chunk-C6WRJ7DG.js} +5 -7
  19. package/{chunk-PF3YBUKT.js → chunk-CQFAMWZI.js} +16 -15
  20. package/chunk-DAKVTPYZ.js +86 -0
  21. package/{chunk-VAGIAREV.js → chunk-DMZW4LGU.js} +29 -26
  22. package/chunk-EBZHGRM5.js +46 -0
  23. package/chunk-EHEXE2UV.js +44 -0
  24. package/{chunk-72OCFAPT.js → chunk-EQAFDIPE.js} +26 -23
  25. package/{chunk-LLHTVIM3.js → chunk-EXKSKYG3.js} +7 -9
  26. package/chunk-FB6DG3LR.js +35 -0
  27. package/chunk-GH2DEOGO.js +67 -0
  28. package/{chunk-YG7JOOLJ.js → chunk-GKDMCY2S.js} +5 -7
  29. package/chunk-GTFUAA6H.js +42 -0
  30. package/{chunk-TX3H3QMA.js → chunk-HI6QIG55.js} +71 -70
  31. package/{chunk-6QMSWITQ.js → chunk-HZV7EXGU.js} +24 -26
  32. package/{chunk-A5XEM3GF.js → chunk-IKJIR6VL.js} +34 -36
  33. package/{chunk-DO3TBNSC.js → chunk-INJWE2LD.js} +15 -17
  34. package/chunk-J5UQPROI.js +56 -0
  35. package/{chunk-6YXUBP27.js → chunk-JCR5TWTF.js} +72 -67
  36. package/chunk-JKOBDLP3.js +25 -0
  37. package/chunk-JR3VVDV6.js +37 -0
  38. package/chunk-JYGCZWET.js +112 -0
  39. package/{chunk-UGRSWP6U.js → chunk-K5G5OEV5.js} +10 -12
  40. package/{chunk-B6V4VSGH.js → chunk-KDU7AT2T.js} +14 -15
  41. package/chunk-KITXKIYW.js +104 -0
  42. package/{chunk-NN6PKJWS.js → chunk-KQNA22D3.js} +7 -9
  43. package/{chunk-YPNKBE5X.js → chunk-L5PPN42A.js} +14 -9
  44. package/chunk-LAOE6Y57.js +95 -0
  45. package/chunk-LI5VYDLN.js +195 -0
  46. package/{chunk-7TXHCRAG.js → chunk-LKSFTNPF.js} +8 -10
  47. package/chunk-LLW3X4ZJ.js +39 -0
  48. package/{chunk-RTJ76X5U.js → chunk-LWRB4DED.js} +2 -4
  49. package/{chunk-NSRTTYQ4.js → chunk-M7RILZVW.js} +42 -35
  50. package/{chunk-LW3TRU5W.js → chunk-MOGWOUCN.js} +28 -16
  51. package/chunk-NCIRJ5V2.js +108 -0
  52. package/chunk-NQL6SIIB.js +168 -0
  53. package/chunk-NTSU44FY.js +81 -0
  54. package/{chunk-3DINAQLL.js → chunk-P36KBUYD.js} +33 -29
  55. package/chunk-P6RHT2VM.js +147 -0
  56. package/{chunk-CL2II6BX.js → chunk-PD2KD5OR.js} +11 -13
  57. package/{chunk-XL75JRUA.js → chunk-PP46SY7M.js} +42 -22
  58. package/{chunk-L6NCCSIP.js → chunk-PTK4QAOQ.js} +36 -29
  59. package/{chunk-HL42K2NH.js → chunk-Q7KVC5B4.js} +17 -17
  60. package/{chunk-H4NU7NPO.js → chunk-R3DTMBDT.js} +62 -61
  61. package/{chunk-KNUWZNFV.js → chunk-R4KPFBMK.js} +4 -6
  62. package/chunk-R5TQ3HNB.js +71 -0
  63. package/chunk-RFSPJECL.js +84 -0
  64. package/chunk-RPL6FRVX.js +88 -0
  65. package/{chunk-AN2RNJLR.js → chunk-STYOBAC7.js} +16 -16
  66. package/{chunk-X3PQANZO.js → chunk-SVUWR3HD.js} +47 -46
  67. package/chunk-T7P3OEBP.js +128 -0
  68. package/{chunk-QS4N4MNP.js → chunk-TB3ZRV3Y.js} +18 -20
  69. package/{chunk-MYEZXZZC.js → chunk-TOY6YPTG.js} +23 -25
  70. package/{chunk-XILQ7GXE.js → chunk-U6X6ODDJ.js} +11 -13
  71. package/{chunk-XZNHT6MO.js → chunk-UAJ6M34K.js} +115 -61
  72. package/chunk-W2EH6RY5.js +42 -0
  73. package/{chunk-FDKIX4DC.js → chunk-W2QQQWNE.js} +7 -9
  74. package/{chunk-LZMKSFCF.js → chunk-WALANB3V.js} +10 -12
  75. package/chunk-WCUR44O6.js +88 -0
  76. package/{chunk-BNTPPZCK.js → chunk-WJYJMX5S.js} +37 -39
  77. package/chunk-WZSLDYUU.js +131 -0
  78. package/{chunk-J3NSDRVH.js → chunk-XETMIETJ.js} +0 -2
  79. package/chunk-XU6JJDMZ.js +117 -0
  80. package/{chunk-BKZBWPUH.js → chunk-XWPH7C2W.js} +9 -11
  81. package/{chunk-GICKPMJU.js → chunk-YXWXSRXG.js} +31 -31
  82. package/{chunk-2HKBZFIK.js → chunk-YY236ZSJ.js} +31 -31
  83. package/{chunk-YX5VNRJX.js → chunk-YYFAZQ25.js} +0 -2
  84. package/{chunk-Y5AYU7PK.js → chunk-ZHFIWDGF.js} +0 -2
  85. package/components/accordion.js +2 -4
  86. package/components/action-button.d.ts +37 -0
  87. package/components/action-button.js +5 -0
  88. package/components/agent-loading.d.ts +2 -0
  89. package/components/agent-loading.js +2 -4
  90. package/components/agent-picker.js +5 -5
  91. package/components/agent-suggestion.js +5 -6
  92. package/components/alert.d.ts +37 -0
  93. package/components/alert.js +5 -0
  94. package/components/announcement-bar.js +7 -7
  95. package/components/attachment.js +5 -5
  96. package/components/avatar.js +4 -6
  97. package/components/badge.js +2 -4
  98. package/components/banner-mesh.js +1 -3
  99. package/components/banner.js +6 -6
  100. package/components/bar-chart.js +10 -11
  101. package/components/breadcrumb.js +5 -6
  102. package/components/button-group.d.ts +26 -0
  103. package/components/button-group.js +5 -0
  104. package/components/button.d.ts +13 -1
  105. package/components/button.js +4 -4
  106. package/components/card.js +5 -5
  107. package/components/channel-chart.js +10 -11
  108. package/components/chart.js +9 -10
  109. package/components/checkbox.js +2 -4
  110. package/components/chip.js +2 -4
  111. package/components/citations.d.ts +6 -4
  112. package/components/citations.js +4 -5
  113. package/components/code-block.js +5 -5
  114. package/components/combobox.d.ts +12 -3
  115. package/components/combobox.js +10 -10
  116. package/components/command-menu.d.ts +6 -2
  117. package/components/command-menu.js +5 -6
  118. package/components/context-menu.d.ts +12 -5
  119. package/components/context-menu.js +5 -6
  120. package/components/cookie-consent.js +5 -5
  121. package/components/date-picker.d.ts +26 -14
  122. package/components/date-picker.js +9 -9
  123. package/components/decision-card.js +7 -7
  124. package/components/dialog.d.ts +6 -8
  125. package/components/dialog.js +6 -5
  126. package/components/donut-chart.js +10 -11
  127. package/components/dot.js +2 -4
  128. package/components/dropdown.d.ts +6 -1
  129. package/components/dropdown.js +4 -5
  130. package/components/empty-state.js +2 -4
  131. package/components/field-group.d.ts +27 -0
  132. package/components/field-group.js +3 -0
  133. package/components/file-upload.js +7 -7
  134. package/components/floating.js +1 -3
  135. package/components/form-field.d.ts +38 -1
  136. package/components/form-field.js +2 -4
  137. package/components/form.d.ts +47 -0
  138. package/components/form.js +3 -0
  139. package/components/hover-card.d.ts +5 -2
  140. package/components/hover-card.js +2 -4
  141. package/components/input-group.d.ts +21 -0
  142. package/components/input-group.js +6 -0
  143. package/components/input-otp.d.ts +4 -2
  144. package/components/input-otp.js +7 -8
  145. package/components/input.d.ts +5 -1
  146. package/components/input.js +3 -5
  147. package/components/kbd.js +2 -4
  148. package/components/labels.d.ts +86 -0
  149. package/components/labels.js +1 -0
  150. package/components/line-chart.js +11 -12
  151. package/components/link.d.ts +20 -0
  152. package/components/link.js +3 -0
  153. package/components/list.d.ts +46 -0
  154. package/components/list.js +2 -0
  155. package/components/message-actions.js +5 -5
  156. package/components/message.js +8 -8
  157. package/components/number-input.d.ts +4 -2
  158. package/components/number-input.js +7 -8
  159. package/components/pagination.js +6 -6
  160. package/components/password-input.d.ts +16 -0
  161. package/components/password-input.js +7 -0
  162. package/components/popover.d.ts +11 -5
  163. package/components/popover.js +3 -4
  164. package/components/progress.js +2 -4
  165. package/components/prompt-bar.js +6 -6
  166. package/components/radio.js +2 -4
  167. package/components/search-bar.js +3 -5
  168. package/components/segmented-control.d.ts +4 -2
  169. package/components/segmented-control.js +3 -5
  170. package/components/select.d.ts +11 -2
  171. package/components/select.js +6 -7
  172. package/components/selectable-card.d.ts +37 -0
  173. package/components/selectable-card.js +2 -0
  174. package/components/selectable-checkbox.d.ts +14 -0
  175. package/components/selectable-checkbox.js +4 -0
  176. package/components/selectable-radio.d.ts +16 -0
  177. package/components/selectable-radio.js +3 -0
  178. package/components/separator.d.ts +18 -0
  179. package/components/separator.js +2 -0
  180. package/components/sheet.d.ts +4 -2
  181. package/components/sheet.js +7 -6
  182. package/components/sidebar.js +2 -4
  183. package/components/skeleton.js +2 -4
  184. package/components/slider.d.ts +6 -2
  185. package/components/slider.js +7 -8
  186. package/components/sliding-indicator.js +1 -3
  187. package/components/spinner.d.ts +18 -0
  188. package/components/spinner.js +3 -0
  189. package/components/split-button.d.ts +24 -0
  190. package/components/split-button.js +8 -0
  191. package/components/streaming-text.js +2 -4
  192. package/components/switch.js +2 -4
  193. package/components/table.d.ts +16 -5
  194. package/components/table.js +4 -5
  195. package/components/tabs.d.ts +4 -2
  196. package/components/tabs.js +3 -5
  197. package/components/textarea.js +3 -5
  198. package/components/thinking.js +3 -5
  199. package/components/toast.js +5 -5
  200. package/components/toggle.js +2 -4
  201. package/components/tooltip.d.ts +5 -2
  202. package/components/tooltip.js +3 -5
  203. package/index.d.ts +17 -2
  204. package/index.js +82 -231
  205. package/lib/utils.d.ts +8 -1
  206. package/lib/utils.js +1 -3
  207. package/package.json +11 -1
  208. package/styles.css +1 -1
  209. package/theme/create-theme.d.ts +6 -2
  210. package/theme/index.js +1 -0
  211. package/chunk-2HKBZFIK.js.map +0 -1
  212. package/chunk-3DINAQLL.js.map +0 -1
  213. package/chunk-3ERGAHKA.js +0 -179
  214. package/chunk-3ERGAHKA.js.map +0 -1
  215. package/chunk-6C7CGJX2.js +0 -86
  216. package/chunk-6C7CGJX2.js.map +0 -1
  217. package/chunk-6QMSWITQ.js.map +0 -1
  218. package/chunk-6YXUBP27.js.map +0 -1
  219. package/chunk-72OCFAPT.js.map +0 -1
  220. package/chunk-7TXHCRAG.js.map +0 -1
  221. package/chunk-A5XEM3GF.js.map +0 -1
  222. package/chunk-AN2RNJLR.js.map +0 -1
  223. package/chunk-B2K45IUR.js.map +0 -1
  224. package/chunk-B6V4VSGH.js.map +0 -1
  225. package/chunk-BKZBWPUH.js.map +0 -1
  226. package/chunk-BNTPPZCK.js.map +0 -1
  227. package/chunk-BNZVTLHV.js.map +0 -1
  228. package/chunk-CL2II6BX.js.map +0 -1
  229. package/chunk-D7RZNTFC.js +0 -95
  230. package/chunk-D7RZNTFC.js.map +0 -1
  231. package/chunk-DETGJAIC.js +0 -147
  232. package/chunk-DETGJAIC.js.map +0 -1
  233. package/chunk-DO3TBNSC.js.map +0 -1
  234. package/chunk-ESC5JCVQ.js +0 -90
  235. package/chunk-ESC5JCVQ.js.map +0 -1
  236. package/chunk-FDKIX4DC.js.map +0 -1
  237. package/chunk-GICKPMJU.js.map +0 -1
  238. package/chunk-GQA24FYG.js +0 -57
  239. package/chunk-GQA24FYG.js.map +0 -1
  240. package/chunk-H4NU7NPO.js.map +0 -1
  241. package/chunk-H63FYCMY.js +0 -11
  242. package/chunk-H63FYCMY.js.map +0 -1
  243. package/chunk-HL42K2NH.js.map +0 -1
  244. package/chunk-HNQUX43Z.js +0 -109
  245. package/chunk-HNQUX43Z.js.map +0 -1
  246. package/chunk-HRKPV66B.js +0 -32
  247. package/chunk-HRKPV66B.js.map +0 -1
  248. package/chunk-J3NSDRVH.js.map +0 -1
  249. package/chunk-JPNWHWAQ.js +0 -151
  250. package/chunk-JPNWHWAQ.js.map +0 -1
  251. package/chunk-KNUWZNFV.js.map +0 -1
  252. package/chunk-L6NCCSIP.js.map +0 -1
  253. package/chunk-LLHTVIM3.js.map +0 -1
  254. package/chunk-LW3TRU5W.js.map +0 -1
  255. package/chunk-LZMKSFCF.js.map +0 -1
  256. package/chunk-MR3JDI7E.js +0 -122
  257. package/chunk-MR3JDI7E.js.map +0 -1
  258. package/chunk-MYEZXZZC.js.map +0 -1
  259. package/chunk-NN6PKJWS.js.map +0 -1
  260. package/chunk-NSRTTYQ4.js.map +0 -1
  261. package/chunk-O7F3CIDV.js.map +0 -1
  262. package/chunk-P4O6TGDR.js.map +0 -1
  263. package/chunk-PF3YBUKT.js.map +0 -1
  264. package/chunk-PVOLDO4G.js +0 -47
  265. package/chunk-PVOLDO4G.js.map +0 -1
  266. package/chunk-QS4N4MNP.js.map +0 -1
  267. package/chunk-QUF2IPOZ.js.map +0 -1
  268. package/chunk-RTJ76X5U.js.map +0 -1
  269. package/chunk-SH6NG6VN.js.map +0 -1
  270. package/chunk-SHDFUXYV.js.map +0 -1
  271. package/chunk-TKO44NDI.js +0 -84
  272. package/chunk-TKO44NDI.js.map +0 -1
  273. package/chunk-TX3H3QMA.js.map +0 -1
  274. package/chunk-UBNHSZSE.js +0 -88
  275. package/chunk-UBNHSZSE.js.map +0 -1
  276. package/chunk-UC3ZJWOD.js +0 -73
  277. package/chunk-UC3ZJWOD.js.map +0 -1
  278. package/chunk-UGRSWP6U.js.map +0 -1
  279. package/chunk-VAGIAREV.js.map +0 -1
  280. package/chunk-WTMZT3IT.js +0 -105
  281. package/chunk-WTMZT3IT.js.map +0 -1
  282. package/chunk-WX6BP5ZP.js +0 -39
  283. package/chunk-WX6BP5ZP.js.map +0 -1
  284. package/chunk-X3PQANZO.js.map +0 -1
  285. package/chunk-XILQ7GXE.js.map +0 -1
  286. package/chunk-XL75JRUA.js.map +0 -1
  287. package/chunk-XZNHT6MO.js.map +0 -1
  288. package/chunk-Y5AYU7PK.js.map +0 -1
  289. package/chunk-YG7JOOLJ.js.map +0 -1
  290. package/chunk-YPJYW624.js +0 -195
  291. package/chunk-YPJYW624.js.map +0 -1
  292. package/chunk-YPNKBE5X.js.map +0 -1
  293. package/chunk-YX5VNRJX.js.map +0 -1
  294. package/components/accordion.js.map +0 -1
  295. package/components/agent-loading.js.map +0 -1
  296. package/components/agent-picker.js.map +0 -1
  297. package/components/agent-suggestion.js.map +0 -1
  298. package/components/announcement-bar.js.map +0 -1
  299. package/components/attachment.js.map +0 -1
  300. package/components/avatar.js.map +0 -1
  301. package/components/badge.js.map +0 -1
  302. package/components/banner-mesh.js.map +0 -1
  303. package/components/banner.js.map +0 -1
  304. package/components/bar-chart.js.map +0 -1
  305. package/components/breadcrumb.js.map +0 -1
  306. package/components/button.js.map +0 -1
  307. package/components/card.js.map +0 -1
  308. package/components/channel-chart.js.map +0 -1
  309. package/components/chart.js.map +0 -1
  310. package/components/checkbox.js.map +0 -1
  311. package/components/chip.js.map +0 -1
  312. package/components/citations.js.map +0 -1
  313. package/components/code-block.js.map +0 -1
  314. package/components/combobox.js.map +0 -1
  315. package/components/command-menu.js.map +0 -1
  316. package/components/context-menu.js.map +0 -1
  317. package/components/cookie-consent.js.map +0 -1
  318. package/components/date-picker.js.map +0 -1
  319. package/components/decision-card.js.map +0 -1
  320. package/components/dialog.js.map +0 -1
  321. package/components/donut-chart.js.map +0 -1
  322. package/components/dot.js.map +0 -1
  323. package/components/dropdown.js.map +0 -1
  324. package/components/empty-state.js.map +0 -1
  325. package/components/file-upload.js.map +0 -1
  326. package/components/floating.js.map +0 -1
  327. package/components/form-field.js.map +0 -1
  328. package/components/hover-card.js.map +0 -1
  329. package/components/input-otp.js.map +0 -1
  330. package/components/input.js.map +0 -1
  331. package/components/kbd.js.map +0 -1
  332. package/components/line-chart.js.map +0 -1
  333. package/components/message-actions.js.map +0 -1
  334. package/components/message.js.map +0 -1
  335. package/components/number-input.js.map +0 -1
  336. package/components/pagination.js.map +0 -1
  337. package/components/popover.js.map +0 -1
  338. package/components/progress.js.map +0 -1
  339. package/components/prompt-bar.js.map +0 -1
  340. package/components/radio.js.map +0 -1
  341. package/components/search-bar.js.map +0 -1
  342. package/components/segmented-control.js.map +0 -1
  343. package/components/select.js.map +0 -1
  344. package/components/sheet.js.map +0 -1
  345. package/components/sidebar.js.map +0 -1
  346. package/components/skeleton.js.map +0 -1
  347. package/components/slider.js.map +0 -1
  348. package/components/sliding-indicator.js.map +0 -1
  349. package/components/streaming-text.js.map +0 -1
  350. package/components/switch.js.map +0 -1
  351. package/components/table.js.map +0 -1
  352. package/components/tabs.js.map +0 -1
  353. package/components/textarea.js.map +0 -1
  354. package/components/thinking.js.map +0 -1
  355. package/components/toast.js.map +0 -1
  356. package/components/toggle.js.map +0 -1
  357. package/components/tooltip.js.map +0 -1
  358. package/index.js.map +0 -1
  359. package/lib/utils.js.map +0 -1
@@ -1,9 +1,10 @@
1
- import { KbdHint, KbdArrowUp, KbdArrowDown, KbdReturn } from './chunk-BKZBWPUH.js';
2
- import { Button } from './chunk-HNQUX43Z.js';
3
- import { cn } from './chunk-H63FYCMY.js';
1
+ import { KbdHint, KbdArrowUp, KbdArrowDown, KbdReturn } from './chunk-XWPH7C2W.js';
2
+ import { Button } from './chunk-6DWLTGRQ.js';
3
+ import { useSatinLabels } from './chunk-NTSU44FY.js';
4
+ import { cn } from './chunk-EHEXE2UV.js';
4
5
  import * as React from 'react';
5
6
  import { Popover, DropdownMenu } from 'radix-ui';
6
- import { Attachment, Globe, Plus, ArrowUp, Search, Check, Microphone, Xmark, Page, NavArrowDown } from 'iconoir-react';
7
+ import { Attachment, Globe, Plus, ArrowUp, Search, NavArrowDown, Check, Microphone, Xmark, Page } from 'iconoir-react';
7
8
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
8
9
 
9
10
  var defaultActions = [
@@ -11,10 +12,10 @@ var defaultActions = [
11
12
  { id: "web", label: "Web search", description: "Research and find on the internet", icon: /* @__PURE__ */ jsx(Globe, {}) }
12
13
  ];
13
14
  var menuCard = [
14
- "overflow-clip rounded-xl border border-border-subtle bg-bg-popover",
15
- "[box-shadow:0_1px_3px_0_var(--effect-shadow-sm),0_1px_2px_-1px_var(--effect-shadow-sm)]",
16
- "origin-(--radix-popper-transform-origin) data-[state=open]:animate-[satin-enter_var(--duration-base)_var(--ease-out)]",
17
- "focus-visible:outline-none"
15
+ "sa:overflow-clip sa:rounded-xl sa:border sa:border-border-subtle sa:bg-bg-popover",
16
+ "sa:[box-shadow:0_1px_3px_0_var(--effect-shadow-sm),0_1px_2px_-1px_var(--effect-shadow-sm)]",
17
+ "sa:origin-(--radix-popper-transform-origin) sa:data-[state=open]:animate-[satin-enter_var(--sa-duration-base)_var(--sa-ease-out)]",
18
+ "sa:focus-visible:outline-none"
18
19
  ];
19
20
  function PromptBar({
20
21
  shape = "pill",
@@ -36,6 +37,7 @@ function PromptBar({
36
37
  className,
37
38
  ...props
38
39
  }) {
40
+ const labels = useSatinLabels();
39
41
  const [innerValue, setInnerValue] = React.useState(defaultValue);
40
42
  const value = valueProp ?? innerValue;
41
43
  const [files, setFiles] = React.useState(attachmentsProp ?? []);
@@ -94,11 +96,11 @@ function PromptBar({
94
96
  submit();
95
97
  },
96
98
  className: cn(
97
- "flex w-full flex-col gap-2 border border-border-default bg-bg-field p-2 [box-shadow:0_1px_2px_0_var(--effect-shadow-xs)]",
98
- "transition-[border-color,border-radius] duration-(--duration-fast) ease-(--ease-out)",
99
- "has-[textarea:focus]:border-border-strong data-filled:border-border-strong",
100
- pill ? files.length > 0 || expanded ? "rounded-3xl" : "rounded-pill" : "rounded-xl",
101
- disabled && "opacity-50",
99
+ "sa:flex sa:w-full sa:flex-col sa:gap-2 sa:border sa:border-border-default sa:bg-bg-field sa:p-2 sa:[box-shadow:0_1px_2px_0_var(--effect-shadow-xs)]",
100
+ "sa:transition-[border-color,border-radius] sa:duration-(--sa-duration-fast) sa:ease-(--sa-ease-out)",
101
+ "sa:has-[textarea:focus]:border-border-strong sa:data-filled:border-border-strong",
102
+ pill ? files.length > 0 || expanded ? "sa:rounded-3xl" : "sa:rounded-pill" : "sa:rounded-xl",
103
+ disabled && "sa:opacity-50",
102
104
  className
103
105
  ),
104
106
  ...props,
@@ -117,7 +119,7 @@ function PromptBar({
117
119
  }
118
120
  }
119
121
  ),
120
- files.length > 0 && /* @__PURE__ */ jsx("ul", { "aria-label": "Attachments", className: "flex flex-wrap gap-1 pb-1", children: files.map((file, i) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(
122
+ files.length > 0 && /* @__PURE__ */ jsx("ul", { "aria-label": labels.attachments, className: "sa:flex sa:flex-wrap sa:gap-1 sa:pb-1", children: files.map((file, i) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(
121
123
  AttachmentChip,
122
124
  {
123
125
  file,
@@ -126,7 +128,7 @@ function PromptBar({
126
128
  onRemove: () => setAttachments(files.filter((_, j) => j !== i))
127
129
  }
128
130
  ) }, `${file.name}-${i}`)) }),
129
- /* @__PURE__ */ jsxs("div", { className: cn("flex flex-wrap items-end gap-x-2 gap-y-2", expanded && "items-center"), children: [
131
+ /* @__PURE__ */ jsxs("div", { className: cn("sa:flex sa:flex-wrap sa:items-end sa:gap-x-2 sa:gap-y-2", expanded && "sa:items-center"), children: [
130
132
  /* @__PURE__ */ jsx(Popover.Trigger, { asChild: true, children: /* @__PURE__ */ jsx(
131
133
  Button,
132
134
  {
@@ -135,8 +137,8 @@ function PromptBar({
135
137
  shape: btnShape,
136
138
  iconOnly: true,
137
139
  disabled,
138
- "aria-label": "Add to conversation",
139
- className: "data-[state=open]:bg-border-input",
140
+ "aria-label": labels.addToConversation,
141
+ className: "sa:data-[state=open]:bg-border-input",
140
142
  children: /* @__PURE__ */ jsx(Plus, {})
141
143
  }
142
144
  ) }),
@@ -148,7 +150,7 @@ function PromptBar({
148
150
  value,
149
151
  disabled,
150
152
  placeholder,
151
- "aria-label": "Message",
153
+ "aria-label": labels.message,
152
154
  onChange: (e) => setValue(e.target.value),
153
155
  onKeyDown: (e) => {
154
156
  if (e.key === "Enter" && !e.shiftKey && !e.nativeEvent.isComposing) {
@@ -157,13 +159,13 @@ function PromptBar({
157
159
  }
158
160
  },
159
161
  className: cn(
160
- "block h-7 min-w-0 flex-1 resize-none bg-transparent py-[3.5px] text-base leading-[21px] text-text-default",
161
- expanded && "order-first basis-full px-1",
162
- "outline-none placeholder:text-text-muted focus-visible:ring-0 disabled:cursor-not-allowed"
162
+ "sa:block sa:h-7 sa:min-w-0 sa:flex-1 sa:resize-none sa:bg-transparent sa:py-[3.5px] sa:text-base sa:leading-[21px] sa:text-text-default",
163
+ expanded && "sa:order-first sa:basis-full sa:px-1",
164
+ "sa:outline-none sa:placeholder:text-text-muted sa:focus-visible:ring-0 sa:disabled:cursor-not-allowed"
163
165
  )
164
166
  }
165
167
  ),
166
- /* @__PURE__ */ jsxs("div", { className: cn("flex shrink-0 items-center gap-1", expanded && "contents"), children: [
168
+ /* @__PURE__ */ jsxs("div", { className: cn("sa:flex sa:shrink-0 sa:items-center sa:gap-1", expanded && "sa:contents"), children: [
167
169
  /* @__PURE__ */ jsx(
168
170
  ModelSelect,
169
171
  {
@@ -179,7 +181,7 @@ function PromptBar({
179
181
  }
180
182
  }
181
183
  ),
182
- expanded && /* @__PURE__ */ jsx("span", { "aria-hidden": true, className: "flex-1" }),
184
+ expanded && /* @__PURE__ */ jsx("span", { "aria-hidden": true, className: "sa:flex-1" }),
183
185
  /* @__PURE__ */ jsx(
184
186
  DictationButton,
185
187
  {
@@ -192,7 +194,7 @@ function PromptBar({
192
194
  }
193
195
  }
194
196
  ),
195
- /* @__PURE__ */ jsx(Button, { type: "submit", variant: "primary", size: "md", shape: btnShape, iconOnly: true, "aria-label": "Send", disabled: !canSend, children: /* @__PURE__ */ jsx(ArrowUp, {}) })
197
+ /* @__PURE__ */ jsx(Button, { type: "submit", variant: "primary", size: "md", shape: btnShape, iconOnly: true, "aria-label": labels.send, disabled: !canSend, children: /* @__PURE__ */ jsx(ArrowUp, {}) })
196
198
  ] })
197
199
  ] })
198
200
  ]
@@ -205,8 +207,8 @@ function PromptBar({
205
207
  align: "start",
206
208
  sideOffset: 8,
207
209
  avoidCollisions: false,
208
- "aria-label": "Add to conversation",
209
- className: cn(menuCard, "z-50 flex w-(--radix-popper-anchor-width) flex-col"),
210
+ "aria-label": labels.addToConversation,
211
+ className: cn(menuCard, "sa:z-50 sa:flex sa:w-(--radix-popper-anchor-width) sa:flex-col"),
210
212
  children: /* @__PURE__ */ jsx(AddMenu, { actions, onAction: runAction, onAddAgent })
211
213
  }
212
214
  ) })
@@ -217,6 +219,7 @@ function AddMenu({
217
219
  onAction,
218
220
  onAddAgent
219
221
  }) {
222
+ const labels = useSatinLabels();
220
223
  const [query, setQuery] = React.useState("");
221
224
  const [active, setActive] = React.useState(0);
222
225
  const id = React.useId();
@@ -224,9 +227,9 @@ function AddMenu({
224
227
  const shown = q ? actions.filter((a) => `${a.label} ${a.description ?? ""}`.toLowerCase().includes(q)) : actions;
225
228
  const index = Math.min(active, Math.max(shown.length - 1, 0));
226
229
  return /* @__PURE__ */ jsxs(Fragment, { children: [
227
- /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1 pr-1.5", children: [
228
- /* @__PURE__ */ jsxs("label", { className: "flex flex-1 items-center gap-2 px-3 py-1.5", children: [
229
- /* @__PURE__ */ jsx(Search, { "aria-hidden": true, className: "size-icon-size shrink-0 text-text-muted [stroke-width:1.875]" }),
230
+ /* @__PURE__ */ jsxs("div", { className: "sa:flex sa:items-center sa:gap-1 sa:pr-1.5", children: [
231
+ /* @__PURE__ */ jsxs("label", { className: "sa:flex sa:flex-1 sa:items-center sa:gap-2 sa:px-3 sa:py-1.5", children: [
232
+ /* @__PURE__ */ jsx(Search, { "aria-hidden": true, className: "sa:size-icon-size sa:shrink-0 sa:text-text-muted sa:[stroke-width:1.875]" }),
230
233
  /* @__PURE__ */ jsx(
231
234
  "input",
232
235
  {
@@ -234,7 +237,7 @@ function AddMenu({
234
237
  "aria-expanded": true,
235
238
  "aria-controls": `${id}-list`,
236
239
  "aria-activedescendant": shown.length ? `${id}-${index}` : void 0,
237
- "aria-label": "Search agents and tools",
240
+ "aria-label": labels.searchAgentsAndTools,
238
241
  placeholder: "Search agents and tools",
239
242
  value: query,
240
243
  onChange: (e) => {
@@ -253,14 +256,14 @@ function AddMenu({
253
256
  onAction(shown[index]);
254
257
  }
255
258
  },
256
- className: "min-w-0 flex-1 bg-transparent text-sm text-text-default outline-none placeholder:text-text-muted focus-visible:ring-0"
259
+ className: "sa:min-w-0 sa:flex-1 sa:bg-transparent sa:text-sm sa:text-text-default sa:outline-none sa:placeholder:text-text-muted sa:focus-visible:ring-0"
257
260
  }
258
261
  )
259
262
  ] }),
260
- /* @__PURE__ */ jsx(Button, { variant: "tertiary", size: "xs", iconOnly: true, "aria-label": "Add an agent", onClick: onAddAgent, children: /* @__PURE__ */ jsx(Plus, {}) })
263
+ /* @__PURE__ */ jsx(Button, { variant: "tertiary", size: "xs", iconOnly: true, "aria-label": labels.addAgent, onClick: onAddAgent, children: /* @__PURE__ */ jsx(Plus, {}) })
261
264
  ] }),
262
- /* @__PURE__ */ jsx("div", { "aria-hidden": true, className: "h-px bg-border-subtle" }),
263
- /* @__PURE__ */ jsxs("div", { id: `${id}-list`, role: "listbox", "aria-label": "Agents and tools", className: "flex flex-col p-1", children: [
265
+ /* @__PURE__ */ jsx("div", { "aria-hidden": true, className: "sa:h-px sa:bg-border-subtle" }),
266
+ /* @__PURE__ */ jsxs("div", { id: `${id}-list`, role: "listbox", "aria-label": labels.agentsAndTools, className: "sa:flex sa:flex-col sa:p-1", children: [
264
267
  shown.map((a, i) => /* @__PURE__ */ jsxs(
265
268
  "div",
266
269
  {
@@ -271,21 +274,21 @@ function AddMenu({
271
274
  onMouseDown: (e) => e.preventDefault(),
272
275
  onClick: () => onAction(a),
273
276
  className: cn(
274
- "flex min-h-8 items-center gap-2 rounded-lg px-2 py-1.5",
275
- "[&>svg]:size-icon-size [&>svg]:shrink-0 [&>svg]:text-text-muted [&>svg]:[stroke-width:1.875]",
276
- i === index && "bg-bg-hover"
277
+ "sa:flex sa:min-h-8 sa:items-center sa:gap-2 sa:rounded-lg sa:px-2 sa:py-1.5",
278
+ "sa:[&>svg]:size-icon-size sa:[&>svg]:shrink-0 sa:[&>svg]:text-text-muted sa:[&>svg]:[stroke-width:1.875]",
279
+ i === index && "sa:bg-bg-hover"
277
280
  ),
278
281
  children: [
279
282
  a.icon,
280
- /* @__PURE__ */ jsxs("span", { className: "flex min-w-0 flex-1 items-baseline gap-3", children: [
281
- /* @__PURE__ */ jsx("span", { className: "shrink-0 text-sm leading-[13px] font-medium whitespace-nowrap text-text-default", children: a.label }),
282
- a.description && /* @__PURE__ */ jsx("span", { className: "min-w-0 flex-1 truncate text-sm text-text-muted", children: a.description })
283
+ /* @__PURE__ */ jsxs("span", { className: "sa:flex sa:min-w-0 sa:flex-1 sa:items-baseline sa:gap-3", children: [
284
+ /* @__PURE__ */ jsx("span", { className: "sa:shrink-0 sa:text-sm sa:leading-[13px] sa:font-medium sa:whitespace-nowrap sa:text-text-default", children: a.label }),
285
+ a.description && /* @__PURE__ */ jsx("span", { className: "sa:min-w-0 sa:flex-1 sa:truncate sa:text-sm sa:text-text-muted", children: a.description })
283
286
  ] })
284
287
  ]
285
288
  },
286
289
  a.id
287
290
  )),
288
- shown.length === 0 && /* @__PURE__ */ jsx("p", { className: "px-2 py-1.5 text-sm text-text-muted", children: "No matches" })
291
+ shown.length === 0 && /* @__PURE__ */ jsx("p", { className: "sa:px-2 sa:py-1.5 sa:text-sm sa:text-text-muted", children: "No matches" })
289
292
  ] }),
290
293
  /* @__PURE__ */ jsx(ShortcutHints, {})
291
294
  ] });
@@ -299,6 +302,7 @@ function ModelSelect({
299
302
  disabled,
300
303
  onChange
301
304
  }) {
305
+ const labels = useSatinLabels();
302
306
  if (!label) return null;
303
307
  const trigger = /* @__PURE__ */ jsxs(
304
308
  Button,
@@ -307,10 +311,13 @@ function ModelSelect({
307
311
  size: "md",
308
312
  shape,
309
313
  disabled,
310
- className: "data-[state=open]:bg-border-input",
314
+ className: "sa:data-[state=open]:bg-border-input",
311
315
  children: [
312
- icon && /* @__PURE__ */ jsx("span", { className: "flex size-4 shrink-0 items-center justify-center [&>*]:size-4", children: icon }),
313
- /* @__PURE__ */ jsx("span", { className: "sr-only", children: "Model: " }),
316
+ icon && /* @__PURE__ */ jsx("span", { className: "sa:flex sa:size-4 sa:shrink-0 sa:items-center sa:justify-center sa:[&>*]:size-4", children: icon }),
317
+ /* @__PURE__ */ jsxs("span", { className: "sa:sr-only", children: [
318
+ labels.model,
319
+ ": "
320
+ ] }),
314
321
  label,
315
322
  /* @__PURE__ */ jsx(NavArrowDown, { "aria-hidden": true, "data-chevron": true })
316
323
  ]
@@ -326,20 +333,20 @@ function ModelSelect({
326
333
  align: "end",
327
334
  sideOffset: 8,
328
335
  avoidCollisions: false,
329
- className: cn(menuCard, "z-50 w-[241px]"),
336
+ className: cn(menuCard, "sa:z-50 sa:w-[241px]"),
330
337
  children: [
331
- /* @__PURE__ */ jsx(DropdownMenu.RadioGroup, { value: model, onValueChange: onChange, className: "flex flex-col p-1", children: models.map((m) => /* @__PURE__ */ jsxs(
338
+ /* @__PURE__ */ jsx(DropdownMenu.RadioGroup, { value: model, onValueChange: onChange, className: "sa:flex sa:flex-col sa:p-1", children: models.map((m) => /* @__PURE__ */ jsxs(
332
339
  DropdownMenu.RadioItem,
333
340
  {
334
341
  value: m.value,
335
342
  className: cn(
336
- "flex min-h-8 cursor-pointer items-center gap-2 rounded-lg px-2 py-1.5 outline-none select-none",
337
- "data-highlighted:bg-bg-hover data-[state=checked]:bg-bg-selected"
343
+ "sa:flex sa:min-h-8 sa:cursor-pointer sa:items-center sa:gap-2 sa:rounded-lg sa:px-2 sa:py-1.5 sa:outline-none sa:select-none",
344
+ "sa:data-highlighted:bg-bg-hover sa:data-[state=checked]:bg-bg-selected"
338
345
  ),
339
346
  children: [
340
- /* @__PURE__ */ jsx("span", { className: "flex size-5 shrink-0 items-center justify-center [&>*]:size-5", children: m.icon }),
341
- /* @__PURE__ */ jsx("span", { className: "min-w-0 flex-1 truncate text-sm leading-[13px] font-medium text-text-default", children: m.label }),
342
- /* @__PURE__ */ jsx(DropdownMenu.ItemIndicator, { children: /* @__PURE__ */ jsx(Check, { "aria-hidden": true, className: "size-icon-size text-status-green-fg [stroke-width:1.875]" }) })
347
+ /* @__PURE__ */ jsx("span", { className: "sa:flex sa:size-5 sa:shrink-0 sa:items-center sa:justify-center sa:[&>*]:size-5", children: m.icon }),
348
+ /* @__PURE__ */ jsx("span", { className: "sa:min-w-0 sa:flex-1 sa:truncate sa:text-sm sa:leading-[13px] sa:font-medium sa:text-text-default", children: m.label }),
349
+ /* @__PURE__ */ jsx(DropdownMenu.ItemIndicator, { children: /* @__PURE__ */ jsx(Check, { "aria-hidden": true, className: "sa:size-icon-size sa:text-status-green-fg sa:[stroke-width:1.875]" }) })
343
350
  ]
344
351
  },
345
352
  m.value
@@ -351,7 +358,7 @@ function ModelSelect({
351
358
  ] });
352
359
  }
353
360
  function ShortcutHints() {
354
- return /* @__PURE__ */ jsxs("div", { "aria-hidden": true, className: "flex items-center gap-3 border-t border-border-default bg-bg-popover px-3 py-1.5", children: [
361
+ return /* @__PURE__ */ jsxs("div", { "aria-hidden": true, className: "sa:flex sa:items-center sa:gap-3 sa:border-t sa:border-border-default sa:bg-bg-popover sa:px-3 sa:py-1.5", children: [
355
362
  /* @__PURE__ */ jsx(KbdHint, { keys: [/* @__PURE__ */ jsx(KbdArrowUp, {}, "up"), /* @__PURE__ */ jsx(KbdArrowDown, {}, "down")], label: "Navigate" }),
356
363
  /* @__PURE__ */ jsx(KbdHint, { keys: [/* @__PURE__ */ jsx(KbdReturn, {}, "return")], label: "Select" })
357
364
  ] });
@@ -406,15 +413,15 @@ function AttachmentChip({
406
413
  {
407
414
  "data-slot": "attachment",
408
415
  className: cn(
409
- "flex h-control-height items-center gap-1.5 border border-border-default bg-bg-popover pr-0.5 pl-2",
410
- "[filter:drop-shadow(0_1px_1px_var(--effect-shadow-xs))]",
411
- "transition-[background-color,border-color] duration-(--duration-fast) ease-(--ease-out)",
412
- "hover:border-border-strong hover:bg-bg-canvas active:border-border-strong active:bg-bg-muted",
413
- rounded ? "rounded-pill" : "rounded-md"
416
+ "sa:flex sa:h-control-height sa:items-center sa:gap-1.5 sa:border sa:border-border-default sa:bg-bg-popover sa:pr-0.5 sa:pl-2",
417
+ "sa:[filter:drop-shadow(0_1px_1px_var(--effect-shadow-xs))]",
418
+ "sa:transition-[background-color,border-color] sa:duration-(--sa-duration-fast) sa:ease-(--sa-ease-out)",
419
+ "sa:hover:border-border-strong sa:hover:bg-bg-canvas sa:active:border-border-strong sa:active:bg-bg-muted",
420
+ rounded ? "sa:rounded-pill" : "sa:rounded-md"
414
421
  ),
415
422
  children: [
416
423
  /* @__PURE__ */ jsx(FileIcon, { name: file.name }),
417
- /* @__PURE__ */ jsx("span", { className: "max-w-[200px] truncate text-sm font-medium text-text-default", children: file.name }),
424
+ /* @__PURE__ */ jsx("span", { className: "sa:max-w-[200px] sa:truncate sa:text-sm sa:font-medium sa:text-text-default", children: file.name }),
418
425
  /* @__PURE__ */ jsx(
419
426
  Button,
420
427
  {
@@ -425,7 +432,7 @@ function AttachmentChip({
425
432
  disabled,
426
433
  "aria-label": `Remove ${file.name}`,
427
434
  onClick: onRemove,
428
- children: /* @__PURE__ */ jsx(Xmark, { className: "![stroke-width:1.64]" })
435
+ children: /* @__PURE__ */ jsx(Xmark, { className: "sa:![stroke-width:1.64]" })
429
436
  }
430
437
  )
431
438
  ]
@@ -453,22 +460,20 @@ var LABELS = {
453
460
  ]
454
461
  };
455
462
  var FILE_COLORS = {
456
- pdf: ["var(--color-red-500)", "var(--color-red-300)"],
457
- doc: ["var(--color-sky-600)", "var(--color-sky-300)"],
458
- xls: ["var(--color-green-700)", "var(--color-green-300)"]
463
+ pdf: ["var(--sa-color-red-500)", "var(--sa-color-red-300)"],
464
+ doc: ["var(--sa-color-sky-600)", "var(--sa-color-sky-300)"],
465
+ xls: ["var(--sa-color-green-700)", "var(--sa-color-green-300)"]
459
466
  };
460
467
  function FileIcon({ name }) {
461
468
  const ext = name.split(".").pop()?.toLowerCase() ?? "";
462
469
  const kind = ext === "pdf" ? "pdf" : ext === "doc" || ext === "docx" ? "doc" : ext === "xls" || ext === "xlsx" || ext === "csv" ? "xls" : null;
463
- if (!kind) return /* @__PURE__ */ jsx(Page, { "aria-hidden": true, className: "size-4 shrink-0 text-text-muted [stroke-width:1.875]" });
470
+ if (!kind) return /* @__PURE__ */ jsx(Page, { "aria-hidden": true, className: "sa:size-4 sa:shrink-0 sa:text-text-muted sa:[stroke-width:1.875]" });
464
471
  const [page, fold] = FILE_COLORS[kind];
465
- return /* @__PURE__ */ jsxs("svg", { "aria-hidden": true, viewBox: "0 0 16 16", fill: "none", className: "size-4 shrink-0", children: [
472
+ return /* @__PURE__ */ jsxs("svg", { "aria-hidden": true, viewBox: "0 0 16 16", fill: "none", className: "sa:size-4 sa:shrink-0", children: [
466
473
  /* @__PURE__ */ jsx("path", { d: PAGE, fill: page }),
467
474
  /* @__PURE__ */ jsx("path", { d: FOLD, fill: fold }),
468
- LABELS[kind].map((d, i) => /* @__PURE__ */ jsx("path", { d, fill: "var(--color-white)" }, i))
475
+ LABELS[kind].map((d, i) => /* @__PURE__ */ jsx("path", { d, fill: "var(--sa-color-white)" }, i))
469
476
  ] });
470
477
  }
471
478
 
472
479
  export { PromptBar, defaultActions };
473
- //# sourceMappingURL=chunk-6YXUBP27.js.map
474
- //# sourceMappingURL=chunk-6YXUBP27.js.map
@@ -0,0 +1,25 @@
1
+ import { FieldSizeContext } from './chunk-KITXKIYW.js';
2
+ import { ButtonDefaultsContext } from './chunk-6DWLTGRQ.js';
3
+ import { cn } from './chunk-EHEXE2UV.js';
4
+ import * as React from 'react';
5
+ import { jsx } from 'react/jsx-runtime';
6
+
7
+ var buttonSize = { sm: "md", md: "lg", lg: "xl" };
8
+ function InputGroup({ size = "md", className, ...props }) {
9
+ const buttons = React.useMemo(() => ({ size: buttonSize[size], variant: "secondary" }), [size]);
10
+ return /* @__PURE__ */ jsx(FieldSizeContext.Provider, { value: size, children: /* @__PURE__ */ jsx(ButtonDefaultsContext.Provider, { value: buttons, children: /* @__PURE__ */ jsx(
11
+ "div",
12
+ {
13
+ role: "group",
14
+ "data-slot": "input-group",
15
+ "data-size": size,
16
+ className: cn("sa:flex sa:w-full sa:items-stretch", className),
17
+ ...props
18
+ }
19
+ ) }) });
20
+ }
21
+ function InputGroupAddon({ className, ...props }) {
22
+ return /* @__PURE__ */ jsx("div", { "data-slot": "input-group-addon", className: cn("satin-input-addon", className), ...props });
23
+ }
24
+
25
+ export { InputGroup, InputGroupAddon };
@@ -0,0 +1,37 @@
1
+ import { cn } from './chunk-EHEXE2UV.js';
2
+ import 'react';
3
+ import { cva } from 'class-variance-authority';
4
+ import { jsxs, jsx } from 'react/jsx-runtime';
5
+
6
+ var emptyStateVariants = cva(
7
+ "sa:flex sa:w-[350px] sa:max-w-[560px] sa:min-w-[min(320px,100%)] sa:flex-col sa:items-center sa:gap-4 sa:rounded-2xl sa:px-4 sa:pt-4 sa:pb-5 sa:text-center",
8
+ {
9
+ variants: {
10
+ border: {
11
+ ghost: "",
12
+ dashed: "sa:border sa:border-dashed sa:border-border-default",
13
+ outline: "sa:border sa:border-border-default"
14
+ }
15
+ },
16
+ defaultVariants: { border: "ghost" }
17
+ }
18
+ );
19
+ function EmptyState({ className, border, title, description, icon, actions, ...props }) {
20
+ return /* @__PURE__ */ jsxs("div", { "data-slot": "empty-state", className: cn(emptyStateVariants({ border }), className), ...props, children: [
21
+ icon && /* @__PURE__ */ jsx(
22
+ "div",
23
+ {
24
+ "aria-hidden": true,
25
+ className: "sa:flex sa:shrink-0 sa:items-center sa:justify-center sa:rounded-lg sa:bg-bg-muted sa:p-2.5 sa:text-text-default sa:[&_svg]:size-4 sa:[&_svg]:[stroke-width:1.875]",
26
+ children: icon
27
+ }
28
+ ),
29
+ /* @__PURE__ */ jsxs("div", { className: "sa:flex sa:w-full sa:flex-col sa:items-center sa:gap-2", children: [
30
+ /* @__PURE__ */ jsx("p", { className: "sa:w-full sa:text-lg sa:font-medium sa:text-text-default", children: title }),
31
+ description && /* @__PURE__ */ jsx("p", { className: "sa:w-full sa:text-body-lg sa:text-text-muted", children: description })
32
+ ] }),
33
+ actions && /* @__PURE__ */ jsx("div", { className: "sa:flex sa:flex-wrap sa:items-start sa:justify-center sa:gap-2", children: actions })
34
+ ] });
35
+ }
36
+
37
+ export { EmptyState, emptyStateVariants };
@@ -0,0 +1,112 @@
1
+ import { useSlidingIndicator } from './chunk-XETMIETJ.js';
2
+ import { cn } from './chunk-EHEXE2UV.js';
3
+ import * as React from 'react';
4
+ import { ToggleGroup } from 'radix-ui';
5
+ import { cva } from 'class-variance-authority';
6
+ import { jsxs, jsx } from 'react/jsx-runtime';
7
+
8
+ var track = cva("sa:relative sa:isolate sa:inline-flex sa:items-center sa:gap-0.5 sa:bg-bg-muted sa:p-1", {
9
+ variants: {
10
+ shape: { default: "sa:rounded-lg", rounded: "sa:rounded-pill" },
11
+ border: { true: "sa:border sa:border-border-subtle", false: "" },
12
+ fullWidth: { true: "sa:flex sa:w-full", false: "" }
13
+ }
14
+ });
15
+ var segment = cva(
16
+ [
17
+ "sa:relative sa:z-10 sa:inline-flex sa:items-center sa:justify-center sa:font-medium sa:whitespace-nowrap sa:text-text-muted sa:select-none",
18
+ "sa:transition-[color,background-color,box-shadow] sa:duration-(--sa-duration-fast) sa:ease-(--sa-ease-out)",
19
+ "sa:satin-hover:text-text-default sa:data-[state=on]:text-text-default",
20
+ "sa:satin-pressed:bg-component-segmented-pressed sa:satin-pressed:text-text-default",
21
+ "sa:focus-visible:outline-none sa:satin-focus:text-text-default sa:satin-focus:[box-shadow:0_0_0_2px_var(--action-focus-ring)]",
22
+ "sa:disabled:pointer-events-none sa:disabled:text-text-subtle",
23
+ "sa:[&_svg]:pointer-events-none sa:[&_svg]:shrink-0 sa:[&_svg]:[stroke-width:1.875]"
24
+ ],
25
+ {
26
+ variants: {
27
+ size: {
28
+ xs: "sa:h-control-height-xs sa:gap-1 sa:px-2.5 sa:text-sm sa:[&_svg]:size-icon-size-sm",
29
+ md: "sa:h-control-height sa:gap-1.5 sa:px-3 sa:text-sm sa:[&_svg]:size-icon-size",
30
+ lg: "sa:h-control-height-lg sa:gap-1.5 sa:px-4 sa:text-base sa:[&_svg]:size-icon-size"
31
+ },
32
+ shape: { default: "sa:rounded-sm", rounded: "sa:rounded-pill" },
33
+ fullWidth: { true: "sa:flex-1", false: "" }
34
+ }
35
+ }
36
+ );
37
+ function SegmentedControl({
38
+ items,
39
+ value: valueProp,
40
+ defaultValue,
41
+ onValueChange,
42
+ size = "md",
43
+ shape = "default",
44
+ border = false,
45
+ fullWidth = false,
46
+ className,
47
+ ref,
48
+ ...props
49
+ }) {
50
+ const [inner, setInner] = React.useState(defaultValue ?? items[0]?.value ?? "");
51
+ const value = valueProp ?? inner;
52
+ const trackRef = React.useRef(null);
53
+ const setTrack = React.useCallback(
54
+ (node) => {
55
+ trackRef.current = node;
56
+ if (typeof ref === "function") ref(node);
57
+ else if (ref) ref.current = node;
58
+ },
59
+ [ref]
60
+ );
61
+ const pill = useSlidingIndicator(trackRef, '[data-state="on"]', `${value}|${size}|${fullWidth}|${items.length}`);
62
+ return /* @__PURE__ */ jsxs(
63
+ ToggleGroup.Root,
64
+ {
65
+ ...props,
66
+ ref: setTrack,
67
+ type: "single",
68
+ value,
69
+ onValueChange: (next) => {
70
+ if (!next) return;
71
+ setInner(next);
72
+ onValueChange?.(next);
73
+ },
74
+ "data-slot": "segmented-control",
75
+ className: cn(track({ shape, border, fullWidth }), className),
76
+ children: [
77
+ /* @__PURE__ */ jsx(
78
+ "span",
79
+ {
80
+ ref: pill.ref,
81
+ "aria-hidden": true,
82
+ className: cn(
83
+ "sa:pointer-events-none sa:absolute sa:top-1 sa:bottom-1 sa:left-0 sa:z-0 sa:bg-component-segmented-selected sa:opacity-0 sa:[box-shadow:0_1px_3px_0_var(--effect-shadow-sm),0_1px_2px_-1px_var(--effect-shadow-sm)]",
84
+ shape === "sa:rounded" ? "sa:rounded-pill" : "sa:rounded-sm"
85
+ )
86
+ }
87
+ ),
88
+ items.map((item) => /* @__PURE__ */ jsxs(
89
+ ToggleGroup.Item,
90
+ {
91
+ value: item.value,
92
+ disabled: item.disabled,
93
+ className: cn(
94
+ segment({ size, shape, fullWidth }),
95
+ // Unselected focus: bg/muted under the ring. Selected focus keeps the pill's fill.
96
+ "sa:data-[state=off]:satin-focus:bg-bg-muted",
97
+ // Before the pill is measured (server render), the selected segment paints its own fill.
98
+ !pill.ready && "sa:data-[state=on]:bg-component-segmented-selected sa:data-[state=on]:[box-shadow:0_1px_3px_0_var(--effect-shadow-sm),0_1px_2px_-1px_var(--effect-shadow-sm)]"
99
+ ),
100
+ children: [
101
+ item.icon,
102
+ item.label
103
+ ]
104
+ },
105
+ item.value
106
+ ))
107
+ ]
108
+ }
109
+ );
110
+ }
111
+
112
+ export { SegmentedControl };
@@ -1,5 +1,5 @@
1
- import { Kbd } from './chunk-BKZBWPUH.js';
2
- import { cn } from './chunk-H63FYCMY.js';
1
+ import { Kbd } from './chunk-XWPH7C2W.js';
2
+ import { cn } from './chunk-EHEXE2UV.js';
3
3
  import * as React from 'react';
4
4
  import { Search } from 'iconoir-react';
5
5
  import { jsxs, jsx } from 'react/jsx-runtime';
@@ -24,14 +24,14 @@ var SearchBar = React.forwardRef(function SearchBar2({ shortcut = true, hotkey =
24
24
  {
25
25
  "data-slot": "search-bar",
26
26
  className: cn(
27
- "flex h-control-height-lg w-full cursor-text items-center gap-2 rounded-lg border border-border-default bg-bg-card px-2",
28
- "[box-shadow:0_1px_1px_0_var(--effect-shadow-xs)] transition-[border-color,box-shadow] duration-(--duration-fast) ease-(--ease-out)",
29
- "hover:border-border-strong",
30
- "has-[input:focus-visible]:border-border-focus has-[input:focus-visible]:[box-shadow:0_0_0_2px_var(--action-focus-ring)]",
27
+ "sa:flex sa:h-control-height-lg sa:w-full sa:cursor-text sa:items-center sa:gap-2 sa:rounded-lg sa:border sa:border-border-default sa:bg-bg-card sa:px-2",
28
+ "sa:[box-shadow:0_1px_1px_0_var(--effect-shadow-xs)] sa:transition-[border-color,box-shadow] sa:duration-(--sa-duration-fast) sa:ease-(--sa-ease-out)",
29
+ "sa:hover:border-border-strong",
30
+ "sa:has-[input:focus-visible]:border-border-focus sa:has-[input:focus-visible]:[box-shadow:0_0_0_2px_var(--action-focus-ring)]",
31
31
  wrapperClassName
32
32
  ),
33
33
  children: [
34
- /* @__PURE__ */ jsx(Search, { "aria-hidden": true, className: "size-4 shrink-0 text-text-muted [stroke-width:1.875]" }),
34
+ /* @__PURE__ */ jsx(Search, { "aria-hidden": true, className: "sa:size-4 sa:shrink-0 sa:text-text-muted sa:[stroke-width:1.875]" }),
35
35
  /* @__PURE__ */ jsx(
36
36
  "input",
37
37
  {
@@ -48,14 +48,14 @@ var SearchBar = React.forwardRef(function SearchBar2({ shortcut = true, hotkey =
48
48
  onKeyDown?.(e);
49
49
  },
50
50
  className: cn(
51
- "min-w-0 flex-1 bg-transparent text-sm text-text-default outline-none placeholder:text-text-muted focus-visible:ring-0",
52
- "[&::-webkit-search-cancel-button]:appearance-none",
51
+ "sa:min-w-0 sa:flex-1 sa:bg-transparent sa:text-sm sa:text-text-default sa:outline-none sa:placeholder:text-text-muted sa:focus-visible:ring-0",
52
+ "sa:[&::-webkit-search-cancel-button]:appearance-none",
53
53
  className
54
54
  ),
55
55
  ...props
56
56
  }
57
57
  ),
58
- shortcut && /* @__PURE__ */ jsxs("span", { "aria-hidden": true, className: "flex shrink-0 items-center gap-0.5", children: [
58
+ shortcut && /* @__PURE__ */ jsxs("span", { "aria-hidden": true, className: "sa:flex sa:shrink-0 sa:items-center sa:gap-0.5", children: [
59
59
  /* @__PURE__ */ jsx(Kbd, { children: "\u2318" }),
60
60
  /* @__PURE__ */ jsx(Kbd, { children: "K" })
61
61
  ] })
@@ -65,5 +65,3 @@ var SearchBar = React.forwardRef(function SearchBar2({ shortcut = true, hotkey =
65
65
  });
66
66
 
67
67
  export { SearchBar };
68
- //# sourceMappingURL=chunk-UGRSWP6U.js.map
69
- //# sourceMappingURL=chunk-UGRSWP6U.js.map
@@ -1,5 +1,5 @@
1
- import { KbdGroup } from './chunk-BKZBWPUH.js';
2
- import { cn } from './chunk-H63FYCMY.js';
1
+ import { KbdGroup } from './chunk-XWPH7C2W.js';
2
+ import { cn } from './chunk-EHEXE2UV.js';
3
3
  import * as React from 'react';
4
4
  import { Tooltip as Tooltip$1 } from 'radix-ui';
5
5
  import { jsxs, jsx } from 'react/jsx-runtime';
@@ -14,15 +14,15 @@ function TooltipBubble({
14
14
  return /* @__PURE__ */ jsxs(
15
15
  "div",
16
16
  {
17
+ ...props,
17
18
  "data-slot": "tooltip",
18
19
  className: cn(
19
- "flex items-center gap-2 bg-text-default py-1 pl-2.5 text-sm leading-(--text-sm--line-height) font-medium whitespace-nowrap text-bg-canvas",
20
- "[box-shadow:0_8px_12px_0_var(--effect-shadow-md),0_1px_1.5px_0_var(--effect-shadow-ambient),inset_0_1px_0_0_var(--effect-highlight-top)]",
21
- shape === "rounded" ? "rounded-pill" : "rounded-lg",
22
- shortcut ? "pr-1.5" : "pr-2.5",
20
+ "sa:flex sa:items-center sa:gap-2 sa:bg-text-default sa:py-1 sa:pl-2.5 sa:text-sm sa:leading-(--sa-text-sm--line-height) sa:font-medium sa:whitespace-nowrap sa:text-bg-canvas",
21
+ "sa:[box-shadow:0_8px_12px_0_var(--effect-shadow-md),0_1px_1.5px_0_var(--effect-shadow-ambient),inset_0_1px_0_0_var(--effect-highlight-top)]",
22
+ shape === "sa:rounded" ? "sa:rounded-pill" : "sa:rounded-lg",
23
+ shortcut ? "sa:pr-1.5" : "sa:pr-2.5",
23
24
  className
24
25
  ),
25
- ...props,
26
26
  children: [
27
27
  /* @__PURE__ */ jsx("span", { children: label }),
28
28
  shortcut && /* @__PURE__ */ jsx(KbdGroup, { keys: shortcut, tone: "inverse" })
@@ -42,7 +42,8 @@ function Tooltip({
42
42
  defaultOpen = false,
43
43
  onOpenChange,
44
44
  container,
45
- className
45
+ className,
46
+ ...props
46
47
  }) {
47
48
  const [inner, setInner] = React.useState(defaultOpen);
48
49
  const open = openProp ?? inner;
@@ -66,17 +67,15 @@ function Tooltip({
66
67
  sideOffset: 8,
67
68
  collisionPadding: 8,
68
69
  className: cn(
69
- "z-50 transition-[opacity,translate] duration-(--duration-fast) ease-(--ease-out)",
70
- "starting:opacity-0",
71
- "data-[side=top]:starting:translate-y-1 data-[side=bottom]:starting:-translate-y-1",
72
- "data-[side=left]:starting:translate-x-1 data-[side=right]:starting:-translate-x-1"
70
+ "sa:z-50 sa:transition-[opacity,translate] sa:duration-(--sa-duration-fast) sa:ease-(--sa-ease-out)",
71
+ "sa:starting:opacity-0",
72
+ "sa:data-[side=top]:starting:translate-y-1 sa:data-[side=bottom]:starting:-translate-y-1",
73
+ "sa:data-[side=left]:starting:translate-x-1 sa:data-[side=right]:starting:-translate-x-1"
73
74
  ),
74
- children: /* @__PURE__ */ jsx(TooltipBubble, { label, shortcut, shape, className })
75
+ children: /* @__PURE__ */ jsx(TooltipBubble, { ...props, label, shortcut, shape, className })
75
76
  }
76
77
  ) })
77
78
  ] }) });
78
79
  }
79
80
 
80
81
  export { Tooltip, TooltipBubble };
81
- //# sourceMappingURL=chunk-B6V4VSGH.js.map
82
- //# sourceMappingURL=chunk-B6V4VSGH.js.map