@uisatin/ui 0.0.0-stage → 0.1.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 (329) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +67 -2
  3. package/chunk-2HKBZFIK.js +339 -0
  4. package/chunk-2HKBZFIK.js.map +1 -0
  5. package/chunk-2YEWSJD7.js +95 -0
  6. package/chunk-2YEWSJD7.js.map +1 -0
  7. package/chunk-3DINAQLL.js +153 -0
  8. package/chunk-3DINAQLL.js.map +1 -0
  9. package/chunk-3ERGAHKA.js +179 -0
  10. package/chunk-3ERGAHKA.js.map +1 -0
  11. package/chunk-6C7CGJX2.js +86 -0
  12. package/chunk-6C7CGJX2.js.map +1 -0
  13. package/chunk-6YXUBP27.js +474 -0
  14. package/chunk-6YXUBP27.js.map +1 -0
  15. package/chunk-72OCFAPT.js +175 -0
  16. package/chunk-72OCFAPT.js.map +1 -0
  17. package/chunk-7TXHCRAG.js +51 -0
  18. package/chunk-7TXHCRAG.js.map +1 -0
  19. package/chunk-A5XEM3GF.js +260 -0
  20. package/chunk-A5XEM3GF.js.map +1 -0
  21. package/chunk-AN2RNJLR.js +79 -0
  22. package/chunk-AN2RNJLR.js.map +1 -0
  23. package/chunk-B2K45IUR.js +36 -0
  24. package/chunk-B2K45IUR.js.map +1 -0
  25. package/chunk-B6V4VSGH.js +82 -0
  26. package/chunk-B6V4VSGH.js.map +1 -0
  27. package/chunk-BKZBWPUH.js +59 -0
  28. package/chunk-BKZBWPUH.js.map +1 -0
  29. package/chunk-BNTPPZCK.js +220 -0
  30. package/chunk-BNTPPZCK.js.map +1 -0
  31. package/chunk-BNZVTLHV.js +98 -0
  32. package/chunk-BNZVTLHV.js.map +1 -0
  33. package/chunk-CL2II6BX.js +89 -0
  34. package/chunk-CL2II6BX.js.map +1 -0
  35. package/chunk-DETGJAIC.js +147 -0
  36. package/chunk-DETGJAIC.js.map +1 -0
  37. package/chunk-DO3TBNSC.js +130 -0
  38. package/chunk-DO3TBNSC.js.map +1 -0
  39. package/chunk-ESC5JCVQ.js +90 -0
  40. package/chunk-ESC5JCVQ.js.map +1 -0
  41. package/chunk-FDKIX4DC.js +55 -0
  42. package/chunk-FDKIX4DC.js.map +1 -0
  43. package/chunk-GICKPMJU.js +239 -0
  44. package/chunk-GICKPMJU.js.map +1 -0
  45. package/chunk-GQA24FYG.js +57 -0
  46. package/chunk-GQA24FYG.js.map +1 -0
  47. package/chunk-H4NU7NPO.js +264 -0
  48. package/chunk-H4NU7NPO.js.map +1 -0
  49. package/chunk-H63FYCMY.js +11 -0
  50. package/chunk-H63FYCMY.js.map +1 -0
  51. package/chunk-HL42K2NH.js +76 -0
  52. package/chunk-HL42K2NH.js.map +1 -0
  53. package/chunk-HNQUX43Z.js +109 -0
  54. package/chunk-HNQUX43Z.js.map +1 -0
  55. package/chunk-HRKPV66B.js +32 -0
  56. package/chunk-HRKPV66B.js.map +1 -0
  57. package/chunk-J3NSDRVH.js +83 -0
  58. package/chunk-J3NSDRVH.js.map +1 -0
  59. package/chunk-JPNWHWAQ.js +151 -0
  60. package/chunk-JPNWHWAQ.js.map +1 -0
  61. package/chunk-KNUWZNFV.js +240 -0
  62. package/chunk-KNUWZNFV.js.map +1 -0
  63. package/chunk-L6NCCSIP.js +213 -0
  64. package/chunk-L6NCCSIP.js.map +1 -0
  65. package/chunk-LLHTVIM3.js +50 -0
  66. package/chunk-LLHTVIM3.js.map +1 -0
  67. package/chunk-LW3TRU5W.js +131 -0
  68. package/chunk-LW3TRU5W.js.map +1 -0
  69. package/chunk-LZMKSFCF.js +79 -0
  70. package/chunk-LZMKSFCF.js.map +1 -0
  71. package/chunk-MR3JDI7E.js +122 -0
  72. package/chunk-MR3JDI7E.js.map +1 -0
  73. package/chunk-NN6PKJWS.js +44 -0
  74. package/chunk-NN6PKJWS.js.map +1 -0
  75. package/chunk-NSRTTYQ4.js +252 -0
  76. package/chunk-NSRTTYQ4.js.map +1 -0
  77. package/chunk-O7F3CIDV.js +45 -0
  78. package/chunk-O7F3CIDV.js.map +1 -0
  79. package/chunk-P4O6TGDR.js +166 -0
  80. package/chunk-P4O6TGDR.js.map +1 -0
  81. package/chunk-PF3YBUKT.js +81 -0
  82. package/chunk-PF3YBUKT.js.map +1 -0
  83. package/chunk-PVOLDO4G.js +47 -0
  84. package/chunk-PVOLDO4G.js.map +1 -0
  85. package/chunk-QS4N4MNP.js +215 -0
  86. package/chunk-QS4N4MNP.js.map +1 -0
  87. package/chunk-QUF2IPOZ.js +98 -0
  88. package/chunk-QUF2IPOZ.js.map +1 -0
  89. package/chunk-RTJ76X5U.js +126 -0
  90. package/chunk-RTJ76X5U.js.map +1 -0
  91. package/chunk-SH6NG6VN.js +40 -0
  92. package/chunk-SH6NG6VN.js.map +1 -0
  93. package/chunk-SHDFUXYV.js +195 -0
  94. package/chunk-SHDFUXYV.js.map +1 -0
  95. package/chunk-TKO44NDI.js +84 -0
  96. package/chunk-TKO44NDI.js.map +1 -0
  97. package/chunk-TOMSU4S4.js +149 -0
  98. package/chunk-TOMSU4S4.js.map +1 -0
  99. package/chunk-TVLGZGYN.js +59 -0
  100. package/chunk-TVLGZGYN.js.map +1 -0
  101. package/chunk-TX3H3QMA.js +520 -0
  102. package/chunk-TX3H3QMA.js.map +1 -0
  103. package/chunk-UBNHSZSE.js +88 -0
  104. package/chunk-UBNHSZSE.js.map +1 -0
  105. package/chunk-UC3ZJWOD.js +73 -0
  106. package/chunk-UC3ZJWOD.js.map +1 -0
  107. package/chunk-UGRSWP6U.js +69 -0
  108. package/chunk-UGRSWP6U.js.map +1 -0
  109. package/chunk-VAGIAREV.js +214 -0
  110. package/chunk-VAGIAREV.js.map +1 -0
  111. package/chunk-WTMZT3IT.js +105 -0
  112. package/chunk-WTMZT3IT.js.map +1 -0
  113. package/chunk-WX6BP5ZP.js +39 -0
  114. package/chunk-WX6BP5ZP.js.map +1 -0
  115. package/chunk-X3PQANZO.js +255 -0
  116. package/chunk-X3PQANZO.js.map +1 -0
  117. package/chunk-XILQ7GXE.js +66 -0
  118. package/chunk-XILQ7GXE.js.map +1 -0
  119. package/chunk-XL75JRUA.js +130 -0
  120. package/chunk-XL75JRUA.js.map +1 -0
  121. package/chunk-XZNHT6MO.js +348 -0
  122. package/chunk-XZNHT6MO.js.map +1 -0
  123. package/chunk-Y5AYU7PK.js +44 -0
  124. package/chunk-Y5AYU7PK.js.map +1 -0
  125. package/chunk-YG7JOOLJ.js +28 -0
  126. package/chunk-YG7JOOLJ.js.map +1 -0
  127. package/chunk-YPJYW624.js +195 -0
  128. package/chunk-YPJYW624.js.map +1 -0
  129. package/chunk-YPNKBE5X.js +104 -0
  130. package/chunk-YPNKBE5X.js.map +1 -0
  131. package/components/accordion.d.ts +27 -0
  132. package/components/accordion.js +4 -0
  133. package/components/accordion.js.map +1 -0
  134. package/components/agent-loading.d.ts +65 -0
  135. package/components/agent-loading.js +4 -0
  136. package/components/agent-loading.js.map +1 -0
  137. package/components/agent-picker.d.ts +82 -0
  138. package/components/agent-picker.js +5 -0
  139. package/components/agent-picker.js.map +1 -0
  140. package/components/agent-suggestion.d.ts +69 -0
  141. package/components/agent-suggestion.js +6 -0
  142. package/components/agent-suggestion.js.map +1 -0
  143. package/components/announcement-bar.d.ts +39 -0
  144. package/components/announcement-bar.js +6 -0
  145. package/components/announcement-bar.js.map +1 -0
  146. package/components/attachment.d.ts +73 -0
  147. package/components/attachment.js +5 -0
  148. package/components/attachment.js.map +1 -0
  149. package/components/avatar.d.ts +34 -0
  150. package/components/avatar.js +6 -0
  151. package/components/avatar.js.map +1 -0
  152. package/components/badge.d.ts +19 -0
  153. package/components/badge.js +4 -0
  154. package/components/badge.js.map +1 -0
  155. package/components/banner.d.ts +54 -0
  156. package/components/banner.js +5 -0
  157. package/components/banner.js.map +1 -0
  158. package/components/bar-chart.d.ts +32 -0
  159. package/components/bar-chart.js +11 -0
  160. package/components/bar-chart.js.map +1 -0
  161. package/components/breadcrumb.d.ts +32 -0
  162. package/components/breadcrumb.js +6 -0
  163. package/components/breadcrumb.js.map +1 -0
  164. package/components/button.d.ts +32 -0
  165. package/components/button.js +4 -0
  166. package/components/button.js.map +1 -0
  167. package/components/card.d.ts +28 -0
  168. package/components/card.js +5 -0
  169. package/components/card.js.map +1 -0
  170. package/components/channel-chart.d.ts +14 -0
  171. package/components/channel-chart.js +11 -0
  172. package/components/channel-chart.js.map +1 -0
  173. package/components/chart.d.ts +88 -0
  174. package/components/chart.js +10 -0
  175. package/components/chart.js.map +1 -0
  176. package/components/checkbox.d.ts +17 -0
  177. package/components/checkbox.js +4 -0
  178. package/components/checkbox.js.map +1 -0
  179. package/components/chip.d.ts +54 -0
  180. package/components/chip.js +4 -0
  181. package/components/chip.js.map +1 -0
  182. package/components/citations.d.ts +37 -0
  183. package/components/citations.js +5 -0
  184. package/components/citations.js.map +1 -0
  185. package/components/code-block.d.ts +13 -0
  186. package/components/code-block.js +5 -0
  187. package/components/code-block.js.map +1 -0
  188. package/components/combobox.d.ts +58 -0
  189. package/components/combobox.js +10 -0
  190. package/components/combobox.js.map +1 -0
  191. package/components/command-menu.d.ts +54 -0
  192. package/components/command-menu.js +6 -0
  193. package/components/command-menu.js.map +1 -0
  194. package/components/context-menu.d.ts +46 -0
  195. package/components/context-menu.js +6 -0
  196. package/components/context-menu.js.map +1 -0
  197. package/components/cookie-consent.d.ts +26 -0
  198. package/components/cookie-consent.js +5 -0
  199. package/components/cookie-consent.js.map +1 -0
  200. package/components/date-picker.d.ts +112 -0
  201. package/components/date-picker.js +9 -0
  202. package/components/date-picker.js.map +1 -0
  203. package/components/decision-card.d.ts +65 -0
  204. package/components/decision-card.js +7 -0
  205. package/components/decision-card.js.map +1 -0
  206. package/components/dialog.d.ts +68 -0
  207. package/components/dialog.js +5 -0
  208. package/components/dialog.js.map +1 -0
  209. package/components/donut-chart.d.ts +20 -0
  210. package/components/donut-chart.js +11 -0
  211. package/components/donut-chart.js.map +1 -0
  212. package/components/dot.d.ts +21 -0
  213. package/components/dot.js +4 -0
  214. package/components/dot.js.map +1 -0
  215. package/components/dropdown.d.ts +74 -0
  216. package/components/dropdown.js +5 -0
  217. package/components/dropdown.js.map +1 -0
  218. package/components/empty-state.d.ts +25 -0
  219. package/components/empty-state.js +4 -0
  220. package/components/empty-state.js.map +1 -0
  221. package/components/file-upload.d.ts +78 -0
  222. package/components/file-upload.js +7 -0
  223. package/components/file-upload.js.map +1 -0
  224. package/components/floating.d.ts +30 -0
  225. package/components/floating.js +3 -0
  226. package/components/floating.js.map +1 -0
  227. package/components/form-field.d.ts +35 -0
  228. package/components/form-field.js +4 -0
  229. package/components/form-field.js.map +1 -0
  230. package/components/hover-card.d.ts +30 -0
  231. package/components/hover-card.js +4 -0
  232. package/components/hover-card.js.map +1 -0
  233. package/components/input-otp.d.ts +49 -0
  234. package/components/input-otp.js +8 -0
  235. package/components/input-otp.js.map +1 -0
  236. package/components/input.d.ts +28 -0
  237. package/components/input.js +5 -0
  238. package/components/input.js.map +1 -0
  239. package/components/kbd.d.ts +37 -0
  240. package/components/kbd.js +4 -0
  241. package/components/kbd.js.map +1 -0
  242. package/components/line-chart.d.ts +29 -0
  243. package/components/line-chart.js +12 -0
  244. package/components/line-chart.js.map +1 -0
  245. package/components/message-actions.d.ts +24 -0
  246. package/components/message-actions.js +5 -0
  247. package/components/message-actions.js.map +1 -0
  248. package/components/message.d.ts +40 -0
  249. package/components/message.js +8 -0
  250. package/components/message.js.map +1 -0
  251. package/components/number-input.d.ts +33 -0
  252. package/components/number-input.js +8 -0
  253. package/components/number-input.js.map +1 -0
  254. package/components/pagination.d.ts +45 -0
  255. package/components/pagination.js +6 -0
  256. package/components/pagination.js.map +1 -0
  257. package/components/popover.d.ts +44 -0
  258. package/components/popover.js +4 -0
  259. package/components/popover.js.map +1 -0
  260. package/components/progress.d.ts +24 -0
  261. package/components/progress.js +4 -0
  262. package/components/progress.js.map +1 -0
  263. package/components/prompt-bar.d.ts +63 -0
  264. package/components/prompt-bar.js +6 -0
  265. package/components/prompt-bar.js.map +1 -0
  266. package/components/radio.d.ts +27 -0
  267. package/components/radio.js +4 -0
  268. package/components/radio.js.map +1 -0
  269. package/components/search-bar.d.ts +20 -0
  270. package/components/search-bar.js +5 -0
  271. package/components/search-bar.js.map +1 -0
  272. package/components/segmented-control.d.ts +32 -0
  273. package/components/segmented-control.js +5 -0
  274. package/components/segmented-control.js.map +1 -0
  275. package/components/select.d.ts +97 -0
  276. package/components/select.js +7 -0
  277. package/components/select.js.map +1 -0
  278. package/components/sheet.d.ts +37 -0
  279. package/components/sheet.js +6 -0
  280. package/components/sheet.js.map +1 -0
  281. package/components/sidebar.d.ts +52 -0
  282. package/components/sidebar.js +4 -0
  283. package/components/sidebar.js.map +1 -0
  284. package/components/skeleton.d.ts +18 -0
  285. package/components/skeleton.js +4 -0
  286. package/components/skeleton.js.map +1 -0
  287. package/components/slider.d.ts +57 -0
  288. package/components/slider.js +8 -0
  289. package/components/slider.js.map +1 -0
  290. package/components/sliding-indicator.d.ts +23 -0
  291. package/components/sliding-indicator.js +3 -0
  292. package/components/sliding-indicator.js.map +1 -0
  293. package/components/streaming-text.d.ts +33 -0
  294. package/components/streaming-text.js +4 -0
  295. package/components/streaming-text.js.map +1 -0
  296. package/components/switch.d.ts +15 -0
  297. package/components/switch.js +4 -0
  298. package/components/switch.js.map +1 -0
  299. package/components/table.d.ts +57 -0
  300. package/components/table.js +5 -0
  301. package/components/table.js.map +1 -0
  302. package/components/tabs.d.ts +45 -0
  303. package/components/tabs.js +5 -0
  304. package/components/tabs.js.map +1 -0
  305. package/components/textarea.d.ts +30 -0
  306. package/components/textarea.js +5 -0
  307. package/components/textarea.js.map +1 -0
  308. package/components/thinking.d.ts +64 -0
  309. package/components/thinking.js +5 -0
  310. package/components/thinking.js.map +1 -0
  311. package/components/toast.d.ts +71 -0
  312. package/components/toast.js +5 -0
  313. package/components/toast.js.map +1 -0
  314. package/components/toggle.d.ts +30 -0
  315. package/components/toggle.js +4 -0
  316. package/components/toggle.js.map +1 -0
  317. package/components/tooltip.d.ts +35 -0
  318. package/components/tooltip.js +5 -0
  319. package/components/tooltip.js.map +1 -0
  320. package/index.d.ts +64 -0
  321. package/index.js +230 -0
  322. package/index.js.map +1 -0
  323. package/lib/utils.d.ts +3 -0
  324. package/lib/utils.js +3 -0
  325. package/lib/utils.js.map +1 -0
  326. package/package.json +54 -4
  327. package/styles.css +2 -0
  328. package/theme/create-theme.d.ts +44 -0
  329. package/theme/index.d.ts +1 -0
