@uisatin/ui 0.1.1 → 0.3.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 (311) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/README.md +20 -3
  3. package/chunk-3DHJXU45.js +147 -0
  4. package/{chunk-6YXUBP27.js → chunk-5725MFGQ.js} +72 -67
  5. package/{chunk-BKZBWPUH.js → chunk-57QEOCDZ.js} +9 -11
  6. package/{chunk-RTJ76X5U.js → chunk-5KTBSMQU.js} +2 -4
  7. package/{chunk-B2K45IUR.js → chunk-5XTUFBZI.js} +5 -7
  8. package/{chunk-LW3TRU5W.js → chunk-674SRBZK.js} +28 -16
  9. package/{chunk-XZNHT6MO.js → chunk-6VKV36OK.js} +115 -61
  10. package/{chunk-GICKPMJU.js → chunk-73Z7NMQQ.js} +31 -31
  11. package/chunk-7Q76HLRQ.js +128 -0
  12. package/{chunk-JPNWHWAQ.js → chunk-AIMQNLPY.js} +38 -35
  13. package/chunk-BN7FDKCJ.js +164 -0
  14. package/{chunk-3DINAQLL.js → chunk-BR2B4OIT.js} +33 -29
  15. package/{chunk-2HKBZFIK.js → chunk-CGOH5IYX.js} +31 -31
  16. package/chunk-CVNRZ2YV.js +112 -0
  17. package/{chunk-QUF2IPOZ.js → chunk-DPYIBFQD.js} +12 -14
  18. package/chunk-EF5GT4OG.js +87 -0
  19. package/chunk-FAJ3OVL4.js +37 -0
  20. package/{chunk-L6NCCSIP.js → chunk-FB5HTCO2.js} +36 -29
  21. package/chunk-GI2SMFZL.js +55 -0
  22. package/{chunk-B6V4VSGH.js → chunk-GMETYACH.js} +14 -15
  23. package/chunk-HK6WINL6.js +95 -0
  24. package/{chunk-HL42K2NH.js → chunk-IKO3GQFE.js} +17 -17
  25. package/{chunk-DO3TBNSC.js → chunk-ISYKZCPJ.js} +15 -17
  26. package/{chunk-YG7JOOLJ.js → chunk-J7RMFN54.js} +5 -7
  27. package/{chunk-SHDFUXYV.js → chunk-JBKBRAC4.js} +16 -18
  28. package/{chunk-LZMKSFCF.js → chunk-JCXI7VQL.js} +10 -12
  29. package/{chunk-NN6PKJWS.js → chunk-JYOZUQNU.js} +7 -9
  30. package/{chunk-LLHTVIM3.js → chunk-LB37KTJH.js} +7 -9
  31. package/{chunk-NSRTTYQ4.js → chunk-LB7Z6BSK.js} +42 -35
  32. package/{chunk-BNZVTLHV.js → chunk-LFGUJHFF.js} +25 -21
  33. package/{chunk-7TXHCRAG.js → chunk-M2HEVFQ3.js} +8 -10
  34. package/{chunk-SH6NG6VN.js → chunk-NH3EHMIL.js} +6 -8
  35. package/chunk-NL574STL.js +88 -0
  36. package/chunk-NQL6SIIB.js +168 -0
  37. package/chunk-O46O6LFQ.js +25 -0
  38. package/{chunk-YPNKBE5X.js → chunk-OURZQM27.js} +5 -7
  39. package/{chunk-XL75JRUA.js → chunk-OVKPPXK5.js} +42 -22
  40. package/chunk-PD6YPFYN.js +42 -0
  41. package/{chunk-XILQ7GXE.js → chunk-PHNR6ZQ7.js} +11 -13
  42. package/{chunk-BNTPPZCK.js → chunk-PUWSL5XW.js} +37 -39
  43. package/{chunk-A5XEM3GF.js → chunk-RHQHDYTE.js} +34 -36
  44. package/chunk-S7QHBVPX.js +45 -0
  45. package/{chunk-TX3H3QMA.js → chunk-SAYNV7B3.js} +71 -70
  46. package/{chunk-6QMSWITQ.js → chunk-SDOTDMYG.js} +24 -26
  47. package/{chunk-UGRSWP6U.js → chunk-SPGUZMCC.js} +10 -12
  48. package/chunk-SSOFFQ5T.js +74 -0
  49. package/{chunk-AN2RNJLR.js → chunk-SZJIVBOD.js} +16 -16
  50. package/chunk-T6L32XXH.js +107 -0
  51. package/{chunk-QS4N4MNP.js → chunk-TT2N5752.js} +18 -20
  52. package/{chunk-72OCFAPT.js → chunk-UCCNXGLG.js} +22 -21
  53. package/{chunk-KNUWZNFV.js → chunk-UGIVCXGN.js} +4 -6
  54. package/{chunk-H4NU7NPO.js → chunk-UUCVRIVP.js} +62 -61
  55. package/{chunk-P4O6TGDR.js → chunk-UZ4DXU6W.js} +28 -26
  56. package/{chunk-UBNHSZSE.js → chunk-VUOAPWTF.js} +10 -12
  57. package/{chunk-VAGIAREV.js → chunk-W472DBMT.js} +29 -26
  58. package/{chunk-X3PQANZO.js → chunk-W4RDTP6W.js} +47 -46
  59. package/{chunk-CL2II6BX.js → chunk-WLQD5BN2.js} +11 -13
  60. package/{chunk-FDKIX4DC.js → chunk-X2GNMNZQ.js} +7 -9
  61. package/{chunk-PF3YBUKT.js → chunk-X66KTATQ.js} +16 -15
  62. package/{chunk-J3NSDRVH.js → chunk-XETMIETJ.js} +0 -2
  63. package/chunk-XH56JGYC.js +71 -0
  64. package/{chunk-O7F3CIDV.js → chunk-XUOSJMEJ.js} +10 -12
  65. package/chunk-YJK4MGSI.js +86 -0
  66. package/{chunk-YX5VNRJX.js → chunk-YYFAZQ25.js} +0 -2
  67. package/chunk-Z7S2KQZS.js +177 -0
  68. package/chunk-ZBZ3ZQRB.js +195 -0
  69. package/{chunk-Y5AYU7PK.js → chunk-ZHFIWDGF.js} +0 -2
  70. package/components/accordion.js +2 -4
  71. package/components/agent-loading.d.ts +2 -0
  72. package/components/agent-loading.js +2 -4
  73. package/components/agent-picker.js +4 -5
  74. package/components/agent-suggestion.js +5 -6
  75. package/components/announcement-bar.js +6 -7
  76. package/components/attachment.js +4 -5
  77. package/components/avatar.d.ts +16 -0
  78. package/components/avatar.js +4 -6
  79. package/components/badge.js +2 -4
  80. package/components/banner-mesh.js +1 -3
  81. package/components/banner.js +4 -6
  82. package/components/bar-chart.js +10 -11
  83. package/components/breadcrumb.js +5 -6
  84. package/components/button.js +2 -4
  85. package/components/card.js +3 -5
  86. package/components/channel-chart.js +10 -11
  87. package/components/chart.js +9 -10
  88. package/components/checkbox.js +2 -4
  89. package/components/chip.js +2 -4
  90. package/components/citations.d.ts +6 -4
  91. package/components/citations.js +4 -5
  92. package/components/code-block.js +3 -5
  93. package/components/combobox.d.ts +12 -3
  94. package/components/combobox.js +9 -10
  95. package/components/command-menu.d.ts +6 -2
  96. package/components/command-menu.js +5 -6
  97. package/components/context-menu.d.ts +12 -5
  98. package/components/context-menu.js +5 -6
  99. package/components/cookie-consent.js +3 -5
  100. package/components/date-picker.d.ts +26 -14
  101. package/components/date-picker.js +8 -9
  102. package/components/decision-card.js +6 -7
  103. package/components/dialog.d.ts +5 -2
  104. package/components/dialog.js +4 -5
  105. package/components/donut-chart.js +10 -11
  106. package/components/dot.js +2 -4
  107. package/components/dropdown.d.ts +6 -1
  108. package/components/dropdown.js +4 -5
  109. package/components/empty-state.js +2 -4
  110. package/components/file-upload.js +6 -7
  111. package/components/floating.js +1 -3
  112. package/components/form-field.js +2 -4
  113. package/components/hover-card.d.ts +5 -2
  114. package/components/hover-card.js +2 -4
  115. package/components/input-otp.d.ts +4 -2
  116. package/components/input-otp.js +7 -8
  117. package/components/input.js +3 -5
  118. package/components/kbd.js +2 -4
  119. package/components/labels.d.ts +79 -0
  120. package/components/labels.js +1 -0
  121. package/components/line-chart.js +11 -12
  122. package/components/message-actions.js +4 -5
  123. package/components/message.js +7 -8
  124. package/components/number-input.d.ts +4 -2
  125. package/components/number-input.js +7 -8
  126. package/components/pagination.js +4 -6
  127. package/components/popover.d.ts +11 -5
  128. package/components/popover.js +3 -4
  129. package/components/progress.js +2 -4
  130. package/components/prompt-bar.js +5 -6
  131. package/components/radio.js +2 -4
  132. package/components/search-bar.js +3 -5
  133. package/components/segmented-control.d.ts +4 -2
  134. package/components/segmented-control.js +3 -5
  135. package/components/select.d.ts +10 -2
  136. package/components/select.js +6 -7
  137. package/components/sheet.d.ts +4 -2
  138. package/components/sheet.js +5 -6
  139. package/components/sidebar.js +2 -4
  140. package/components/skeleton.js +2 -4
  141. package/components/slider.d.ts +6 -2
  142. package/components/slider.js +7 -8
  143. package/components/sliding-indicator.js +1 -3
  144. package/components/streaming-text.js +2 -4
  145. package/components/switch.js +2 -4
  146. package/components/table.d.ts +16 -5
  147. package/components/table.js +4 -5
  148. package/components/tabs.d.ts +4 -2
  149. package/components/tabs.js +3 -5
  150. package/components/textarea.js +3 -5
  151. package/components/thinking.js +3 -5
  152. package/components/toast.js +4 -5
  153. package/components/toggle.js +2 -4
  154. package/components/tooltip.d.ts +5 -2
  155. package/components/tooltip.js +3 -5
  156. package/index.d.ts +1 -0
  157. package/index.js +67 -231
  158. package/lib/utils.d.ts +8 -1
  159. package/lib/utils.js +1 -3
  160. package/package.json +22 -1
  161. package/styles.css +1 -1
  162. package/theme/create-theme.d.ts +6 -2
  163. package/theme/index.js +1 -0
  164. package/chunk-2HKBZFIK.js.map +0 -1
  165. package/chunk-3DINAQLL.js.map +0 -1
  166. package/chunk-3ERGAHKA.js +0 -179
  167. package/chunk-3ERGAHKA.js.map +0 -1
  168. package/chunk-6C7CGJX2.js +0 -86
  169. package/chunk-6C7CGJX2.js.map +0 -1
  170. package/chunk-6QMSWITQ.js.map +0 -1
  171. package/chunk-6YXUBP27.js.map +0 -1
  172. package/chunk-72OCFAPT.js.map +0 -1
  173. package/chunk-7TXHCRAG.js.map +0 -1
  174. package/chunk-A5XEM3GF.js.map +0 -1
  175. package/chunk-AN2RNJLR.js.map +0 -1
  176. package/chunk-B2K45IUR.js.map +0 -1
  177. package/chunk-B6V4VSGH.js.map +0 -1
  178. package/chunk-BKZBWPUH.js.map +0 -1
  179. package/chunk-BNTPPZCK.js.map +0 -1
  180. package/chunk-BNZVTLHV.js.map +0 -1
  181. package/chunk-CL2II6BX.js.map +0 -1
  182. package/chunk-D7RZNTFC.js +0 -95
  183. package/chunk-D7RZNTFC.js.map +0 -1
  184. package/chunk-DETGJAIC.js +0 -147
  185. package/chunk-DETGJAIC.js.map +0 -1
  186. package/chunk-DO3TBNSC.js.map +0 -1
  187. package/chunk-ESC5JCVQ.js +0 -90
  188. package/chunk-ESC5JCVQ.js.map +0 -1
  189. package/chunk-FDKIX4DC.js.map +0 -1
  190. package/chunk-GICKPMJU.js.map +0 -1
  191. package/chunk-GQA24FYG.js +0 -57
  192. package/chunk-GQA24FYG.js.map +0 -1
  193. package/chunk-H4NU7NPO.js.map +0 -1
  194. package/chunk-H63FYCMY.js +0 -11
  195. package/chunk-H63FYCMY.js.map +0 -1
  196. package/chunk-HL42K2NH.js.map +0 -1
  197. package/chunk-HNQUX43Z.js +0 -109
  198. package/chunk-HNQUX43Z.js.map +0 -1
  199. package/chunk-HRKPV66B.js +0 -32
  200. package/chunk-HRKPV66B.js.map +0 -1
  201. package/chunk-J3NSDRVH.js.map +0 -1
  202. package/chunk-JPNWHWAQ.js.map +0 -1
  203. package/chunk-KNUWZNFV.js.map +0 -1
  204. package/chunk-L6NCCSIP.js.map +0 -1
  205. package/chunk-LLHTVIM3.js.map +0 -1
  206. package/chunk-LW3TRU5W.js.map +0 -1
  207. package/chunk-LZMKSFCF.js.map +0 -1
  208. package/chunk-MR3JDI7E.js +0 -122
  209. package/chunk-MR3JDI7E.js.map +0 -1
  210. package/chunk-NN6PKJWS.js.map +0 -1
  211. package/chunk-NSRTTYQ4.js.map +0 -1
  212. package/chunk-O7F3CIDV.js.map +0 -1
  213. package/chunk-P4O6TGDR.js.map +0 -1
  214. package/chunk-PF3YBUKT.js.map +0 -1
  215. package/chunk-PVOLDO4G.js +0 -47
  216. package/chunk-PVOLDO4G.js.map +0 -1
  217. package/chunk-QS4N4MNP.js.map +0 -1
  218. package/chunk-QUF2IPOZ.js.map +0 -1
  219. package/chunk-RTJ76X5U.js.map +0 -1
  220. package/chunk-SH6NG6VN.js.map +0 -1
  221. package/chunk-SHDFUXYV.js.map +0 -1
  222. package/chunk-TKO44NDI.js +0 -84
  223. package/chunk-TKO44NDI.js.map +0 -1
  224. package/chunk-TVLGZGYN.js +0 -59
  225. package/chunk-TVLGZGYN.js.map +0 -1
  226. package/chunk-TX3H3QMA.js.map +0 -1
  227. package/chunk-UBNHSZSE.js.map +0 -1
  228. package/chunk-UC3ZJWOD.js +0 -73
  229. package/chunk-UC3ZJWOD.js.map +0 -1
  230. package/chunk-UGRSWP6U.js.map +0 -1
  231. package/chunk-VAGIAREV.js.map +0 -1
  232. package/chunk-WTMZT3IT.js +0 -105
  233. package/chunk-WTMZT3IT.js.map +0 -1
  234. package/chunk-WX6BP5ZP.js +0 -39
  235. package/chunk-WX6BP5ZP.js.map +0 -1
  236. package/chunk-X3PQANZO.js.map +0 -1
  237. package/chunk-XILQ7GXE.js.map +0 -1
  238. package/chunk-XL75JRUA.js.map +0 -1
  239. package/chunk-XZNHT6MO.js.map +0 -1
  240. package/chunk-Y5AYU7PK.js.map +0 -1
  241. package/chunk-YG7JOOLJ.js.map +0 -1
  242. package/chunk-YPJYW624.js +0 -195
  243. package/chunk-YPJYW624.js.map +0 -1
  244. package/chunk-YPNKBE5X.js.map +0 -1
  245. package/chunk-YX5VNRJX.js.map +0 -1
  246. package/components/accordion.js.map +0 -1
  247. package/components/agent-loading.js.map +0 -1
  248. package/components/agent-picker.js.map +0 -1
  249. package/components/agent-suggestion.js.map +0 -1
  250. package/components/announcement-bar.js.map +0 -1
  251. package/components/attachment.js.map +0 -1
  252. package/components/avatar.js.map +0 -1
  253. package/components/badge.js.map +0 -1
  254. package/components/banner-mesh.js.map +0 -1
  255. package/components/banner.js.map +0 -1
  256. package/components/bar-chart.js.map +0 -1
  257. package/components/breadcrumb.js.map +0 -1
  258. package/components/button.js.map +0 -1
  259. package/components/card.js.map +0 -1
  260. package/components/channel-chart.js.map +0 -1
  261. package/components/chart.js.map +0 -1
  262. package/components/checkbox.js.map +0 -1
  263. package/components/chip.js.map +0 -1
  264. package/components/citations.js.map +0 -1
  265. package/components/code-block.js.map +0 -1
  266. package/components/combobox.js.map +0 -1
  267. package/components/command-menu.js.map +0 -1
  268. package/components/context-menu.js.map +0 -1
  269. package/components/cookie-consent.js.map +0 -1
  270. package/components/date-picker.js.map +0 -1
  271. package/components/decision-card.js.map +0 -1
  272. package/components/dialog.js.map +0 -1
  273. package/components/donut-chart.js.map +0 -1
  274. package/components/dot.js.map +0 -1
  275. package/components/dropdown.js.map +0 -1
  276. package/components/empty-state.js.map +0 -1
  277. package/components/file-upload.js.map +0 -1
  278. package/components/floating.js.map +0 -1
  279. package/components/form-field.js.map +0 -1
  280. package/components/hover-card.js.map +0 -1
  281. package/components/input-otp.js.map +0 -1
  282. package/components/input.js.map +0 -1
  283. package/components/kbd.js.map +0 -1
  284. package/components/line-chart.js.map +0 -1
  285. package/components/message-actions.js.map +0 -1
  286. package/components/message.js.map +0 -1
  287. package/components/number-input.js.map +0 -1
  288. package/components/pagination.js.map +0 -1
  289. package/components/popover.js.map +0 -1
  290. package/components/progress.js.map +0 -1
  291. package/components/prompt-bar.js.map +0 -1
  292. package/components/radio.js.map +0 -1
  293. package/components/search-bar.js.map +0 -1
  294. package/components/segmented-control.js.map +0 -1
  295. package/components/select.js.map +0 -1
  296. package/components/sheet.js.map +0 -1
  297. package/components/sidebar.js.map +0 -1
  298. package/components/skeleton.js.map +0 -1
  299. package/components/slider.js.map +0 -1
  300. package/components/sliding-indicator.js.map +0 -1
  301. package/components/streaming-text.js.map +0 -1
  302. package/components/switch.js.map +0 -1
  303. package/components/table.js.map +0 -1
  304. package/components/tabs.js.map +0 -1
  305. package/components/textarea.js.map +0 -1
  306. package/components/thinking.js.map +0 -1
  307. package/components/toast.js.map +0 -1
  308. package/components/toggle.js.map +0 -1
  309. package/components/tooltip.js.map +0 -1
  310. package/index.js.map +0 -1
  311. package/lib/utils.js.map +0 -1
