@uisatin/ui 0.2.0 → 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 (309) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/README.md +10 -1
  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-MYEZXZZC.js → chunk-BN7FDKCJ.js} +23 -25
  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.js +4 -6
  78. package/components/badge.js +2 -4
  79. package/components/banner-mesh.js +1 -3
  80. package/components/banner.js +4 -6
  81. package/components/bar-chart.js +10 -11
  82. package/components/breadcrumb.js +5 -6
  83. package/components/button.js +2 -4
  84. package/components/card.js +3 -5
  85. package/components/channel-chart.js +10 -11
  86. package/components/chart.js +9 -10
  87. package/components/checkbox.js +2 -4
  88. package/components/chip.js +2 -4
  89. package/components/citations.d.ts +6 -4
  90. package/components/citations.js +4 -5
  91. package/components/code-block.js +3 -5
  92. package/components/combobox.d.ts +12 -3
  93. package/components/combobox.js +9 -10
  94. package/components/command-menu.d.ts +6 -2
  95. package/components/command-menu.js +5 -6
  96. package/components/context-menu.d.ts +12 -5
  97. package/components/context-menu.js +5 -6
  98. package/components/cookie-consent.js +3 -5
  99. package/components/date-picker.d.ts +26 -14
  100. package/components/date-picker.js +8 -9
  101. package/components/decision-card.js +6 -7
  102. package/components/dialog.d.ts +5 -2
  103. package/components/dialog.js +4 -5
  104. package/components/donut-chart.js +10 -11
  105. package/components/dot.js +2 -4
  106. package/components/dropdown.d.ts +6 -1
  107. package/components/dropdown.js +4 -5
  108. package/components/empty-state.js +2 -4
  109. package/components/file-upload.js +6 -7
  110. package/components/floating.js +1 -3
  111. package/components/form-field.js +2 -4
  112. package/components/hover-card.d.ts +5 -2
  113. package/components/hover-card.js +2 -4
  114. package/components/input-otp.d.ts +4 -2
  115. package/components/input-otp.js +7 -8
  116. package/components/input.js +3 -5
  117. package/components/kbd.js +2 -4
  118. package/components/labels.d.ts +79 -0
  119. package/components/labels.js +1 -0
  120. package/components/line-chart.js +11 -12
  121. package/components/message-actions.js +4 -5
  122. package/components/message.js +7 -8
  123. package/components/number-input.d.ts +4 -2
  124. package/components/number-input.js +7 -8
  125. package/components/pagination.js +4 -6
  126. package/components/popover.d.ts +11 -5
  127. package/components/popover.js +3 -4
  128. package/components/progress.js +2 -4
  129. package/components/prompt-bar.js +5 -6
  130. package/components/radio.js +2 -4
  131. package/components/search-bar.js +3 -5
  132. package/components/segmented-control.d.ts +4 -2
  133. package/components/segmented-control.js +3 -5
  134. package/components/select.d.ts +10 -2
  135. package/components/select.js +6 -7
  136. package/components/sheet.d.ts +4 -2
  137. package/components/sheet.js +5 -6
  138. package/components/sidebar.js +2 -4
  139. package/components/skeleton.js +2 -4
  140. package/components/slider.d.ts +6 -2
  141. package/components/slider.js +7 -8
  142. package/components/sliding-indicator.js +1 -3
  143. package/components/streaming-text.js +2 -4
  144. package/components/switch.js +2 -4
  145. package/components/table.d.ts +16 -5
  146. package/components/table.js +4 -5
  147. package/components/tabs.d.ts +4 -2
  148. package/components/tabs.js +3 -5
  149. package/components/textarea.js +3 -5
  150. package/components/thinking.js +3 -5
  151. package/components/toast.js +4 -5
  152. package/components/toggle.js +2 -4
  153. package/components/tooltip.d.ts +5 -2
  154. package/components/tooltip.js +3 -5
  155. package/index.d.ts +1 -0
  156. package/index.js +67 -231
  157. package/lib/utils.d.ts +8 -1
  158. package/lib/utils.js +1 -3
  159. package/package.json +11 -1
  160. package/styles.css +1 -1
  161. package/theme/create-theme.d.ts +6 -2
  162. package/theme/index.js +1 -0
  163. package/chunk-2HKBZFIK.js.map +0 -1
  164. package/chunk-3DINAQLL.js.map +0 -1
  165. package/chunk-3ERGAHKA.js +0 -179
  166. package/chunk-3ERGAHKA.js.map +0 -1
  167. package/chunk-6C7CGJX2.js +0 -86
  168. package/chunk-6C7CGJX2.js.map +0 -1
  169. package/chunk-6QMSWITQ.js.map +0 -1
  170. package/chunk-6YXUBP27.js.map +0 -1
  171. package/chunk-72OCFAPT.js.map +0 -1
  172. package/chunk-7TXHCRAG.js.map +0 -1
  173. package/chunk-A5XEM3GF.js.map +0 -1
  174. package/chunk-AN2RNJLR.js.map +0 -1
  175. package/chunk-B2K45IUR.js.map +0 -1
  176. package/chunk-B6V4VSGH.js.map +0 -1
  177. package/chunk-BKZBWPUH.js.map +0 -1
  178. package/chunk-BNTPPZCK.js.map +0 -1
  179. package/chunk-BNZVTLHV.js.map +0 -1
  180. package/chunk-CL2II6BX.js.map +0 -1
  181. package/chunk-D7RZNTFC.js +0 -95
  182. package/chunk-D7RZNTFC.js.map +0 -1
  183. package/chunk-DETGJAIC.js +0 -147
  184. package/chunk-DETGJAIC.js.map +0 -1
  185. package/chunk-DO3TBNSC.js.map +0 -1
  186. package/chunk-ESC5JCVQ.js +0 -90
  187. package/chunk-ESC5JCVQ.js.map +0 -1
  188. package/chunk-FDKIX4DC.js.map +0 -1
  189. package/chunk-GICKPMJU.js.map +0 -1
  190. package/chunk-GQA24FYG.js +0 -57
  191. package/chunk-GQA24FYG.js.map +0 -1
  192. package/chunk-H4NU7NPO.js.map +0 -1
  193. package/chunk-H63FYCMY.js +0 -11
  194. package/chunk-H63FYCMY.js.map +0 -1
  195. package/chunk-HL42K2NH.js.map +0 -1
  196. package/chunk-HNQUX43Z.js +0 -109
  197. package/chunk-HNQUX43Z.js.map +0 -1
  198. package/chunk-HRKPV66B.js +0 -32
  199. package/chunk-HRKPV66B.js.map +0 -1
  200. package/chunk-J3NSDRVH.js.map +0 -1
  201. package/chunk-JPNWHWAQ.js.map +0 -1
  202. package/chunk-KNUWZNFV.js.map +0 -1
  203. package/chunk-L6NCCSIP.js.map +0 -1
  204. package/chunk-LLHTVIM3.js.map +0 -1
  205. package/chunk-LW3TRU5W.js.map +0 -1
  206. package/chunk-LZMKSFCF.js.map +0 -1
  207. package/chunk-MR3JDI7E.js +0 -122
  208. package/chunk-MR3JDI7E.js.map +0 -1
  209. package/chunk-MYEZXZZC.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-TX3H3QMA.js.map +0 -1
  225. package/chunk-UBNHSZSE.js.map +0 -1
  226. package/chunk-UC3ZJWOD.js +0 -73
  227. package/chunk-UC3ZJWOD.js.map +0 -1
  228. package/chunk-UGRSWP6U.js.map +0 -1
  229. package/chunk-VAGIAREV.js.map +0 -1
  230. package/chunk-WTMZT3IT.js +0 -105
  231. package/chunk-WTMZT3IT.js.map +0 -1
  232. package/chunk-WX6BP5ZP.js +0 -39
  233. package/chunk-WX6BP5ZP.js.map +0 -1
  234. package/chunk-X3PQANZO.js.map +0 -1
  235. package/chunk-XILQ7GXE.js.map +0 -1
  236. package/chunk-XL75JRUA.js.map +0 -1
  237. package/chunk-XZNHT6MO.js.map +0 -1
  238. package/chunk-Y5AYU7PK.js.map +0 -1
  239. package/chunk-YG7JOOLJ.js.map +0 -1
  240. package/chunk-YPJYW624.js +0 -195
  241. package/chunk-YPJYW624.js.map +0 -1
  242. package/chunk-YPNKBE5X.js.map +0 -1
  243. package/chunk-YX5VNRJX.js.map +0 -1
  244. package/components/accordion.js.map +0 -1
  245. package/components/agent-loading.js.map +0 -1
  246. package/components/agent-picker.js.map +0 -1
  247. package/components/agent-suggestion.js.map +0 -1
  248. package/components/announcement-bar.js.map +0 -1
  249. package/components/attachment.js.map +0 -1
  250. package/components/avatar.js.map +0 -1
  251. package/components/badge.js.map +0 -1
  252. package/components/banner-mesh.js.map +0 -1
  253. package/components/banner.js.map +0 -1
  254. package/components/bar-chart.js.map +0 -1
  255. package/components/breadcrumb.js.map +0 -1
  256. package/components/button.js.map +0 -1
  257. package/components/card.js.map +0 -1
  258. package/components/channel-chart.js.map +0 -1
  259. package/components/chart.js.map +0 -1
  260. package/components/checkbox.js.map +0 -1
  261. package/components/chip.js.map +0 -1
  262. package/components/citations.js.map +0 -1
  263. package/components/code-block.js.map +0 -1
  264. package/components/combobox.js.map +0 -1
  265. package/components/command-menu.js.map +0 -1
  266. package/components/context-menu.js.map +0 -1
  267. package/components/cookie-consent.js.map +0 -1
  268. package/components/date-picker.js.map +0 -1
  269. package/components/decision-card.js.map +0 -1
  270. package/components/dialog.js.map +0 -1
  271. package/components/donut-chart.js.map +0 -1
  272. package/components/dot.js.map +0 -1
  273. package/components/dropdown.js.map +0 -1
  274. package/components/empty-state.js.map +0 -1
  275. package/components/file-upload.js.map +0 -1
  276. package/components/floating.js.map +0 -1
  277. package/components/form-field.js.map +0 -1
  278. package/components/hover-card.js.map +0 -1
  279. package/components/input-otp.js.map +0 -1
  280. package/components/input.js.map +0 -1
  281. package/components/kbd.js.map +0 -1
  282. package/components/line-chart.js.map +0 -1
  283. package/components/message-actions.js.map +0 -1
  284. package/components/message.js.map +0 -1
  285. package/components/number-input.js.map +0 -1
  286. package/components/pagination.js.map +0 -1
  287. package/components/popover.js.map +0 -1
  288. package/components/progress.js.map +0 -1
  289. package/components/prompt-bar.js.map +0 -1
  290. package/components/radio.js.map +0 -1
  291. package/components/search-bar.js.map +0 -1
  292. package/components/segmented-control.js.map +0 -1
  293. package/components/select.js.map +0 -1
  294. package/components/sheet.js.map +0 -1
  295. package/components/sidebar.js.map +0 -1
  296. package/components/skeleton.js.map +0 -1
  297. package/components/slider.js.map +0 -1
  298. package/components/sliding-indicator.js.map +0 -1
  299. package/components/streaming-text.js.map +0 -1
  300. package/components/switch.js.map +0 -1
  301. package/components/table.js.map +0 -1
  302. package/components/tabs.js.map +0 -1
  303. package/components/textarea.js.map +0 -1
  304. package/components/thinking.js.map +0 -1
  305. package/components/toast.js.map +0 -1
  306. package/components/toggle.js.map +0 -1
  307. package/components/tooltip.js.map +0 -1
  308. package/index.js.map +0 -1
  309. package/lib/utils.js.map +0 -1