@@ -0,0 +1,474 @@
1
+ import { KbdHint, KbdArrowUp, KbdArrowDown, KbdReturn } from './chunk-BKZBWPUH.js';
2
+ import { Button } from './chunk-HNQUX43Z.js';
3
+ import { cn } from './chunk-H63FYCMY.js';
4
+ import * as React from 'react';
5
+ import { Popover, DropdownMenu } from 'radix-ui';
6
+ import { Attachment, Globe, Plus, ArrowUp, Search, Check, Microphone, Xmark, Page, NavArrowDown } from 'iconoir-react';
7
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
8
+
9
+ var defaultActions = [
10
+ { id: "upload", label: "Upload a file", description: "Select a file from your computer", icon: /* @__PURE__ */ jsx(Attachment, {}) },
11
+ { id: "web", label: "Web search", description: "Research and find on the internet", icon: /* @__PURE__ */ jsx(Globe, {}) }
12
+ ];
13
+ var menuCard = [
14
+ "overflow-clip rounded-xl border border-border-subtle bg-bg-popover",
15
+ "[box-shadow:0_1px_3px_0_var(--effect-shadow-sm),0_1px_2px_-1px_var(--effect-shadow-sm)]",
16
+ "origin-(--radix-popper-transform-origin) data-[state=open]:animate-[satin-enter_var(--duration-base)_var(--ease-out)]",
17
+ "focus-visible:outline-none"
18
+ ];
19
+ function PromptBar({
20
+ shape = "pill",
21
+ value: valueProp,
22
+ defaultValue = "",
23
+ onValueChange,
24
+ placeholder = "Write a message",
25
+ attachments: attachmentsProp,
26
+ onAttachmentsChange,
27
+ model: modelProp,
28
+ models,
29
+ onModelChange,
30
+ modelIcon,
31
+ actions = defaultActions,
32
+ onAddAgent,
33
+ onDictationChange,
34
+ disabled = false,
35
+ onSubmit,
36
+ className,
37
+ ...props
38
+ }) {
39
+ const [innerValue, setInnerValue] = React.useState(defaultValue);
40
+ const value = valueProp ?? innerValue;
41
+ const [files, setFiles] = React.useState(attachmentsProp ?? []);
42
+ React.useEffect(() => setFiles(attachmentsProp ?? []), [attachmentsProp]);
43
+ const [model, setModel] = React.useState(modelProp ?? models?.[0]?.value ?? "");
44
+ React.useEffect(() => {
45
+ if (modelProp != null) setModel(modelProp);
46
+ }, [modelProp]);
47
+ const [addOpen, setAddOpen] = React.useState(false);
48
+ const [recording, setRecording] = React.useState(false);
49
+ const [expanded, setExpanded] = React.useState(false);
50
+ const textareaRef = React.useRef(null);
51
+ const fileRef = React.useRef(null);
52
+ const setValue = (next) => {
53
+ setInnerValue(next);
54
+ onValueChange?.(next);
55
+ };
56
+ const setAttachments = (next) => {
57
+ setFiles(next);
58
+ onAttachmentsChange?.(next);
59
+ };
60
+ const canSend = !disabled && (value.trim().length > 0 || files.length > 0);
61
+ const current = models?.find((m) => m.value === model);
62
+ const pill = shape === "pill";
63
+ const btnShape = pill ? "rounded" : "default";
64
+ React.useLayoutEffect(() => {
65
+ const el = textareaRef.current;
66
+ if (!el) return;
67
+ el.style.height = "0px";
68
+ const h = Math.min(el.scrollHeight, 6 * 21 + 7);
69
+ el.style.height = `${h}px`;
70
+ if (value.length === 0) setExpanded(false);
71
+ else if (h > 28) setExpanded(true);
72
+ }, [value, expanded]);
73
+ const submit = () => {
74
+ if (!canSend) return;
75
+ onSubmit?.(value.trim(), files);
76
+ setValue("");
77
+ setAttachments([]);
78
+ };
79
+ const runAction = (action) => {
80
+ setAddOpen(false);
81
+ if (action.onSelect) action.onSelect();
82
+ else if (action.id === "upload") fileRef.current?.click();
83
+ };
84
+ return /* @__PURE__ */ jsxs(Popover.Root, { open: addOpen, onOpenChange: setAddOpen, children: [
85
+ /* @__PURE__ */ jsx(Popover.Anchor, { asChild: true, children: /* @__PURE__ */ jsxs(
86
+ "form",
87
+ {
88
+ "data-slot": "prompt-bar",
89
+ "data-shape": shape,
90
+ "data-filled": value.length > 0 || void 0,
91
+ "aria-disabled": disabled || void 0,
92
+ onSubmit: (e) => {
93
+ e.preventDefault();
94
+ submit();
95
+ },
96
+ className: cn(
97
+ "flex w-full flex-col gap-2 border border-border-default bg-bg-field p-2 [box-shadow:0_1px_2px_0_var(--effect-shadow-xs)]",
98
+ "transition-[border-color,border-radius] duration-(--duration-fast) ease-(--ease-out)",
99
+ "has-[textarea:focus]:border-border-strong data-filled:border-border-strong",
100
+ pill ? files.length > 0 || expanded ? "rounded-3xl" : "rounded-pill" : "rounded-xl",
101
+ disabled && "opacity-50",
102
+ className
103
+ ),
104
+ ...props,
105
+ children: [
106
+ /* @__PURE__ */ jsx(
107
+ "input",
108
+ {
109
+ ref: fileRef,
110
+ type: "file",
111
+ multiple: true,
112
+ hidden: true,
113
+ onChange: (e) => {
114
+ const picked = Array.from(e.target.files ?? []);
115
+ if (picked.length) setAttachments([...files, ...picked]);
116
+ e.target.value = "";
117
+ }
118
+ }
119
+ ),
120
+ files.length > 0 && /* @__PURE__ */ jsx("ul", { "aria-label": "Attachments", className: "flex flex-wrap gap-1 pb-1", children: files.map((file, i) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(
121
+ AttachmentChip,
122
+ {
123
+ file,
124
+ rounded: pill,
125
+ disabled,
126
+ onRemove: () => setAttachments(files.filter((_, j) => j !== i))
127
+ }
128
+ ) }, `${file.name}-${i}`)) }),
129
+ /* @__PURE__ */ jsxs("div", { className: cn("flex flex-wrap items-end gap-x-2 gap-y-2", expanded && "items-center"), children: [
130
+ /* @__PURE__ */ jsx(Popover.Trigger, { asChild: true, children: /* @__PURE__ */ jsx(
131
+ Button,
132
+ {
133
+ variant: "tertiary",
134
+ size: "md",
135
+ shape: btnShape,
136
+ iconOnly: true,
137
+ disabled,
138
+ "aria-label": "Add to conversation",
139
+ className: "data-[state=open]:bg-border-input",
140
+ children: /* @__PURE__ */ jsx(Plus, {})
141
+ }
142
+ ) }),
143
+ /* @__PURE__ */ jsx(
144
+ "textarea",
145
+ {
146
+ ref: textareaRef,
147
+ rows: 1,
148
+ value,
149
+ disabled,
150
+ placeholder,
151
+ "aria-label": "Message",
152
+ onChange: (e) => setValue(e.target.value),
153
+ onKeyDown: (e) => {
154
+ if (e.key === "Enter" && !e.shiftKey && !e.nativeEvent.isComposing) {
155
+ e.preventDefault();
156
+ submit();
157
+ }
158
+ },
159
+ className: cn(
160
+ "block h-7 min-w-0 flex-1 resize-none bg-transparent py-[3.5px] text-base leading-[21px] text-text-default",
161
+ expanded && "order-first basis-full px-1",
162
+ "outline-none placeholder:text-text-muted focus-visible:ring-0 disabled:cursor-not-allowed"
163
+ )
164
+ }
165
+ ),
166
+ /* @__PURE__ */ jsxs("div", { className: cn("flex shrink-0 items-center gap-1", expanded && "contents"), children: [
167
+ /* @__PURE__ */ jsx(
168
+ ModelSelect,
169
+ {
170
+ models,
171
+ model,
172
+ label: current?.label ?? model,
173
+ icon: current?.icon ?? modelIcon,
174
+ shape: btnShape,
175
+ disabled,
176
+ onChange: (next) => {
177
+ setModel(next);
178
+ onModelChange?.(next);
179
+ }
180
+ }
181
+ ),
182
+ expanded && /* @__PURE__ */ jsx("span", { "aria-hidden": true, className: "flex-1" }),
183
+ /* @__PURE__ */ jsx(
184
+ DictationButton,
185
+ {
186
+ shape: btnShape,
187
+ recording,
188
+ disabled,
189
+ onToggle: () => {
190
+ setRecording(!recording);
191
+ onDictationChange?.(!recording);
192
+ }
193
+ }
194
+ ),
195
+ /* @__PURE__ */ jsx(Button, { type: "submit", variant: "primary", size: "md", shape: btnShape, iconOnly: true, "aria-label": "Send", disabled: !canSend, children: /* @__PURE__ */ jsx(ArrowUp, {}) })
196
+ ] })
197
+ ] })
198
+ ]
199
+ }
200
+ ) }),
201
+ /* @__PURE__ */ jsx(Popover.Portal, { children: /* @__PURE__ */ jsx(
202
+ Popover.Content,
203
+ {
204
+ side: "top",
205
+ align: "start",
206
+ sideOffset: 8,
207
+ avoidCollisions: false,
208
+ "aria-label": "Add to conversation",
209
+ className: cn(menuCard, "z-50 flex w-(--radix-popper-anchor-width) flex-col"),
210
+ children: /* @__PURE__ */ jsx(AddMenu, { actions, onAction: runAction, onAddAgent })
211
+ }
212
+ ) })
213
+ ] });
214
+ }
215
+ function AddMenu({
216
+ actions,
217
+ onAction,
218
+ onAddAgent
219
+ }) {
220
+ const [query, setQuery] = React.useState("");
221
+ const [active, setActive] = React.useState(0);
222
+ const id = React.useId();
223
+ const q = query.trim().toLowerCase();
224
+ const shown = q ? actions.filter((a) => `${a.label} ${a.description ?? ""}`.toLowerCase().includes(q)) : actions;
225
+ const index = Math.min(active, Math.max(shown.length - 1, 0));
226
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
227
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1 pr-1.5", children: [
228
+ /* @__PURE__ */ jsxs("label", { className: "flex flex-1 items-center gap-2 px-3 py-1.5", children: [
229
+ /* @__PURE__ */ jsx(Search, { "aria-hidden": true, className: "size-icon-size shrink-0 text-text-muted [stroke-width:1.875]" }),
230
+ /* @__PURE__ */ jsx(
231
+ "input",
232
+ {
233
+ role: "combobox",
234
+ "aria-expanded": true,
235
+ "aria-controls": `${id}-list`,
236
+ "aria-activedescendant": shown.length ? `${id}-${index}` : void 0,
237
+ "aria-label": "Search agents and tools",
238
+ placeholder: "Search agents and tools",
239
+ value: query,
240
+ onChange: (e) => {
241
+ setQuery(e.target.value);
242
+ setActive(0);
243
+ },
244
+ onKeyDown: (e) => {
245
+ if (e.key === "ArrowDown") {
246
+ e.preventDefault();
247
+ setActive((index + 1) % Math.max(shown.length, 1));
248
+ } else if (e.key === "ArrowUp") {
249
+ e.preventDefault();
250
+ setActive((index - 1 + shown.length) % Math.max(shown.length, 1));
251
+ } else if (e.key === "Enter" && shown[index]) {
252
+ e.preventDefault();
253
+ onAction(shown[index]);
254
+ }
255
+ },
256
+ className: "min-w-0 flex-1 bg-transparent text-sm text-text-default outline-none placeholder:text-text-muted focus-visible:ring-0"
257
+ }
258
+ )
259
+ ] }),
260
+ /* @__PURE__ */ jsx(Button, { variant: "tertiary", size: "xs", iconOnly: true, "aria-label": "Add an agent", onClick: onAddAgent, children: /* @__PURE__ */ jsx(Plus, {}) })
261
+ ] }),
262
+ /* @__PURE__ */ jsx("div", { "aria-hidden": true, className: "h-px bg-border-subtle" }),
263
+ /* @__PURE__ */ jsxs("div", { id: `${id}-list`, role: "listbox", "aria-label": "Agents and tools", className: "flex flex-col p-1", children: [
264
+ shown.map((a, i) => /* @__PURE__ */ jsxs(
265
+ "div",
266
+ {
267
+ id: `${id}-${i}`,
268
+ role: "option",
269
+ "aria-selected": i === index,
270
+ onPointerMove: () => setActive(i),
271
+ onMouseDown: (e) => e.preventDefault(),
272
+ onClick: () => onAction(a),
273
+ className: cn(
274
+ "flex min-h-8 items-center gap-2 rounded-lg px-2 py-1.5",
275
+ "[&>svg]:size-icon-size [&>svg]:shrink-0 [&>svg]:text-text-muted [&>svg]:[stroke-width:1.875]",
276
+ i === index && "bg-bg-hover"
277
+ ),
278
+ children: [
279
+ a.icon,
280
+ /* @__PURE__ */ jsxs("span", { className: "flex min-w-0 flex-1 items-baseline gap-3", children: [
281
+ /* @__PURE__ */ jsx("span", { className: "shrink-0 text-sm leading-[13px] font-medium whitespace-nowrap text-text-default", children: a.label }),
282
+ a.description && /* @__PURE__ */ jsx("span", { className: "min-w-0 flex-1 truncate text-sm text-text-muted", children: a.description })
283
+ ] })
284
+ ]
285
+ },
286
+ a.id
287
+ )),
288
+ shown.length === 0 && /* @__PURE__ */ jsx("p", { className: "px-2 py-1.5 text-sm text-text-muted", children: "No matches" })
289
+ ] }),
290
+ /* @__PURE__ */ jsx(ShortcutHints, {})
291
+ ] });
292
+ }
293
+ function ModelSelect({
294
+ models,
295
+ model,
296
+ label,
297
+ icon,
298
+ shape,
299
+ disabled,
300
+ onChange
301
+ }) {
302
+ if (!label) return null;
303
+ const trigger = /* @__PURE__ */ jsxs(
304
+ Button,
305
+ {
306
+ variant: "tertiary",
307
+ size: "md",
308
+ shape,
309
+ disabled,
310
+ className: "data-[state=open]:bg-border-input",
311
+ children: [
312
+ icon && /* @__PURE__ */ jsx("span", { className: "flex size-4 shrink-0 items-center justify-center [&>*]:size-4", children: icon }),
313
+ /* @__PURE__ */ jsx("span", { className: "sr-only", children: "Model: " }),
314
+ label,
315
+ /* @__PURE__ */ jsx(NavArrowDown, { "aria-hidden": true, "data-chevron": true })
316
+ ]
317
+ }
318
+ );
319
+ if (!models?.length) return trigger;
320
+ return /* @__PURE__ */ jsxs(DropdownMenu.Root, { children: [
321
+ /* @__PURE__ */ jsx(DropdownMenu.Trigger, { asChild: true, children: trigger }),
322
+ /* @__PURE__ */ jsx(DropdownMenu.Portal, { children: /* @__PURE__ */ jsxs(
323
+ DropdownMenu.Content,
324
+ {
325
+ side: "top",
326
+ align: "end",
327
+ sideOffset: 8,
328
+ avoidCollisions: false,
329
+ className: cn(menuCard, "z-50 w-[241px]"),
330
+ children: [
331
+ /* @__PURE__ */ jsx(DropdownMenu.RadioGroup, { value: model, onValueChange: onChange, className: "flex flex-col p-1", children: models.map((m) => /* @__PURE__ */ jsxs(
332
+ DropdownMenu.RadioItem,
333
+ {
334
+ value: m.value,
335
+ className: cn(
336
+ "flex min-h-8 cursor-pointer items-center gap-2 rounded-lg px-2 py-1.5 outline-none select-none",
337
+ "data-highlighted:bg-bg-hover data-[state=checked]:bg-bg-selected"
338
+ ),
339
+ children: [
340
+ /* @__PURE__ */ jsx("span", { className: "flex size-5 shrink-0 items-center justify-center [&>*]:size-5", children: m.icon }),
341
+ /* @__PURE__ */ jsx("span", { className: "min-w-0 flex-1 truncate text-sm leading-[13px] font-medium text-text-default", children: m.label }),
342
+ /* @__PURE__ */ jsx(DropdownMenu.ItemIndicator, { children: /* @__PURE__ */ jsx(Check, { "aria-hidden": true, className: "size-icon-size text-status-green-fg [stroke-width:1.875]" }) })
343
+ ]
344
+ },
345
+ m.value
346
+ )) }),
347
+ /* @__PURE__ */ jsx(ShortcutHints, {})
348
+ ]
349
+ }
350
+ ) })
351
+ ] });
352
+ }
353
+ function ShortcutHints() {
354
+ return /* @__PURE__ */ jsxs("div", { "aria-hidden": true, className: "flex items-center gap-3 border-t border-border-default bg-bg-popover px-3 py-1.5", children: [
355
+ /* @__PURE__ */ jsx(KbdHint, { keys: [/* @__PURE__ */ jsx(KbdArrowUp, {}, "up"), /* @__PURE__ */ jsx(KbdArrowDown, {}, "down")], label: "Navigate" }),
356
+ /* @__PURE__ */ jsx(KbdHint, { keys: [/* @__PURE__ */ jsx(KbdReturn, {}, "return")], label: "Select" })
357
+ ] });
358
+ }
359
+ function DictationButton({
360
+ shape,
361
+ recording,
362
+ disabled,
363
+ onToggle
364
+ }) {
365
+ const waveRef = React.useRef(null);
366
+ React.useEffect(() => {
367
+ const svg = waveRef.current;
368
+ if (!recording || !svg || window.matchMedia("(prefers-reduced-motion: reduce)").matches) return;
369
+ const anims = Array.from(svg.querySelectorAll("path")).map(
370
+ (bar, i) => bar.animate([{ transform: "scaleY(1)" }, { transform: "scaleY(0.45)" }, { transform: "scaleY(1)" }], {
371
+ duration: 900,
372
+ delay: i * 150,
373
+ iterations: Infinity,
374
+ easing: "ease-in-out"
375
+ })
376
+ );
377
+ return () => anims.forEach((a) => a.cancel());
378
+ }, [recording]);
379
+ return /* @__PURE__ */ jsx(
380
+ Button,
381
+ {
382
+ variant: recording ? "primary" : "tertiary",
383
+ size: "md",
384
+ shape,
385
+ iconOnly: true,
386
+ disabled,
387
+ "aria-label": recording ? "Stop dictation" : "Dictate",
388
+ "aria-pressed": recording,
389
+ onClick: onToggle,
390
+ children: recording ? /* @__PURE__ */ jsxs("svg", { ref: waveRef, viewBox: "0 0 16 16", fill: "none", stroke: "currentColor", strokeLinecap: "round", "aria-hidden": true, children: [
391
+ /* @__PURE__ */ jsx("path", { d: "M4.66667 6.33333V9.66633", strokeWidth: "1.25", style: { transformBox: "fill-box", transformOrigin: "center" } }),
392
+ /* @__PURE__ */ jsx("path", { d: "M8 3.66667V12.3337", strokeWidth: "1.25", style: { transformBox: "fill-box", transformOrigin: "center" } }),
393
+ /* @__PURE__ */ jsx("path", { d: "M11.3333 5.33333V10.6663", strokeWidth: "1.25", style: { transformBox: "fill-box", transformOrigin: "center" } })
394
+ ] }) : /* @__PURE__ */ jsx(Microphone, {})
395
+ }
396
+ );
397
+ }
398
+ function AttachmentChip({
399
+ file,
400
+ rounded,
401
+ disabled,
402
+ onRemove
403
+ }) {
404
+ return /* @__PURE__ */ jsxs(
405
+ "span",
406
+ {
407
+ "data-slot": "attachment",
408
+ className: cn(
409
+ "flex h-control-height items-center gap-1.5 border border-border-default bg-bg-popover pr-0.5 pl-2",
410
+ "[filter:drop-shadow(0_1px_1px_var(--effect-shadow-xs))]",
411
+ "transition-[background-color,border-color] duration-(--duration-fast) ease-(--ease-out)",
412
+ "hover:border-border-strong hover:bg-bg-canvas active:border-border-strong active:bg-bg-muted",
413
+ rounded ? "rounded-pill" : "rounded-md"
414
+ ),
415
+ children: [
416
+ /* @__PURE__ */ jsx(FileIcon, { name: file.name }),
417
+ /* @__PURE__ */ jsx("span", { className: "max-w-[200px] truncate text-sm font-medium text-text-default", children: file.name }),
418
+ /* @__PURE__ */ jsx(
419
+ Button,
420
+ {
421
+ variant: "tertiary",
422
+ size: "xs",
423
+ shape: "rounded",
424
+ iconOnly: true,
425
+ disabled,
426
+ "aria-label": `Remove ${file.name}`,
427
+ onClick: onRemove,
428
+ children: /* @__PURE__ */ jsx(Xmark, { className: "![stroke-width:1.64]" })
429
+ }
430
+ )
431
+ ]
432
+ }
433
+ );
434
+ }
435
+ var PAGE = "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";
436
+ var 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";
437
+ var LABELS = {
438
+ pdf: [
439
+ "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",
440
+ "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",
441
+ "M9.62458 12.9938V10.3491H11.3756V10.8101H10.1837V11.4403H11.2594V11.9013H10.1837V12.9938H9.62458Z"
442
+ ],
443
+ doc: [
444
+ "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",
445
+ "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",
446
+ "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"
447
+ ],
448
+ xls: [
449
+ "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",
450
+ "M6.30646 12.7949V10.5469H6.78173V12.403H7.74544V12.7949H6.30646Z",
451
+ "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",
452
+ "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"
453
+ ]
454
+ };
455
+ var FILE_COLORS = {
456
+ pdf: ["var(--color-red-500)", "var(--color-red-300)"],
457
+ doc: ["var(--color-sky-600)", "var(--color-sky-300)"],
458
+ xls: ["var(--color-green-700)", "var(--color-green-300)"]
459
+ };
460
+ function FileIcon({ name }) {
461
+ const ext = name.split(".").pop()?.toLowerCase() ?? "";
462
+ const kind = ext === "pdf" ? "pdf" : ext === "doc" || ext === "docx" ? "doc" : ext === "xls" || ext === "xlsx" || ext === "csv" ? "xls" : null;
463
+ if (!kind) return /* @__PURE__ */ jsx(Page, { "aria-hidden": true, className: "size-4 shrink-0 text-text-muted [stroke-width:1.875]" });
464
+ const [page, fold] = FILE_COLORS[kind];
465
+ return /* @__PURE__ */ jsxs("svg", { "aria-hidden": true, viewBox: "0 0 16 16", fill: "none", className: "size-4 shrink-0", children: [
466
+ /* @__PURE__ */ jsx("path", { d: PAGE, fill: page }),
467
+ /* @__PURE__ */ jsx("path", { d: FOLD, fill: fold }),
468
+ LABELS[kind].map((d, i) => /* @__PURE__ */ jsx("path", { d, fill: "var(--color-white)" }, i))
469
+ ] });
470
+ }
471
+
472
+ export { PromptBar, defaultActions };
473
+ //# sourceMappingURL=chunk-6YXUBP27.js.map
474
+ //# sourceMappingURL=chunk-6YXUBP27.js.map
@@ -0,0 +1 @@
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"]}