@@ -0,0 +1,128 @@
1
+ import { Progress } from './chunk-M2HEVFQ3.js';
2
+ import { Badge } from './chunk-XUOSJMEJ.js';
3
+ import { useSatinLabels } from './chunk-SSOFFQ5T.js';
4
+ import { cn } from './chunk-O46O6LFQ.js';
5
+ import * as React from 'react';
6
+ import { ArrowRight } from 'iconoir-react';
7
+ import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
8
+
9
+ function AgentSuggestion({
10
+ kind,
11
+ icon,
12
+ meta,
13
+ title,
14
+ description,
15
+ actions,
16
+ children,
17
+ className,
18
+ ...props
19
+ }) {
20
+ const titleId = React.useId();
21
+ return /* @__PURE__ */ jsxs(
22
+ "section",
23
+ {
24
+ "data-slot": "agent-suggestion",
25
+ "aria-labelledby": title ? titleId : void 0,
26
+ className: cn(
27
+ "sa:flex sa:w-full sa:max-w-[400px] sa:flex-col sa:gap-3 sa:rounded-xl sa:border sa:border-border-subtle sa:bg-bg-card sa:p-3 sa:text-text-default sa:[box-shadow:0_1px_3px_0_var(--effect-shadow-sm),0_1px_2px_-1px_var(--effect-shadow-sm)]",
28
+ className
29
+ ),
30
+ ...props,
31
+ children: [
32
+ /* @__PURE__ */ jsxs("div", { className: "sa:flex sa:min-h-6 sa:items-center sa:gap-1.5", children: [
33
+ /* @__PURE__ */ jsx("div", { className: "sa:flex sa:min-w-0 sa:flex-1", children: /* @__PURE__ */ jsxs(
34
+ Badge,
35
+ {
36
+ size: "lg",
37
+ tone: "neutral",
38
+ variant: "outline",
39
+ className: "sa:max-w-full sa:[&_img]:size-3.5 sa:[&_img]:shrink-0",
40
+ children: [
41
+ icon,
42
+ /* @__PURE__ */ jsx("span", { className: "sa:truncate", children: kind })
43
+ ]
44
+ }
45
+ ) }),
46
+ meta && /* @__PURE__ */ jsx("div", { className: "sa:flex sa:shrink-0 sa:items-center", children: meta })
47
+ ] }),
48
+ (title || description) && /* @__PURE__ */ jsxs("div", { className: "sa:flex sa:flex-col sa:gap-2", children: [
49
+ title && /* @__PURE__ */ jsx("div", { id: titleId, className: "sa:text-base sa:leading-[14px] sa:font-medium sa:tracking-normal sa:text-text-default", children: title }),
50
+ description && /* @__PURE__ */ jsx("div", { className: "sa:text-base sa:text-text-muted", children: description })
51
+ ] }),
52
+ children,
53
+ actions && /* @__PURE__ */ jsx("div", { className: "sa:flex sa:flex-wrap sa:items-center sa:justify-end sa:gap-2 sa:pt-1", children: actions })
54
+ ]
55
+ }
56
+ );
57
+ }
58
+ function AgentSuggestionQuote({
59
+ from,
60
+ avatar,
61
+ children,
62
+ className
63
+ }) {
64
+ return /* @__PURE__ */ jsxs("blockquote", { "data-slot": "agent-suggestion-quote", className: cn("sa:m-0 sa:flex sa:flex-col sa:gap-1 sa:rounded-lg sa:bg-bg-muted sa:px-3 sa:py-2", className), children: [
65
+ /* @__PURE__ */ jsxs("div", { className: "sa:flex sa:items-center sa:gap-1.5", children: [
66
+ avatar,
67
+ /* @__PURE__ */ jsx("span", { className: "sa:text-xs sa:leading-3 sa:font-medium sa:tracking-normal sa:text-text-default", children: from })
68
+ ] }),
69
+ /* @__PURE__ */ jsx("p", { className: "sa:m-0 sa:text-base sa:text-text-muted", children })
70
+ ] });
71
+ }
72
+ function AgentSuggestionMetric({
73
+ value,
74
+ unit,
75
+ used,
76
+ max,
77
+ className
78
+ }) {
79
+ return /* @__PURE__ */ jsxs("div", { "data-slot": "agent-suggestion-metric", className: cn("sa:flex sa:flex-col sa:gap-2", className), children: [
80
+ /* @__PURE__ */ jsxs("div", { className: "sa:flex sa:items-baseline sa:gap-2", children: [
81
+ /* @__PURE__ */ jsx("span", { className: "sa:text-2xl sa:leading-[1.5] sa:font-medium sa:tabular-nums", children: value }),
82
+ unit && /* @__PURE__ */ jsx("span", { className: "sa:text-base sa:text-text-muted", children: unit })
83
+ ] }),
84
+ used != null && max != null && /* @__PURE__ */ jsx(
85
+ Progress,
86
+ {
87
+ value: used,
88
+ max,
89
+ showValue: false,
90
+ "aria-label": typeof unit === "string" ? unit : void 0,
91
+ className: "sa:[&_[role=progressbar]]:h-1.5"
92
+ }
93
+ )
94
+ ] });
95
+ }
96
+ function AgentSuggestionDiff({ before, after, className }) {
97
+ const labels = useSatinLabels();
98
+ return /* @__PURE__ */ jsxs("div", { "data-slot": "agent-suggestion-diff", className: cn("sa:flex sa:flex-col sa:gap-1 sa:text-base", className), children: [
99
+ /* @__PURE__ */ jsxs("del", { className: "sa:rounded-lg sa:bg-bg-muted sa:px-2 sa:py-1.5 sa:text-text-muted", children: [
100
+ /* @__PURE__ */ jsxs("span", { className: "sa:sr-only", children: [
101
+ labels.remove,
102
+ ": "
103
+ ] }),
104
+ before
105
+ ] }),
106
+ /* @__PURE__ */ jsxs("ins", { className: "sa:rounded-lg sa:bg-status-green-bg sa:px-2 sa:py-1.5 sa:text-status-green-fg sa:no-underline", children: [
107
+ /* @__PURE__ */ jsxs("span", { className: "sa:sr-only", children: [
108
+ labels.add,
109
+ ": "
110
+ ] }),
111
+ after
112
+ ] })
113
+ ] });
114
+ }
115
+ function AgentSuggestionChanges({ changes, className }) {
116
+ return /* @__PURE__ */ jsx("dl", { "data-slot": "agent-suggestion-changes", className: cn("sa:m-0 sa:flex sa:flex-col sa:gap-2 sa:text-base", className), children: changes.map((c, i) => /* @__PURE__ */ jsxs("div", { className: "sa:flex sa:min-h-[21px] sa:items-center sa:gap-2", children: [
117
+ /* @__PURE__ */ jsx("dt", { className: "sa:w-[88px] sa:shrink-0 sa:text-text-muted", children: c.field }),
118
+ /* @__PURE__ */ jsxs("dd", { className: "sa:m-0 sa:flex sa:min-w-0 sa:items-center sa:gap-2", children: [
119
+ c.from != null && /* @__PURE__ */ jsxs(Fragment, { children: [
120
+ /* @__PURE__ */ jsx("del", { className: "sa:text-text-subtle", children: c.from }),
121
+ /* @__PURE__ */ jsx(ArrowRight, { "aria-hidden": true, className: "sa:size-4 sa:shrink-0 sa:text-text-subtle sa:[stroke-width:1.875]" })
122
+ ] }),
123
+ typeof c.to === "string" ? /* @__PURE__ */ jsx("span", { className: "sa:font-medium sa:text-text-default", children: c.to }) : c.to
124
+ ] })
125
+ ] }, i)) });
126
+ }
127
+
128
+ export { AgentSuggestion, AgentSuggestionChanges, AgentSuggestionDiff, AgentSuggestionMetric, AgentSuggestionQuote };
@@ -1,5 +1,6 @@
1
- import { Button } from './chunk-HNQUX43Z.js';
2
- import { cn } from './chunk-H63FYCMY.js';
1
+ import { Button } from './chunk-T6L32XXH.js';
2
+ import { useSatinLabels } from './chunk-SSOFFQ5T.js';
3
+ import { cn } from './chunk-O46O6LFQ.js';
3
4
  import 'react';
