@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,7 +1,8 @@
1
- import { Progress } from './chunk-7TXHCRAG.js';
2
- import { FileIcon, Attachment } from './chunk-H4NU7NPO.js';
3
- import { Button } from './chunk-HNQUX43Z.js';
4
- import { cn } from './chunk-H63FYCMY.js';
1
+ import { FileIcon, Attachment } from './chunk-R3DTMBDT.js';
2
+ import { Button } from './chunk-6DWLTGRQ.js';
3
+ import { Progress } from './chunk-LKSFTNPF.js';
4
+ import { useSatinLabels } from './chunk-NTSU44FY.js';
5
+ import { cn } from './chunk-EHEXE2UV.js';
5
6
  import * as React from 'react';
6
7
  import { Page, WarningCircle, Xmark } from 'iconoir-react';
7
8
  import { jsx, jsxs } from 'react/jsx-runtime';
@@ -30,7 +31,7 @@ function fileIconFor(name) {
30
31
  const e = ext(name);
31
32
  if (e === "pdf") return /* @__PURE__ */ jsx(FileIcon, { type: "pdf" });
32
33
  if (["xls", "xlsx", "csv", "numbers"].includes(e)) return /* @__PURE__ */ jsx(FileIcon, { type: "xlsx" });
33
- return /* @__PURE__ */ jsx(Page, { "aria-hidden": true, className: "size-icon-size text-text-muted [stroke-width:1.875]" });
34
+ return /* @__PURE__ */ jsx(Page, { "aria-hidden": true, className: "sa:size-icon-size sa:text-text-muted sa:[stroke-width:1.875]" });
34
35
  }
