@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
@@ -26,7 +26,11 @@ export interface SatinTheme {
26
26
  export declare const defaultTheme: SatinTheme;
27
27
  type Vars = Record<string, string>;
28
28
  export declare const contrast: (a: string, b: string) => number;
29
- export declare function themeVars(theme: SatinTheme): {
29
+ export interface ThemeOptions {
30
+ /** Prefix for the primitive variables. Defaults to the one the installed build uses. */
31
+ prefix?: string;
32
+ }
33
+ export declare function themeVars(theme: SatinTheme, options?: ThemeOptions): {
30
34
  root: Vars;
31
35
  dark: Vars;
32
36
  };
@@ -35,7 +39,7 @@ export declare function themeVars(theme: SatinTheme): {
35
39
  * whole page; pass a `scope` selector to theme only what's inside it (the docs do this for
36
40
  * their previews, so the site around them keeps Satin's own look).
37
41
  */
38
- export declare function themeCss(theme: SatinTheme, scope?: string): string;
42
+ export declare function themeCss(theme: SatinTheme, scope?: string, options?: ThemeOptions): string;
39
43
  /**
40
44
  * A random theme that still reads: a brand with enough chroma and a corner scale.
41
45
  * Pass the current theme to make sure the brand and the corners visibly change.
package/theme/index.js ADDED
@@ -0,0 +1 @@
1
+ 'use client';export { contrast, defaultTheme, randomTheme, themeCss, themeVars } from '../chunk-NQL6SIIB.js';
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/toast.tsx"],"names":["r","ToastPrimitive","card"],"mappings":"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","file":"chunk-2HKBZFIK.js","sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport { Toast as ToastPrimitive } from 'radix-ui'\nimport { cn } from '../lib/utils'\nimport { Button } from './button'\n\n/**\n * Toast, 1:1 with the uiKit `Toast` set (3650:17696): intent neutral, info, success, warning or\n * error. A 397px popover surface, radius-xl, border/default, the shadcn `lg` shadow, padding\n * 10 left / 8 right and 10 top and bottom (12 at the bottom on the four status intents, as in\n * Figma). A 36px radius-md icon tile in the intent's status bg, a 13px medium title (20px line)\n * over a 13px muted description (16px line), then an optional secondary action and a 24px close.\n *\n * Built on the Radix Toast. Render one `<Toaster />` near the root and call `toast()` anywhere:\n * toast.success('Booking confirmed', { description: 'Table for 4…', action: { label: 'Undo' } })\n *\n * The Toaster stacks them bottom-right, newest in front. Behind it, the next ones peek 16px above,\n * each 5% smaller, cut to the front one's height with their content faded out, so the stack is\n * even; three show at most and the rest wait, parked in the last place. Hovering or focusing the\n * stack unfolds it, one under another 8px apart at their own heights, every toast readable, and\n * pauses their timers.\n *\n * Toasts move as whole cards and never fade on the way: a new one slides up from below the\n * stack (150% of its height), a closed one slides back down the same way, and the rest move to\n * their new places at the same time. Every move is one transform on one element, 500 ms on the\n * kit's ease-out, so a toast added or closed mid-move just carries on from where it is. The\n * cut to the front one's height eases over 150 ms, the content fade over 250 ms.\n */\nexport type ToastIntent = 'neutral' | 'info' | 'success' | 'warning' | 'error'\n\nexport interface ToastAction {\n label: string\n onClick?: () => void\n}\n\nexport interface ToastOptions {\n description?: React.ReactNode\n intent?: ToastIntent\n action?: ToastAction\n /** The small close button on the right. */\n closeButton?: boolean\n /** The status icon tile on the left. */\n icon?: boolean\n /** Milliseconds before it closes by itself. `Infinity` keeps it until dismissed. */\n duration?: number\n id?: string\n}\n\ntype ExitReason = 'close' | 'action'\ntype ToastRecord = ToastOptions & { id: string; title: React.ReactNode; open: boolean; exit?: ExitReason }\n\n/** Enter, exit and re-stack, ms. A closed toast stays this long to play out. */\nconst MOTION_MS = 500\n\n/* ---------- the store behind toast() ---------- */\n\nlet records: ToastRecord[] = []\nconst listeners = new Set<() => void>()\nlet counter = 0\n\nfunction emit() {\n for (const listener of listeners) listener()\n}\nfunction subscribe(listener: () => void) {\n listeners.add(listener)\n return () => listeners.delete(listener)\n}\nfunction snapshot() {\n return records\n}\n\nfunction show(title: React.ReactNode, options: ToastOptions = {}) {\n const id = options.id ?? `toast-${++counter}`\n const next: ToastRecord = { ...options, id, title, open: true }\n records = records.some((r) => r.id === id) ? records.map((r) => (r.id === id ? next : r)) : [...records, next]\n emit()\n return id\n}\n\nfunction remove(id: string) {\n records = records.filter((r) => r.id !== id)\n emit()\n}\n\n/** Marks a toast as leaving, so the stack can play it out, and drops it one motion later. */\nfunction close(id: string, reason: ExitReason = 'close') {\n const r = records.find((r) => r.id === id)\n if (!r || !r.open) return\n records = records.map((r) => (r.id === id ? { ...r, open: false, exit: reason } : r))\n emit()\n setTimeout(() => remove(id), MOTION_MS)\n}\n\ntype Shortcut = (title: React.ReactNode, options?: Omit<ToastOptions, 'intent'>) => string\n\n/** Show a toast. Returns its id, which `toast.dismiss(id)` takes. */\nexport const toast = Object.assign((title: React.ReactNode, options?: ToastOptions) => show(title, options), {\n info: ((title, options) => show(title, { ...options, intent: 'info' })) as Shortcut,\n success: ((title, options) => show(title, { ...options, intent: 'success' })) as Shortcut,\n warning: ((title, options) => show(title, { ...options, intent: 'warning' })) as Shortcut,\n error: ((title, options) => show(title, { ...options, intent: 'error' })) as Shortcut,\n /** Close one toast, or all of them. */\n dismiss: (id?: string) => {\n for (const r of id === undefined ? records : records.filter((r) => r.id === id)) close(r.id)\n },\n})\n\n/* ---------- glyphs, from Figma ---------- */\n\nconst tile: Record<ToastIntent, string> = {\n neutral: 'bg-status-neutral-bg text-text-default',\n info: 'bg-status-sky-bg text-status-sky-fg',\n success: 'bg-status-green-bg text-status-green-fg',\n warning: 'bg-status-amber-bg text-status-amber-fg',\n // Figma draws the error glyph in action/destructive (#DC2626), not status-red-fg.\n error: 'bg-status-red-bg text-action-destructive-bg',\n}\n\nfunction IntentIcon({ intent }: { intent: ToastIntent }) {\n if (intent === 'neutral') {\n // Notification glyph, 14px inside a 16px box.\n return (\n <svg width=\"16\" height=\"16\" viewBox=\"-1 -1 16 16\" fill=\"none\" aria-hidden>\n <g stroke=\"currentColor\" style={{ strokeWidth: 1.25 }} strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M11.2738 4.61052C12.3146 4.61052 13.1582 3.76684 13.1582 2.72612C13.1582 1.6854 12.3146 0.841726 11.2738 0.841726C10.2331 0.841726 9.38944 1.6854 9.38944 2.72612C9.38944 3.76684 10.2331 4.61052 11.2738 4.61052Z\" />\n <path d=\"M12.9121 7.12311V9.13483C12.9121 11.3569 11.1107 13.1583 8.88866 13.1583H4.86521C2.64313 13.1583 0.84177 11.3569 0.84177 9.13483V5.11139C0.84177 2.8893 2.64313 1.08794 4.86521 1.08794H6.87694\" />\n </g>\n </svg>\n )\n }\n return (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden>\n <g stroke=\"currentColor\" style={{ strokeWidth: 1.25 }} strokeLinecap=\"round\" strokeLinejoin=\"round\">\n {intent === 'success' ? (\n <path d=\"M3.33333 8.66667L6 11.3333L12.6667 4.66667\" />\n ) : (\n <>\n {intent === 'info' ? (\n <>\n <path d=\"M8 7.70494V10.6557\" />\n <path d=\"M8 5.35022L8.0059 5.34366\" />\n </>\n ) : (\n <>\n <path d=\"M8 5.34428V8.29506\" />\n <path d=\"M8 10.6563L8.0059 10.6498\" />\n </>\n )}\n <path d=\"M8 13.9015C11.2593 13.9015 13.9015 11.2593 13.9015 8C13.9015 4.74066 11.2593 2.09845 8 2.09845C4.74066 2.09845 2.09845 4.74066 2.09845 8C2.09845 11.2593 4.74066 13.9015 8 13.9015Z\" />\n </>\n )}\n </g>\n </svg>\n )\n}\n\n/* ---------- one toast ---------- */\n\nexport interface ToastProps extends Omit<React.ComponentProps<typeof ToastPrimitive.Root>, 'title'> {\n title: React.ReactNode\n description?: React.ReactNode\n intent?: ToastIntent\n action?: ToastAction\n closeButton?: boolean\n icon?: boolean\n}\n\n/** The card surface: popover bg, border/default, radius-xl, the shadcn `lg` shadow. */\nconst card = (intent: ToastIntent) =>\n cn(\n 'relative flex w-full items-center gap-2.5 overflow-clip pr-2 pl-2.5',\n intent === 'neutral' ? 'py-2.5' : 'pt-2.5 pb-3',\n 'rounded-xl border border-border-default bg-bg-popover',\n '[box-shadow:0_4px_6px_-4px_var(--effect-shadow-sm),0_10px_15px_-3px_var(--effect-shadow-sm)]',\n )\n\n/** What sits on the card: the icon tile, title and description, the action and the close. */\nfunction ToastContent({\n title,\n description,\n intent,\n action,\n closeButton,\n icon,\n onAction,\n}: Pick<ToastProps, 'title' | 'description' | 'action' | 'closeButton' | 'icon'> & {\n intent: ToastIntent\n onAction?: () => void\n}) {\n return (\n <>\n {icon && (\n <div className={cn('grid size-9 shrink-0 place-items-center rounded-md', tile[intent])}>\n <IntentIcon intent={intent} />\n </div>\n )}\n <div className=\"flex min-w-0 flex-1 flex-col text-sm\">\n <ToastPrimitive.Title className=\"leading-5 font-medium text-text-default\">{title}</ToastPrimitive.Title>\n {description ? (\n <ToastPrimitive.Description className=\"leading-4 text-text-muted\">{description}</ToastPrimitive.Description>\n ) : null}\n </div>\n {(action || closeButton) && (\n <div className=\"flex shrink-0 items-center gap-1\">\n {action && (\n <ToastPrimitive.Action asChild altText={action.label}>\n <Button\n variant=\"secondary\"\n onClick={() => {\n onAction?.()\n action.onClick?.()\n }}\n >\n {action.label}\n </Button>\n </ToastPrimitive.Action>\n )}\n {closeButton && (\n <ToastPrimitive.Close asChild>\n <Button variant=\"tertiary\" size=\"xs\" iconOnly aria-label=\"Close\" className=\"rounded-md text-text-muted\">\n {/* 14px X at 1.09, from Figma. */}\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden>\n <path\n d=\"M3.94232 10.0582L7.00053 7M7.00053 7L10.0587 3.94179M7.00053 7L3.94232 3.94179M7.00053 7L10.0587 10.0582\"\n stroke=\"currentColor\"\n strokeWidth=\"1.09375\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </Button>\n </ToastPrimitive.Close>\n )}\n </div>\n )}\n </>\n )\n}\n\nconst radixType = (intent: ToastIntent) => (intent === 'error' || intent === 'warning' ? 'foreground' : 'background')\n\n/** A single toast on its own. Lives inside `<Toaster>` (it needs the Radix toast provider). */\nexport function Toast({\n title,\n description,\n intent = 'neutral',\n action,\n closeButton = true,\n icon = true,\n duration = 5000,\n className,\n ...props\n}: ToastProps) {\n return (\n <ToastPrimitive.Root\n data-slot=\"toast\"\n data-intent={intent}\n duration={duration}\n type={radixType(intent)}\n className={cn(\n 'pointer-events-auto',\n card(intent),\n 'focus-visible:[box-shadow:0_0_0_2px_var(--action-focus-ring)] focus-visible:outline-none',\n 'data-[state=open]:animate-[satin-enter_var(--duration-base)_var(--ease-out)]',\n className,\n )}\n {...props}\n >\n <ToastContent title={title} description={description} intent={intent} action={action} closeButton={closeButton} icon={icon} />\n </ToastPrimitive.Root>\n )\n}\n\n/* ---------- the stack ---------- */\n\n/** Peek of each toast behind the front one, px; the scale each step back loses; gap unfolded, px. */\nconst PEEK = 16\nconst SCALE_STEP = 0.05\nconst GAP = 8\nconst FALLBACK_HEIGHT = 58\n\n/** Where a toast comes in from and goes to: this much of its own height below its place. */\nconst OFFSCREEN = '150%'\nconst ease = 'var(--ease-out)'\nconst cardMotion = `transform ${MOTION_MS}ms ${ease}, height 150ms ${ease}`\nconst contentMotion = `opacity 250ms ${ease}`\n\ninterface StackedToastProps {\n record: ToastRecord\n index: number\n /** Its place in the stack, px up from the bottom, and its scale. */\n y: number\n scale: number\n /** Cut to this height (the front toast's) while it waits behind; undefined shows its own. */\n height?: number\n beyond: boolean\n contentVisible: boolean\n onMeasure: (id: string, height: number) => void\n onForget: (id: string) => void\n}\n\n/**\n * One toast in the stack, on two elements so the two movements never fight over one transform:\n * the `li` (the Radix root) takes its place in the stack, the card inside slides in and out.\n */\nfunction StackedToast({ record, index, y, scale, height, beyond, contentVisible, onMeasure, onForget }: StackedToastProps) {\n const { id, title, open, duration, exit: _exit, intent = 'neutral', icon = true, closeButton = true, ...options } = record\n const [entered, setEntered] = React.useState(false)\n const cardRef = React.useRef<HTMLDivElement>(null)\n React.useLayoutEffect(() => {\n // Read the start (below the stack) so the browser has it, then move to the place: the\n // transition runs from there without waiting on animation frames.\n cardRef.current?.getBoundingClientRect()\n setEntered(true)\n }, [])\n\n // Its own height, whatever the stack cuts it to: the content plus the card's padding and border.\n const measured = React.useCallback(\n (node: HTMLDivElement | null) => {\n if (!node) return\n const card = node.parentElement as HTMLElement\n const report = () => {\n const cs = getComputedStyle(card)\n const chrome = ['paddingTop', 'paddingBottom', 'borderTopWidth', 'borderBottomWidth'].reduce((t, k) => t + parseFloat(cs[k as 'paddingTop']), 0)\n onMeasure(id, node.offsetHeight + chrome)\n }\n report()\n const observer = new ResizeObserver(report)\n observer.observe(node)\n return () => {\n observer.disconnect()\n onForget(id)\n }\n },\n [id, onMeasure, onForget],\n )\n\n const inPlace = entered && open\n\n return (\n <ToastPrimitive.Root\n data-slot=\"toast\"\n data-intent={intent}\n // Kept mounted while it plays out; the store drops it one motion later.\n forceMount\n open={open}\n onOpenChange={(next) => !next && close(id)}\n duration={duration ?? 5000}\n type={radixType(intent)}\n className={cn(\n 'absolute inset-x-0 bottom-0 origin-bottom outline-none',\n 'focus-visible:[&>div]:[box-shadow:0_0_0_2px_var(--action-focus-ring)]',\n '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)',\n 'data-[swipe=cancel]:transition-[translate] data-[swipe=cancel]:duration-(--duration-base) data-[swipe=cancel]:ease-(--ease-out)',\n )}\n style={{\n transform: `translate3d(0, ${y}px, 0) scale(${scale})`,\n opacity: beyond ? 0 : 1,\n zIndex: 1000 - index,\n pointerEvents: beyond || !open ? 'none' : undefined,\n transition: `transform ${MOTION_MS}ms ${ease}, opacity ${MOTION_MS}ms ${ease}`,\n }}\n >\n <div\n ref={cardRef}\n className={cn('pointer-events-auto', card(intent), 'items-start')}\n style={{\n transform: inPlace ? 'translate3d(0, 0, 0)' : `translate3d(0, ${OFFSCREEN}, 0)`,\n height,\n transition: cardMotion,\n willChange: 'transform',\n }}\n >\n <div\n ref={measured}\n className=\"flex w-full min-w-0 items-center gap-2.5\"\n style={{ opacity: contentVisible ? 1 : 0, transition: contentMotion }}\n // The cards behind the front one show no content, so nothing in them can be reached.\n aria-hidden={!contentVisible || undefined}\n inert={!contentVisible || undefined}\n >\n <ToastContent\n title={title}\n intent={intent}\n icon={icon}\n closeButton={closeButton}\n onAction={() => close(id, 'action')}\n {...options}\n />\n </div>\n </div>\n </ToastPrimitive.Root>\n )\n}\n\n/* ---------- the region ---------- */\n\nexport interface ToasterProps {\n /** Classes for the viewport; `absolute` instead of `fixed` keeps it inside a positioned parent. */\n className?: string\n /** Most toasts on screen at once; the rest wait behind. */\n limit?: number\n /** Your own controlled `<Toast>`s, rendered alongside the ones from `toast()`. */\n children?: React.ReactNode\n}\n\nexport function Toaster({ className, limit = 3, children }: ToasterProps) {\n const all = React.useSyncExternalStore(subscribe, snapshot, snapshot)\n // Newest first: index 0 is the front of the stack.\n const stack = React.useMemo(() => [...all].reverse(), [all])\n\n const [hovered, setHovered] = React.useState(false)\n const [focused, setFocused] = React.useState(false)\n // Native listeners: the toasts are portalled into the viewport, so React's own events from\n // them never reach it. pointermove (as Radix's pause uses) also catches a pointer at rest there.\n const viewportRef = React.useRef<HTMLOListElement>(null)\n React.useEffect(() => {\n const el = viewportRef.current\n if (!el) return\n const enter = () => setHovered(true)\n const leave = () => setHovered(false)\n const focusIn = () => setFocused(true)\n const focusOut = (e: FocusEvent) => {\n if (!el.contains(e.relatedTarget as Node | null)) setFocused(false)\n }\n el.addEventListener('pointermove', enter)\n el.addEventListener('pointerleave', leave)\n el.addEventListener('focusin', focusIn)\n el.addEventListener('focusout', focusOut)\n return () => {\n el.removeEventListener('pointermove', enter)\n el.removeEventListener('pointerleave', leave)\n el.removeEventListener('focusin', focusIn)\n el.removeEventListener('focusout', focusOut)\n }\n }, [])\n const expanded = (hovered || focused) && stack.some((r) => r.open)\n\n const [heights, setHeights] = React.useState<Record<string, number>>({})\n const measure = React.useCallback((id: string, h: number) => setHeights((c) => (c[id] === h ? c : { ...c, [id]: h })), [])\n const forget = React.useCallback(\n (id: string) =>\n setHeights((c) => {\n if (!(id in c)) return c\n const { [id]: _, ...rest } = c\n return rest\n }),\n [],\n )\n\n // A toast on its way out keeps its index but frees its place, so the ones behind move up.\n const placed: { record: ToastRecord; index: number }[] = []\n let cursor = 0\n for (const record of stack) {\n placed.push({ record, index: cursor })\n if (record.open) cursor += 1\n }\n const slots = stack.filter((r) => r.open).map((r) => heights[r.id] ?? FALLBACK_HEIGHT)\n const depth = Math.max(limit, 1)\n const frontHeight = slots[0] ?? FALLBACK_HEIGHT\n const scaleOf = (slot: number) => (expanded ? 1 : Math.max(1 - slot * SCALE_STEP, 0))\n\n // Px up from the bottom. Folded, every card is the front one's height, scaled from its bottom\n // edge, so lifting it by the height it lost puts its top exactly PEEK above the one in front.\n const offset = (slot: number) => {\n if (!expanded) return slot * PEEK + (1 - scaleOf(slot)) * frontHeight\n let y = 0\n for (let i = 0; i < slot; i++) y += (slots[i] ?? FALLBACK_HEIGHT) + GAP\n return y\n }\n\n // The viewport covers the whole stack, gaps included, so moving between toasts never refolds it.\n const count = Math.min(slots.length, depth)\n const height = expanded\n ? slots.slice(0, count).reduce((t, h, i) => t + h + (i ? GAP : 0), 0)\n : count\n ? frontHeight + (count - 1) * PEEK\n : 0\n\n return (\n <ToastPrimitive.Provider swipeDirection=\"right\" label=\"Notifications\">\n {children}\n {placed.map(({ record, index }) => {\n const slot = Math.min(index, depth - 1)\n return (\n <StackedToast\n key={record.id}\n record={record}\n index={index}\n y={-offset(slot)}\n scale={scaleOf(slot)}\n height={!expanded && slot > 0 && record.open ? frontHeight : heights[record.id]}\n beyond={index >= depth}\n contentVisible={expanded || index === 0}\n onMeasure={measure}\n onForget={forget}\n />\n )\n })}\n <ToastPrimitive.Viewport\n ref={viewportRef}\n style={{ height, transition: `height ${MOTION_MS}ms var(--ease-out)` }}\n className={cn(\n 'fixed right-4 bottom-4 z-[100] m-0 w-[397px] max-w-[calc(100%-32px)] list-none p-0 outline-none',\n className,\n )}\n />\n </ToastPrimitive.Provider>\n )\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/dropdown.tsx"],"names":["DropdownPrimitive"],"mappings":"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","file":"chunk-3DINAQLL.js","sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport { DropdownMenu as DropdownPrimitive } from 'radix-ui'\nimport { cn } from '../lib/utils'\nimport { KbdGroup } from './kbd'\n\n/**\n * DropdownMenu, 1:1 with the uiKit `DropdownMenu` (654:19150) and `DropdownMenu/Item`\n * (653:19165) sets. A 255px popover surface (max 520), 4px padding, radius-xl,\n * border/subtle, the shadcn `sm` shadow. Items are at least 32px high, 12px in, 6px top and\n * bottom, radius-lg, with an 8px gap between a 16px leading icon (text/muted), the content and\n * a trailing check (status green) when selected. An optional `shortcut` shows its keys (Kbd sm)\n * before the check. Hover, keyboard highlight and selected fill\n * bg/selected.\n *\n * Groups: `DropdownMenuGroup`. Content: a 14px medium label (20px line). `stacked` puts the\n * description under it, 2px apart, at 13px / 18px in text/muted; `inline` puts it on the same\n * baseline 12px after the label, at 13px, truncated. Groups have a 24px header in 12px\n * text/subtle and are 4px apart with a 1px bg/muted rule between them. Items are 4px apart.\n *\n * Built on the Radix DropdownMenu: arrow keys, typeahead, Escape, focus return.\n */\n/** The popover surface menus share: radius-xl, border/subtle, bg/popover, the shadcn `sm` shadow. */\nexport const menuSurfaceClass = cn(\n 'rounded-xl border border-border-subtle bg-bg-popover',\n '[box-shadow:0_1px_3px_0_var(--effect-shadow-sm),0_1px_2px_-1px_var(--effect-shadow-sm)]',\n)\n/** A group of rows, with a 1px bg/muted rule under every group but the last. */\nexport const menuGroupClass = 'flex flex-col gap-1 not-last:after:block not-last:after:h-px not-last:after:bg-bg-muted'\n/** The 24px group header in 12px text/subtle. */\nexport const menuGroupLabelClass = 'flex h-6 items-center px-3 text-xs leading-3 tracking-normal text-text-subtle'\n\nexport interface DropdownMenuProps {\n /** The element that opens the menu. Rendered with `asChild`, so pass a Button. */\n trigger: React.ReactNode\n /** `DropdownMenuItem`s, optionally inside `DropdownMenuGroup`s. */\n children: React.ReactNode\n open?: boolean\n defaultOpen?: boolean\n onOpenChange?: (open: boolean) => void\n /** Modal menus block the rest of the page while open. */\n modal?: boolean\n side?: 'top' | 'right' | 'bottom' | 'left'\n align?: 'start' | 'center' | 'end'\n sideOffset?: number\n /** Portal target. Defaults to `document.body`. */\n container?: HTMLElement | null\n /** Accessible name for the menu, when the trigger's text doesn't say enough. */\n 'aria-label'?: string\n /** Focus moved outside a non-modal menu; call `preventDefault()` to keep it open. */\n onFocusOutside?: (event: Event) => void\n className?: string\n}\n\nexport function DropdownMenu({\n trigger,\n children,\n open,\n defaultOpen,\n onOpenChange,\n modal = true,\n side = 'bottom',\n align = 'start',\n sideOffset = 8,\n container,\n onFocusOutside,\n className,\n ...props\n}: DropdownMenuProps) {\n return (\n <DropdownPrimitive.Root open={open} defaultOpen={defaultOpen} onOpenChange={onOpenChange} modal={modal}>\n <DropdownPrimitive.Trigger asChild>{trigger}</DropdownPrimitive.Trigger>\n <DropdownPrimitive.Portal container={container}>\n <DropdownPrimitive.Content\n data-slot=\"dropdown-menu\"\n aria-label={props['aria-label']}\n side={side}\n align={align}\n sideOffset={sideOffset}\n collisionPadding={8}\n onFocusOutside={onFocusOutside}\n className={cn(\n 'pointer-events-auto z-50 flex w-[255px] max-w-[520px] flex-col gap-1 overflow-x-clip overflow-y-auto p-1',\n 'max-h-(--radix-dropdown-menu-content-available-height)',\n menuSurfaceClass,\n 'origin-(--radix-dropdown-menu-content-transform-origin) outline-none',\n 'data-[state=open]:animate-[satin-enter_var(--duration-base)_var(--ease-out)]',\n className,\n )}\n >\n {children}\n </DropdownPrimitive.Content>\n </DropdownPrimitive.Portal>\n </DropdownPrimitive.Root>\n )\n}\n\n/* ------------------------------------------------------------------------------------------ */\n\nexport interface DropdownMenuGroupProps extends React.ComponentProps<typeof DropdownPrimitive.Group> {\n /** The 24px group header. */\n label?: React.ReactNode\n}\n\n/** A titled group of items (Figma `_dropdown/group`). Groups get a rule between them. */\nexport function DropdownMenuGroup({ label, children, className, ...props }: DropdownMenuGroupProps) {\n return (\n <DropdownPrimitive.Group\n data-slot=\"dropdown-group\"\n // Figma's divider lives inside the group, 8px under the last item; the last group has none.\n className={cn(menuGroupClass, className)}\n {...props}\n >\n {label ? (\n <DropdownPrimitive.Label className={menuGroupLabelClass}>\n {label}\n </DropdownPrimitive.Label>\n ) : null}\n {children}\n </DropdownPrimitive.Group>\n )\n}\n\n/* ------------------------------------------------------------------------------------------ */\n\n/** The row skin every menu shares: Dropdown, Select, Combobox and the Command menu. */\nexport const menuItemClass = cn(\n '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',\n 'transition-colors duration-(--duration-fast) ease-(--ease-out)',\n 'data-[highlighted]:bg-bg-selected data-[force=hover]:bg-bg-selected data-[selected]:bg-bg-selected',\n 'data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\n '[&_svg]:pointer-events-none [&_svg]:shrink-0',\n)\n\nexport interface MenuItemContentProps {\n label: React.ReactNode\n description?: React.ReactNode\n /** Leading icon. 16px by default; stacked two-line items may use 20px (`iconSize={20}`). */\n icon?: React.ReactNode\n iconSize?: 16 | 20\n /** Marks the current value: a trailing check. */\n selected?: boolean\n layout?: 'stacked' | 'inline'\n /** Keys that run the item, e.g. \"⌘N\", shown on the right (Figma's `showShortcut`). */\n shortcut?: string\n /** Wraps the label, e.g. in Radix Select's `ItemText`. */\n renderLabel?: (label: React.ReactNode) => React.ReactNode\n}\n\n/** What sits inside a menu row: icon, label and description, then shortcut and check. */\nexport function MenuItemContent({\n label,\n description,\n icon,\n iconSize = 16,\n selected = false,\n layout = 'stacked',\n shortcut,\n renderLabel = (l) => l,\n}: MenuItemContentProps) {\n return (\n <>\n {icon ? (\n <span\n className={cn(\n 'grid shrink-0 place-items-center text-text-muted',\n iconSize === 20 ? 'size-5 [&_svg]:size-5 [&_svg]:[stroke-width:1.5]' : 'size-4 [&_svg]:size-4 [&_svg]:[stroke-width:1.875]',\n )}\n >\n {icon}\n </span>\n ) : null}\n\n {layout === 'stacked' ? (\n <span className=\"flex min-w-0 flex-1 flex-col justify-center gap-0.5\">\n <span className=\"text-base leading-5 font-medium text-text-default\">{renderLabel(label)}</span>\n {description ? <span className=\"text-sm leading-[18px] text-text-muted\">{description}</span> : null}\n </span>\n ) : (\n <span className=\"flex min-w-0 flex-1 items-baseline gap-3\">\n <span className=\"shrink-0 text-base leading-5 font-medium whitespace-nowrap text-text-default\">{renderLabel(label)}</span>\n {description ? (\n <span className=\"min-w-0 flex-1 truncate text-sm text-text-muted\">{description}</span>\n ) : null}\n </span>\n )}\n\n {shortcut && <KbdGroup keys={shortcut} aria-hidden />}\n {selected && <span className=\"sr-only\">(selected)</span>}\n {selected && (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden className=\"text-status-green-fg\">\n <path\n d=\"M3.33333 8.66667L6 11.3333L12.6667 4.66667\"\n stroke=\"currentColor\"\n strokeWidth=\"1.25\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n )}\n </>\n )\n}\n\nexport interface DropdownMenuItemProps\n extends Omit<React.ComponentProps<typeof DropdownPrimitive.Item>, 'children'>,\n Omit<MenuItemContentProps, 'label' | 'renderLabel'> {\n label: string\n}\n\nexport function DropdownMenuItem({\n label,\n description,\n icon,\n iconSize = 16,\n selected = false,\n layout = 'stacked',\n shortcut,\n className,\n ...props\n}: DropdownMenuItemProps) {\n return (\n <DropdownPrimitive.Item\n data-slot=\"dropdown-item\"\n data-selected={selected || undefined}\n textValue={label}\n className={cn(menuItemClass, className)}\n {...props}\n >\n <MenuItemContent\n label={label}\n description={description}\n icon={icon}\n iconSize={iconSize}\n selected={selected}\n layout={layout}\n shortcut={shortcut}\n />\n </DropdownPrimitive.Item>\n )\n}\n"]}
package/chunk-3ERGAHKA.js DELETED
@@ -1,179 +0,0 @@
1
- import { cn } from './chunk-H63FYCMY.js';
2
- import 'react';
3
- import { cva } from 'class-variance-authority';
4
- import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
5
-
6
- var chipVariants = cva(
7
- [
8
- "group/chip relative inline-flex shrink-0 items-center rounded-pill whitespace-nowrap select-none",
9
- "text-sm leading-(--text-sm--line-height) font-medium",
10
- "transition-[background-color,border-color,color,box-shadow] duration-(--duration-fast) ease-(--ease-out)",
11
- "focus-visible:outline-none",
12
- "data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[disabled]:[box-shadow:none]"
13
- ],
14
- {
15
- variants: {
16
- variant: {
17
- outline: "border",
18
- subtle: ""
19
- },
20
- size: {
21
- md: "h-control-height",
22
- sm: "h-control-height-xs"
23
- },
24
- neutral: { true: "text-text-default", false: "text-tone-fg" }
25
- },
26
- compoundVariants: [
27
- {
28
- variant: "outline",
29
- neutral: true,
30
- className: [
31
- "border-border-default bg-bg-popover [box-shadow:0_1px_2px_0_var(--effect-shadow-xs)]",
32
- "satin-hover:border-border-strong satin-hover:bg-bg-hover",
33
- "satin-focus:border-border-strong satin-focus:bg-bg-popover satin-focus:[box-shadow:0_0_0_2px_var(--action-focus-ring)]",
34
- "has-[button:focus-visible]:border-border-strong has-[button:focus-visible]:[box-shadow:0_0_0_2px_var(--action-focus-ring)]",
35
- "satin-pressed:border-border-strong satin-pressed:bg-border-input satin-pressed:[box-shadow:none]",
36
- "data-[disabled]:border-border-strong"
37
- ]
38
- },
39
- {
40
- variant: "outline",
41
- neutral: false,
42
- className: [
43
- "border-tone-border bg-tone-bg [box-shadow:0_1px_2px_0_var(--effect-shadow-xs)]",
44
- "satin-hover:bg-tone-border",
45
- "satin-focus:[box-shadow:0_0_0_2px_var(--action-focus-ring)]",
46
- "has-[button:focus-visible]:[box-shadow:0_0_0_2px_var(--action-focus-ring)]",
47
- "satin-pressed:bg-tone-border satin-pressed:[box-shadow:none]"
48
- ]
49
- },
50
- {
51
- variant: "subtle",
52
- neutral: true,
53
- className: [
54
- "bg-action-secondary-bg",
55
- "satin-hover:bg-border-input",
56
- "satin-focus:[box-shadow:0_0_0_2px_var(--action-focus-ring)]",
57
- "has-[button:focus-visible]:[box-shadow:0_0_0_2px_var(--action-focus-ring)]",
58
- "satin-pressed:bg-border-input satin-pressed:[box-shadow:inset_0_0_0_1px_var(--border-strong)]"
59
- ]
60
- },
61
- {
62
- variant: "subtle",
63
- neutral: false,
64
- className: [
65
- "bg-tone-bg",
66
- "satin-hover:bg-tone-border",
67
- "satin-focus:[box-shadow:0_0_0_2px_var(--action-focus-ring)]",
68
- "has-[button:focus-visible]:[box-shadow:0_0_0_2px_var(--action-focus-ring)]",
69
- "satin-pressed:bg-tone-border"
70
- ]
71
- }
72
- ],
73
- defaultVariants: { variant: "subtle", size: "md", neutral: true }
74
- }
75
- );
76
- function CloseGlyph({ size }) {
77
- return /* @__PURE__ */ jsx("svg", { width: size, height: size, viewBox: "0 0 16 16", fill: "none", "aria-hidden": true, children: /* @__PURE__ */ jsx(
78
- "path",
79
- {
80
- d: "M4.50551 11.4951L8.0006 8M8.0006 8L11.4957 4.50491M8.0006 8L4.50551 4.50491M8.0006 8L11.4957 11.4951",
81
- stroke: "currentColor",
82
- strokeWidth: "1.25",
83
- strokeLinecap: "round",
84
- strokeLinejoin: "round"
85
- }
86
- ) });
87
- }
88
- function Chip({
89
- className,
90
- variant = "subtle",
91
- size = "md",
92
- tone = "neutral",
93
- dot = false,
94
- avatar,
95
- onRemove,
96
- removeLabel,
97
- disabled = false,
98
- children,
99
- type,
100
- ...props
101
- }) {
102
- const neutral = tone === "neutral";
103
- const iconSize = size === "sm" ? 14 : 16;
104
- const classes = cn(chipVariants({ variant, size, neutral }), className);
105
- const label = typeof children === "string" ? children : void 0;
106
- const content = /* @__PURE__ */ jsxs(Fragment, { children: [
107
- dot && // Dot slot: 4px in, a 16px box with an 8px status dot (status/green fg in Figma).
108
- /* @__PURE__ */ jsx("span", { "data-slot": "chip-dot", className: "-mr-1 flex shrink-0 items-center pl-1", "aria-hidden": true, children: /* @__PURE__ */ jsx("span", { className: "grid size-4 place-items-center", children: /* @__PURE__ */ jsx("span", { className: "size-2 rounded-full bg-status-green-fg" }) }) }),
109
- avatar && /* @__PURE__ */ jsx(
110
- "span",
111
- {
112
- "data-slot": "chip-avatar",
113
- className: "-mr-1 flex shrink-0 items-center pl-1 [&>*]:size-4 [&>*]:rounded-full",
114
- children: avatar
115
- }
116
- ),
117
- /* @__PURE__ */ jsx("span", { "data-slot": "chip-label", className: cn("flex shrink-0 items-center px-2", onRemove && "-mr-1"), children }),
118
- onRemove && /* @__PURE__ */ jsx("span", { className: "flex shrink-0 items-center pr-1", children: /* @__PURE__ */ jsx(
119
- "button",
120
- {
121
- type: "button",
122
- "data-slot": "chip-remove",
123
- disabled,
124
- "aria-label": removeLabel ?? (label ? `Remove ${label}` : "Remove"),
125
- onClick: onRemove,
126
- className: cn(
127
- "grid shrink-0 place-items-center rounded-pill focus-visible:outline-none",
128
- neutral ? "text-text-muted" : "text-tone-fg"
129
- ),
130
- children: /* @__PURE__ */ jsx(CloseGlyph, { size: iconSize })
131
- }
132
- ) })
133
- ] });
134
- if (onRemove) {
135
- const { "data-force": force } = props;
136
- return /* @__PURE__ */ jsx(
137
- "span",
138
- {
139
- "data-slot": "chip",
140
- "data-tone": tone,
141
- "data-force": force,
142
- "data-disabled": disabled || void 0,
143
- className: classes,
144
- children: content
145
- }
146
- );
147
- }
148
- return /* @__PURE__ */ jsx(
149
- "button",
150
- {
151
- "data-slot": "chip",
152
- "data-tone": tone,
153
- "data-disabled": disabled || void 0,
154
- type: type ?? "button",
155
- disabled,
156
- className: classes,
157
- ...props,
158
- children: content
159
- }
160
- );
161
- }
162
- function ChipAvatar({ initials, tone, className }) {
163
- return /* @__PURE__ */ jsx(
164
- "span",
165
- {
166
- "data-tone": tone,
167
- "aria-hidden": true,
168
- className: cn(
169
- "grid size-4 shrink-0 place-items-center overflow-hidden rounded-full bg-tone-bg text-[7px] leading-2 font-semibold text-tone-fg",
170
- className
171
- ),
172
- children: initials
173
- }
174
- );
175
- }
176
-
177
- export { Chip, ChipAvatar, chipVariants };
178
- //# sourceMappingURL=chunk-3ERGAHKA.js.map
179
- //# sourceMappingURL=chunk-3ERGAHKA.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/chip.tsx"],"names":[],"mappings":"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","file":"chunk-3ERGAHKA.js","sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { cn } from '../lib/utils'\nimport type { BadgeTone } from './badge'\n\n/**\n * Chip, 1:1 with the uiKit `Chip` set (3206:79959): Subtle or Outline, md (28, control-height)\n * or sm (24, control-height-xs), eight tones like Badge, an optional dot, avatar and remove\n * button. Label medium 13/19.5, 8px side padding; the dot, avatar and close slots overlap\n * the label padding by 4px, as in Figma.\n *\n * Neutral is its own look: Outline is a popover surface with a border-default edge and an\n * xs drop shadow, Subtle is the secondary action fill. Every other tone uses the `tone/*`\n * tokens (repointed by `data-tone`): tone-bg fill, tone-border edge, tone-fg text; hover and\n * pressed fill with tone-border.\n *\n * States (satin-hover / satin-focus / satin-pressed, or `data-force`):\n * - hover: neutral outline bg-hover + border-strong; neutral subtle border-input fill.\n * - pressed: neutral border-input fill with a border-strong edge, no drop shadow.\n * - focus: the 2px action/focus-ring spread, border-strong edge, no drop shadow.\n * - disabled: 50% opacity, no drop shadow.\n * Subtle pressed's 1px edge is an inset shadow so the chip doesn't grow by 2px.\n *\n * With `onRemove` the chip is a `span` holding a real remove button (a button can't hold\n * a button); without it, the chip itself is the button.\n */\nconst chipVariants = cva(\n [\n 'group/chip relative inline-flex shrink-0 items-center rounded-pill whitespace-nowrap select-none',\n 'text-sm leading-(--text-sm--line-height) font-medium',\n 'transition-[background-color,border-color,color,box-shadow] duration-(--duration-fast) ease-(--ease-out)',\n 'focus-visible:outline-none',\n 'data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[disabled]:[box-shadow:none]',\n ],\n {\n variants: {\n variant: {\n outline: 'border',\n subtle: '',\n },\n size: {\n md: 'h-control-height',\n sm: 'h-control-height-xs',\n },\n neutral: { true: 'text-text-default', false: 'text-tone-fg' },\n },\n compoundVariants: [\n {\n variant: 'outline',\n neutral: true,\n className: [\n 'border-border-default bg-bg-popover [box-shadow:0_1px_2px_0_var(--effect-shadow-xs)]',\n 'satin-hover:border-border-strong satin-hover:bg-bg-hover',\n 'satin-focus:border-border-strong satin-focus:bg-bg-popover satin-focus:[box-shadow:0_0_0_2px_var(--action-focus-ring)]',\n 'has-[button:focus-visible]:border-border-strong has-[button:focus-visible]:[box-shadow:0_0_0_2px_var(--action-focus-ring)]',\n 'satin-pressed:border-border-strong satin-pressed:bg-border-input satin-pressed:[box-shadow:none]',\n 'data-[disabled]:border-border-strong',\n ],\n },\n {\n variant: 'outline',\n neutral: false,\n className: [\n 'border-tone-border bg-tone-bg [box-shadow:0_1px_2px_0_var(--effect-shadow-xs)]',\n 'satin-hover:bg-tone-border',\n 'satin-focus:[box-shadow:0_0_0_2px_var(--action-focus-ring)]',\n 'has-[button:focus-visible]:[box-shadow:0_0_0_2px_var(--action-focus-ring)]',\n 'satin-pressed:bg-tone-border satin-pressed:[box-shadow:none]',\n ],\n },\n {\n variant: 'subtle',\n neutral: true,\n className: [\n 'bg-action-secondary-bg',\n 'satin-hover:bg-border-input',\n 'satin-focus:[box-shadow:0_0_0_2px_var(--action-focus-ring)]',\n 'has-[button:focus-visible]:[box-shadow:0_0_0_2px_var(--action-focus-ring)]',\n 'satin-pressed:bg-border-input satin-pressed:[box-shadow:inset_0_0_0_1px_var(--border-strong)]',\n ],\n },\n {\n variant: 'subtle',\n neutral: false,\n className: [\n 'bg-tone-bg',\n 'satin-hover:bg-tone-border',\n 'satin-focus:[box-shadow:0_0_0_2px_var(--action-focus-ring)]',\n 'has-[button:focus-visible]:[box-shadow:0_0_0_2px_var(--action-focus-ring)]',\n 'satin-pressed:bg-tone-border',\n ],\n },\n ],\n defaultVariants: { variant: 'subtle', size: 'md', neutral: true },\n },\n)\n\ntype ChipBaseProps = Omit<VariantProps<typeof chipVariants>, 'neutral'> & {\n tone?: BadgeTone\n /** A status dot before the label. */\n dot?: boolean\n /** A 16px avatar before the label (an initials avatar or an image). */\n avatar?: React.ReactNode\n /** Shows the close button; called when it's clicked. */\n onRemove?: () => void\n /** Accessible name of the remove button. Defaults to \"Remove <label>\". */\n removeLabel?: string\n disabled?: boolean\n children?: React.ReactNode\n className?: string\n}\n\nexport type ChipProps = ChipBaseProps &\n Omit<React.ComponentProps<'button'>, keyof ChipBaseProps> & {\n 'data-force'?: 'hover' | 'focus' | 'pressed'\n }\n\n/** The Figma close glyph, 16 at 1.25 (14 at 1.09 on sm). */\nfunction CloseGlyph({ size }: { size: 14 | 16 }) {\n return (\n <svg width={size} height={size} viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden>\n <path\n d=\"M4.50551 11.4951L8.0006 8M8.0006 8L11.4957 4.50491M8.0006 8L4.50551 4.50491M8.0006 8L11.4957 11.4951\"\n stroke=\"currentColor\"\n strokeWidth=\"1.25\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n )\n}\n\nexport function Chip({\n className,\n variant = 'subtle',\n size = 'md',\n tone = 'neutral',\n dot = false,\n avatar,\n onRemove,\n removeLabel,\n disabled = false,\n children,\n type,\n ...props\n}: ChipProps) {\n const neutral = tone === 'neutral'\n const iconSize = size === 'sm' ? 14 : 16\n const classes = cn(chipVariants({ variant, size, neutral }), className)\n const label = typeof children === 'string' ? children : undefined\n\n const content = (\n <>\n {dot && (\n // Dot slot: 4px in, a 16px box with an 8px status dot (status/green fg in Figma).\n <span data-slot=\"chip-dot\" className=\"-mr-1 flex shrink-0 items-center pl-1\" aria-hidden>\n <span className=\"grid size-4 place-items-center\">\n <span className=\"size-2 rounded-full bg-status-green-fg\" />\n </span>\n </span>\n )}\n {avatar && (\n <span\n data-slot=\"chip-avatar\"\n className=\"-mr-1 flex shrink-0 items-center pl-1 [&>*]:size-4 [&>*]:rounded-full\"\n >\n {avatar}\n </span>\n )}\n <span data-slot=\"chip-label\" className={cn('flex shrink-0 items-center px-2', onRemove && '-mr-1')}>\n {children}\n </span>\n {onRemove && (\n <span className=\"flex shrink-0 items-center pr-1\">\n <button\n type=\"button\"\n data-slot=\"chip-remove\"\n disabled={disabled}\n aria-label={removeLabel ?? (label ? `Remove ${label}` : 'Remove')}\n onClick={onRemove}\n className={cn(\n 'grid shrink-0 place-items-center rounded-pill focus-visible:outline-none',\n neutral ? 'text-text-muted' : 'text-tone-fg',\n )}\n >\n <CloseGlyph size={iconSize} />\n </button>\n </span>\n )}\n </>\n )\n\n if (onRemove) {\n const { 'data-force': force } = props\n return (\n <span\n data-slot=\"chip\"\n data-tone={tone}\n data-force={force}\n data-disabled={disabled || undefined}\n className={classes}\n >\n {content}\n </span>\n )\n }\n\n return (\n <button\n data-slot=\"chip\"\n data-tone={tone}\n data-disabled={disabled || undefined}\n type={type ?? 'button'}\n disabled={disabled}\n className={classes}\n {...props}\n >\n {content}\n </button>\n )\n}\n\n/** The 16px initials avatar from Figma (Avatar 992:20199 at size 16): tone-bg, 7px semibold tone-fg. */\nexport function ChipAvatar({ initials, tone, className }: { initials: string; tone?: BadgeTone; className?: string }) {\n return (\n <span\n data-tone={tone}\n aria-hidden\n className={cn(\n 'grid size-4 shrink-0 place-items-center overflow-hidden rounded-full bg-tone-bg text-[7px] leading-2 font-semibold text-tone-fg',\n className,\n )}\n >\n {initials}\n </span>\n )\n}\n\nexport { chipVariants }\n"]}
package/chunk-6C7CGJX2.js DELETED
@@ -1,86 +0,0 @@
1
- import { HoverCard } from './chunk-HRKPV66B.js';
2
- import { cn } from './chunk-H63FYCMY.js';
3
- import * as React from 'react';
4
- import { jsx, jsxs } from 'react/jsx-runtime';
5
-
6
- function SourceIcon({ source }) {
7
- if (source.icon) return /* @__PURE__ */ jsx("span", { className: "grid size-4 shrink-0 place-items-center overflow-clip rounded-xs [&>*]:size-4", children: source.icon });
8
- return /* @__PURE__ */ jsx("span", { "aria-hidden": true, className: "grid size-4 shrink-0 place-items-center rounded-xs bg-bg-muted text-[10px] leading-none font-semibold text-text-muted", children: source.title.charAt(0).toUpperCase() });
9
- }
10
- function Citation({ index, source, className }) {
11
- const chip = /* @__PURE__ */ jsx(
12
- "a",
13
- {
14
- "data-slot": "citation",
15
- href: source.href,
16
- target: source.href ? "_blank" : void 0,
17
- rel: source.href ? "noreferrer" : void 0,
18
- "aria-label": `Source ${index}: ${source.title}`,
19
- className: cn(
20
- "mx-0.5 inline-grid h-4 min-w-4 translate-y-[-1px] place-items-center rounded-sm bg-bg-muted px-1 align-middle text-xs leading-none font-medium text-text-default no-underline tabular-nums outline-none",
21
- "transition-[background-color,box-shadow] duration-(--duration-fast) ease-(--ease-out)",
22
- "hover:bg-bg-hover hover:[box-shadow:inset_0_0_0_1px_var(--border-strong)] focus-visible:[box-shadow:0_0_0_2px_var(--action-focus-ring)]",
23
- className
24
- ),
25
- children: index
26
- }
27
- );
28
- return /* @__PURE__ */ jsxs(HoverCard, { trigger: chip, side: "top", align: "center", className: "w-[300px] gap-2 p-3", children: [
29
- /* @__PURE__ */ jsxs("span", { className: "flex items-center gap-2 text-xs text-text-muted", children: [
30
- /* @__PURE__ */ jsx(SourceIcon, { source }),
31
- /* @__PURE__ */ jsx("span", { className: "truncate", children: source.origin })
32
- ] }),
33
- /* @__PURE__ */ jsx("span", { className: "text-sm font-medium text-text-default", children: source.title }),
34
- source.quote && /* @__PURE__ */ jsxs("span", { className: "text-body text-text-muted", children: [
35
- "\u201C",
36
- source.quote,
37
- "\u201D"
38
- ] })
39
- ] });
40
- }
41
- function Sources({ sources, defaultOpen = false, className }) {
42
- const [open, setOpen] = React.useState(defaultOpen);
43
- const listId = React.useId();
44
- return /* @__PURE__ */ jsxs("div", { "data-slot": "sources", className: cn("flex flex-col gap-2", className), children: [
45
- /* @__PURE__ */ jsxs(
46
- "button",
47
- {
48
- type: "button",
49
- "aria-expanded": open,
50
- "aria-controls": listId,
51
- onClick: () => setOpen(!open),
52
- className: cn(
53
- "inline-flex h-8 w-fit items-center gap-2 rounded-pill border border-border-default py-1 pr-3 pl-1.5 text-sm font-medium text-text-default outline-none",
54
- "transition-[border-color,background-color] duration-(--duration-fast) ease-(--ease-out)",
55
- "hover:border-border-strong focus-visible:[box-shadow:0_0_0_2px_var(--action-focus-ring)]",
56
- open && "bg-bg-hover"
57
- ),
58
- children: [
59
- /* @__PURE__ */ jsx("span", { className: "flex items-center gap-0.5", children: sources.slice(0, 3).map((s, i) => /* @__PURE__ */ jsx(SourceIcon, { source: s }, i)) }),
60
- sources.length,
61
- " ",
62
- sources.length === 1 ? "source" : "sources"
63
- ]
64
- }
65
- ),
66
- /* @__PURE__ */ jsx("div", { id: listId, "data-state": open ? "open" : "closed", className: "satin-expand", children: /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx("ol", { className: "flex flex-col gap-0.5", children: sources.map((s, i) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsxs(
67
- "a",
68
- {
69
- href: s.href,
70
- target: s.href ? "_blank" : void 0,
71
- rel: s.href ? "noreferrer" : void 0,
72
- className: "flex items-center gap-3 rounded-lg p-2 text-sm no-underline outline-none transition-colors duration-(--duration-fast) ease-(--ease-out) hover:bg-bg-hover focus-visible:[box-shadow:0_0_0_2px_var(--action-focus-ring)]",
73
- children: [
74
- /* @__PURE__ */ jsx("span", { className: "grid h-4 min-w-4 place-items-center rounded-sm bg-bg-muted px-1 text-xs leading-none font-medium text-text-default tabular-nums", children: i + 1 }),
75
- /* @__PURE__ */ jsx(SourceIcon, { source: s }),
76
- /* @__PURE__ */ jsx("span", { className: "min-w-0 flex-1 truncate text-text-default", children: s.title }),
77
- s.origin && /* @__PURE__ */ jsx("span", { className: "shrink-0 text-text-muted", children: s.origin })
78
- ]
79
- }
80
- ) }, i)) }) }) })
81
- ] });
82
- }
83
-
84
- export { Citation, Sources };
85
- //# sourceMappingURL=chunk-6C7CGJX2.js.map
86
- //# sourceMappingURL=chunk-6C7CGJX2.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/citations.tsx"],"names":[],"mappings":"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","file":"chunk-6C7CGJX2.js","sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport { cn } from '../lib/utils'\nimport { HoverCard } from './hover-card'\n\n/**\n * Citations and sources, 1:1 with the uiKit design (🆕 citations): where an answer comes from.\n *\n * - `Citation`: a numbered chip right after the claim — 16 high, text/xs medium on bg/muted,\n * radius-sm; hover bg/hover with a border/strong ring. Resting on it (or focusing it) opens a\n * HoverCard with the source: logo and where it lives, the title, and the quoted passage.\n * - `Sources`: under the message, a pill with the sources' logos stacked and \"3 sources\"; it\n * opens into the list — number, logo, title, where it lives — each row a link.\n *\n * A source's `icon` is its logo (an app's or a site's favicon); without one it gets a tile with\n * its first letter, so a missing favicon never leaves a hole.\n */\nexport interface CitationSource {\n title: string\n /** Where it comes from: the app or site, \"Notion\" or \"freshfarm.pl\". */\n origin?: string\n href?: string\n /** A 16px logo or favicon. */\n icon?: React.ReactNode\n /** The passage the answer relies on, shown in the preview. */\n quote?: string\n}\n\nfunction SourceIcon({ source }: { source: CitationSource }) {\n if (source.icon) return <span className=\"grid size-4 shrink-0 place-items-center overflow-clip rounded-xs [&>*]:size-4\">{source.icon}</span>\n return (\n <span aria-hidden className=\"grid size-4 shrink-0 place-items-center rounded-xs bg-bg-muted text-[10px] leading-none font-semibold text-text-muted\">\n {source.title.charAt(0).toUpperCase()}\n </span>\n )\n}\n\nexport interface CitationProps {\n /** 1-based, as in the Sources list. */\n index: number\n source: CitationSource\n className?: string\n}\n\nexport function Citation({ index, source, className }: CitationProps) {\n const chip = (\n <a\n data-slot=\"citation\"\n href={source.href}\n target={source.href ? '_blank' : undefined}\n rel={source.href ? 'noreferrer' : undefined}\n aria-label={`Source ${index}: ${source.title}`}\n className={cn(\n 'mx-0.5 inline-grid h-4 min-w-4 translate-y-[-1px] place-items-center rounded-sm bg-bg-muted px-1 align-middle text-xs leading-none font-medium text-text-default no-underline tabular-nums outline-none',\n 'transition-[background-color,box-shadow] duration-(--duration-fast) ease-(--ease-out)',\n 'hover:bg-bg-hover hover:[box-shadow:inset_0_0_0_1px_var(--border-strong)] focus-visible:[box-shadow:0_0_0_2px_var(--action-focus-ring)]',\n className,\n )}\n >\n {index}\n </a>\n )\n return (\n <HoverCard trigger={chip} side=\"top\" align=\"center\" className=\"w-[300px] gap-2 p-3\">\n <span className=\"flex items-center gap-2 text-xs text-text-muted\">\n <SourceIcon source={source} />\n <span className=\"truncate\">{source.origin}</span>\n </span>\n <span className=\"text-sm font-medium text-text-default\">{source.title}</span>\n {source.quote && <span className=\"text-body text-text-muted\">“{source.quote}”</span>}\n </HoverCard>\n )\n}\n\nexport interface SourcesProps {\n sources: CitationSource[]\n /** Start with the list open. */\n defaultOpen?: boolean\n className?: string\n}\n\nexport function Sources({ sources, defaultOpen = false, className }: SourcesProps) {\n const [open, setOpen] = React.useState(defaultOpen)\n const listId = React.useId()\n return (\n <div data-slot=\"sources\" className={cn('flex flex-col gap-2', className)}>\n <button\n type=\"button\"\n aria-expanded={open}\n aria-controls={listId}\n onClick={() => setOpen(!open)}\n className={cn(\n 'inline-flex h-8 w-fit items-center gap-2 rounded-pill border border-border-default py-1 pr-3 pl-1.5 text-sm font-medium text-text-default outline-none',\n 'transition-[border-color,background-color] duration-(--duration-fast) ease-(--ease-out)',\n 'hover:border-border-strong focus-visible:[box-shadow:0_0_0_2px_var(--action-focus-ring)]',\n open && 'bg-bg-hover',\n )}\n >\n <span className=\"flex items-center gap-0.5\">\n {sources.slice(0, 3).map((s, i) => (\n <SourceIcon key={i} source={s} />\n ))}\n </span>\n {sources.length} {sources.length === 1 ? 'source' : 'sources'}\n </button>\n <div id={listId} data-state={open ? 'open' : 'closed'} className=\"satin-expand\">\n <div>\n <ol className=\"flex flex-col gap-0.5\">\n {sources.map((s, i) => (\n <li key={i}>\n <a\n href={s.href}\n target={s.href ? '_blank' : undefined}\n rel={s.href ? 'noreferrer' : undefined}\n className=\"flex items-center gap-3 rounded-lg p-2 text-sm no-underline outline-none transition-colors duration-(--duration-fast) ease-(--ease-out) hover:bg-bg-hover focus-visible:[box-shadow:0_0_0_2px_var(--action-focus-ring)]\"\n >\n <span className=\"grid h-4 min-w-4 place-items-center rounded-sm bg-bg-muted px-1 text-xs leading-none font-medium text-text-default tabular-nums\">{i + 1}</span>\n <SourceIcon source={s} />\n <span className=\"min-w-0 flex-1 truncate text-text-default\">{s.title}</span>\n {s.origin && <span className=\"shrink-0 text-text-muted\">{s.origin}</span>}\n </a>\n </li>\n ))}\n </ol>\n </div>\n </div>\n </div>\n )\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/banner.tsx"],"names":[],"mappings":"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","file":"chunk-6QMSWITQ.js","sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { Xmark } from 'iconoir-react'\nimport { cn } from '../lib/utils'\nimport { Button } from './button'\nimport { bannerMesh, type Mesh } from './banner-mesh'\n\n/**\n * Banner, 1:1 with the uiKit `Banner` set (3822:3475): a title, an optional description (one\n * or two lines) and one action, on bg/card with a 1px border/default and the shadcn md shadow.\n *\n * - layout=\"horizontal\": 450 wide, one row, 12 × 8 padding, 10 gap; the action and the close\n * button sit on the right, 4px apart.\n * - layout=\"sidebar\": 222 wide (the navigation column's inner width), 12 padding, 12 gap; copy on\n * top, the action stretched across the bottom, close pinned 3px from the top-right corner.\n * - shape=\"rounded\" is radius-xl (12). shape=\"pill\" is fully round on a one-line horizontal\n * banner and radius-3xl (20) wherever the banner is taller.\n * - background=\"mesh\" lays two pre-rendered glows over the card: a light one in Multiply (shows\n * on white, gone on dark) and a dark one in Screen (glows on dark, gone on white), so it follows\n * the theme without variables. Figma renders one pair per layout and line count; they are\n * inlined in banner-mesh.tsx and can be swapped with `mesh`.\n *\n * tone=\"primary\" turns the card action/primary/bg (border action/primary/border) with\n * action/primary/fg copy (description at 80%); its mesh is the dark glow alone, in Screen, so it\n * lightens the primary. `shimmer` sends a soft band of light across now and then.\n *\n * Title is 14/18 medium, description Body/md in text/muted, 2px apart. The close\n * button only renders when `onDismiss` is passed.\n */\nconst bannerVariants = cva(\n [\n 'relative isolate flex max-w-full overflow-clip border border-border-default bg-bg-card',\n '[box-shadow:0_2px_4px_-2px_var(--effect-shadow-sm),0_4px_6px_-1px_var(--effect-shadow-sm)]',\n ],\n {\n variants: {\n layout: {\n horizontal: 'w-[450px] items-center gap-2.5 px-3 py-2',\n sidebar: 'w-[222px] flex-col items-start gap-3 p-3',\n },\n shape: {\n rounded: 'rounded-xl',\n pill: 'rounded-3xl',\n },\n lines: {\n one: '',\n two: '',\n },\n },\n compoundVariants: [{ layout: 'horizontal', shape: 'pill', lines: 'one', className: 'rounded-pill' }],\n defaultVariants: { layout: 'horizontal', shape: 'rounded', lines: 'one' },\n },\n)\n\n// The glows are inlined (banner-mesh.tsx), so they come with the component wherever it goes.\nexport { bannerMesh, type Mesh } from './banner-mesh'\n\nexport interface BannerProps\n extends Omit<React.ComponentProps<'div'>, 'title'>,\n Omit<VariantProps<typeof bannerVariants>, 'lines'> {\n title: React.ReactNode\n description?: React.ReactNode\n /** One action, usually `<Button variant=\"secondary\">`. Stretches across a sidebar banner. */\n action?: React.ReactNode\n background?: 'mesh' | 'plain'\n /** `primary`: action/primary/bg with action/primary/fg text; its mesh glows lighter on top. */\n tone?: 'default' | 'primary'\n /** Now and then a soft band of light crosses the banner (off under reduced motion). */\n shimmer?: boolean\n /** Shows the close button. */\n onDismiss?: () => void\n /** Accessible name of the close button. */\n dismissLabel?: string\n /** Replace the mesh images. */\n mesh?: Mesh\n}\n\nexport function Banner({\n className,\n title,\n description,\n action,\n layout = 'horizontal',\n background = 'mesh',\n tone = 'default',\n shimmer = false,\n shape = 'rounded',\n onDismiss,\n dismissLabel = 'Dismiss',\n mesh,\n ...props\n}: BannerProps) {\n const lines = description ? 'two' : 'one'\n const layoutKey = layout ?? 'horizontal'\n const glow = mesh ?? bannerMesh[layoutKey][lines]\n const sidebar = layoutKey === 'sidebar'\n const primary = tone === 'primary'\n\n const close = onDismiss && (\n <Button\n variant=\"tertiary\"\n shape=\"rounded\"\n iconOnly\n aria-label={dismissLabel}\n onClick={onDismiss}\n className={cn(\n sidebar && 'absolute top-[3px] right-[3px] z-10',\n primary && 'text-action-primary-fg [&_svg]:text-action-primary-fg satin-hover:bg-action-primary-bg-hover',\n )}\n >\n <Xmark aria-hidden />\n </Button>\n )\n\n return (\n <div\n data-slot=\"banner\"\n data-layout={layoutKey}\n data-background={background}\n data-tone={tone}\n className={cn(\n bannerVariants({ layout, shape, lines }),\n primary && 'border-action-primary-border bg-action-primary-bg',\n shimmer && 'satin-sheen',\n className,\n )}\n {...props}\n >\n {background === 'mesh' && primary && (\n <img\n src={glow.dark}\n alt=\"\"\n aria-hidden\n className=\"pointer-events-none absolute -inset-px -z-10 size-[calc(100%+2px)] max-w-none object-cover mix-blend-screen\"\n />\n )}\n {background === 'mesh' && !primary && (\n <>\n <img\n src={glow.light}\n alt=\"\"\n aria-hidden\n className=\"pointer-events-none absolute -inset-px -z-10 size-[calc(100%+2px)] max-w-none object-cover mix-blend-multiply\"\n />\n <img\n src={glow.dark}\n alt=\"\"\n aria-hidden\n className=\"pointer-events-none absolute -inset-px -z-10 size-[calc(100%+2px)] max-w-none object-cover mix-blend-screen\"\n />\n </>\n )}\n <div\n className={cn(\n 'flex min-w-0 flex-col justify-center text-sm',\n sidebar ? 'w-full' : 'flex-1',\n description && 'gap-0.5',\n )}\n >\n <p className={cn('truncate text-base leading-[18px] font-medium', primary ? 'text-action-primary-fg' : 'text-text-default')}>{title}</p>\n {description && (\n <p className={cn('text-body', primary ? 'text-action-primary-fg/80' : 'text-text-muted', !sidebar && 'truncate')}>{description}</p>\n )}\n </div>\n {sidebar ? (\n <>\n {action && <div className=\"flex w-full items-center *:flex-1\">{action}</div>}\n {close}\n </>\n ) : (\n (action || close) && (\n <div className=\"flex shrink-0 items-center gap-1\">\n {action}\n {close}\n </div>\n )\n )}\n </div>\n )\n}\n\nexport { bannerVariants }\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/prompt-bar.tsx"],"names":["AttachmentIcon"],"mappings":"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","file":"chunk-6YXUBP27.js","sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport { DropdownMenu, Popover } from 'radix-ui'\nimport { ArrowUp, Attachment as AttachmentIcon, Check, Globe, Microphone, NavArrowDown, Page, Plus, Search, Xmark } from 'iconoir-react'\nimport { cn } from '../lib/utils'\nimport { Button } from './button'\nimport { KbdArrowDown, KbdArrowUp, KbdHint, KbdReturn } from './kbd'\n\n/**\n * PromptBar, 1:1 with the uiKit `PromptBar` set (3158:21803), its input row\n * `_prompterInteractions` (3157:23767), `_dictationButton` (3156:40589), the `Attachment` chips\n * (3141:20409) and the two menus `_dropdowns/addToConversation` (3157:23548) and\n * `dropdowns/models`.\n *\n * The bar: bg/field, 1px border/default, shadow/xs, 8px padding, rows 8px apart. shape\n * default = radius 12 with Default buttons; pill = radius-full on one line, radius 20 once\n * attachments or a second line of text add height, with Rounded buttons. The input row is\n * add (+), the field (14/21, placeholder text/subtle), then 4px apart the model select, dictation\n * and send — all 28px DS buttons. Once the text needs a second line the bar expands: the field\n * takes its own row, with + and the model below on the left and dictation and send on the right. state inactive: border/default and send disabled; active (the\n * field focused, or text to send): border/strong and send enabled.\n *\n * Menus open 8px above: + opens addToConversation across the full width of the bar, the model\n * select opens the models list (241px, right-aligned); the trigger shows its pressed fill.\n * Dictation toggles to the primary button with a three-bar wave that moves while it records.\n * Enter sends, Shift+Enter adds a line.\n */\nexport interface PromptBarModel {\n value: string\n label: string\n /** 20px in the menu, 16px on the select. */\n icon?: React.ReactNode\n}\n\nexport interface PromptBarAction {\n id: string\n label: string\n description?: string\n /** 16px icon. */\n icon?: React.ReactNode\n /** Without it, the `upload` action opens the file picker and adds the files as attachments. */\n onSelect?: () => void\n}\n\nexport interface PromptBarProps extends Omit<React.ComponentProps<'form'>, 'onSubmit'> {\n shape?: 'pill' | 'default'\n /** The text. Pass it with onValueChange to control it. */\n value?: string\n defaultValue?: string\n onValueChange?: (value: string) => void\n placeholder?: string\n /** Files shown as chips above the field; people can remove them before sending. */\n attachments?: File[]\n onAttachmentsChange?: (files: File[]) => void\n /** The selected model's value (or its label, when there is no `models` list). */\n model?: string\n /** The models menu. Without it the select shows `model` and opens nothing. */\n models?: PromptBarModel[]\n onModelChange?: (value: string) => void\n /** Icon on the select when `models` doesn't give one. */\n modelIcon?: React.ReactNode\n /** Rows of the + menu. Defaults to Upload a file and Web search. */\n actions?: PromptBarAction[]\n /** The + at the end of the menu's search row. */\n onAddAgent?: () => void\n onDictationChange?: (recording: boolean) => void\n disabled?: boolean\n onSubmit?: (value: string, attachments: File[]) => void\n}\n\n/** Upload a file and Web search: spread them into `actions` to add your own rows after them. */\nexport const defaultActions: PromptBarAction[] = [\n { id: 'upload', label: 'Upload a file', description: 'Select a file from your computer', icon: <AttachmentIcon /> },\n { id: 'web', label: 'Web search', description: 'Research and find on the internet', icon: <Globe /> },\n]\n\n/** Menu card: bg/popover, border/subtle, radius 12, shadow/sm. */\nconst menuCard = [\n 'overflow-clip rounded-xl border border-border-subtle bg-bg-popover',\n '[box-shadow:0_1px_3px_0_var(--effect-shadow-sm),0_1px_2px_-1px_var(--effect-shadow-sm)]',\n 'origin-(--radix-popper-transform-origin) data-[state=open]:animate-[satin-enter_var(--duration-base)_var(--ease-out)]',\n 'focus-visible:outline-none',\n]\n\nexport function PromptBar({\n shape = 'pill',\n value: valueProp,\n defaultValue = '',\n onValueChange,\n placeholder = 'Write a message',\n attachments: attachmentsProp,\n onAttachmentsChange,\n model: modelProp,\n models,\n onModelChange,\n modelIcon,\n actions = defaultActions,\n onAddAgent,\n onDictationChange,\n disabled = false,\n onSubmit,\n className,\n ...props\n}: PromptBarProps) {\n const [innerValue, setInnerValue] = React.useState(defaultValue)\n const value = valueProp ?? innerValue\n const [files, setFiles] = React.useState<File[]>(attachmentsProp ?? [])\n React.useEffect(() => setFiles(attachmentsProp ?? []), [attachmentsProp])\n const [model, setModel] = React.useState(modelProp ?? models?.[0]?.value ?? '')\n React.useEffect(() => {\n if (modelProp != null) setModel(modelProp)\n }, [modelProp])\n const [addOpen, setAddOpen] = React.useState(false)\n const [recording, setRecording] = React.useState(false)\n // Expanded: the text has needed a second line. It stays expanded until the field is empty,\n // so the layout doesn't flip back when the wider field fits the text on one line again.\n const [expanded, setExpanded] = React.useState(false)\n const textareaRef = React.useRef<HTMLTextAreaElement>(null)\n const fileRef = React.useRef<HTMLInputElement>(null)\n\n const setValue = (next: string) => {\n setInnerValue(next)\n onValueChange?.(next)\n }\n const setAttachments = (next: File[]) => {\n setFiles(next)\n onAttachmentsChange?.(next)\n }\n\n const canSend = !disabled && (value.trim().length > 0 || files.length > 0)\n const current = models?.find((m) => m.value === model)\n const pill = shape === 'pill'\n const btnShape = pill ? 'rounded' : 'default'\n\n // The field grows with the text, up to six lines; a pill turns into radius 20 once it wraps.\n React.useLayoutEffect(() => {\n const el = textareaRef.current\n if (!el) return\n el.style.height = '0px'\n const h = Math.min(el.scrollHeight, 6 * 21 + 7)\n el.style.height = `${h}px`\n if (value.length === 0) setExpanded(false)\n else if (h > 28) setExpanded(true)\n }, [value, expanded])\n\n const submit = () => {\n if (!canSend) return\n onSubmit?.(value.trim(), files)\n setValue('')\n setAttachments([])\n }\n\n const runAction = (action: PromptBarAction) => {\n setAddOpen(false)\n if (action.onSelect) action.onSelect()\n else if (action.id === 'upload') fileRef.current?.click()\n }\n\n return (\n <Popover.Root open={addOpen} onOpenChange={setAddOpen}>\n <Popover.Anchor asChild>\n <form\n data-slot=\"prompt-bar\"\n data-shape={shape}\n data-filled={value.length > 0 || undefined}\n aria-disabled={disabled || undefined}\n onSubmit={(e) => {\n e.preventDefault()\n submit()\n }}\n className={cn(\n 'flex w-full flex-col gap-2 border border-border-default bg-bg-field p-2 [box-shadow:0_1px_2px_0_var(--effect-shadow-xs)]',\n 'transition-[border-color,border-radius] duration-(--duration-fast) ease-(--ease-out)',\n 'has-[textarea:focus]:border-border-strong data-filled:border-border-strong',\n pill ? (files.length > 0 || expanded ? 'rounded-3xl' : 'rounded-pill') : 'rounded-xl',\n disabled && 'opacity-50',\n className,\n )}\n {...props}\n >\n <input\n ref={fileRef}\n type=\"file\"\n multiple\n hidden\n onChange={(e) => {\n const picked = Array.from(e.target.files ?? [])\n if (picked.length) setAttachments([...files, ...picked])\n e.target.value = ''\n }}\n />\n\n {files.length > 0 && (\n <ul aria-label=\"Attachments\" className=\"flex flex-wrap gap-1 pb-1\">\n {files.map((file, i) => (\n <li key={`${file.name}-${i}`}>\n <AttachmentChip\n file={file}\n rounded={pill}\n disabled={disabled}\n onRemove={() => setAttachments(files.filter((_, j) => j !== i))}\n />\n </li>\n ))}\n </ul>\n )}\n\n {/* One line: + | field | model, dictation, send. Expanded: the field on its own row over\n + and the model on the left, dictation and send on the right. */}\n <div className={cn('flex flex-wrap items-end gap-x-2 gap-y-2', expanded && 'items-center')}>\n <Popover.Trigger asChild>\n <Button\n variant=\"tertiary\"\n size=\"md\"\n shape={btnShape}\n iconOnly\n disabled={disabled}\n aria-label=\"Add to conversation\"\n className=\"data-[state=open]:bg-border-input\"\n >\n <Plus />\n </Button>\n </Popover.Trigger>\n\n <textarea\n ref={textareaRef}\n rows={1}\n value={value}\n disabled={disabled}\n placeholder={placeholder}\n aria-label=\"Message\"\n onChange={(e) => setValue(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'Enter' && !e.shiftKey && !e.nativeEvent.isComposing) {\n e.preventDefault()\n submit()\n }\n }}\n className={cn(\n 'block h-7 min-w-0 flex-1 resize-none bg-transparent py-[3.5px] text-base leading-[21px] text-text-default',\n expanded && 'order-first basis-full px-1',\n 'outline-none placeholder:text-text-muted focus-visible:ring-0 disabled:cursor-not-allowed',\n )}\n />\n\n <div className={cn('flex shrink-0 items-center gap-1', expanded && 'contents')}>\n <ModelSelect\n models={models}\n model={model}\n label={current?.label ?? model}\n icon={current?.icon ?? modelIcon}\n shape={btnShape}\n disabled={disabled}\n onChange={(next) => {\n setModel(next)\n onModelChange?.(next)\n }}\n />\n {expanded && <span aria-hidden className=\"flex-1\" />}\n <DictationButton\n shape={btnShape}\n recording={recording}\n disabled={disabled}\n onToggle={() => {\n setRecording(!recording)\n onDictationChange?.(!recording)\n }}\n />\n <Button type=\"submit\" variant=\"primary\" size=\"md\" shape={btnShape} iconOnly aria-label=\"Send\" disabled={!canSend}>\n <ArrowUp />\n </Button>\n </div>\n </div>\n </form>\n </Popover.Anchor>\n\n <Popover.Portal>\n <Popover.Content\n side=\"top\"\n align=\"start\"\n sideOffset={8}\n avoidCollisions={false}\n aria-label=\"Add to conversation\"\n className={cn(menuCard, 'z-50 flex w-(--radix-popper-anchor-width) flex-col')}\n >\n <AddMenu actions={actions} onAction={runAction} onAddAgent={onAddAgent} />\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n )\n}\n\n/* ---------- add to conversation ---------- */\n\nfunction AddMenu({\n actions,\n onAction,\n onAddAgent,\n}: {\n actions: PromptBarAction[]\n onAction: (a: PromptBarAction) => void\n onAddAgent?: () => void\n}) {\n const [query, setQuery] = React.useState('')\n const [active, setActive] = React.useState(0)\n const id = React.useId()\n const q = query.trim().toLowerCase()\n const shown = q\n ? actions.filter((a) => `${a.label} ${a.description ?? ''}`.toLowerCase().includes(q))\n : actions\n const index = Math.min(active, Math.max(shown.length - 1, 0))\n\n return (\n <>\n <div className=\"flex items-center gap-1 pr-1.5\">\n <label className=\"flex flex-1 items-center gap-2 px-3 py-1.5\">\n <Search aria-hidden className=\"size-icon-size shrink-0 text-text-muted [stroke-width:1.875]\" />\n <input\n role=\"combobox\"\n aria-expanded\n aria-controls={`${id}-list`}\n aria-activedescendant={shown.length ? `${id}-${index}` : undefined}\n aria-label=\"Search agents and tools\"\n placeholder=\"Search agents and tools\"\n value={query}\n onChange={(e) => {\n setQuery(e.target.value)\n setActive(0)\n }}\n onKeyDown={(e) => {\n if (e.key === 'ArrowDown') {\n e.preventDefault()\n setActive((index + 1) % Math.max(shown.length, 1))\n } else if (e.key === 'ArrowUp') {\n e.preventDefault()\n setActive((index - 1 + shown.length) % Math.max(shown.length, 1))\n } else if (e.key === 'Enter' && shown[index]) {\n e.preventDefault()\n onAction(shown[index])\n }\n }}\n className=\"min-w-0 flex-1 bg-transparent text-sm text-text-default outline-none placeholder:text-text-muted focus-visible:ring-0\"\n />\n </label>\n <Button variant=\"tertiary\" size=\"xs\" iconOnly aria-label=\"Add an agent\" onClick={onAddAgent}>\n <Plus />\n </Button>\n </div>\n <div aria-hidden className=\"h-px bg-border-subtle\" />\n <div id={`${id}-list`} role=\"listbox\" aria-label=\"Agents and tools\" className=\"flex flex-col p-1\">\n {shown.map((a, i) => (\n <div\n key={a.id}\n id={`${id}-${i}`}\n role=\"option\"\n aria-selected={i === index}\n onPointerMove={() => setActive(i)}\n onMouseDown={(e) => e.preventDefault()}\n onClick={() => onAction(a)}\n className={cn(\n 'flex min-h-8 items-center gap-2 rounded-lg px-2 py-1.5',\n '[&>svg]:size-icon-size [&>svg]:shrink-0 [&>svg]:text-text-muted [&>svg]:[stroke-width:1.875]',\n i === index && 'bg-bg-hover',\n )}\n >\n {a.icon}\n <span className=\"flex min-w-0 flex-1 items-baseline gap-3\">\n <span className=\"shrink-0 text-sm leading-[13px] font-medium whitespace-nowrap text-text-default\">{a.label}</span>\n {a.description && <span className=\"min-w-0 flex-1 truncate text-sm text-text-muted\">{a.description}</span>}\n </span>\n </div>\n ))}\n {shown.length === 0 && <p className=\"px-2 py-1.5 text-sm text-text-muted\">No matches</p>}\n </div>\n <ShortcutHints />\n </>\n )\n}\n\n/* ---------- models ---------- */\n\nfunction ModelSelect({\n models,\n model,\n label,\n icon,\n shape,\n disabled,\n onChange,\n}: {\n models?: PromptBarModel[]\n model: string\n label: string\n icon?: React.ReactNode\n shape: 'rounded' | 'default'\n disabled: boolean\n onChange: (value: string) => void\n}) {\n if (!label) return null\n const trigger = (\n <Button\n variant=\"tertiary\"\n size=\"md\"\n shape={shape}\n disabled={disabled}\n className=\"data-[state=open]:bg-border-input\"\n >\n {icon && <span className=\"flex size-4 shrink-0 items-center justify-center [&>*]:size-4\">{icon}</span>}\n <span className=\"sr-only\">Model: </span>\n {label}\n <NavArrowDown aria-hidden data-chevron />\n </Button>\n )\n if (!models?.length) return trigger\n\n return (\n <DropdownMenu.Root>\n <DropdownMenu.Trigger asChild>{trigger}</DropdownMenu.Trigger>\n <DropdownMenu.Portal>\n <DropdownMenu.Content\n side=\"top\"\n align=\"end\"\n sideOffset={8}\n avoidCollisions={false}\n className={cn(menuCard, 'z-50 w-[241px]')}\n >\n <DropdownMenu.RadioGroup value={model} onValueChange={onChange} className=\"flex flex-col p-1\">\n {models.map((m) => (\n <DropdownMenu.RadioItem\n key={m.value}\n value={m.value}\n className={cn(\n 'flex min-h-8 cursor-pointer items-center gap-2 rounded-lg px-2 py-1.5 outline-none select-none',\n 'data-highlighted:bg-bg-hover data-[state=checked]:bg-bg-selected',\n )}\n >\n <span className=\"flex size-5 shrink-0 items-center justify-center [&>*]:size-5\">{m.icon}</span>\n <span className=\"min-w-0 flex-1 truncate text-sm leading-[13px] font-medium text-text-default\">{m.label}</span>\n <DropdownMenu.ItemIndicator>\n <Check aria-hidden className=\"size-icon-size text-status-green-fg [stroke-width:1.875]\" />\n </DropdownMenu.ItemIndicator>\n </DropdownMenu.RadioItem>\n ))}\n </DropdownMenu.RadioGroup>\n <ShortcutHints />\n </DropdownMenu.Content>\n </DropdownMenu.Portal>\n </DropdownMenu.Root>\n )\n}\n\n/**\n * The footer both menus share: ↑ ↓ Navigate, ↵ Select, on the menu's own bg/popover under a\n * border/default rule. Keys are Kbd sm.\n */\nfunction ShortcutHints() {\n return (\n <div aria-hidden className=\"flex items-center gap-3 border-t border-border-default bg-bg-popover px-3 py-1.5\">\n <KbdHint keys={[<KbdArrowUp key=\"up\" />, <KbdArrowDown key=\"down\" />]} label=\"Navigate\" />\n <KbdHint keys={[<KbdReturn key=\"return\" />]} label=\"Select\" />\n </div>\n )\n}\n\n/* ---------- dictation ---------- */\n\nfunction DictationButton({\n shape,\n recording,\n disabled,\n onToggle,\n}: {\n shape: 'rounded' | 'default'\n recording: boolean\n disabled: boolean\n onToggle: () => void\n}) {\n const waveRef = React.useRef<SVGSVGElement>(null)\n\n // The three bars of the wave breathe out of step while recording (transform only).\n React.useEffect(() => {\n const svg = waveRef.current\n if (!recording || !svg || window.matchMedia('(prefers-reduced-motion: reduce)').matches) return\n const anims = Array.from(svg.querySelectorAll('path')).map((bar, i) =>\n bar.animate([{ transform: 'scaleY(1)' }, { transform: 'scaleY(0.45)' }, { transform: 'scaleY(1)' }], {\n duration: 900,\n delay: i * 150,\n iterations: Infinity,\n easing: 'ease-in-out',\n }),\n )\n return () => anims.forEach((a) => a.cancel())\n }, [recording])\n\n return (\n <Button\n variant={recording ? 'primary' : 'tertiary'}\n size=\"md\"\n shape={shape}\n iconOnly\n disabled={disabled}\n aria-label={recording ? 'Stop dictation' : 'Dictate'}\n aria-pressed={recording}\n onClick={onToggle}\n >\n {recording ? (\n <svg ref={waveRef} viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" strokeLinecap=\"round\" aria-hidden>\n <path d=\"M4.66667 6.33333V9.66633\" strokeWidth=\"1.25\" style={{ transformBox: 'fill-box', transformOrigin: 'center' }} />\n <path d=\"M8 3.66667V12.3337\" strokeWidth=\"1.25\" style={{ transformBox: 'fill-box', transformOrigin: 'center' }} />\n <path d=\"M11.3333 5.33333V10.6663\" strokeWidth=\"1.25\" style={{ transformBox: 'fill-box', transformOrigin: 'center' }} />\n </svg>\n ) : (\n <Microphone />\n )}\n </Button>\n )\n}\n\n/* ---------- attachments ---------- */\n\nfunction AttachmentChip({\n file,\n rounded,\n disabled,\n onRemove,\n}: {\n file: File\n rounded: boolean\n disabled: boolean\n onRemove: () => void\n}) {\n return (\n <span\n data-slot=\"attachment\"\n className={cn(\n 'flex h-control-height items-center gap-1.5 border border-border-default bg-bg-popover pr-0.5 pl-2',\n '[filter:drop-shadow(0_1px_1px_var(--effect-shadow-xs))]',\n 'transition-[background-color,border-color] duration-(--duration-fast) ease-(--ease-out)',\n 'hover:border-border-strong hover:bg-bg-canvas active:border-border-strong active:bg-bg-muted',\n rounded ? 'rounded-pill' : 'rounded-md',\n )}\n >\n <FileIcon name={file.name} />\n <span className=\"max-w-[200px] truncate text-sm font-medium text-text-default\">{file.name}</span>\n <Button\n variant=\"tertiary\"\n size=\"xs\"\n shape=\"rounded\"\n iconOnly\n disabled={disabled}\n aria-label={`Remove ${file.name}`}\n onClick={onRemove}\n >\n <Xmark className=\"![stroke-width:1.64]\" />\n </Button>\n </span>\n )\n}\n\n/* File type icons keep their own colours (library primitives), 1:1 with Icon=filePdf/Doc/Xlsx. */\nconst PAGE =\n 'M2.66673 3.33327C2.66673 2.22873 3.56218 1.33327 4.66673 1.33327H5.72127C5.86673 1.33327 6.00339 1.36788 6.13127 1.43709L13.1416 5.22945C13.2695 5.29867 13.3335 5.406 13.3335 5.55145V12.6665C13.3335 13.7711 12.438 14.6665 11.3335 14.6665H4.66673C3.56218 14.6665 2.66673 13.7711 2.66673 12.6665V3.33327Z'\nconst FOLD = 'M5.93945 1.33327L13.3335 5.33327L10.8985 6.92509C10.2898 7.32303 9.78648 7.21764 9.38855 6.60891L5.93945 1.33327Z'\nconst LABELS = {\n pdf: [\n 'M4.62458 12.9938V10.3491H5.66796C5.86855 10.3491 6.03943 10.3875 6.18062 10.4641C6.3218 10.5398 6.42941 10.6453 6.50345 10.7804C6.57835 10.9147 6.61579 11.0697 6.61579 11.2453C6.61579 11.4209 6.57792 11.5759 6.50216 11.7102C6.4264 11.8445 6.31664 11.9491 6.17287 12.024C6.02996 12.0989 5.85693 12.1363 5.65376 12.1363H4.98873V11.6882H5.56337C5.67098 11.6882 5.75965 11.6697 5.82938 11.6327C5.89997 11.5948 5.95249 11.5428 5.98692 11.4765C6.02222 11.4093 6.03986 11.3323 6.03986 11.2453C6.03986 11.1575 6.02222 11.0809 5.98692 11.0155C5.95249 10.9492 5.89997 10.898 5.82938 10.8618C5.75879 10.8248 5.66925 10.8063 5.56078 10.8063H5.18372V12.9938H4.62458Z',\n 'M7.91648 12.9938H6.97898V10.3491H7.92423C8.19024 10.3491 8.41923 10.4021 8.61121 10.508C8.80319 10.613 8.95083 10.7641 9.05413 10.9612C9.1583 11.1584 9.21038 11.3943 9.21038 11.6689C9.21038 11.9444 9.1583 12.1811 9.05413 12.3791C8.95083 12.5771 8.80233 12.729 8.60863 12.8349C8.41579 12.9408 8.18507 12.9938 7.91648 12.9938ZM7.53812 12.5147H7.89323C8.05852 12.5147 8.19756 12.4854 8.31033 12.4269C8.42397 12.3675 8.5092 12.2758 8.56601 12.1518C8.62369 12.027 8.65253 11.866 8.65253 11.6689C8.65253 11.4735 8.62369 11.3138 8.56601 11.1898C8.5092 11.0658 8.4244 10.9746 8.31162 10.916C8.19885 10.8575 8.05982 10.8282 7.89453 10.8282H7.53812V12.5147Z',\n 'M9.62458 12.9938V10.3491H11.3756V10.8101H10.1837V11.4403H11.2594V11.9013H10.1837V12.9938H9.62458Z',\n ],\n doc: [\n 'M5.02585 12.9938H4.08835V10.3491H5.0336C5.29961 10.3491 5.52861 10.4021 5.72058 10.508C5.91256 10.613 6.0602 10.7641 6.16351 10.9612C6.26767 11.1584 6.31976 11.3943 6.31976 11.6689C6.31976 11.9444 6.26767 12.1811 6.16351 12.3791C6.0602 12.5771 5.9117 12.729 5.718 12.8349C5.52516 12.9408 5.29445 12.9938 5.02585 12.9938ZM4.6475 12.5147H5.00261C5.1679 12.5147 5.30693 12.4854 5.41971 12.4269C5.53334 12.3675 5.61857 12.2758 5.67539 12.1518C5.73307 12.027 5.76191 11.866 5.76191 11.6689C5.76191 11.4735 5.73307 11.3138 5.67539 11.1898C5.61857 11.0658 5.53377 10.9746 5.421 10.916C5.30822 10.8575 5.16919 10.8282 5.0039 10.8282H4.6475V12.5147Z',\n 'M9.16422 11.6715C9.16422 11.9598 9.10955 12.2052 9.00022 12.4075C8.89175 12.6098 8.74368 12.7643 8.55601 12.8711C8.36919 12.977 8.15914 13.0299 7.92584 13.0299C7.69082 13.0299 7.4799 12.9766 7.29309 12.8698C7.10628 12.7631 6.95864 12.6085 6.85017 12.4062C6.7417 12.2039 6.68746 11.959 6.68746 11.6715C6.68746 11.3831 6.7417 11.1377 6.85017 10.9354C6.95864 10.7331 7.10628 10.579 7.29309 10.4731C7.4799 10.3664 7.69082 10.313 7.92584 10.313C8.15914 10.313 8.36919 10.3664 8.55601 10.4731C8.74368 10.579 8.89175 10.7331 9.00022 10.9354C9.10955 11.1377 9.16422 11.3831 9.16422 11.6715ZM8.59733 11.6715C8.59733 11.4846 8.56935 11.3271 8.51339 11.1988C8.4583 11.0706 8.38039 10.9733 8.27966 10.907C8.17894 10.8407 8.061 10.8076 7.92584 10.8076C7.79068 10.8076 7.67274 10.8407 7.57202 10.907C7.47129 10.9733 7.39295 11.0706 7.337 11.1988C7.2819 11.3271 7.25435 11.4846 7.25435 11.6715C7.25435 11.8583 7.2819 12.0158 7.337 12.1441C7.39295 12.2723 7.47129 12.3696 7.57202 12.4359C7.67274 12.5022 7.79068 12.5353 7.92584 12.5353C8.061 12.5353 8.17894 12.5022 8.27966 12.4359C8.38039 12.3696 8.4583 12.2723 8.51339 12.1441C8.56935 12.0158 8.59733 11.8583 8.59733 11.6715Z',\n 'M11.9118 11.275H11.3462C11.3359 11.2018 11.3148 11.1368 11.283 11.08C11.2511 11.0223 11.2102 10.9733 11.1603 10.9328C11.1103 10.8924 11.0527 10.8614 10.9872 10.8398C10.9227 10.8183 10.8525 10.8076 10.7768 10.8076C10.6399 10.8076 10.5206 10.8416 10.4191 10.9096C10.3175 10.9767 10.2387 11.0749 10.1827 11.204C10.1268 11.3323 10.0988 11.4881 10.0988 11.6715C10.0988 11.86 10.1268 12.0184 10.1827 12.1467C10.2396 12.2749 10.3188 12.3718 10.4204 12.4372C10.5219 12.5026 10.6394 12.5353 10.7729 12.5353C10.8478 12.5353 10.9171 12.5254 10.9808 12.5056C11.0454 12.4858 11.1026 12.457 11.1525 12.4191C11.2025 12.3804 11.2438 12.3335 11.2765 12.2784C11.3101 12.2233 11.3333 12.1604 11.3462 12.0898L11.9118 12.0924C11.8972 12.2138 11.8606 12.3309 11.8021 12.4437C11.7444 12.5556 11.6665 12.6559 11.5683 12.7445C11.4711 12.8324 11.3548 12.9021 11.2197 12.9537C11.0854 13.0045 10.9334 13.0299 10.7638 13.0299C10.528 13.0299 10.317 12.9766 10.1311 12.8698C9.94601 12.7631 9.79966 12.6085 9.69205 12.4062C9.5853 12.2039 9.53192 11.959 9.53192 11.6715C9.53192 11.3831 9.58616 11.1377 9.69463 10.9354C9.8031 10.7331 9.95031 10.579 10.1363 10.4731C10.3222 10.3664 10.5314 10.313 10.7638 10.313C10.9171 10.313 11.0591 10.3345 11.19 10.3775C11.3217 10.4206 11.4383 10.4834 11.5399 10.5661C11.6415 10.6479 11.7242 10.7482 11.7879 10.867C11.8524 10.9858 11.8938 11.1218 11.9118 11.275Z',\n ],\n xls: [\n 'M4.54258 10.5469L4.99589 11.3131H5.01346L5.46897 10.5469H6.00571L5.31969 11.6709L6.02107 12.7949H5.47446L5.01346 12.0276H4.99589L4.53489 12.7949H3.99047L4.69405 11.6709L4.00364 10.5469H4.54258Z',\n 'M6.30646 12.7949V10.5469H6.78173V12.403H7.74544V12.7949H6.30646Z',\n 'M9.27965 11.1934C9.27086 11.1049 9.23318 11.0361 9.16659 10.9871C9.1 10.9381 9.00963 10.9135 8.89548 10.9135C8.81791 10.9135 8.75242 10.9245 8.699 10.9465C8.64559 10.9677 8.60461 10.9973 8.57607 11.0354C8.54826 11.0734 8.53436 11.1166 8.53436 11.1649C8.5329 11.2051 8.54131 11.2403 8.5596 11.2703C8.57863 11.3003 8.60461 11.3263 8.63754 11.3482C8.67046 11.3694 8.70852 11.3881 8.75169 11.4042C8.79486 11.4196 8.84096 11.4327 8.88999 11.4437L9.09195 11.492C9.19001 11.5139 9.28001 11.5432 9.36197 11.5798C9.44392 11.6164 9.5149 11.6614 9.57491 11.7148C9.63491 11.7682 9.68138 11.8312 9.71431 11.9036C9.74797 11.976 9.76516 12.0591 9.76589 12.1528C9.76516 12.2903 9.73004 12.4096 9.66052 12.5106C9.59174 12.6108 9.49222 12.6888 9.36197 12.7444C9.23245 12.7993 9.07622 12.8267 8.89328 12.8267C8.71181 12.8267 8.55375 12.7989 8.41911 12.7433C8.2852 12.6877 8.18056 12.6054 8.10519 12.4963C8.03055 12.3866 7.9914 12.2508 7.98774 12.0891H8.44765C8.45277 12.1645 8.47436 12.2274 8.51241 12.2779C8.55119 12.3277 8.60278 12.3653 8.66717 12.3909C8.7323 12.4158 8.80584 12.4283 8.88779 12.4283C8.96829 12.4283 9.03817 12.4166 9.09744 12.3931C9.15744 12.3697 9.20391 12.3372 9.23684 12.2955C9.26977 12.2537 9.28623 12.2058 9.28623 12.1517C9.28623 12.1012 9.27123 12.0587 9.24123 12.0243C9.21196 11.9899 9.16879 11.9607 9.11171 11.9365C9.05536 11.9124 8.98621 11.8904 8.90426 11.8707L8.65949 11.8092C8.46997 11.7631 8.32032 11.691 8.21056 11.593C8.1008 11.4949 8.04628 11.3628 8.04701 11.1967C8.04628 11.0606 8.0825 10.9417 8.15568 10.84C8.22959 10.7383 8.33093 10.6589 8.45972 10.6018C8.58851 10.5447 8.73486 10.5162 8.89877 10.5162C9.06561 10.5162 9.21123 10.5447 9.33562 10.6018C9.46075 10.6589 9.55808 10.7383 9.62759 10.84C9.69711 10.9417 9.73296 11.0595 9.73516 11.1934H9.27965Z',\n 'M10.5312 10.5469L10.9845 11.3131H11.0021L11.4576 10.5469H11.9943L11.3083 11.6709L12.0097 12.7949H11.4631L11.0021 12.0276H10.9845L10.5235 12.7949H9.97911L10.6827 11.6709L9.99228 10.5469H10.5312Z',\n ],\n}\nconst FILE_COLORS = {\n pdf: ['var(--color-red-500)', 'var(--color-red-300)'],\n doc: ['var(--color-sky-600)', 'var(--color-sky-300)'],\n xls: ['var(--color-green-700)', 'var(--color-green-300)'],\n}\n\nfunction FileIcon({ name }: { name: string }) {\n const ext = name.split('.').pop()?.toLowerCase() ?? ''\n const kind = ext === 'pdf' ? 'pdf' : ext === 'doc' || ext === 'docx' ? 'doc' : ext === 'xls' || ext === 'xlsx' || ext === 'csv' ? 'xls' : null\n if (!kind) return <Page aria-hidden className=\"size-4 shrink-0 text-text-muted [stroke-width:1.875]\" />\n const [page, fold] = FILE_COLORS[kind]\n return (\n <svg aria-hidden viewBox=\"0 0 16 16\" fill=\"none\" className=\"size-4 shrink-0\">\n <path d={PAGE} fill={page} />\n <path d={FOLD} fill={fold} />\n {LABELS[kind].map((d, i) => (\n <path key={i} d={d} fill=\"var(--color-white)\" />\n ))}\n </svg>\n )\n}\n"]}