4
5
  import { Dialog as Dialog$1 } from 'radix-ui';
5
6
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
@@ -32,8 +33,10 @@ function Dialog({
32
33
  modal = true,
33
34
  container,
34
35
  onOpenAutoFocus,
35
- className
36
+ className,
37
+ ...props
36
38
  }) {
39
+ const labels = useSatinLabels();
37
40
  const position = container ? "absolute" : "fixed";
38
41
  const hasBody = children != null || alert != null;
39
42
  return /* @__PURE__ */ jsxs(Dialog$1.Root, { open, defaultOpen, onOpenChange, modal, children: [
@@ -44,40 +47,41 @@ function Dialog({
44
47
  {
45
48
  className: cn(
46
49
  position,
47
- "inset-0 z-50 bg-black-a40"
50
+ "sa:inset-0 sa:z-50 sa:bg-black-a40"
48
51
  )
49
52
  }
50
53
  ),
51
- /* @__PURE__ */ jsx("div", { className: cn(position, "pointer-events-none inset-0 z-50 grid grid-cols-[minmax(0,1fr)] grid-rows-[minmax(0,1fr)] place-items-center p-4"), children: /* @__PURE__ */ jsxs(
54
+ /* @__PURE__ */ jsx("div", { className: cn(position, "sa:pointer-events-none sa:inset-0 sa:z-50 sa:grid sa:grid-cols-[minmax(0,1fr)] sa:grid-rows-[minmax(0,1fr)] sa:place-items-center sa:p-4"), children: /* @__PURE__ */ jsxs(
52
55
  Dialog$1.Content,
53
56
  {
57
+ ...description ? {} : { "aria-describedby": void 0 },
58
+ ...props,
54
59
  role: variant === "destructive" ? "alertdialog" : "dialog",
55
60
  "data-slot": "dialog",
56
61
  "data-variant": variant,
57
62
  onOpenAutoFocus,
58
- ...description ? {} : { "aria-describedby": void 0 },
59
63
  className: cn(
60
- "pointer-events-auto relative flex max-h-full w-[425px] max-w-[min(560px,100%)] min-w-[min(360px,100%)] flex-col overflow-clip",
61
- "rounded-2xl border border-border-default bg-bg-popover",
62
- "[box-shadow:0_4px_6px_-4px_var(--effect-shadow-sm),0_10px_15px_-3px_var(--effect-shadow-sm)]",
63
- "focus-visible:outline-none",
64
- "data-[state=open]:animate-[satin-enter_var(--duration-base)_var(--ease-out)]",
64
+ "sa:pointer-events-auto sa:relative sa:flex sa:max-h-full sa:w-[425px] sa:max-w-[min(560px,100%)] sa:min-w-[min(360px,100%)] sa:flex-col sa:overflow-clip",
65
+ "sa:rounded-2xl sa:border sa:border-border-default sa:bg-bg-popover",
66
+ "sa:[box-shadow:0_4px_6px_-4px_var(--effect-shadow-sm),0_10px_15px_-3px_var(--effect-shadow-sm)]",
67
+ "sa:focus-visible:outline-none",
68
+ "sa:data-[state=open]:animate-[satin-enter_var(--sa-duration-base)_var(--sa-ease-out)]",
65
69
  className
66
70
  ),
67
71
  children: [
68
- /* @__PURE__ */ jsxs("div", { className: "flex min-h-0 flex-col gap-3", children: [
69
- /* @__PURE__ */ jsxs("div", { className: "flex shrink-0 flex-col gap-0.5 px-4 pt-4 pb-2", children: [
70
- /* @__PURE__ */ jsx(Dialog$1.Title, { className: "pr-8 text-base leading-[14px] font-medium tracking-normal text-text-default", children: title }),
71
- description ? /* @__PURE__ */ jsx(Dialog$1.Description, { className: "text-body text-text-muted", children: description }) : null
72
+ /* @__PURE__ */ jsxs("div", { className: "sa:flex sa:min-h-0 sa:flex-col sa:gap-3", children: [
73
+ /* @__PURE__ */ jsxs("div", { className: "sa:flex sa:shrink-0 sa:flex-col sa:gap-0.5 sa:px-4 sa:pt-4 sa:pb-2", children: [
74
+ /* @__PURE__ */ jsx(Dialog$1.Title, { className: "sa:pr-8 sa:text-base sa:leading-[14px] sa:font-medium sa:tracking-normal sa:text-text-default", children: title }),
75
+ description ? /* @__PURE__ */ jsx(Dialog$1.Description, { className: "sa:text-body sa:text-text-muted", children: description }) : null
72
76
  ] }),
73
- hasBody && /* @__PURE__ */ jsxs("div", { className: "flex min-h-0 flex-col gap-3 overflow-y-auto px-4 pb-3", children: [
74
- typeof children === "string" ? /* @__PURE__ */ jsx("p", { className: "text-body text-text-default", children }) : children,
77
+ hasBody && /* @__PURE__ */ jsxs("div", { className: "sa:flex sa:min-h-0 sa:flex-col sa:gap-3 sa:overflow-y-auto sa:px-4 sa:pb-3", children: [
78
+ typeof children === "string" ? /* @__PURE__ */ jsx("p", { className: "sa:text-body sa:text-text-default", children }) : children,
75
79
  alert
76
80
  ] })
77
81
  ] }),
78
- (footer || footerStart) && /* @__PURE__ */ jsxs("div", { className: "flex shrink-0 flex-wrap items-center justify-end gap-3 p-4", children: [
79
- footerStart && /* @__PURE__ */ jsx("div", { className: "flex min-w-0 flex-1 items-center", children: footerStart }),
80
- /* @__PURE__ */ jsx("div", { className: "flex shrink-0 items-center gap-2", children: footer })
82
+ (footer || footerStart) && /* @__PURE__ */ jsxs("div", { className: "sa:flex sa:shrink-0 sa:flex-wrap sa:items-center sa:justify-end sa:gap-3 sa:p-4", children: [
83
+ footerStart && /* @__PURE__ */ jsx("div", { className: "sa:flex sa:min-w-0 sa:flex-1 sa:items-center", children: footerStart }),
84
+ /* @__PURE__ */ jsx("div", { className: "sa:flex sa:shrink-0 sa:items-center sa:gap-2", children: footer })
81
85
  ] }),
82
86
  closeButton && /* @__PURE__ */ jsx(Dialog$1.Close, { asChild: true, children: /* @__PURE__ */ jsx(
83
87
  Button,
@@ -85,8 +89,8 @@ function Dialog({
85
89
  variant: "tertiary",
86
90
  size: "xl",
87
91
  iconOnly: true,
88
- "aria-label": "Close",
89
- className: "absolute top-[7px] right-[7px] rounded-lg",
92
+ "aria-label": labels.close,
93
+ className: "sa:absolute sa:top-[7px] sa:right-[7px] sa:rounded-lg",
90
94
  children: /* @__PURE__ */ jsx(CloseIcon, {})
91
95
  }
92
96
  ) })
@@ -98,13 +102,13 @@ function Dialog({
98
102
  }
99
103
  var DialogClose = Dialog$1.Close;
100
104
  var alertTint = {
101
- info: "bg-status-sky-bg text-status-sky-fg",
102
- success: "bg-status-green-bg text-status-green-fg",
103
- warning: "bg-status-amber-bg text-status-amber-fg",
104
- error: "bg-status-red-bg text-status-red-fg"
105
+ info: "sa:bg-status-sky-bg sa:text-status-sky-fg",
106
+ success: "sa:bg-status-green-bg sa:text-status-green-fg",
107
+ warning: "sa:bg-status-amber-bg sa:text-status-amber-fg",
108
+ error: "sa:bg-status-red-bg sa:text-status-red-fg"
105
109
  };
106
110
  function StatusIcon({ intent }) {
107
- return /* @__PURE__ */ jsx("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", "aria-hidden": true, className: "shrink-0", children: /* @__PURE__ */ jsx("g", { stroke: "currentColor", style: { strokeWidth: 1.25 }, strokeLinecap: "round", strokeLinejoin: "round", children: intent === "success" ? /* @__PURE__ */ jsx("path", { d: "M3.33333 8.66667L6 11.3333L12.6667 4.66667" }) : /* @__PURE__ */ jsxs(Fragment, { children: [
111
+ return /* @__PURE__ */ jsx("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", "aria-hidden": true, className: "sa:shrink-0", children: /* @__PURE__ */ jsx("g", { stroke: "currentColor", style: { strokeWidth: 1.25 }, strokeLinecap: "round", strokeLinejoin: "round", children: intent === "success" ? /* @__PURE__ */ jsx("path", { d: "M3.33333 8.66667L6 11.3333L12.6667 4.66667" }) : /* @__PURE__ */ jsxs(Fragment, { children: [
108
112
  intent === "info" ? /* @__PURE__ */ jsxs(Fragment, { children: [
109
113
  /* @__PURE__ */ jsx("path", { d: "M8 7.70494V10.6557" }),
110
114
  /* @__PURE__ */ jsx("path", { d: "M8 5.35022L8.0059 5.34366" })
@@ -124,28 +128,27 @@ function DialogAlert({
124
128
  className,
125
129
  ...props
126
130
  }) {
131
+ const labels = useSatinLabels();
127
132
  return /* @__PURE__ */ jsxs(
128
133
  "div",
129
134
  {
130
135
  role: intent === "error" || intent === "warning" ? "alert" : "status",
131
136
  "data-slot": "dialog-alert",
132
137
  "data-intent": intent,
133
- className: cn("flex w-full items-center gap-3 rounded-xl px-4 py-3", alertTint[intent], className),
138
+ className: cn("sa:flex sa:w-full sa:items-center sa:gap-3 sa:rounded-xl sa:px-4 sa:py-3", alertTint[intent], className),
134
139
  ...props,
135
140
  children: [
136
- /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 flex-1 items-center gap-2.5", children: [
141
+ /* @__PURE__ */ jsxs("div", { className: "sa:flex sa:min-w-0 sa:flex-1 sa:items-center sa:gap-2.5", children: [
137
142
  icon && /* @__PURE__ */ jsx(StatusIcon, { intent }),
138
- /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 flex-1 flex-col", children: [
139
- /* @__PURE__ */ jsx("p", { className: "text-base font-medium text-text-default", children: title }),
140
- description ? /* @__PURE__ */ jsx("p", { className: "text-body text-text-muted", children: description }) : null
143
+ /* @__PURE__ */ jsxs("div", { className: "sa:flex sa:min-w-0 sa:flex-1 sa:flex-col", children: [
144
+ /* @__PURE__ */ jsx("p", { className: "sa:text-base sa:font-medium sa:text-text-default", children: title }),
145
+ description ? /* @__PURE__ */ jsx("p", { className: "sa:text-body sa:text-text-muted", children: description }) : null
141
146
  ] })
142
147
  ] }),
143
- onDismiss && /* @__PURE__ */ jsx(Button, { variant: "tertiary", iconOnly: true, "aria-label": "Dismiss", onClick: onDismiss, children: /* @__PURE__ */ jsx(CloseIcon, {}) })
148
+ onDismiss && /* @__PURE__ */ jsx(Button, { variant: "tertiary", iconOnly: true, "aria-label": labels.dismiss, onClick: onDismiss, children: /* @__PURE__ */ jsx(CloseIcon, {}) })
144
149
  ]
145
150
  }
146
151
  );
147
152
  }
148
153
 
149
154
  export { CloseIcon, Dialog, DialogAlert, DialogClose, StatusIcon };
150
- //# sourceMappingURL=chunk-JPNWHWAQ.js.map
151
- //# sourceMappingURL=chunk-JPNWHWAQ.js.map
@@ -0,0 +1,164 @@
1
+ import { Tooltip, TooltipBubble } from './chunk-GMETYACH.js';
2
+ import { cn } from './chunk-O46O6LFQ.js';
3
+ import * as React from 'react';
4
+ import { createPortal } from 'react-dom';
5
+ import { cva } from 'class-variance-authority';
6
+ import { jsx, jsxs } from 'react/jsx-runtime';
7
+
8
+ var avatarVariants = cva(
9
+ "sa:inline-flex sa:shrink-0 sa:items-center sa:justify-center sa:overflow-clip sa:bg-tone-bg sa:text-center sa:whitespace-nowrap sa:text-tone-fg sa:select-none",
10
+ {
11
+ variants: {
12
+ size: {
13
+ 16: "sa:size-4 sa:text-[7px] sa:leading-[8px] sa:font-semibold sa:tracking-normal",
14
+ 20: "sa:size-5 sa:text-[9px] sa:leading-[10px] sa:font-semibold sa:tracking-normal",
15
+ 24: "sa:size-6 sa:text-2xs sa:font-semibold",
16
+ 32: "sa:size-8 sa:text-sm sa:leading-4 sa:font-medium sa:tracking-normal",
17
+ 40: "sa:size-10 sa:text-base sa:leading-[14px] sa:font-medium sa:tracking-normal",
18
+ 48: "sa:size-12 sa:text-lg sa:font-medium"
19
+ },
20
+ shape: {
21
+ circle: "sa:rounded-full",
22
+ rounded: ""
23
+ }
24
+ },
25
+ compoundVariants: [
26
+ { shape: "sa:rounded", size: 16, className: "sa:rounded-xs" },
27
+ { shape: "sa:rounded", size: 20, className: "sa:rounded-xs" },
28
+ { shape: "sa:rounded", size: 24, className: "sa:rounded-sm" },
29
+ { shape: "sa:rounded", size: 32, className: "sa:rounded-md" },
30
+ { shape: "sa:rounded", size: 40, className: "sa:rounded-lg" },
31
+ { shape: "sa:rounded", size: 48, className: "sa:rounded-xl" }
32
+ ],
33
+ defaultVariants: { size: 32, shape: "circle" }
34
+ }
35
+ );
36
+ var AVATAR_TOOLTIP_DELAY = 400;
37
+ var AVATAR_TOOLTIP_CLOSE = 150;
38
+ var AvatarGroupContext = React.createContext(null);
39
+ function Avatar({ className, initials, tone = "neutral", size = 32, shape, name, ...props }) {
40
+ const group = React.useContext(AvatarGroupContext);
41
+ const grouped = group && name ? group : null;
42
+ const avatar = /* @__PURE__ */ jsx(
43
+ "span",
44
+ {
45
+ "data-slot": "avatar",
46
+ "data-tone": tone,
47
+ ...name ? { role: "img", "aria-label": name, tabIndex: 0 } : {},
48
+ className: cn(
49
+ avatarVariants({ size, shape }),
50
+ name && "sa:outline-none sa:focus-visible:[box-shadow:0_0_0_2px_var(--action-focus-ring)]",
51
+ className
52
+ ),
53
+ ...props,
54
+ ...grouped && {
55
+ onPointerEnter: (e) => (props.onPointerEnter?.(e), grouped.show(e.currentTarget, name)),
56
+ onPointerLeave: (e) => (props.onPointerLeave?.(e), grouped.hide()),
57
+ onFocus: (e) => (props.onFocus?.(e), grouped.show(e.currentTarget, name, true)),
58
+ onBlur: (e) => (props.onBlur?.(e), grouped.hide(true)),
59
+ onKeyDown: (e) => (props.onKeyDown?.(e), e.key === "Escape" && grouped.hide(true))
60
+ },
61
+ children: /* @__PURE__ */ jsx("span", { "aria-hidden": name ? true : void 0, children: initials })
62
+ }
63
+ );
64
+ if (!name || grouped) return avatar;
65
+ return /* @__PURE__ */ jsx(Tooltip, { label: name, delay: AVATAR_TOOLTIP_DELAY, closeDelay: AVATAR_TOOLTIP_CLOSE, children: avatar });
66
+ }
67
+ var GAP = 8;
68
+ var BUBBLE_PADDING = 20;
69
+ function AvatarGroup({ className, side = "top", children, ...props }) {
70
+ const [target, setTarget] = React.useState(null);
71
+ const [open, setOpen] = React.useState(false);
72
+ const shown = React.useRef(false);
73
+ const openTimer = React.useRef(void 0);
74
+ const closeTimer = React.useRef(void 0);
75
+ const api = React.useMemo(() => {
76
+ const set = (next) => {
77
+ shown.current = next;
78
+ setOpen(next);
79
+ };
80
+ return {
81
+ show(el, name, now) {
82
+ clearTimeout(closeTimer.current);
83
+ clearTimeout(openTimer.current);
84
+ setTarget({ el, name });
85
+ if (shown.current || now) set(true);
86
+ else openTimer.current = setTimeout(() => set(true), AVATAR_TOOLTIP_DELAY);
87
+ },
88
+ hide(now) {
89
+ clearTimeout(openTimer.current);
90
+ clearTimeout(closeTimer.current);
91
+ if (now) set(false);
92
+ else closeTimer.current = setTimeout(() => set(false), AVATAR_TOOLTIP_CLOSE);
93
+ }
94
+ };
95
+ }, []);
96
+ React.useEffect(
97
+ () => () => {
98
+ clearTimeout(openTimer.current);
99
+ clearTimeout(closeTimer.current);
100
+ },
101
+ []
102
+ );
103
+ return /* @__PURE__ */ jsxs(AvatarGroupContext.Provider, { value: api, children: [
104
+ /* @__PURE__ */ jsx("div", { "data-slot": "avatar-group", role: "group", className: cn("sa:flex sa:items-center sa:gap-2", className), ...props, children }),
105
+ open && target && /* @__PURE__ */ jsx(GroupTooltip, { anchor: target.el, name: target.name, side })
106
+ ] });
107
+ }
108
+ function GroupTooltip({ anchor, name, side }) {
109
+ const label = React.useRef(null);
110
+ const [width, setWidth] = React.useState();
111
+ const [point, setPoint] = React.useState();
112
+ React.useLayoutEffect(() => {
113
+ if (label.current) setWidth(label.current.offsetWidth + BUBBLE_PADDING);
114
+ }, [name]);
115
+ React.useLayoutEffect(() => {
116
+ const place = () => {
117
+ const r = anchor.getBoundingClientRect();
118
+ const half = (width ?? 0) / 2;
119
+ const x = Math.min(Math.max(r.left + r.width / 2, half + GAP), window.innerWidth - half - GAP);
120
+ setPoint({ x, y: side === "top" ? r.top - GAP : r.bottom + GAP });
121
+ };
122
+ place();
123
+ addEventListener("scroll", place, true);
124
+ addEventListener("resize", place);
125
+ return () => {
126
+ removeEventListener("scroll", place, true);
127
+ removeEventListener("resize", place);
128
+ };
129
+ }, [anchor, side, width]);
130
+ if (!point) return null;
131
+ return createPortal(
132
+ // A point at the avatar's edge, moved with transform so a change of person slides; the
133
+ // bubble hangs off it, centred, so a width change grows evenly on both sides.
134
+ /* @__PURE__ */ jsx(
135
+ "div",
136
+ {
137
+ "aria-hidden": true,
138
+ "data-side": side,
139
+ className: "sa:pointer-events-none sa:fixed sa:top-0 sa:left-0 sa:z-50 sa:transition-transform sa:duration-(--sa-duration-base) sa:ease-(--sa-ease-out) sa:motion-reduce:transition-none",
140
+ style: { transform: `translate(${point.x}px, ${point.y}px)` },
141
+ children: /* @__PURE__ */ jsx(
142
+ "div",
143
+ {
144
+ className: cn(
145
+ "sa:-translate-x-1/2 sa:transition-[opacity,translate] sa:duration-(--sa-duration-fast) sa:ease-(--sa-ease-out) sa:starting:opacity-0",
146
+ side === "top" ? "sa:-translate-y-full sa:starting:-translate-y-[calc(100%-4px)]" : "sa:starting:translate-y-[-4px]"
147
+ ),
148
+ children: /* @__PURE__ */ jsx(
149
+ TooltipBubble,
150
+ {
151
+ className: "sa:overflow-hidden sa:transition-[width] sa:duration-(--sa-duration-base) sa:ease-(--sa-ease-out) sa:motion-reduce:transition-none",
152
+ style: { width },
153
+ label: /* @__PURE__ */ jsx("span", { ref: label, className: "sa:inline-block sa:shrink-0 sa:transition-opacity sa:duration-(--sa-duration-fast) sa:ease-(--sa-ease-out) sa:starting:opacity-0", children: name }, name)
154
+ }
155
+ )
156
+ }
157
+ )
158
+ }
159
+ ),
160
+ document.body
161
+ );
162
+ }
163
+
164
+ export { AVATAR_TOOLTIP_DELAY, Avatar, AvatarGroup, avatarVariants };
@@ -1,15 +1,16 @@
1
- import { KbdGroup } from './chunk-BKZBWPUH.js';
2
- import { cn } from './chunk-H63FYCMY.js';
1
+ import { KbdGroup } from './chunk-57QEOCDZ.js';
2
+ import { useSatinLabels } from './chunk-SSOFFQ5T.js';
3
+ import { cn } from './chunk-O46O6LFQ.js';
3
4
  import 'react';
4
5
  import { DropdownMenu as DropdownMenu$1 } from 'radix-ui';
5
6
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
6
7
 
7
8
  var menuSurfaceClass = cn(
8
- "rounded-xl border border-border-subtle bg-bg-popover",
9
- "[box-shadow:0_1px_3px_0_var(--effect-shadow-sm),0_1px_2px_-1px_var(--effect-shadow-sm)]"
9
+ "sa:rounded-xl sa:border sa:border-border-subtle sa:bg-bg-popover",
10
+ "sa:[box-shadow:0_1px_3px_0_var(--effect-shadow-sm),0_1px_2px_-1px_var(--effect-shadow-sm)]"
10
11
  );
11
- var menuGroupClass = "flex flex-col gap-1 not-last:after:block not-last:after:h-px not-last:after:bg-bg-muted";
12
- var menuGroupLabelClass = "flex h-6 items-center px-3 text-xs leading-3 tracking-normal text-text-subtle";
12
+ var menuGroupClass = "sa:flex sa:flex-col sa:gap-1 sa:not-last:after:block sa:not-last:after:h-px sa:not-last:after:bg-bg-muted";
13
+ var menuGroupLabelClass = "sa:flex sa:h-6 sa:items-center sa:px-3 sa:text-xs sa:leading-3 sa:tracking-normal sa:text-text-subtle";
13
14
  function DropdownMenu({
14
15
  trigger,
15
16
  children,
@@ -30,19 +31,19 @@ function DropdownMenu({
30
31
  /* @__PURE__ */ jsx(DropdownMenu$1.Portal, { container, children: /* @__PURE__ */ jsx(
31
32
  DropdownMenu$1.Content,
32
33
  {
34
+ collisionPadding: 8,
35
+ ...props,
33
36
  "data-slot": "dropdown-menu",
34
- "aria-label": props["aria-label"],
35
37
  side,
36
38
  align,
37
39
  sideOffset,
38
- collisionPadding: 8,
39
40
  onFocusOutside,
40
41
  className: cn(
41
- "pointer-events-auto z-50 flex w-[255px] max-w-[520px] flex-col gap-1 overflow-x-clip overflow-y-auto p-1",
42
- "max-h-(--radix-dropdown-menu-content-available-height)",
42
+ "sa:pointer-events-auto sa:z-50 sa:flex sa:w-[255px] sa:max-w-[520px] sa:flex-col sa:gap-1 sa:overflow-x-clip sa:overflow-y-auto sa:p-1",
43
+ "sa:max-h-(--radix-dropdown-menu-content-available-height)",
43
44
  menuSurfaceClass,
44
- "origin-(--radix-dropdown-menu-content-transform-origin) outline-none",
45
- "data-[state=open]:animate-[satin-enter_var(--duration-base)_var(--ease-out)]",
45
+ "sa:origin-(--radix-dropdown-menu-content-transform-origin) sa:outline-none",
46
+ "sa:data-[state=open]:animate-[satin-enter_var(--sa-duration-base)_var(--sa-ease-out)]",
46
47
  className
47
48
  ),
48
49
  children
@@ -65,11 +66,11 @@ function DropdownMenuGroup({ label, children, className, ...props }) {
65
66
  );
66
67
  }
67
68
  var menuItemClass = cn(
68
- "flex min-h-menu-row w-full cursor-pointer items-center gap-2 rounded-lg px-3 py-1.5 text-left outline-none select-none focus-visible:ring-0",
69
- "transition-colors duration-(--duration-fast) ease-(--ease-out)",
70
- "data-[highlighted]:bg-bg-selected data-[force=hover]:bg-bg-selected data-[selected]:bg-bg-selected",
71
- "data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
72
- "[&_svg]:pointer-events-none [&_svg]:shrink-0"
69
+ "sa:flex sa:min-h-menu-row sa:w-full sa:cursor-pointer sa:items-center sa:gap-2 sa:rounded-lg sa:px-3 sa:py-1.5 sa:text-left sa:outline-none sa:select-none sa:focus-visible:ring-0",
70
+ "sa:transition-colors sa:duration-(--sa-duration-fast) sa:ease-(--sa-ease-out)",
71
+ "sa:data-[highlighted]:bg-bg-selected sa:data-[force=hover]:bg-bg-selected sa:data-[selected]:bg-bg-selected",
72
+ "sa:data-[disabled]:pointer-events-none sa:data-[disabled]:opacity-50",
73
+ "sa:[&_svg]:pointer-events-none sa:[&_svg]:shrink-0"
73
74
  );
74
75
  function MenuItemContent({
75
76
  label,
@@ -81,27 +82,32 @@ function MenuItemContent({
81
82
  shortcut,
82
83
  renderLabel = (l) => l
83
84
  }) {
85
+ const labels = useSatinLabels();
84
86
  return /* @__PURE__ */ jsxs(Fragment, { children: [
85
87
  icon ? /* @__PURE__ */ jsx(
86
88
  "span",
87
89
  {
88
90
  className: cn(
89
- "grid shrink-0 place-items-center text-text-muted",
90
- iconSize === 20 ? "size-5 [&_svg]:size-5 [&_svg]:[stroke-width:1.5]" : "size-4 [&_svg]:size-4 [&_svg]:[stroke-width:1.875]"
91
+ "sa:grid sa:shrink-0 sa:place-items-center sa:text-text-muted",
92
+ iconSize === 20 ? "sa:size-5 sa:[&_svg]:size-5 sa:[&_svg]:[stroke-width:1.5]" : "sa:size-4 sa:[&_svg]:size-4 sa:[&_svg]:[stroke-width:1.875]"
91
93
  ),
92
94
  children: icon
93
95
  }
94
96
  ) : null,
95
- layout === "stacked" ? /* @__PURE__ */ jsxs("span", { className: "flex min-w-0 flex-1 flex-col justify-center gap-0.5", children: [
96
- /* @__PURE__ */ jsx("span", { className: "text-base leading-5 font-medium text-text-default", children: renderLabel(label) }),
97
- description ? /* @__PURE__ */ jsx("span", { className: "text-sm leading-[18px] text-text-muted", children: description }) : null
98
- ] }) : /* @__PURE__ */ jsxs("span", { className: "flex min-w-0 flex-1 items-baseline gap-3", children: [
99
- /* @__PURE__ */ jsx("span", { className: "shrink-0 text-base leading-5 font-medium whitespace-nowrap text-text-default", children: renderLabel(label) }),
100
- description ? /* @__PURE__ */ jsx("span", { className: "min-w-0 flex-1 truncate text-sm text-text-muted", children: description }) : null
97
+ layout === "stacked" ? /* @__PURE__ */ jsxs("span", { className: "sa:flex sa:min-w-0 sa:flex-1 sa:flex-col sa:justify-center sa:gap-0.5", children: [
98
+ /* @__PURE__ */ jsx("span", { className: "sa:text-base sa:leading-5 sa:font-medium sa:text-text-default", children: renderLabel(label) }),
99
+ description ? /* @__PURE__ */ jsx("span", { className: "sa:text-sm sa:leading-[18px] sa:text-text-muted", children: description }) : null
100
+ ] }) : /* @__PURE__ */ jsxs("span", { className: "sa:flex sa:min-w-0 sa:flex-1 sa:items-baseline sa:gap-3", children: [
101
+ /* @__PURE__ */ jsx("span", { className: "sa:shrink-0 sa:text-base sa:leading-5 sa:font-medium sa:whitespace-nowrap sa:text-text-default", children: renderLabel(label) }),
102
+ description ? /* @__PURE__ */ jsx("span", { className: "sa:min-w-0 sa:flex-1 sa:truncate sa:text-sm sa:text-text-muted", children: description }) : null
101
103
  ] }),
102
104
  shortcut && /* @__PURE__ */ jsx(KbdGroup, { keys: shortcut, "aria-hidden": true }),
103
- selected && /* @__PURE__ */ jsx("span", { className: "sr-only", children: "(selected)" }),
104
- selected && /* @__PURE__ */ jsx("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", "aria-hidden": true, className: "text-status-green-fg", children: /* @__PURE__ */ jsx(
105
+ selected && /* @__PURE__ */ jsxs("span", { className: "sa:sr-only", children: [
106
+ "(",
107
+ labels.selected,
108
+ ")"
109
+ ] }),
110
+ selected && /* @__PURE__ */ jsx("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", "aria-hidden": true, className: "sa:text-status-green-fg", children: /* @__PURE__ */ jsx(
105
111
  "path",
106
112
  {
107
113
  d: "M3.33333 8.66667L6 11.3333L12.6667 4.66667",
@@ -149,5 +155,3 @@ function DropdownMenuItem({
149
155
  }
150
156
 
151
157
  export { DropdownMenu, DropdownMenuGroup, DropdownMenuItem, MenuItemContent, menuGroupClass, menuGroupLabelClass, menuItemClass, menuSurfaceClass };
152
- //# sourceMappingURL=chunk-3DINAQLL.js.map
153
- //# sourceMappingURL=chunk-3DINAQLL.js.map