35
36
  function FileUpload({
36
37
  files = [],
@@ -51,6 +52,7 @@ function FileUpload({
51
52
  className,
52
53
  ...props
53
54
  }) {
55
+ const labels = useSatinLabels();
54
56
  const inputRef = React.useRef(null);
55
57
  const descriptionId = React.useId();
56
58
  const [dragging, setDragging] = React.useState(false);
@@ -71,7 +73,7 @@ function FileUpload({
71
73
  };
72
74
  const rows = files.filter((f) => f.status !== "done");
73
75
  const done = files.filter((f) => f.status === "done");
74
- return /* @__PURE__ */ jsxs("div", { "data-slot": "file-upload", className: cn("flex w-full flex-col gap-2", className), ...props, children: [
76
+ return /* @__PURE__ */ jsxs("div", { "data-slot": "file-upload", className: cn("sa:flex sa:w-full sa:flex-col sa:gap-2", className), ...props, children: [
75
77
  /* @__PURE__ */ jsxs(
76
78
  "div",
77
79
  {
@@ -101,16 +103,16 @@ function FileUpload({
101
103
  take(e.dataTransfer.files);
102
104
  },
103
105
  className: cn(
104
- "flex flex-col items-center gap-4 rounded-2xl border border-dashed border-border-default px-6 py-8 text-center",
105
- "transition-[background-color,border-color] duration-(--duration-fast) ease-(--ease-out)",
106
- "data-[dragging]:border-status-brand-border data-[dragging]:bg-bg-hover",
107
- "data-[disabled]:opacity-50"
106
+ "sa:flex sa:flex-col sa:items-center sa:gap-4 sa:rounded-2xl sa:border sa:border-dashed sa:border-border-default sa:px-6 sa:py-8 sa:text-center",
107
+ "sa:transition-[background-color,border-color] sa:duration-(--sa-duration-fast) sa:ease-(--sa-ease-out)",
108
+ "sa:data-[dragging]:border-status-brand-border sa:data-[dragging]:bg-bg-hover",
109
+ "sa:data-[disabled]:opacity-50"
108
110
  ),
109
111
  children: [
110
112
  /* @__PURE__ */ jsx(UploadMark, { over }),
111
- /* @__PURE__ */ jsxs("div", { className: "flex w-full flex-col items-center gap-1", children: [
112
- /* @__PURE__ */ jsx("p", { className: "text-base font-medium text-text-default", children: over ? dropTitle : title }),
113
- description && /* @__PURE__ */ jsx("p", { id: descriptionId, className: "text-sm text-text-muted", children: description })
113
+ /* @__PURE__ */ jsxs("div", { className: "sa:flex sa:w-full sa:flex-col sa:items-center sa:gap-1", children: [
114
+ /* @__PURE__ */ jsx("p", { className: "sa:text-base sa:font-medium sa:text-text-default", children: over ? dropTitle : title }),
115
+ description && /* @__PURE__ */ jsx("p", { id: descriptionId, className: "sa:text-sm sa:text-text-muted", children: description })
114
116
  ] }),
115
117
  /* @__PURE__ */ jsx(
116
118
  Button,
@@ -141,8 +143,8 @@ function FileUpload({
141
143
  ]
142
144
  }
143
145
  ),
144
- rows.length > 0 && /* @__PURE__ */ jsx("ul", { className: "flex flex-col gap-2", "aria-label": "Files", children: rows.map((f) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(FileUploadItem, { file: f, onCancel, onRemove }) }, f.id)) }),
145
- done.length > 0 && /* @__PURE__ */ jsx("ul", { className: "flex flex-col gap-2", "aria-label": "Attached files", children: done.map((f) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(
146
+ rows.length > 0 && /* @__PURE__ */ jsx("ul", { className: "sa:flex sa:flex-col sa:gap-2", "aria-label": labels.files, children: rows.map((f) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(FileUploadItem, { file: f, onCancel, onRemove }) }, f.id)) }),
147
+ done.length > 0 && /* @__PURE__ */ jsx("ul", { className: "sa:flex sa:flex-col sa:gap-2", "aria-label": labels.attachedFiles, children: done.map((f) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(
146
148
  Attachment,
147
149
  {
148
150
  name: f.name,
@@ -150,7 +152,7 @@ function FileUpload({
150
152
  icon: f.icon ?? fileIconFor(f.name),
151
153
  onRemove: onRemove ? () => onRemove(f) : void 0,
152
154
  onOpen: onOpen ? () => onOpen(f) : void 0,
153
- className: "flex w-full [&_[data-attachment-main]]:flex-1 [&_[data-attachment-name]]:max-w-none"
155
+ className: "sa:flex sa:w-full sa:[&_[data-attachment-main]]:flex-1 sa:[&_[data-attachment-name]]:max-w-none"
154
156
  }
155
157
  ) }, f.id)) })
156
158
  ] });
@@ -168,11 +170,11 @@ function FileUploadItem({
168
170
  "data-slot": "file-upload-item",
169
171
  "data-status": "error",
170
172
  role: "alert",
171
- className: cn("flex items-center gap-2 rounded-xl border border-status-red-border bg-status-red-bg py-2 pr-2 pl-3 text-sm", className),
173
+ className: cn("sa:flex sa:items-center sa:gap-2 sa:rounded-xl sa:border sa:border-status-red-border sa:bg-status-red-bg sa:py-2 sa:pr-2 sa:pl-3 sa:text-sm", className),
172
174
  children: [
173
- /* @__PURE__ */ jsx(WarningCircle, { "aria-hidden": true, className: "size-icon-size shrink-0 text-status-red-fg [stroke-width:1.875]" }),
174
- /* @__PURE__ */ jsx("span", { className: "min-w-0 flex-1 truncate font-medium text-text-default", children: file.name }),
175
- /* @__PURE__ */ jsx("span", { className: "shrink-0 text-status-red-fg", children: file.error ?? "Upload failed" }),
175
+ /* @__PURE__ */ jsx(WarningCircle, { "aria-hidden": true, className: "sa:size-icon-size sa:shrink-0 sa:text-status-red-fg sa:[stroke-width:1.875]" }),
176
+ /* @__PURE__ */ jsx("span", { className: "sa:min-w-0 sa:flex-1 sa:truncate sa:font-medium sa:text-text-default", children: file.name }),
177
+ /* @__PURE__ */ jsx("span", { className: "sa:shrink-0 sa:text-status-red-fg", children: file.error ?? "Upload failed" }),
176
178
  onRemove && /* @__PURE__ */ jsx(Button, { variant: "tertiary", size: "xs", shape: "rounded", iconOnly: true, "aria-label": `Remove ${file.name}`, onClick: () => onRemove(file), children: /* @__PURE__ */ jsx(Xmark, { "aria-hidden": true }) })
177
179
  ]
178
180
  }
@@ -186,13 +188,13 @@ function FileUploadItem({
186
188
  {
187
189
  "data-slot": "file-upload-item",
188
190
  "data-status": "uploading",
189
- className: cn("flex items-center gap-2 rounded-xl border border-border-default bg-bg-card p-2 text-sm", className),
191
+ className: cn("sa:flex sa:items-center sa:gap-2 sa:rounded-xl sa:border sa:border-border-default sa:bg-bg-card sa:p-2 sa:text-sm", className),
190
192
  children: [
191
- /* @__PURE__ */ jsx("span", { className: "flex size-9 shrink-0 items-center justify-center rounded-lg bg-bg-muted [&_svg]:size-icon-size", children: file.icon ?? fileIconFor(file.name) }),
192
- /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 flex-1 flex-col gap-1.5", children: [
193
- /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
194
- /* @__PURE__ */ jsx("span", { className: "min-w-0 flex-1 truncate font-medium text-text-default", children: file.name }),
195
- /* @__PURE__ */ jsx("span", { className: "shrink-0 text-text-muted tabular-nums", children: meta })
193
+ /* @__PURE__ */ jsx("span", { className: "sa:flex sa:size-9 sa:shrink-0 sa:items-center sa:justify-center sa:rounded-lg sa:bg-bg-muted sa:[&_svg]:size-icon-size", children: file.icon ?? fileIconFor(file.name) }),
194
+ /* @__PURE__ */ jsxs("div", { className: "sa:flex sa:min-w-0 sa:flex-1 sa:flex-col sa:gap-1.5", children: [
195
+ /* @__PURE__ */ jsxs("div", { className: "sa:flex sa:items-center sa:gap-2", children: [
196
+ /* @__PURE__ */ jsx("span", { className: "sa:min-w-0 sa:flex-1 sa:truncate sa:font-medium sa:text-text-default", children: file.name }),
197
+ /* @__PURE__ */ jsx("span", { className: "sa:shrink-0 sa:text-text-muted sa:tabular-nums", children: meta })
196
198
  ] }),
197
199
  /* @__PURE__ */ jsx(Progress, { value: known ? p : void 0, showValue: false, "aria-label": `Uploading ${file.name}` })
198
200
  ] }),
@@ -207,10 +209,10 @@ function UploadMark({ over }) {
207
209
  {
208
210
  "aria-hidden": true,
209
211
  className: cn(
210
- "flex size-10 shrink-0 items-center justify-center rounded-xl transition-[background-color] duration-(--duration-fast) ease-(--ease-out)",
211
- over ? "bg-bg-card" : "bg-bg-muted"
212
+ "sa:flex sa:size-10 sa:shrink-0 sa:items-center sa:justify-center sa:rounded-xl sa:transition-[background-color] sa:duration-(--sa-duration-fast) sa:ease-(--sa-ease-out)",
213
+ over ? "sa:bg-bg-card" : "sa:bg-bg-muted"
212
214
  ),
213
- children: /* @__PURE__ */ jsxs("svg", { width: "20", height: "20", viewBox: "0 0 20 20", fill: "none", className: "text-text-subtle", children: [
215
+ children: /* @__PURE__ */ jsxs("svg", { width: "20", height: "20", viewBox: "0 0 20 20", fill: "none", className: "sa:text-text-subtle", children: [
214
216
  /* @__PURE__ */ jsx(
215
217
  "path",
216
218
  {
@@ -235,5 +237,3 @@ function UploadMark({ over }) {
235
237
  }
236
238
 
237
239
  export { FileUpload, FileUploadItem, fileIconFor, formatBytes };
238
- //# sourceMappingURL=chunk-GICKPMJU.js.map
239
- //# sourceMappingURL=chunk-GICKPMJU.js.map
@@ -1,5 +1,6 @@
1
- import { Button } from './chunk-HNQUX43Z.js';
2
- import { cn } from './chunk-H63FYCMY.js';
1
+ import { Button } from './chunk-6DWLTGRQ.js';
2
+ import { useSatinLabels } from './chunk-NTSU44FY.js';
3
+ import { cn } from './chunk-EHEXE2UV.js';
3
4
  import * as React from 'react';
4
5
  import { Toast as Toast$1 } from 'radix-ui';
5
6
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
@@ -47,12 +48,12 @@ var toast = Object.assign((title, options) => show(title, options), {
47
48
  }
48
49
  });
49
50
  var tile = {
50
- neutral: "bg-status-neutral-bg text-text-default",
51
- info: "bg-status-sky-bg text-status-sky-fg",
52
- success: "bg-status-green-bg text-status-green-fg",
53
- warning: "bg-status-amber-bg text-status-amber-fg",
51
+ neutral: "sa:bg-status-neutral-bg sa:text-text-default",
52
+ info: "sa:bg-status-sky-bg sa:text-status-sky-fg",
53
+ success: "sa:bg-status-green-bg sa:text-status-green-fg",
54
+ warning: "sa:bg-status-amber-bg sa:text-status-amber-fg",
54
55
  // Figma draws the error glyph in action/destructive (#DC2626), not status-red-fg.
55
- error: "bg-status-red-bg text-action-destructive-bg"
56
+ error: "sa:bg-status-red-bg sa:text-action-destructive-bg"
56
57
  };
57
58
  function IntentIcon({ intent }) {
58
59
  if (intent === "neutral") {
@@ -73,10 +74,10 @@ function IntentIcon({ intent }) {
73
74
  ] }) }) });
74
75
  }
75
76
  var card = (intent) => cn(
76
- "relative flex w-full items-center gap-2.5 overflow-clip pr-2 pl-2.5",
77
- intent === "neutral" ? "py-2.5" : "pt-2.5 pb-3",
78
- "rounded-xl border border-border-default bg-bg-popover",
79
- "[box-shadow:0_4px_6px_-4px_var(--effect-shadow-sm),0_10px_15px_-3px_var(--effect-shadow-sm)]"
77
+ "sa:relative sa:flex sa:w-full sa:items-center sa:gap-2.5 sa:overflow-clip sa:pr-2 sa:pl-2.5",
78
+ intent === "neutral" ? "sa:py-2.5" : "sa:pt-2.5 sa:pb-3",
79
+ "sa:rounded-xl sa:border sa:border-border-default sa:bg-bg-popover",
80
+ "sa:[box-shadow:0_4px_6px_-4px_var(--effect-shadow-sm),0_10px_15px_-3px_var(--effect-shadow-sm)]"
80
81
  );
81
82
  function ToastContent({
82
83
  title,
@@ -87,13 +88,14 @@ function ToastContent({
87
88
  icon,
88
89
  onAction
89
90
  }) {
91
+ const labels = useSatinLabels();
90
92
  return /* @__PURE__ */ jsxs(Fragment, { children: [
91
- icon && /* @__PURE__ */ jsx("div", { className: cn("grid size-9 shrink-0 place-items-center rounded-md", tile[intent]), children: /* @__PURE__ */ jsx(IntentIcon, { intent }) }),
92
- /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 flex-1 flex-col text-sm", children: [
93
- /* @__PURE__ */ jsx(Toast$1.Title, { className: "leading-5 font-medium text-text-default", children: title }),
94
- description ? /* @__PURE__ */ jsx(Toast$1.Description, { className: "leading-4 text-text-muted", children: description }) : null
93
+ icon && /* @__PURE__ */ jsx("div", { className: cn("sa:grid sa:size-9 sa:shrink-0 sa:place-items-center sa:rounded-md", tile[intent]), children: /* @__PURE__ */ jsx(IntentIcon, { intent }) }),
94
+ /* @__PURE__ */ jsxs("div", { className: "sa:flex sa:min-w-0 sa:flex-1 sa:flex-col sa:text-sm", children: [
95
+ /* @__PURE__ */ jsx(Toast$1.Title, { className: "sa:leading-5 sa:font-medium sa:text-text-default", children: title }),
96
+ description ? /* @__PURE__ */ jsx(Toast$1.Description, { className: "sa:leading-4 sa:text-text-muted", children: description }) : null
95
97
  ] }),
96
- (action || closeButton) && /* @__PURE__ */ jsxs("div", { className: "flex shrink-0 items-center gap-1", children: [
98
+ (action || closeButton) && /* @__PURE__ */ jsxs("div", { className: "sa:flex sa:shrink-0 sa:items-center sa:gap-1", children: [
97
99
  action && /* @__PURE__ */ jsx(Toast$1.Action, { asChild: true, altText: action.label, children: /* @__PURE__ */ jsx(
98
100
  Button,
99
101
  {
@@ -105,7 +107,7 @@ function ToastContent({
105
107
  children: action.label
106
108
  }
107
109
  ) }),
108
- closeButton && /* @__PURE__ */ jsx(Toast$1.Close, { asChild: true, children: /* @__PURE__ */ jsx(Button, { variant: "tertiary", size: "xs", iconOnly: true, "aria-label": "Close", className: "rounded-md text-text-muted", children: /* @__PURE__ */ jsx("svg", { width: "14", height: "14", viewBox: "0 0 14 14", fill: "none", "aria-hidden": true, children: /* @__PURE__ */ jsx(
110
+ closeButton && /* @__PURE__ */ jsx(Toast$1.Close, { asChild: true, children: /* @__PURE__ */ jsx(Button, { variant: "tertiary", size: "xs", iconOnly: true, "aria-label": labels.close, className: "sa:rounded-md sa:text-text-muted", children: /* @__PURE__ */ jsx("svg", { width: "14", height: "14", viewBox: "0 0 14 14", fill: "none", "aria-hidden": true, children: /* @__PURE__ */ jsx(
109
111
  "path",
110
112
  {
111
113
  d: "M3.94232 10.0582L7.00053 7M7.00053 7L10.0587 3.94179M7.00053 7L3.94232 3.94179M7.00053 7L10.0587 10.0582",
@@ -138,10 +140,10 @@ function Toast({
138
140
  duration,
139
141
  type: radixType(intent),
140
142
  className: cn(
141
- "pointer-events-auto",
143
+ "sa:pointer-events-auto",
142
144
  card(intent),
143
- "focus-visible:[box-shadow:0_0_0_2px_var(--action-focus-ring)] focus-visible:outline-none",
144
- "data-[state=open]:animate-[satin-enter_var(--duration-base)_var(--ease-out)]",
145
+ "sa:focus-visible:[box-shadow:0_0_0_2px_var(--action-focus-ring)] sa:focus-visible:outline-none",
146
+ "sa:data-[state=open]:animate-[satin-enter_var(--sa-duration-base)_var(--sa-ease-out)]",
145
147
  className
146
148
  ),
147
149
  ...props,
@@ -154,7 +156,7 @@ var SCALE_STEP = 0.05;
154
156
  var GAP = 8;
155
157
  var FALLBACK_HEIGHT = 58;
156
158
  var OFFSCREEN = "150%";
157
- var ease = "var(--ease-out)";
159
+ var ease = "var(--sa-ease-out)";
158
160
  var cardMotion = `transform ${MOTION_MS}ms ${ease}, height 150ms ${ease}`;
159
161
  var contentMotion = `opacity 250ms ${ease}`;
160
162
  function StackedToast({ record, index, y, scale, height, beyond, contentVisible, onMeasure, onForget }) {
@@ -196,10 +198,10 @@ function StackedToast({ record, index, y, scale, height, beyond, contentVisible,
196
198
  duration: duration ?? 5e3,
197
199
  type: radixType(intent),
198
200
  className: cn(
199
- "absolute inset-x-0 bottom-0 origin-bottom outline-none",
200
- "focus-visible:[&>div]:[box-shadow:0_0_0_2px_var(--action-focus-ring)]",
201
- "data-[swipe=move]:translate-x-(--radix-toast-swipe-move-x) data-[swipe=cancel]:translate-x-0 data-[swipe=end]:translate-x-(--radix-toast-swipe-end-x)",
202
- "data-[swipe=cancel]:transition-[translate] data-[swipe=cancel]:duration-(--duration-base) data-[swipe=cancel]:ease-(--ease-out)"
201
+ "sa:absolute sa:inset-x-0 sa:bottom-0 sa:origin-bottom sa:outline-none",
202
+ "sa:focus-visible:[&>div]:[box-shadow:0_0_0_2px_var(--action-focus-ring)]",
203
+ "sa:data-[swipe=move]:translate-x-(--radix-toast-swipe-move-x) sa:data-[swipe=cancel]:translate-x-0 sa:data-[swipe=end]:translate-x-(--radix-toast-swipe-end-x)",
204
+ "sa:data-[swipe=cancel]:transition-[translate] sa:data-[swipe=cancel]:duration-(--sa-duration-base) sa:data-[swipe=cancel]:ease-(--sa-ease-out)"
203
205
  ),
204
206
  style: {
205
207
  transform: `translate3d(0, ${y}px, 0) scale(${scale})`,
@@ -212,7 +214,7 @@ function StackedToast({ record, index, y, scale, height, beyond, contentVisible,
212
214
  "div",
213
215
  {
214
216
  ref: cardRef,
215
- className: cn("pointer-events-auto", card(intent), "items-start"),
217
+ className: cn("sa:pointer-events-auto", card(intent), "sa:items-start"),
216
218
  style: {
217
219
  transform: inPlace ? "translate3d(0, 0, 0)" : `translate3d(0, ${OFFSCREEN}, 0)`,
218
220
  height,
@@ -223,7 +225,7 @@ function StackedToast({ record, index, y, scale, height, beyond, contentVisible,
223
225
  "div",
224
226
  {
225
227
  ref: measured,
226
- className: "flex w-full min-w-0 items-center gap-2.5",
228
+ className: "sa:flex sa:w-full sa:min-w-0 sa:items-center sa:gap-2.5",
227
229
  style: { opacity: contentVisible ? 1 : 0, transition: contentMotion },
228
230
  "aria-hidden": !contentVisible || void 0,
229
231
  inert: !contentVisible || void 0,
@@ -324,9 +326,9 @@ function Toaster({ className, limit = 3, children }) {
324
326
  Toast$1.Viewport,
325
327
  {
326
328
  ref: viewportRef,
327
- style: { height, transition: `height ${MOTION_MS}ms var(--ease-out)` },
329
+ style: { height, transition: `height ${MOTION_MS}ms var(--sa-ease-out)` },
328
330
  className: cn(
329
- "fixed right-4 bottom-4 z-[100] m-0 w-[397px] max-w-[calc(100%-32px)] list-none p-0 outline-none",
331
+ "sa:fixed sa:right-4 sa:bottom-4 sa:z-[100] sa:m-0 sa:w-[397px] sa:max-w-[calc(100%-32px)] sa:list-none sa:p-0 sa:outline-none",
330
332
  className
331
333
  )
332
334
  }
@@ -335,5 +337,3 @@ function Toaster({ className, limit = 3, children }) {
335
337
  }
336
338
 
337
339
  export { Toast, Toaster, toast };
338
- //# sourceMappingURL=chunk-2HKBZFIK.js.map
339
- //# sourceMappingURL=chunk-2HKBZFIK.js.map
@@ -20,5 +20,3 @@ var bannerMesh = {
20
20
  };
21
21
 
22
22
  export { bannerMesh };
23
- //# sourceMappingURL=chunk-YX5VNRJX.js.map
24
- //# sourceMappingURL=chunk-YX5VNRJX.js.map
@@ -40,5 +40,3 @@ function Floating({ anchor, side = "top", sideOffset = 8, collisionPadding = 8,
40
40
  }
41
41
 
42
42
  export { Floating };
43
- //# sourceMappingURL=chunk-Y5AYU7PK.js.map
44
- //# sourceMappingURL=chunk-Y5AYU7PK.js.map
@@ -1,4 +1,2 @@
1
- 'use client';export { Accordion, AccordionItem } from '../chunk-GQA24FYG.js';
2
- import '../chunk-H63FYCMY.js';
3
- //# sourceMappingURL=accordion.js.map
4
- //# sourceMappingURL=accordion.js.map
1
+ 'use client';export { Accordion, AccordionItem } from '../chunk-6Y6CY2DP.js';
2
+ import '../chunk-EHEXE2UV.js';
@@ -0,0 +1,37 @@
1
+ import * as React from 'react';
2
+ import { type ButtonProps } from './button.js';
3
+ /**
4
+ * ActionButton: a Button that runs something and shows how it went, in place. Three states:
5
+ *
6
+ * 1. idle: the label ("Submit" by default) with an arrow on the right;
7
+ * 2. loading: from the click until `onAction`'s promise settles (at least `minLoading`, so a
8
+ * fast answer still reads as work), a Spinner in the arrow's place;
9
+ * 3. success: in the same place, a checkmark that draws itself in, held for `resetAfter` ms,
10
+ * then the arrow comes back.
11
+ *
12
+ * The label stays as it is; only the icon slot changes, its three layers stacked on one 16px
13
+ * cell and cross-fading (150ms), so the button never changes width. With `trailingIcon={null}`
14
+ * there is no slot: the spinner and checkmark take the middle and the label keeps its room. If the promise rejects, the button goes straight back to idle and the
15
+ * error is the app's to show (an Alert, a toast). While busy or done, clicks do nothing; focus
16
+ * stays on the button and screen readers hear `aria-busy`, then "Done" (`done` in SatinLabels).
17
+ *
18
+ * Pass `state` to drive it yourself (a form library's submitting flag, a server push) instead.
19
+ */
20
+ export type ActionButtonState = 'idle' | 'loading' | 'success';
21
+ export interface ActionButtonProps extends Omit<ButtonProps, 'loading' | 'onClick' | 'iconOnly' | 'asChild'> {
22
+ /** Runs on click. The spinner stays until its promise settles. */
23
+ onAction?: (event: React.MouseEvent<HTMLButtonElement>) => Promise<unknown> | unknown;
24
+ /** Drive the state from outside instead. */
25
+ state?: ActionButtonState;
26
+ onStateChange?: (state: ActionButtonState) => void;
27
+ /** Shortest time the spinner shows, in ms. */
28
+ minLoading?: number;
29
+ /** How long the checkmark stays before the button is ready again, in ms; `null` keeps it. */
30
+ resetAfter?: number | null;
31
+ /** Called when `onAction` rejects; without it the error is rethrown. */
32
+ onError?: (error: unknown) => void;
33
+ /** The icon after the label; `null` for none. Defaults to an arrow. */
34
+ trailingIcon?: React.ReactNode;
35
+ onClick?: React.MouseEventHandler<HTMLButtonElement>;
36
+ }
37
+ export declare function ActionButton({ onAction, state: controlled, onStateChange, onError, minLoading, resetAfter, trailingIcon, onClick, children, className, ...props }: ActionButtonProps): React.JSX.Element;
@@ -0,0 +1,5 @@
1
+ 'use client';export { ActionButton } from '../chunk-XU6JJDMZ.js';
2
+ import '../chunk-6DWLTGRQ.js';
3
+ import '../chunk-AKEZCWNW.js';
4
+ import '../chunk-NTSU44FY.js';
5
+ import '../chunk-EHEXE2UV.js';
@@ -22,6 +22,7 @@ import * as React from 'react';
22
22
  */
23
23
  export type Glimmer = 'color' | 'neutral';
24
24
  /** The tetris mark. Memoised: its 125 animated elements never re-render with their parent. */
25
+ /** @internal Shared by Satin's own components; not part of the public API and may change in any release. */
25
26
  export declare const TetrisMark: React.MemoExoticComponent<({ glimmer, className }: {
26
27
  glimmer?: Glimmer;
27
28
  className?: string;
@@ -45,6 +46,7 @@ export declare function ShimmerLabel({ children, className }: {
45
46
  className?: string;
46
47
  }): React.JSX.Element;
47
48
  /** The flappy bird fitted into a `size` square; `run` plays the run in place. */
49
+ /** @internal Shared by Satin's own components; not part of the public API and may change in any release. */
48
50
  export declare function FlappySprite({ size, run, className }: {
49
51
  size?: number;
50
52
  run?: boolean;
@@ -1,4 +1,2 @@
1
- 'use client';export { AgentLoading, FlappySprite, ShimmerLabel, TetrisLabel, TetrisMark, TetrisStill } from '../chunk-KNUWZNFV.js';
2
- import '../chunk-H63FYCMY.js';
3
- //# sourceMappingURL=agent-loading.js.map
4
- //# sourceMappingURL=agent-loading.js.map
1
+ 'use client';export { AgentLoading, FlappySprite, ShimmerLabel, TetrisLabel, TetrisMark, TetrisStill } from '../chunk-R4KPFBMK.js';
2
+ import '../chunk-EHEXE2UV.js';
@@ -1,5 +1,5 @@
1
- 'use client';export { AgentAvatar, AgentMenuItem, AgentPicker, AgentPickerRow } from '../chunk-VAGIAREV.js';
2
- import '../chunk-HNQUX43Z.js';
3
- import '../chunk-H63FYCMY.js';
4
- //# sourceMappingURL=agent-picker.js.map
5
- //# sourceMappingURL=agent-picker.js.map
1
+ 'use client';export { AgentAvatar, AgentMenuItem, AgentPicker, AgentPickerRow } from '../chunk-DMZW4LGU.js';
2
+ import '../chunk-6DWLTGRQ.js';
3
+ import '../chunk-AKEZCWNW.js';
4
+ import '../chunk-NTSU44FY.js';
5
+ import '../chunk-EHEXE2UV.js';
@@ -1,6 +1,5 @@
1
- 'use client';export { AgentSuggestion, AgentSuggestionChanges, AgentSuggestionDiff, AgentSuggestionMetric, AgentSuggestionQuote } from '../chunk-MR3JDI7E.js';
2
- import '../chunk-7TXHCRAG.js';
3
- import '../chunk-O7F3CIDV.js';
4
- import '../chunk-H63FYCMY.js';
5
- //# sourceMappingURL=agent-suggestion.js.map
6
- //# sourceMappingURL=agent-suggestion.js.map
1
+ 'use client';export { AgentSuggestion, AgentSuggestionChanges, AgentSuggestionDiff, AgentSuggestionMetric, AgentSuggestionQuote } from '../chunk-T7P3OEBP.js';
2
+ import '../chunk-LKSFTNPF.js';
3
+ import '../chunk-7NV53EL5.js';
4
+ import '../chunk-NTSU44FY.js';
5
+ import '../chunk-EHEXE2UV.js';
@@ -0,0 +1,37 @@
1
+ import * as React from 'react';
2
+ /**
3
+ * Alert: a message that stays on the page until it's dealt with (a toast is for what just
4
+ * happened and goes away; a banner promotes). Built on the uiKit `Alert` (475:27871) that
5
+ * DialogAlert draws inside dialogs, for anywhere on a page: above a form, at the top of a
6
+ * settings section, in an empty table.
7
+ *
8
+ * - `intent`: neutral, info, success, warning or error, the status colours from the theme.
9
+ * - `variant`: `soft` (default) fills it with the status background; `outline` is a card
10
+ * surface with a border, for an alert among other cards, where only the icon carries colour.
11
+ * - A 16px status icon on the first line (`icon={false}` hides it, or pass your own), a 14px
12
+ * medium title and a 13px muted description; either can be left out.
13
+ * - `action` holds a Button or a Link: on the right when there's only a title, under the
14
+ * description when there is one. `onDismiss` adds the close button.
15
+ * - Errors and warnings are `role="alert"` (read out when they appear), the rest `role="status"`.
16
+ */
17
+ export type AlertIntent = 'neutral' | 'info' | 'success' | 'warning' | 'error';
18
+ export interface AlertProps extends Omit<React.ComponentProps<'div'>, 'title'> {
19
+ intent?: AlertIntent;
20
+ variant?: 'soft' | 'outline';
21
+ title?: React.ReactNode;
22
+ description?: React.ReactNode;
23
+ /** `false` hides the status icon; a node replaces it. */
24
+ icon?: boolean | React.ReactNode;
25
+ /** A Button or Link, or a few in a fragment. */
26
+ action?: React.ReactNode;
27
+ /** Shows the close button; called when it is pressed. */
28
+ onDismiss?: () => void;
29
+ }
30
+ export declare function Alert({ intent, variant, title, description, icon, action, onDismiss, className, children, ...props }: AlertProps): React.JSX.Element;
31
+ /** @internal The status glyphs from Figma (16px, 1.25 stroke), drawn in currentColor. Neutral uses the info glyph. */
32
+ export declare function StatusIcon({ intent }: {
33
+ intent: AlertIntent;
34
+ }): React.JSX.Element;
35
+ /** The X from Figma's close button (`icon` 16px, 1.25 stroke). */
36
+ /** @internal Shared by Satin's own components; not part of the public API and may change in any release. */
37
+ export declare function CloseIcon(): React.JSX.Element;
@@ -0,0 +1,5 @@
1
+ 'use client';export { Alert, CloseIcon, StatusIcon } from '../chunk-RPL6FRVX.js';
2
+ import '../chunk-6DWLTGRQ.js';
3
+ import '../chunk-AKEZCWNW.js';
4
+ import '../chunk-NTSU44FY.js';
5
+ import '../chunk-EHEXE2UV.js';
@@ -1,7 +1,7 @@
1
- 'use client';export { AnnouncementBar } from '../chunk-D7RZNTFC.js';
2
- import '../chunk-6QMSWITQ.js';
3
- import '../chunk-YX5VNRJX.js';
4
- import '../chunk-HNQUX43Z.js';
5
- import '../chunk-H63FYCMY.js';
6
- //# sourceMappingURL=announcement-bar.js.map
7
- //# sourceMappingURL=announcement-bar.js.map
1
+ 'use client';export { AnnouncementBar } from '../chunk-LAOE6Y57.js';
2
+ import '../chunk-HZV7EXGU.js';
3
+ import '../chunk-YYFAZQ25.js';
4
+ import '../chunk-6DWLTGRQ.js';
5
+ import '../chunk-AKEZCWNW.js';
6
+ import '../chunk-NTSU44FY.js';
7
+ import '../chunk-EHEXE2UV.js';
@@ -1,5 +1,5 @@
1
- 'use client';export { Attachment, AttachmentGroup, AttachmentPreview, AttachmentPreviewPager, AttachmentPreviewSheets, FileIcon } from '../chunk-H4NU7NPO.js';
2
- import '../chunk-HNQUX43Z.js';
3
- import '../chunk-H63FYCMY.js';
4
- //# sourceMappingURL=attachment.js.map
5
- //# sourceMappingURL=attachment.js.map
1
+ 'use client';export { Attachment, AttachmentGroup, AttachmentPreview, AttachmentPreviewPager, AttachmentPreviewSheets, FileIcon } from '../chunk-R3DTMBDT.js';
2
+ import '../chunk-6DWLTGRQ.js';
3
+ import '../chunk-AKEZCWNW.js';
4
+ import '../chunk-NTSU44FY.js';
5
+ import '../chunk-EHEXE2UV.js';
@@ -1,6 +1,4 @@
1
- 'use client';export { AVATAR_TOOLTIP_DELAY, Avatar, AvatarGroup, avatarVariants } from '../chunk-MYEZXZZC.js';
2
- import '../chunk-B6V4VSGH.js';
3
- import '../chunk-BKZBWPUH.js';
4
- import '../chunk-H63FYCMY.js';
5
- //# sourceMappingURL=avatar.js.map
6
- //# sourceMappingURL=avatar.js.map
1
+ 'use client';export { AVATAR_TOOLTIP_DELAY, Avatar, AvatarGroup, avatarVariants } from '../chunk-TOY6YPTG.js';
2
+ import '../chunk-KDU7AT2T.js';
3
+ import '../chunk-XWPH7C2W.js';
4
+ import '../chunk-EHEXE2UV.js';
@@ -1,4 +1,2 @@
1
- 'use client';export { Badge, badgeVariants } from '../chunk-O7F3CIDV.js';
2
- import '../chunk-H63FYCMY.js';
3
- //# sourceMappingURL=badge.js.map
4
- //# sourceMappingURL=badge.js.map
1
+ 'use client';export { Badge, badgeVariants } from '../chunk-7NV53EL5.js';
2
+ import '../chunk-EHEXE2UV.js';
@@ -1,3 +1 @@
1
- 'use client';export { bannerMesh } from '../chunk-YX5VNRJX.js';
2
- //# sourceMappingURL=banner-mesh.js.map
3
- //# sourceMappingURL=banner-mesh.js.map
1
+ 'use client';export { bannerMesh } from '../chunk-YYFAZQ25.js';
@@ -1,6 +1,6 @@
1
- 'use client';export { Banner, bannerVariants } from '../chunk-6QMSWITQ.js';
2
- export { bannerMesh } from '../chunk-YX5VNRJX.js';
3
- import '../chunk-HNQUX43Z.js';
4
- import '../chunk-H63FYCMY.js';
5
- //# sourceMappingURL=banner.js.map
6
- //# sourceMappingURL=banner.js.map
1
+ 'use client';export { Banner, bannerVariants } from '../chunk-HZV7EXGU.js';
2
+ export { bannerMesh } from '../chunk-YYFAZQ25.js';
3
+ import '../chunk-6DWLTGRQ.js';
4
+ import '../chunk-AKEZCWNW.js';
5
+ import '../chunk-NTSU44FY.js';
6
+ import '../chunk-EHEXE2UV.js';
@@ -1,11 +1,10 @@
1
- 'use client';export { BarCard, niceMax } from '../chunk-DO3TBNSC.js';
2
- import '../chunk-YPJYW624.js';
3
- import '../chunk-Y5AYU7PK.js';
4
- import '../chunk-72OCFAPT.js';
5
- import '../chunk-UBNHSZSE.js';
6
- import '../chunk-3DINAQLL.js';
7
- import '../chunk-BKZBWPUH.js';
8
- import '../chunk-O7F3CIDV.js';
9
- import '../chunk-H63FYCMY.js';
10
- //# sourceMappingURL=bar-chart.js.map
11
- //# sourceMappingURL=bar-chart.js.map
1
+ 'use client';export { BarCard, niceMax } from '../chunk-INJWE2LD.js';
2
+ import '../chunk-LI5VYDLN.js';
3
+ import '../chunk-ZHFIWDGF.js';
4
+ import '../chunk-EQAFDIPE.js';
5
+ import '../chunk-KITXKIYW.js';
6
+ import '../chunk-P36KBUYD.js';
7
+ import '../chunk-XWPH7C2W.js';
8
+ import '../chunk-7NV53EL5.js';
9
+ import '../chunk-NTSU44FY.js';
10
+ import '../chunk-EHEXE2UV.js';
@@ -1,6 +1,5 @@
1
- 'use client';export { Breadcrumb } from '../chunk-HL42K2NH.js';
2
- import '../chunk-3DINAQLL.js';
3
- import '../chunk-BKZBWPUH.js';
4
- import '../chunk-H63FYCMY.js';
5
- //# sourceMappingURL=breadcrumb.js.map
6
- //# sourceMappingURL=breadcrumb.js.map
1
+ 'use client';export { Breadcrumb } from '../chunk-Q7KVC5B4.js';
2
+ import '../chunk-P36KBUYD.js';
3
+ import '../chunk-XWPH7C2W.js';
4
+ import '../chunk-NTSU44FY.js';
5
+ import '../chunk-EHEXE2UV.js';
@@ -0,0 +1,26 @@
1
+ import * as React from 'react';
2
+ import { type ButtonDefaults } from './button.js';
3
+ /**
4
+ * Buttons that belong together: a toolbar, Prev / Next, a set of views, the two halves of a
5
+ * SplitButton.
6
+ *
7
+ * `attached` (the default) joins them into one block: the inner corners go square, the buttons
8
+ * touch, and the only line between two of them is the later one's 1px leading border (the
9
+ * outline colour on secondary). Each button's outer ring and shadow are clipped on the sides it
10
+ * shares, so they run unbroken along the top and bottom of the block, with no notch at a seam. The button under the
11
+ * pointer or with focus comes to the front, so its ring and focus ring are never cut by a
12
+ * neighbour. `attached={false}` keeps every button whole, 8px apart (4px at xs), for a looser
13
+ * toolbar; put a `ButtonGroupSeparator` between sets there.
14
+ *
15
+ * `variant`, `size` and `shape` are defaults for every Button inside (a button's own prop wins),
16
+ * so a group is set once instead of on each button. The group is `role="group"`: give it an
17
+ * `aria-label` that says what the buttons are for ("Text alignment").
18
+ */
19
+ export interface ButtonGroupProps extends React.ComponentProps<'div'>, ButtonDefaults {
20
+ orientation?: 'horizontal' | 'vertical';
21
+ /** Join the buttons into one block. */
22
+ attached?: boolean;
23
+ }
24
+ export declare function ButtonGroup({ orientation, attached, variant, size, shape, className, children, ...props }: ButtonGroupProps): React.JSX.Element;
25
+ /** A thin rule between sets of buttons in a loose (`attached={false}`) group or a toolbar. */
26
+ export declare function ButtonGroupSeparator({ className, ...props }: React.ComponentProps<'div'>): React.JSX.Element;
@@ -0,0 +1,5 @@
1
+ 'use client';export { ButtonGroup, ButtonGroupSeparator } from '../chunk-GH2DEOGO.js';
2
+ import '../chunk-6DWLTGRQ.js';
3
+ import '../chunk-AKEZCWNW.js';
4
+ import '../chunk-NTSU44FY.js';
5
+ import '../chunk-EHEXE2UV.js';
@@ -27,6 +27,18 @@ declare const buttonVariants: (props?: ({
27
27
  export interface ButtonProps extends React.ComponentProps<'button'>, VariantProps<typeof buttonVariants> {
28
28
  /** Render the child element (a link, say) with the button's styles instead of a `<button>`. */
29
29
  asChild?: boolean;
30
+ /**
31
+ * Busy: a Spinner takes the middle and the label and icons turn invisible but keep their room,
32
+ * so the button doesn't change width. Clicks (and Enter in a form) do nothing; the button
33
+ * keeps its focus and looks, with `aria-busy` and `aria-disabled` for screen readers.
34
+ */
35
+ loading?: boolean;
30
36
  }
31
- export declare function Button({ className, variant, size, shape, iconOnly, asChild, type, ...props }: ButtonProps): React.JSX.Element;
37
+ /**
38
+ * What a ButtonGroup hands its buttons: the variant, size and shape they take unless they set
39
+ * their own. Lives here so Button reads it without importing the group.
40
+ */
41
+ export type ButtonDefaults = Pick<VariantProps<typeof buttonVariants>, 'variant' | 'size' | 'shape'>;
42
+ export declare const ButtonDefaultsContext: React.Context<ButtonDefaults | null>;
43
+ export declare function Button({ className, variant, size, shape, iconOnly, asChild, loading, type, onClick, children, 'aria-disabled': ariaDisabled, ...props }: ButtonProps): React.JSX.Element;
32
44
  export { buttonVariants };