@@ -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 * 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
@@ -0,0 +1,112 @@
1
+ import { useSlidingIndicator } from './chunk-XETMIETJ.js';
2
+ import { cn } from './chunk-O46O6LFQ.js';
3
+ import * as React from 'react';
4
+ import { ToggleGroup } from 'radix-ui';
5
+ import { cva } from 'class-variance-authority';
6
+ import { jsxs, jsx } from 'react/jsx-runtime';
7
+
8
+ var track = cva("sa:relative sa:isolate sa:inline-flex sa:items-center sa:gap-0.5 sa:bg-bg-muted sa:p-1", {
9
+ variants: {
10
+ shape: { default: "sa:rounded-lg", rounded: "sa:rounded-pill" },
11
+ border: { true: "sa:border sa:border-border-subtle", false: "" },
12
+ fullWidth: { true: "sa:flex sa:w-full", false: "" }
13
+ }
14
+ });
15
+ var segment = cva(
16
+ [
17
+ "sa:relative sa:z-10 sa:inline-flex sa:items-center sa:justify-center sa:font-medium sa:whitespace-nowrap sa:text-text-muted sa:select-none",
18
+ "sa:transition-[color,background-color,box-shadow] sa:duration-(--sa-duration-fast) sa:ease-(--sa-ease-out)",
19
+ "sa:satin-hover:text-text-default sa:data-[state=on]:text-text-default",
20
+ "sa:satin-pressed:bg-component-segmented-pressed sa:satin-pressed:text-text-default",
21
+ "sa:focus-visible:outline-none sa:satin-focus:text-text-default sa:satin-focus:[box-shadow:0_0_0_2px_var(--action-focus-ring)]",
22
+ "sa:disabled:pointer-events-none sa:disabled:text-text-subtle",
23
+ "sa:[&_svg]:pointer-events-none sa:[&_svg]:shrink-0 sa:[&_svg]:[stroke-width:1.875]"
24
+ ],
25
+ {
26
+ variants: {
27
+ size: {
28
+ xs: "sa:h-control-height-xs sa:gap-1 sa:px-2.5 sa:text-sm sa:[&_svg]:size-icon-size-sm",
29
+ md: "sa:h-control-height sa:gap-1.5 sa:px-3 sa:text-sm sa:[&_svg]:size-icon-size",
30
+ lg: "sa:h-control-height-lg sa:gap-1.5 sa:px-4 sa:text-base sa:[&_svg]:size-icon-size"
31
+ },
32
+ shape: { default: "sa:rounded-sm", rounded: "sa:rounded-pill" },
33
+ fullWidth: { true: "sa:flex-1", false: "" }
34
+ }
35
+ }
36
+ );
37
+ function SegmentedControl({
38
+ items,
39
+ value: valueProp,
40
+ defaultValue,
41
+ onValueChange,
42
+ size = "md",
43
+ shape = "default",
44
+ border = false,
45
+ fullWidth = false,
46
+ className,
47
+ ref,
48
+ ...props
49
+ }) {
50
+ const [inner, setInner] = React.useState(defaultValue ?? items[0]?.value ?? "");
51
+ const value = valueProp ?? inner;
52
+ const trackRef = React.useRef(null);
53
+ const setTrack = React.useCallback(
54
+ (node) => {
55
+ trackRef.current = node;
56
+ if (typeof ref === "function") ref(node);
57
+ else if (ref) ref.current = node;
58
+ },
59
+ [ref]
60
+ );
61
+ const pill = useSlidingIndicator(trackRef, '[data-state="on"]', `${value}|${size}|${fullWidth}|${items.length}`);
62
+ return /* @__PURE__ */ jsxs(
63
+ ToggleGroup.Root,
64
+ {
65
+ ...props,
66
+ ref: setTrack,
67
+ type: "single",
68
+ value,
69
+ onValueChange: (next) => {
70
+ if (!next) return;
71
+ setInner(next);
72
+ onValueChange?.(next);
73
+ },
74
+ "data-slot": "segmented-control",
75
+ className: cn(track({ shape, border, fullWidth }), className),
76
+ children: [
77
+ /* @__PURE__ */ jsx(
78
+ "span",
79
+ {
80
+ ref: pill.ref,
81
+ "aria-hidden": true,
82
+ className: cn(
83
+ "sa:pointer-events-none sa:absolute sa:top-1 sa:bottom-1 sa:left-0 sa:z-0 sa:bg-component-segmented-selected sa:opacity-0 sa:[box-shadow:0_1px_3px_0_var(--effect-shadow-sm),0_1px_2px_-1px_var(--effect-shadow-sm)]",
84
+ shape === "sa:rounded" ? "sa:rounded-pill" : "sa:rounded-sm"
85
+ )
86
+ }
87
+ ),
88
+ items.map((item) => /* @__PURE__ */ jsxs(
89
+ ToggleGroup.Item,
90
+ {
91
+ value: item.value,
92
+ disabled: item.disabled,
93
+ className: cn(
94
+ segment({ size, shape, fullWidth }),
95
+ // Unselected focus: bg/muted under the ring. Selected focus keeps the pill's fill.
96
+ "sa:data-[state=off]:satin-focus:bg-bg-muted",
97
+ // Before the pill is measured (server render), the selected segment paints its own fill.
98
+ !pill.ready && "sa:data-[state=on]:bg-component-segmented-selected sa:data-[state=on]:[box-shadow:0_1px_3px_0_var(--effect-shadow-sm),0_1px_2px_-1px_var(--effect-shadow-sm)]"
99
+ ),
100
+ children: [
101
+ item.icon,
102
+ item.label
103
+ ]
104
+ },
105
+ item.value
106
+ ))
107
+ ]
108
+ }
109
+ );
110
+ }
111
+
112
+ export { SegmentedControl };
@@ -1,5 +1,5 @@
1
- import { useFormField } from './chunk-UBNHSZSE.js';
2
- import { cn } from './chunk-H63FYCMY.js';
1
+ import { useFormField } from './chunk-VUOAPWTF.js';
2
+ import { cn } from './chunk-O46O6LFQ.js';
3
3
  import * as React from 'react';
4
4
  import { jsxs, jsx } from 'react/jsx-runtime';
5
5
 
@@ -38,13 +38,13 @@ function Textarea({
38
38
  {
39
39
  "data-slot": "textarea-wrapper",
40
40
  "data-disabled": isDisabled || void 0,
41
- className: cn("satin-textarea-root grid w-full gap-2", wrapperClassName),
41
+ className: cn("satin-textarea-root sa:grid sa:w-full sa:gap-2", wrapperClassName),
42
42
  children: [
43
- label && /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1", children: [
44
- /* @__PURE__ */ jsx("label", { htmlFor: textareaId, className: "text-sm leading-[18px] font-medium text-text-default", children: label }),
45
- optional && /* @__PURE__ */ jsx("span", { className: "text-sm text-text-muted", children: "(Optional)" })
43
+ label && /* @__PURE__ */ jsxs("div", { className: "sa:flex sa:items-center sa:gap-1", children: [
44
+ /* @__PURE__ */ jsx("label", { htmlFor: textareaId, className: "sa:text-sm sa:leading-[18px] sa:font-medium sa:text-text-default", children: label }),
45
+ optional && /* @__PURE__ */ jsx("span", { className: "sa:text-sm sa:text-text-muted", children: "(Optional)" })
46
46
  ] }),
47
- /* @__PURE__ */ jsxs("div", { className: "relative flex", children: [
47
+ /* @__PURE__ */ jsxs("div", { className: "sa:relative sa:flex", children: [
48
48
  /* @__PURE__ */ jsx(
49
49
  "textarea",
50
50
  {
@@ -74,13 +74,13 @@ function Textarea({
74
74
  "div",
75
75
  {
76
76
  className: cn(
77
- "flex items-start gap-2 text-sm",
78
- hasMessage ? "text-action-destructive-bg" : "text-text-muted"
77
+ "sa:flex sa:items-start sa:gap-2 sa:text-sm",
78
+ hasMessage ? "sa:text-action-destructive-bg" : "sa:text-text-muted"
79
79
  ),
80
80
  children: [
81
- /* @__PURE__ */ jsx("p", { id: messageId, className: "min-w-0 flex-1", children: message }),
82
- maxLength != null && /* @__PURE__ */ jsxs("p", { id: counterId, className: cn("shrink-0 whitespace-nowrap", !hasMessage && "text-text-muted"), children: [
83
- /* @__PURE__ */ jsx("span", { className: "sr-only", children: "Characters used: " }),
81
+ /* @__PURE__ */ jsx("p", { id: messageId, className: "sa:min-w-0 sa:flex-1", children: message }),
82
+ maxLength != null && /* @__PURE__ */ jsxs("p", { id: counterId, className: cn("sa:shrink-0 sa:whitespace-nowrap", !hasMessage && "sa:text-text-muted"), children: [
83
+ /* @__PURE__ */ jsx("span", { className: "sa:sr-only", children: "Characters used: " }),
84
84
  text.length,
85
85
  "/",
86
86
  maxLength
@@ -94,5 +94,3 @@ function Textarea({
94
94
  }
95
95
 
96
96
  export { Textarea };
97
- //# sourceMappingURL=chunk-QUF2IPOZ.js.map
98
- //# sourceMappingURL=chunk-QUF2IPOZ.js.map
@@ -0,0 +1,87 @@
1
+ import { HoverCard } from './chunk-PD6YPFYN.js';
2
+ import { useSatinLabels } from './chunk-SSOFFQ5T.js';
3
+ import { cn } from './chunk-O46O6LFQ.js';
4
+ import * as React from 'react';
5
+ import { jsx, jsxs } from 'react/jsx-runtime';
6
+
7
+ function SourceIcon({ source }) {
8
+ if (source.icon) return /* @__PURE__ */ jsx("span", { className: "sa:grid sa:size-4 sa:shrink-0 sa:place-items-center sa:overflow-clip sa:rounded-xs sa:[&>*]:size-4", children: source.icon });
9
+ return /* @__PURE__ */ jsx("span", { "aria-hidden": true, className: "sa:grid sa:size-4 sa:shrink-0 sa:place-items-center sa:rounded-xs sa:bg-bg-muted sa:text-[10px] sa:leading-none sa:font-semibold sa:text-text-muted", children: source.title.charAt(0).toUpperCase() });
10
+ }
11
+ function Citation({ index, source, className, "aria-label": ariaLabel, ...props }) {
12
+ const labels = useSatinLabels();
13
+ const chip = /* @__PURE__ */ jsx(
14
+ "a",
15
+ {
16
+ ...props,
17
+ "data-slot": "citation",
18
+ href: source.href,
19
+ target: source.href ? "_blank" : void 0,
20
+ rel: source.href ? "noreferrer" : void 0,
21
+ "aria-label": ariaLabel ?? `${labels.source} ${index}: ${source.title}`,
22
+ className: cn(
23
+ "sa:mx-0.5 sa:inline-grid sa:h-4 sa:min-w-4 sa:translate-y-[-1px] sa:place-items-center sa:rounded-sm sa:bg-bg-muted sa:px-1 sa:align-middle sa:text-xs sa:leading-none sa:font-medium sa:text-text-default sa:no-underline sa:tabular-nums sa:outline-none",
24
+ "sa:transition-[background-color,box-shadow] sa:duration-(--sa-duration-fast) sa:ease-(--sa-ease-out)",
25
+ "sa:hover:bg-bg-hover sa:hover:[box-shadow:inset_0_0_0_1px_var(--border-strong)] sa:focus-visible:[box-shadow:0_0_0_2px_var(--action-focus-ring)]",
26
+ className
27
+ ),
28
+ children: index
29
+ }
30
+ );
31
+ return /* @__PURE__ */ jsxs(HoverCard, { trigger: chip, side: "top", align: "center", className: "sa:w-[300px] sa:gap-2 sa:p-3", children: [
32
+ /* @__PURE__ */ jsxs("span", { className: "sa:flex sa:items-center sa:gap-2 sa:text-xs sa:text-text-muted", children: [
33
+ /* @__PURE__ */ jsx(SourceIcon, { source }),
34
+ /* @__PURE__ */ jsx("span", { className: "sa:truncate", children: source.origin })
35
+ ] }),
36
+ /* @__PURE__ */ jsx("span", { className: "sa:text-sm sa:font-medium sa:text-text-default", children: source.title }),
37
+ source.quote && /* @__PURE__ */ jsxs("span", { className: "sa:text-body sa:text-text-muted", children: [
38
+ "\u201C",
39
+ source.quote,
40
+ "\u201D"
41
+ ] })
42
+ ] });
43
+ }
44
+ function Sources({ sources, defaultOpen = false, className, ...props }) {
45
+ const [open, setOpen] = React.useState(defaultOpen);
46
+ const listId = React.useId();
47
+ return /* @__PURE__ */ jsxs("div", { ...props, "data-slot": "sources", className: cn("sa:flex sa:flex-col sa:gap-2", className), children: [
48
+ /* @__PURE__ */ jsxs(
49
+ "button",
50
+ {
51
+ type: "button",
52
+ "aria-expanded": open,
53
+ "aria-controls": listId,
54
+ onClick: () => setOpen(!open),
55
+ className: cn(
56
+ "sa:inline-flex sa:h-8 sa:w-fit sa:items-center sa:gap-2 sa:rounded-pill sa:border sa:border-border-default sa:py-1 sa:pr-3 sa:pl-1.5 sa:text-sm sa:font-medium sa:text-text-default sa:outline-none",
57
+ "sa:transition-[border-color,background-color] sa:duration-(--sa-duration-fast) sa:ease-(--sa-ease-out)",
58
+ "sa:hover:border-border-strong sa:focus-visible:[box-shadow:0_0_0_2px_var(--action-focus-ring)]",
59
+ open && "sa:bg-bg-hover"
60
+ ),
61
+ children: [
62
+ /* @__PURE__ */ jsx("span", { className: "sa:flex sa:items-center sa:gap-0.5", children: sources.slice(0, 3).map((s, i) => /* @__PURE__ */ jsx(SourceIcon, { source: s }, i)) }),
63
+ sources.length,
64
+ " ",
65
+ sources.length === 1 ? "source" : "sources"
66
+ ]
67
+ }
68
+ ),
69
+ /* @__PURE__ */ jsx("div", { id: listId, "data-state": open ? "open" : "closed", className: "satin-expand", children: /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx("ol", { className: "sa:flex sa:flex-col sa:gap-0.5", children: sources.map((s, i) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsxs(
70
+ "a",
71
+ {
72
+ href: s.href,
73
+ target: s.href ? "_blank" : void 0,
74
+ rel: s.href ? "noreferrer" : void 0,
75
+ className: "sa:flex sa:items-center sa:gap-3 sa:rounded-lg sa:p-2 sa:text-sm sa:no-underline sa:outline-none sa:transition-colors sa:duration-(--sa-duration-fast) sa:ease-(--sa-ease-out) sa:hover:bg-bg-hover sa:focus-visible:[box-shadow:0_0_0_2px_var(--action-focus-ring)]",
76
+ children: [
77
+ /* @__PURE__ */ jsx("span", { className: "sa:grid sa:h-4 sa:min-w-4 sa:place-items-center sa:rounded-sm sa:bg-bg-muted sa:px-1 sa:text-xs sa:leading-none sa:font-medium sa:text-text-default sa:tabular-nums", children: i + 1 }),
78
+ /* @__PURE__ */ jsx(SourceIcon, { source: s }),
79
+ /* @__PURE__ */ jsx("span", { className: "sa:min-w-0 sa:flex-1 sa:truncate sa:text-text-default", children: s.title }),
80
+ s.origin && /* @__PURE__ */ jsx("span", { className: "sa:shrink-0 sa:text-text-muted", children: s.origin })
81
+ ]
82
+ }
83
+ ) }, i)) }) }) })
84
+ ] });
85
+ }
86
+
87
+ export { Citation, Sources };
@@ -0,0 +1,37 @@
1
+ import { cn } from './chunk-O46O6LFQ.js';
2
+ import 'react';
3
+ import { cva } from 'class-variance-authority';
4
+ import { jsxs, jsx } from 'react/jsx-runtime';
5
+
6
+ var emptyStateVariants = cva(
7
+ "sa:flex sa:w-[350px] sa:max-w-[560px] sa:min-w-[min(320px,100%)] sa:flex-col sa:items-center sa:gap-4 sa:rounded-2xl sa:px-4 sa:pt-4 sa:pb-5 sa:text-center",
8
+ {
9
+ variants: {
10
+ border: {
11
+ ghost: "",
12
+ dashed: "sa:border sa:border-dashed sa:border-border-default",
13
+ outline: "sa:border sa:border-border-default"
14
+ }
15
+ },
16
+ defaultVariants: { border: "ghost" }
17
+ }
18
+ );
19
+ function EmptyState({ className, border, title, description, icon, actions, ...props }) {
20
+ return /* @__PURE__ */ jsxs("div", { "data-slot": "empty-state", className: cn(emptyStateVariants({ border }), className), ...props, children: [
21
+ icon && /* @__PURE__ */ jsx(
22
+ "div",
23
+ {
24
+ "aria-hidden": true,
25
+ className: "sa:flex sa:shrink-0 sa:items-center sa:justify-center sa:rounded-lg sa:bg-bg-muted sa:p-2.5 sa:text-text-default sa:[&_svg]:size-4 sa:[&_svg]:[stroke-width:1.875]",
26
+ children: icon
27
+ }
28
+ ),
29
+ /* @__PURE__ */ jsxs("div", { className: "sa:flex sa:w-full sa:flex-col sa:items-center sa:gap-2", children: [
30
+ /* @__PURE__ */ jsx("p", { className: "sa:w-full sa:text-lg sa:font-medium sa:text-text-default", children: title }),
31
+ description && /* @__PURE__ */ jsx("p", { className: "sa:w-full sa:text-body-lg sa:text-text-muted", children: description })
32
+ ] }),
33
+ actions && /* @__PURE__ */ jsx("div", { className: "sa:flex sa:flex-wrap sa:items-start sa:justify-center sa:gap-2", children: actions })
34
+ ] });
35
+ }
36
+
37
+ export { EmptyState, emptyStateVariants };
@@ -1,6 +1,7 @@
1
- import { Input } from './chunk-YPNKBE5X.js';
2
- import { TooltipBubble } from './chunk-B6V4VSGH.js';
3
- import { cn } from './chunk-H63FYCMY.js';
1
+ import { Input } from './chunk-OURZQM27.js';
2
+ import { TooltipBubble } from './chunk-GMETYACH.js';
3
+ import { useSatinLabels } from './chunk-SSOFFQ5T.js';
4
+ import { cn } from './chunk-O46O6LFQ.js';
4
5
  import * as React from 'react';
5
6
  import { Slider as Slider$1 } from 'radix-ui';
6
7
  import { jsxs, jsx } from 'react/jsx-runtime';
@@ -25,8 +26,12 @@ function Slider({
25
26
  name,
26
27
  id,
27
28
  "aria-label": ariaLabel,
28
- className
29
+ "aria-labelledby": labelledBy,
30
+ className,
31
+ onPointerDown,
32
+ ...props
29
33
  }) {
34
+ const labels = useSatinLabels();
30
35
  const autoId = React.useId();
31
36
  const sliderId = id ?? autoId;
32
37
  const labelId = `${sliderId}-label`;
@@ -56,8 +61,8 @@ function Slider({
56
61
  }, [dragging]);
57
62
  React.useEffect(() => () => clearTimeout(keyTimer.current), []);
58
63
  const readout = range ? `${formatValue(values[0])} \u2013 ${formatValue(values[1])}` : formatValue(values[0]);
59
- const thumbLabel = (i) => range ? i === 0 ? "From" : "To" : void 0;
60
- const fieldLabel = (i) => range ? i === 0 ? "From" : "To" : "Value";
64
+ const thumbLabel = (i) => range ? i === 0 ? labels.from : labels.to : void 0;
65
+ const fieldLabel = (i) => range ? i === 0 ? labels.from : labels.to : labels.value;
61
66
  const commitTyped = (i, typed) => {
62
67
  const places = decimals(step);
63
68
  let v = Math.round((typed - min) / step) * step + min;
@@ -81,6 +86,7 @@ function Slider({
81
86
  const slider = /* @__PURE__ */ jsxs(
82
87
  Slider$1.Root,
83
88
  {
89
+ ...props,
84
90
  id: sliderId,
85
91
  "data-slot": "slider",
86
92
  value: values,
@@ -93,18 +99,21 @@ function Slider({
93
99
  orientation,
94
100
  disabled,
95
101
  name,
96
- "aria-labelledby": label ? labelId : void 0,
97
- onPointerDown: () => !disabled && setDragging(true),
102
+ "aria-labelledby": label ? labelId : labelledBy,
103
+ onPointerDown: (e) => {
104
+ onPointerDown?.(e);
105
+ if (!disabled) setDragging(true);
106
+ },
98
107
  className: cn(
99
- "relative flex shrink-0 touch-none items-center select-none data-[disabled]:cursor-not-allowed",
100
- vertical ? "h-40 w-5 flex-col" : "h-5 w-full min-w-0 flex-1"
108
+ "sa:relative sa:flex sa:shrink-0 sa:touch-none sa:items-center sa:select-none sa:data-[disabled]:cursor-not-allowed",
109
+ vertical ? "sa:h-40 sa:w-5 sa:flex-col" : "sa:h-5 sa:w-full sa:min-w-0 sa:flex-1"
101
110
  ),
102
111
  children: [
103
112
  /* @__PURE__ */ jsx(
104
113
  Slider$1.Track,
105
114
  {
106
- className: cn("relative grow cursor-pointer overflow-hidden rounded-full bg-bg-muted", vertical ? "w-1" : "h-1"),
107
- children: /* @__PURE__ */ jsx(Slider$1.Range, { className: cn("absolute rounded-full bg-action-primary-bg", vertical ? "w-full" : "h-full") })
115
+ className: cn("sa:relative sa:grow sa:cursor-pointer sa:overflow-hidden sa:rounded-full sa:bg-bg-muted", vertical ? "sa:w-1" : "sa:h-1"),
116
+ children: /* @__PURE__ */ jsx(Slider$1.Range, { className: cn("sa:absolute sa:rounded-full sa:bg-action-primary-bg", vertical ? "sa:w-full" : "sa:h-full") })
108
117
  }
109
118
  ),
110
119
  values.map((v, i) => /* @__PURE__ */ jsx(
@@ -125,11 +134,11 @@ function Slider({
125
134
  keyTimer.current = setTimeout(() => setKeying(false), 1e3);
126
135
  },
127
136
  className: cn(
128
- "relative block size-4 cursor-grab rounded-full border border-border-strong bg-bg-popover outline-none active:cursor-grabbing",
129
- "[box-shadow:0_1px_3px_0_var(--effect-shadow-sm)]",
130
- "transition-[border-color,box-shadow] duration-(--duration-fast) ease-(--ease-out)",
131
- "hover:border-text-subtle focus-visible:[box-shadow:0_0_0_2px_var(--action-focus-ring)]",
132
- "data-[disabled]:cursor-not-allowed data-[disabled]:hover:border-border-strong"
137
+ "sa:relative sa:block sa:size-4 sa:cursor-grab sa:rounded-full sa:border sa:border-border-strong sa:bg-bg-popover sa:outline-none sa:active:cursor-grabbing",
138
+ "sa:[box-shadow:0_1px_3px_0_var(--effect-shadow-sm)]",
139
+ "sa:transition-[border-color,box-shadow] sa:duration-(--sa-duration-fast) sa:ease-(--sa-ease-out)",
140
+ "sa:hover:border-text-subtle sa:focus-visible:[box-shadow:0_0_0_2px_var(--action-focus-ring)]",
141
+ "sa:data-[disabled]:cursor-not-allowed sa:data-[disabled]:hover:border-border-strong"
133
142
  ),
134
143
  children: tooltip && /* @__PURE__ */ jsx(
135
144
  TooltipBubble,
@@ -138,8 +147,8 @@ function Slider({
138
147
  label: formatValue(v),
139
148
  "data-visible": (dragging || keying) && focused === i ? "" : void 0,
140
149
  className: cn(
141
- "pointer-events-none absolute tabular-nums opacity-0 transition-[opacity,translate] duration-(--duration-fast) ease-(--ease-out) data-[visible]:opacity-100",
142
- vertical ? "top-1/2 left-full ml-2 -translate-x-0.5 -translate-y-1/2 data-[visible]:translate-x-0" : "bottom-full left-1/2 mb-2 -translate-x-1/2 translate-y-0.5 data-[visible]:translate-y-0"
150
+ "sa:pointer-events-none sa:absolute sa:tabular-nums sa:opacity-0 sa:transition-[opacity,translate] sa:duration-(--sa-duration-fast) sa:ease-(--sa-ease-out) sa:data-[visible]:opacity-100",
151
+ vertical ? "sa:top-1/2 sa:left-full sa:ml-2 sa:-translate-x-0.5 sa:-translate-y-1/2 sa:data-[visible]:translate-x-0" : "sa:bottom-full sa:left-1/2 sa:mb-2 sa:-translate-x-1/2 sa:translate-y-0.5 sa:data-[visible]:translate-y-0"
143
152
  )
144
153
  }
145
154
  )
@@ -149,9 +158,9 @@ function Slider({
149
158
  ]
150
159
  }
151
160
  );
152
- const head = (label || showValue && !inputs) && /* @__PURE__ */ jsxs("div", { className: cn("flex h-[18px] items-center justify-between gap-3 whitespace-nowrap", vertical && "min-w-full"), children: [
153
- label ? /* @__PURE__ */ jsx("span", { id: labelId, className: "text-sm leading-[18px] font-medium text-text-default", children: label }) : /* @__PURE__ */ jsx("span", {}),
154
- showValue && !inputs && /* @__PURE__ */ jsx("span", { "aria-hidden": true, className: "text-sm leading-[18px] text-text-muted tabular-nums", children: readout })
161
+ const head = (label || showValue && !inputs) && /* @__PURE__ */ jsxs("div", { className: cn("sa:flex sa:h-[18px] sa:items-center sa:justify-between sa:gap-3 sa:whitespace-nowrap", vertical && "sa:min-w-full"), children: [
162
+ label ? /* @__PURE__ */ jsx("span", { id: labelId, className: "sa:text-sm sa:leading-[18px] sa:font-medium sa:text-text-default", children: label }) : /* @__PURE__ */ jsx("span", {}),
163
+ showValue && !inputs && /* @__PURE__ */ jsx("span", { "aria-hidden": true, className: "sa:text-sm sa:leading-[18px] sa:text-text-muted sa:tabular-nums", children: readout })
155
164
  ] });
156
165
  return /* @__PURE__ */ jsxs(
157
166
  "div",
@@ -159,14 +168,14 @@ function Slider({
159
168
  "data-slot": "slider-field",
160
169
  "data-orientation": orientation,
161
170
  "data-disabled": disabled || void 0,
162
- className: cn("flex flex-col gap-2", vertical ? "w-max items-center" : "w-full", className),
171
+ className: cn("sa:flex sa:flex-col sa:gap-2", vertical ? "sa:w-max sa:items-center" : "sa:w-full", className),
163
172
  children: [
164
173
  head,
165
- vertical ? /* @__PURE__ */ jsxs("div", { className: cn("flex flex-col items-center gap-2", disabled && "opacity-50"), children: [
174
+ vertical ? /* @__PURE__ */ jsxs("div", { className: cn("sa:flex sa:flex-col sa:items-center sa:gap-2", disabled && "sa:opacity-50"), children: [
166
175
  inputs && range && field(1),
167
176
  slider,
168
177
  inputs && field(0)
169
- ] }) : /* @__PURE__ */ jsxs("div", { className: cn("flex items-center gap-3", disabled && "opacity-50"), children: [
178
+ ] }) : /* @__PURE__ */ jsxs("div", { className: cn("sa:flex sa:items-center sa:gap-3", disabled && "sa:opacity-50"), children: [
170
179
  inputs && range && field(0),
171
180
  slider,
172
181
  inputs && field(range ? 1 : 0)
@@ -202,12 +211,10 @@ function SliderInput({
202
211
  if (e.key === "Enter") commit();
203
212
  if (e.key === "Escape") setDraft(null);
204
213
  },
205
- wrapperClassName: "w-16 shrink-0",
206
- className: "[&_input]:text-center [&_input]:tabular-nums"
214
+ wrapperClassName: "sa:w-16 sa:shrink-0",
215
+ className: "sa:[&_input]:text-center sa:[&_input]:tabular-nums"
207
216
  }
208
217
  );
209
218
  }
210
219
 
211
220
  export { Slider };
212
- //# sourceMappingURL=chunk-L6NCCSIP.js.map
213
- //# sourceMappingURL=chunk-L6NCCSIP.js.map
@@ -0,0 +1,55 @@
1
+ import { cn } from './chunk-O46O6LFQ.js';
2
+ import 'react';
3
+ import { Accordion as Accordion$1 } from 'radix-ui';
4
+ import { jsx, jsxs } from 'react/jsx-runtime';
5
+
6
+ function Accordion({ className, ...props }) {
7
+ return /* @__PURE__ */ jsx(Accordion$1.Root, { "data-slot": "accordion", className: cn("sa:flex sa:w-full sa:flex-col", className), ...props });
8
+ }
9
+ function AccordionItem({ title, icon, children, className, "data-force": force, ...props }) {
10
+ return /* @__PURE__ */ jsxs(Accordion$1.Item, { "data-slot": "accordion-item", className: cn("sa:border-b sa:border-border-subtle sa:py-1", className), ...props, children: [
11
+ /* @__PURE__ */ jsx(Accordion$1.Header, { className: "sa:flex", children: /* @__PURE__ */ jsxs(
12
+ Accordion$1.Trigger,
13
+ {
14
+ "data-force": force,
15
+ className: cn(
16
+ "sa:group sa:flex sa:h-10 sa:w-full sa:cursor-pointer sa:items-center sa:gap-3 sa:rounded-lg sa:px-2 sa:text-left sa:outline-none",
17
+ "sa:transition-[background-color,box-shadow] sa:duration-(--sa-duration-fast) sa:ease-(--sa-ease-out)",
18
+ "sa:hover:bg-bg-hover sa:data-[force=hover]:bg-bg-hover",
19
+ "sa:focus-visible:bg-bg-hover sa:focus-visible:[box-shadow:0_0_0_2px_var(--action-focus-ring)]",
20
+ "sa:data-[force=focus]:bg-bg-hover sa:data-[force=focus]:[box-shadow:0_0_0_2px_var(--action-focus-ring)]",
21
+ "sa:disabled:cursor-not-allowed sa:disabled:opacity-50"
22
+ ),
23
+ children: [
24
+ icon && /* @__PURE__ */ jsx("span", { "aria-hidden": true, className: "sa:grid sa:size-4 sa:shrink-0 sa:place-items-center sa:text-text-muted sa:[&_svg]:size-4 sa:[&_svg]:[stroke-width:1.875]", children: icon }),
25
+ /* @__PURE__ */ jsx("span", { className: "sa:min-w-0 sa:flex-1 sa:text-base sa:leading-[21px] sa:font-medium sa:text-text-default", children: title }),
26
+ /* @__PURE__ */ jsx(
27
+ "svg",
28
+ {
29
+ width: "16",
30
+ height: "16",
31
+ viewBox: "0 0 16 16",
32
+ fill: "none",
33
+ "aria-hidden": true,
34
+ className: "sa:shrink-0 sa:text-text-muted sa:transition-transform sa:duration-(--sa-duration-base) sa:ease-(--sa-ease-out) sa:group-data-[state=open]:rotate-180",
35
+ children: /* @__PURE__ */ jsx("path", { d: "M4 6L8 10L12 6", stroke: "currentColor", strokeWidth: "1.25", strokeLinecap: "round", strokeLinejoin: "round" })
36
+ }
37
+ )
38
+ ]
39
+ }
40
+ ) }),
41
+ /* @__PURE__ */ jsx(Accordion$1.Content, { "data-slot": "accordion-content", className: "satin-accordion-content", children: /* @__PURE__ */ jsx(
42
+ "div",
43
+ {
44
+ className: cn(
45
+ "sa:pt-1 sa:pr-2 sa:pb-3 sa:text-base sa:leading-[21px] sa:text-text-muted",
46
+ // Lined up with the title: past the icon and its gap when there is one.
47
+ icon ? "sa:pl-9" : "sa:pl-2"
48
+ ),
49
+ children
50
+ }
51
+ ) })
52
+ ] });
53
+ }
54
+
55
+ export { Accordion, AccordionItem };