@assistant-ui/react 0.5.46 → 0.5.48
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.
- package/dist/{chunk-BQ3MRWUV.js → chunk-BNSCUYW7.js} +9 -5
- package/dist/chunk-BNSCUYW7.js.map +1 -0
- package/dist/{chunk-5ZTUOAPH.mjs → chunk-TZO3D3VQ.mjs} +9 -5
- package/dist/chunk-TZO3D3VQ.mjs.map +1 -0
- package/dist/{edge-6dYzFCV5.d.mts → edge-Dwfu6YTG.d.mts} +16 -1
- package/dist/{edge-6dYzFCV5.d.ts → edge-Dwfu6YTG.d.ts} +16 -1
- package/dist/edge.d.mts +75 -75
- package/dist/edge.d.ts +75 -75
- package/dist/edge.js +8 -4
- package/dist/edge.js.map +1 -1
- package/dist/edge.mjs +8 -4
- package/dist/edge.mjs.map +1 -1
- package/dist/index.d.mts +189 -58
- package/dist/index.d.ts +189 -58
- package/dist/index.js +828 -231
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +888 -291
- package/dist/index.mjs.map +1 -1
- package/dist/styles/index.css +55 -3
- package/dist/styles/index.css.map +1 -1
- package/dist/styles/tailwindcss/thread.css +33 -5
- package/package.json +1 -1
- package/dist/chunk-5ZTUOAPH.mjs.map +0 -1
- package/dist/chunk-BQ3MRWUV.js.map +0 -1
package/dist/index.mjs
CHANGED
@@ -10,7 +10,7 @@ import {
|
|
10
10
|
toLanguageModelMessages,
|
11
11
|
toLanguageModelTools,
|
12
12
|
toolResultStream
|
13
|
-
} from "./chunk-
|
13
|
+
} from "./chunk-TZO3D3VQ.mjs";
|
14
14
|
import {
|
15
15
|
__export
|
16
16
|
} from "./chunk-BJPOCE4O.mjs";
|
@@ -125,21 +125,26 @@ var makeComposerStore = (useThreadRuntime) => {
|
|
125
125
|
setValue(value) {
|
126
126
|
get().setText(value);
|
127
127
|
},
|
128
|
+
attachments: runtime.composer.attachments,
|
129
|
+
addAttachment: (file) => {
|
130
|
+
useThreadRuntime.getState().composer.addAttachment(file);
|
131
|
+
},
|
132
|
+
removeAttachment: (attachmentId) => {
|
133
|
+
useThreadRuntime.getState().composer.removeAttachment(attachmentId);
|
134
|
+
},
|
135
|
+
reset: () => {
|
136
|
+
useThreadRuntime.getState().composer.reset();
|
137
|
+
},
|
128
138
|
text: runtime.composer.text,
|
129
|
-
setText: (
|
130
|
-
useThreadRuntime.getState().composer.setText(
|
139
|
+
setText: (text) => {
|
140
|
+
useThreadRuntime.getState().composer.setText(text);
|
131
141
|
},
|
132
142
|
canCancel: runtime.capabilities.cancel,
|
133
143
|
isEditing: true,
|
144
|
+
isEmpty: runtime.composer.isEmpty,
|
134
145
|
send: () => {
|
135
146
|
const runtime2 = useThreadRuntime.getState();
|
136
|
-
|
137
|
-
runtime2.composer.setText("");
|
138
|
-
runtime2.append({
|
139
|
-
parentId: runtime2.messages.at(-1)?.id ?? null,
|
140
|
-
role: "user",
|
141
|
-
content: [{ type: "text", text }]
|
142
|
-
});
|
147
|
+
runtime2.composer.send();
|
143
148
|
},
|
144
149
|
cancel: () => {
|
145
150
|
useThreadRuntime.getState().cancelRun();
|
@@ -275,6 +280,7 @@ __export(internal_exports, {
|
|
275
280
|
BaseAssistantRuntime: () => BaseAssistantRuntime,
|
276
281
|
MessageRepository: () => MessageRepository,
|
277
282
|
ProxyConfigProvider: () => ProxyConfigProvider,
|
283
|
+
ThreadRuntimeComposer: () => ThreadRuntimeComposer,
|
278
284
|
TooltipIconButton: () => TooltipIconButton,
|
279
285
|
generateId: () => generateId,
|
280
286
|
useSmooth: () => useSmooth,
|
@@ -282,6 +288,76 @@ __export(internal_exports, {
|
|
282
288
|
withSmoothContextProvider: () => withSmoothContextProvider
|
283
289
|
});
|
284
290
|
|
291
|
+
// src/runtimes/utils/ThreadRuntimeComposer.tsx
|
292
|
+
var ThreadRuntimeComposer = class {
|
293
|
+
constructor(runtime, notifySubscribers) {
|
294
|
+
this.runtime = runtime;
|
295
|
+
this.notifySubscribers = notifySubscribers;
|
296
|
+
}
|
297
|
+
_attachmentAdapter;
|
298
|
+
attachmentAccept = "*";
|
299
|
+
get isEmpty() {
|
300
|
+
return !this.text.trim() && !this.attachments.length;
|
301
|
+
}
|
302
|
+
setAttachmentAdapter(adapter) {
|
303
|
+
this._attachmentAdapter = adapter;
|
304
|
+
const accept = adapter?.accept ?? "*";
|
305
|
+
if (this.attachmentAccept !== accept) {
|
306
|
+
this.attachmentAccept = accept;
|
307
|
+
return true;
|
308
|
+
}
|
309
|
+
return false;
|
310
|
+
}
|
311
|
+
_attachments = [];
|
312
|
+
get attachments() {
|
313
|
+
return this._attachments;
|
314
|
+
}
|
315
|
+
async addAttachment(file) {
|
316
|
+
if (!this._attachmentAdapter)
|
317
|
+
throw new Error("Attachments are not supported");
|
318
|
+
const attachment = await this._attachmentAdapter.add({ file });
|
319
|
+
this._attachments = [...this._attachments, attachment];
|
320
|
+
this.notifySubscribers();
|
321
|
+
}
|
322
|
+
async removeAttachment(attachmentId) {
|
323
|
+
if (!this._attachmentAdapter)
|
324
|
+
throw new Error("Attachments are not supported");
|
325
|
+
const index = this._attachments.findIndex((a) => a.id === attachmentId);
|
326
|
+
if (index === -1) throw new Error("Attachment not found");
|
327
|
+
const attachment = this._attachments[index];
|
328
|
+
await this._attachmentAdapter.remove(attachment);
|
329
|
+
this._attachments = this._attachments.toSpliced(index, 1);
|
330
|
+
this.notifySubscribers();
|
331
|
+
}
|
332
|
+
_text = "";
|
333
|
+
get text() {
|
334
|
+
return this._text;
|
335
|
+
}
|
336
|
+
setText(value) {
|
337
|
+
this._text = value;
|
338
|
+
this.notifySubscribers();
|
339
|
+
}
|
340
|
+
reset() {
|
341
|
+
this._text = "";
|
342
|
+
this._attachments = [];
|
343
|
+
this.notifySubscribers();
|
344
|
+
}
|
345
|
+
async send() {
|
346
|
+
const attachments = this._attachmentAdapter ? await Promise.all(
|
347
|
+
this.attachments.map(
|
348
|
+
async (a) => await this._attachmentAdapter.send(a)
|
349
|
+
)
|
350
|
+
) : [];
|
351
|
+
this.runtime.append({
|
352
|
+
parentId: this.runtime.messages.at(-1)?.id ?? null,
|
353
|
+
role: "user",
|
354
|
+
content: this.text ? [{ type: "text", text: this.text }] : [],
|
355
|
+
attachments
|
356
|
+
});
|
357
|
+
this.reset();
|
358
|
+
}
|
359
|
+
};
|
360
|
+
|
285
361
|
// src/utils/idUtils.tsx
|
286
362
|
import { customAlphabet } from "nanoid/non-secure";
|
287
363
|
var generateId = customAlphabet(
|
@@ -324,7 +400,8 @@ var fromCoreMessage = (message, {
|
|
324
400
|
return {
|
325
401
|
...commonProps,
|
326
402
|
role,
|
327
|
-
content: message.content
|
403
|
+
content: message.content,
|
404
|
+
attachments: []
|
328
405
|
};
|
329
406
|
case "system":
|
330
407
|
return {
|
@@ -1101,31 +1178,37 @@ var LocalThreadRuntime = class {
|
|
1101
1178
|
reload: true,
|
1102
1179
|
cancel: true,
|
1103
1180
|
unstable_copy: true,
|
1104
|
-
speak: false
|
1181
|
+
speak: false,
|
1182
|
+
attachments: false
|
1105
1183
|
};
|
1106
1184
|
threadId;
|
1107
1185
|
isDisabled = false;
|
1108
1186
|
get messages() {
|
1109
1187
|
return this.repository.getMessages();
|
1110
1188
|
}
|
1111
|
-
composer =
|
1112
|
-
|
1113
|
-
|
1114
|
-
|
1115
|
-
this.notifySubscribers();
|
1116
|
-
}
|
1117
|
-
};
|
1189
|
+
composer = new ThreadRuntimeComposer(
|
1190
|
+
this,
|
1191
|
+
this.notifySubscribers.bind(this)
|
1192
|
+
);
|
1118
1193
|
_options;
|
1119
1194
|
get options() {
|
1120
1195
|
return this._options;
|
1121
1196
|
}
|
1122
1197
|
set options({ initialMessages, ...options }) {
|
1123
1198
|
this._options = options;
|
1199
|
+
let hasUpdates = false;
|
1124
1200
|
const canSpeak = options.adapters?.speech !== void 0;
|
1125
1201
|
if (this.capabilities.speak !== canSpeak) {
|
1126
1202
|
this.capabilities.speak = canSpeak;
|
1127
|
-
|
1203
|
+
hasUpdates = true;
|
1204
|
+
}
|
1205
|
+
this.composer.setAttachmentAdapter(options.adapters?.attachments);
|
1206
|
+
const canAttach = options.adapters?.attachments !== void 0;
|
1207
|
+
if (this.capabilities.attachments !== canAttach) {
|
1208
|
+
this.capabilities.attachments = canAttach;
|
1209
|
+
hasUpdates = true;
|
1128
1210
|
}
|
1211
|
+
if (hasUpdates) this.notifySubscribers();
|
1129
1212
|
}
|
1130
1213
|
getBranches(messageId) {
|
1131
1214
|
return this.repository.getBranches(messageId);
|
@@ -1144,6 +1227,7 @@ var LocalThreadRuntime = class {
|
|
1144
1227
|
id: userMessageId,
|
1145
1228
|
role: "user",
|
1146
1229
|
content: message.content,
|
1230
|
+
attachments: message.attachments ?? [],
|
1147
1231
|
createdAt: /* @__PURE__ */ new Date()
|
1148
1232
|
};
|
1149
1233
|
this.repository.addOrUpdateMessage(message.parentId, userMessage);
|
@@ -1406,12 +1490,14 @@ var getAutoStatus = (isLast, isRunning) => isLast && isRunning ? AUTO_STATUS_RUN
|
|
1406
1490
|
|
1407
1491
|
// src/runtimes/external-store/ThreadMessageLike.tsx
|
1408
1492
|
var fromThreadMessageLike = (like, fallbackId, fallbackStatus) => {
|
1409
|
-
const { role, id, createdAt, status } = like;
|
1493
|
+
const { role, id, createdAt, attachments, status } = like;
|
1410
1494
|
const common = {
|
1411
1495
|
id: id ?? fallbackId,
|
1412
1496
|
createdAt: createdAt ?? /* @__PURE__ */ new Date()
|
1413
1497
|
};
|
1414
1498
|
const content = typeof like.content === "string" ? [{ type: "text", text: like.content }] : like.content;
|
1499
|
+
if (role !== "user" && attachments)
|
1500
|
+
throw new Error("Attachments are only supported for user messages");
|
1415
1501
|
switch (role) {
|
1416
1502
|
case "assistant":
|
1417
1503
|
return {
|
@@ -1456,7 +1542,8 @@ var fromThreadMessageLike = (like, fallbackId, fallbackStatus) => {
|
|
1456
1542
|
throw new Error(`Unknown content part type: ${unhandledType}`);
|
1457
1543
|
}
|
1458
1544
|
}
|
1459
|
-
})
|
1545
|
+
}),
|
1546
|
+
attachments: attachments ?? []
|
1460
1547
|
};
|
1461
1548
|
case "system":
|
1462
1549
|
if (content.length !== 1 || content[0].type !== "text")
|
@@ -1497,7 +1584,8 @@ var ExternalStoreThreadRuntime = class {
|
|
1497
1584
|
reload: false,
|
1498
1585
|
cancel: false,
|
1499
1586
|
unstable_copy: false,
|
1500
|
-
speak: false
|
1587
|
+
speak: false,
|
1588
|
+
attachments: false
|
1501
1589
|
};
|
1502
1590
|
get capabilities() {
|
1503
1591
|
return this._capabilities;
|
@@ -1507,13 +1595,10 @@ var ExternalStoreThreadRuntime = class {
|
|
1507
1595
|
isDisabled;
|
1508
1596
|
converter = new ThreadMessageConverter();
|
1509
1597
|
_store;
|
1510
|
-
composer =
|
1511
|
-
|
1512
|
-
|
1513
|
-
|
1514
|
-
this.notifySubscribers();
|
1515
|
-
}
|
1516
|
-
};
|
1598
|
+
composer = new ThreadRuntimeComposer(
|
1599
|
+
this,
|
1600
|
+
this.notifySubscribers.bind(this)
|
1601
|
+
);
|
1517
1602
|
constructor(store) {
|
1518
1603
|
this.store = store;
|
1519
1604
|
}
|
@@ -1532,9 +1617,12 @@ var ExternalStoreThreadRuntime = class {
|
|
1532
1617
|
edit: this._store.onEdit !== void 0,
|
1533
1618
|
reload: this._store.onReload !== void 0,
|
1534
1619
|
cancel: this._store.onCancel !== void 0,
|
1535
|
-
|
1536
|
-
|
1620
|
+
speak: this._store.onSpeak !== void 0,
|
1621
|
+
unstable_copy: this._store.unstable_capabilities?.copy !== false,
|
1622
|
+
// default true
|
1623
|
+
attachments: !!this.store.adapters?.attachments
|
1537
1624
|
};
|
1625
|
+
this.composer.setAttachmentAdapter(this._store.adapters?.attachments);
|
1538
1626
|
if (oldStore) {
|
1539
1627
|
if (oldStore.convertMessage !== store.convertMessage) {
|
1540
1628
|
this.converter = new ThreadMessageConverter();
|
@@ -1925,6 +2013,147 @@ var WebSpeechSynthesisAdapter = class {
|
|
1925
2013
|
}
|
1926
2014
|
};
|
1927
2015
|
|
2016
|
+
// src/runtimes/attachment/SimpleImageAttachmentAdapter.ts
|
2017
|
+
var SimpleImageAttachmentAdapter = class {
|
2018
|
+
accept = "image/*";
|
2019
|
+
async add(state) {
|
2020
|
+
return {
|
2021
|
+
id: state.file.name,
|
2022
|
+
type: "image",
|
2023
|
+
name: state.file.name,
|
2024
|
+
file: state.file
|
2025
|
+
};
|
2026
|
+
}
|
2027
|
+
async send(attachment) {
|
2028
|
+
return {
|
2029
|
+
...attachment,
|
2030
|
+
content: [
|
2031
|
+
{
|
2032
|
+
type: "image",
|
2033
|
+
image: await getFileDataURL(attachment.file)
|
2034
|
+
}
|
2035
|
+
]
|
2036
|
+
};
|
2037
|
+
}
|
2038
|
+
async remove() {
|
2039
|
+
}
|
2040
|
+
};
|
2041
|
+
var getFileDataURL = (file) => new Promise((resolve, reject) => {
|
2042
|
+
const reader = new FileReader();
|
2043
|
+
reader.onload = () => resolve(reader.result);
|
2044
|
+
reader.onerror = (error) => reject(error);
|
2045
|
+
reader.readAsDataURL(file);
|
2046
|
+
});
|
2047
|
+
|
2048
|
+
// src/runtimes/attachment/SimpleTextAttachmentAdapter.ts
|
2049
|
+
var SimpleTextAttachmentAdapter = class {
|
2050
|
+
accept = "text/plain,text/html,text/markdown,text/csv,text/xml,text/json,text/css";
|
2051
|
+
async add(state) {
|
2052
|
+
return {
|
2053
|
+
id: state.file.name,
|
2054
|
+
type: "document",
|
2055
|
+
name: state.file.name,
|
2056
|
+
file: state.file
|
2057
|
+
};
|
2058
|
+
}
|
2059
|
+
async send(attachment) {
|
2060
|
+
return {
|
2061
|
+
...attachment,
|
2062
|
+
content: [
|
2063
|
+
{
|
2064
|
+
type: "text",
|
2065
|
+
text: `<attachment name=${attachment.name}>
|
2066
|
+
${await getFileText(attachment.file)}
|
2067
|
+
</attachment>`
|
2068
|
+
}
|
2069
|
+
]
|
2070
|
+
};
|
2071
|
+
}
|
2072
|
+
async remove() {
|
2073
|
+
}
|
2074
|
+
};
|
2075
|
+
var getFileText = (file) => new Promise((resolve, reject) => {
|
2076
|
+
const reader = new FileReader();
|
2077
|
+
reader.onload = () => resolve(reader.result);
|
2078
|
+
reader.onerror = (error) => reject(error);
|
2079
|
+
reader.readAsText(file);
|
2080
|
+
});
|
2081
|
+
|
2082
|
+
// src/runtimes/attachment/CompositeAttachmentAdapter.ts
|
2083
|
+
function fileMatchesAccept(file, acceptString) {
|
2084
|
+
if (acceptString === "*") {
|
2085
|
+
return true;
|
2086
|
+
}
|
2087
|
+
const allowedTypes = acceptString.split(",").map((type) => type.trim().toLowerCase());
|
2088
|
+
const fileExtension = "." + file.name.split(".").pop().toLowerCase();
|
2089
|
+
const fileMimeType = file.type.toLowerCase();
|
2090
|
+
for (const type of allowedTypes) {
|
2091
|
+
if (type.startsWith(".") && type === fileExtension) {
|
2092
|
+
return true;
|
2093
|
+
}
|
2094
|
+
if (type.includes("/") && type === fileMimeType) {
|
2095
|
+
return true;
|
2096
|
+
}
|
2097
|
+
if (type === "image/*" || type === "video/*" || type === "audio/*") {
|
2098
|
+
if (type.endsWith("/*")) {
|
2099
|
+
const generalType = type.split("/")[0];
|
2100
|
+
if (fileMimeType.startsWith(generalType + "/")) {
|
2101
|
+
return true;
|
2102
|
+
}
|
2103
|
+
}
|
2104
|
+
}
|
2105
|
+
}
|
2106
|
+
return false;
|
2107
|
+
}
|
2108
|
+
var CompositeAttachmentAdapter = class {
|
2109
|
+
_adapters;
|
2110
|
+
accept;
|
2111
|
+
constructor(adapters) {
|
2112
|
+
this._adapters = adapters;
|
2113
|
+
const wildcardIdx = adapters.findIndex((a) => a.accept === "*");
|
2114
|
+
if (wildcardIdx !== -1) {
|
2115
|
+
if (wildcardIdx !== adapters.length - 1)
|
2116
|
+
throw new Error(
|
2117
|
+
"A wildcard adapter (handling all files) can only be specified as the last adapter."
|
2118
|
+
);
|
2119
|
+
this.accept = "*";
|
2120
|
+
} else {
|
2121
|
+
this.accept = adapters.map((a) => a.accept).join(",");
|
2122
|
+
}
|
2123
|
+
}
|
2124
|
+
async add(state) {
|
2125
|
+
for (const adapter of this._adapters) {
|
2126
|
+
if (fileMatchesAccept(state.file, adapter.accept)) {
|
2127
|
+
return adapter.add(state);
|
2128
|
+
}
|
2129
|
+
}
|
2130
|
+
throw new Error("No matching adapter found for file");
|
2131
|
+
}
|
2132
|
+
async send(attachment) {
|
2133
|
+
const adapters = this._adapters.slice();
|
2134
|
+
for (const adapter of adapters) {
|
2135
|
+
if (fileMatchesAccept(attachment.file, adapter.accept)) {
|
2136
|
+
return adapter.send(attachment);
|
2137
|
+
}
|
2138
|
+
}
|
2139
|
+
throw new Error("No matching adapter found for attachment");
|
2140
|
+
}
|
2141
|
+
async remove(attachment) {
|
2142
|
+
const adapters = this._adapters.slice();
|
2143
|
+
for (const adapter of adapters) {
|
2144
|
+
if (fileMatchesAccept(attachment.file, adapter.accept)) {
|
2145
|
+
return adapter.remove(attachment);
|
2146
|
+
}
|
2147
|
+
}
|
2148
|
+
throw new Error("No matching adapter found for attachment");
|
2149
|
+
}
|
2150
|
+
};
|
2151
|
+
|
2152
|
+
// src/context/ReadonlyStore.ts
|
2153
|
+
var writableStore = (store) => {
|
2154
|
+
return store;
|
2155
|
+
};
|
2156
|
+
|
1928
2157
|
// src/context/providers/ThreadProvider.tsx
|
1929
2158
|
import { jsx as jsx6, jsxs as jsxs2 } from "react/jsx-runtime";
|
1930
2159
|
var ThreadProvider = ({
|
@@ -1954,18 +2183,20 @@ var ThreadProvider = ({
|
|
1954
2183
|
const state = getThreadStateFromRuntime(thread);
|
1955
2184
|
if (oldState.threadId !== state.threadId || oldState.isDisabled !== state.isDisabled || oldState.isRunning !== state.isRunning || // TODO ensure capabilities is memoized
|
1956
2185
|
oldState.capabilities !== state.capabilities) {
|
1957
|
-
context.useThread.setState(
|
1958
|
-
state,
|
1959
|
-
true
|
1960
|
-
);
|
2186
|
+
writableStore(context.useThread).setState(state, true);
|
1961
2187
|
}
|
1962
2188
|
if (thread.messages !== context.useThreadMessages.getState()) {
|
1963
|
-
context.useThreadMessages.setState(
|
2189
|
+
writableStore(context.useThreadMessages).setState(
|
2190
|
+
thread.messages,
|
2191
|
+
true
|
2192
|
+
);
|
1964
2193
|
}
|
1965
2194
|
const composerState = context.useComposer.getState();
|
1966
|
-
if (thread.composer.text !== composerState.text || state.capabilities.cancel !== composerState.canCancel) {
|
1967
|
-
context.useComposer.setState({
|
2195
|
+
if (thread.composer.isEmpty !== composerState.isEmpty || thread.composer.text !== composerState.text || thread.composer.attachments !== composerState.attachments || state.capabilities.cancel !== composerState.canCancel) {
|
2196
|
+
writableStore(context.useComposer).setState({
|
2197
|
+
isEmpty: thread.composer.isEmpty,
|
1968
2198
|
text: thread.composer.text,
|
2199
|
+
attachments: thread.composer.attachments,
|
1969
2200
|
canCancel: state.capabilities.cancel
|
1970
2201
|
});
|
1971
2202
|
}
|
@@ -1975,7 +2206,7 @@ var ThreadProvider = ({
|
|
1975
2206
|
}, [provider, context]);
|
1976
2207
|
useInsertionEffect2(
|
1977
2208
|
() => provider.subscribe(() => {
|
1978
|
-
context.useThreadRuntime.setState(provider.thread, true);
|
2209
|
+
writableStore(context.useThreadRuntime).setState(provider.thread, true);
|
1979
2210
|
}),
|
1980
2211
|
[provider, context]
|
1981
2212
|
);
|
@@ -2027,7 +2258,7 @@ var AssistantProvider = ({ children, runtime }) => {
|
|
2027
2258
|
return runtime.registerModelConfigProvider(getModelConfig);
|
2028
2259
|
}, [runtime, getModelConfig]);
|
2029
2260
|
useEffect4(
|
2030
|
-
() => context.useAssistantRuntime.setState(runtime, true),
|
2261
|
+
() => writableStore(context.useAssistantRuntime).setState(runtime, true),
|
2031
2262
|
[runtime, context]
|
2032
2263
|
);
|
2033
2264
|
return /* @__PURE__ */ jsx7(AssistantContext.Provider, { value: context, children: /* @__PURE__ */ jsx7(ThreadProvider, { provider: runtime, children }) });
|
@@ -2089,13 +2320,15 @@ var toAppendMessage = (useThreadMessages, message) => {
|
|
2089
2320
|
return {
|
2090
2321
|
parentId: useThreadMessages.getState().at(-1)?.id ?? null,
|
2091
2322
|
role: "user",
|
2092
|
-
content: [{ type: "text", text: message }]
|
2323
|
+
content: [{ type: "text", text: message }],
|
2324
|
+
attachments: []
|
2093
2325
|
};
|
2094
2326
|
}
|
2095
2327
|
return {
|
2096
2328
|
parentId: message.parentId ?? useThreadMessages.getState().at(-1)?.id ?? null,
|
2097
2329
|
role: message.role ?? "user",
|
2098
|
-
content: message.content
|
2330
|
+
content: message.content,
|
2331
|
+
attachments: message.attachments ?? []
|
2099
2332
|
};
|
2100
2333
|
};
|
2101
2334
|
var useAppendMessage = () => {
|
@@ -2400,7 +2633,7 @@ var useComposerSend = () => {
|
|
2400
2633
|
const { useComposer } = useComposerContext();
|
2401
2634
|
const disabled = useCombinedStore(
|
2402
2635
|
[useThread, useComposer],
|
2403
|
-
(t, c) => t.isRunning || !c.isEditing || c.
|
2636
|
+
(t, c) => t.isRunning || !c.isEditing || c.isEmpty
|
2404
2637
|
);
|
2405
2638
|
const callback = useCallback11(() => {
|
2406
2639
|
const composerState = useComposer.getState();
|
@@ -2413,6 +2646,30 @@ var useComposerSend = () => {
|
|
2413
2646
|
return callback;
|
2414
2647
|
};
|
2415
2648
|
|
2649
|
+
// src/primitive-hooks/composer/useComposerAddAttachment.tsx
|
2650
|
+
import { useCallback as useCallback12 } from "react";
|
2651
|
+
var useComposerAddAttachment = () => {
|
2652
|
+
const { useComposer, useThreadRuntime } = useThreadContext();
|
2653
|
+
const disabled = useComposer((c) => !c.isEditing);
|
2654
|
+
const callback = useCallback12(() => {
|
2655
|
+
const { addAttachment } = useComposer.getState();
|
2656
|
+
const { attachmentAccept } = useThreadRuntime.getState().composer;
|
2657
|
+
const input = document.createElement("input");
|
2658
|
+
input.type = "file";
|
2659
|
+
if (attachmentAccept !== "*") {
|
2660
|
+
input.accept = attachmentAccept;
|
2661
|
+
}
|
2662
|
+
input.onchange = (e) => {
|
2663
|
+
const file = e.target.files?.[0];
|
2664
|
+
if (!file) return;
|
2665
|
+
addAttachment(file);
|
2666
|
+
};
|
2667
|
+
input.click();
|
2668
|
+
}, [useComposer, useThreadRuntime]);
|
2669
|
+
if (disabled) return null;
|
2670
|
+
return callback;
|
2671
|
+
};
|
2672
|
+
|
2416
2673
|
// src/primitive-hooks/contentPart/useContentPartDisplay.tsx
|
2417
2674
|
var useContentPartDisplay = () => {
|
2418
2675
|
const { useContentPart } = useContentPartContext();
|
@@ -2467,6 +2724,10 @@ var useMessageIf = (props) => {
|
|
2467
2724
|
if (props.copied === false && isCopied) return false;
|
2468
2725
|
if (props.speaking === true && !isSpeaking) return false;
|
2469
2726
|
if (props.speaking === false && isSpeaking) return false;
|
2727
|
+
if (props.hasAttachments === true && (message.role !== "user" || !message.attachments.length))
|
2728
|
+
return false;
|
2729
|
+
if (props.hasAttachments === false && message.role === "user" && !!message.attachments.length)
|
2730
|
+
return false;
|
2470
2731
|
return true;
|
2471
2732
|
}
|
2472
2733
|
);
|
@@ -2495,11 +2756,11 @@ var useThreadEmpty = () => {
|
|
2495
2756
|
};
|
2496
2757
|
|
2497
2758
|
// src/primitive-hooks/thread/useThreadScrollToBottom.tsx
|
2498
|
-
import { useCallback as
|
2759
|
+
import { useCallback as useCallback13 } from "react";
|
2499
2760
|
var useThreadScrollToBottom = () => {
|
2500
2761
|
const { useComposer, useViewport } = useThreadContext();
|
2501
2762
|
const isAtBottom = useViewport((s) => s.isAtBottom);
|
2502
|
-
const handleScrollToBottom =
|
2763
|
+
const handleScrollToBottom = useCallback13(() => {
|
2503
2764
|
useViewport.getState().scrollToBottom();
|
2504
2765
|
useComposer.getState().focus();
|
2505
2766
|
}, [useViewport, useComposer]);
|
@@ -2508,7 +2769,7 @@ var useThreadScrollToBottom = () => {
|
|
2508
2769
|
};
|
2509
2770
|
|
2510
2771
|
// src/primitive-hooks/thread/useThreadSuggestion.tsx
|
2511
|
-
import { useCallback as
|
2772
|
+
import { useCallback as useCallback14 } from "react";
|
2512
2773
|
var useThreadSuggestion = ({
|
2513
2774
|
prompt,
|
2514
2775
|
autoSend
|
@@ -2516,7 +2777,7 @@ var useThreadSuggestion = ({
|
|
2516
2777
|
const { useThread, useComposer } = useThreadContext();
|
2517
2778
|
const append = useAppendMessage();
|
2518
2779
|
const disabled = useThread((t) => t.isDisabled);
|
2519
|
-
const callback =
|
2780
|
+
const callback = useCallback14(() => {
|
2520
2781
|
const thread = useThread.getState();
|
2521
2782
|
const composer = useComposer.getState();
|
2522
2783
|
if (autoSend && !thread.isRunning) {
|
@@ -2844,6 +3105,7 @@ import { forwardRef as forwardRef14 } from "react";
|
|
2844
3105
|
// src/primitives/message/index.ts
|
2845
3106
|
var message_exports = {};
|
2846
3107
|
__export(message_exports, {
|
3108
|
+
Attachments: () => MessagePrimitiveAttachments,
|
2847
3109
|
Content: () => MessagePrimitiveContent,
|
2848
3110
|
If: () => MessagePrimitiveIf,
|
2849
3111
|
InProgress: () => MessagePrimitiveInProgress,
|
@@ -2854,14 +3116,14 @@ __export(message_exports, {
|
|
2854
3116
|
import { Primitive as Primitive5 } from "@radix-ui/react-primitive";
|
2855
3117
|
import {
|
2856
3118
|
forwardRef as forwardRef11,
|
2857
|
-
useCallback as
|
3119
|
+
useCallback as useCallback16
|
2858
3120
|
} from "react";
|
2859
3121
|
|
2860
3122
|
// src/utils/hooks/useManagedRef.ts
|
2861
|
-
import { useCallback as
|
3123
|
+
import { useCallback as useCallback15, useRef as useRef3 } from "react";
|
2862
3124
|
var useManagedRef = (callback) => {
|
2863
3125
|
const cleanupRef = useRef3();
|
2864
|
-
const ref =
|
3126
|
+
const ref = useCallback15(
|
2865
3127
|
(el) => {
|
2866
3128
|
if (cleanupRef.current) {
|
2867
3129
|
cleanupRef.current();
|
@@ -2880,7 +3142,7 @@ import { useComposedRefs } from "@radix-ui/react-compose-refs";
|
|
2880
3142
|
import { jsx as jsx18 } from "react/jsx-runtime";
|
2881
3143
|
var useIsHoveringRef = () => {
|
2882
3144
|
const { useMessageUtils } = useMessageContext();
|
2883
|
-
const callbackRef =
|
3145
|
+
const callbackRef = useCallback16(
|
2884
3146
|
(el) => {
|
2885
3147
|
const setIsHovering = useMessageUtils.getState().setIsHovering;
|
2886
3148
|
const handleMouseEnter = () => {
|
@@ -2975,7 +3237,7 @@ var useContentPartContext2 = (partIndex) => {
|
|
2975
3237
|
partIndex
|
2976
3238
|
);
|
2977
3239
|
if (!newState) return;
|
2978
|
-
context.useContentPart.setState(newState, true);
|
3240
|
+
writableStore(context.useContentPart).setState(newState, true);
|
2979
3241
|
};
|
2980
3242
|
syncContentPart(useMessage.getState());
|
2981
3243
|
return useMessage.subscribe(syncContentPart);
|
@@ -3119,17 +3381,7 @@ var MessagePrimitiveContent = ({
|
|
3119
3381
|
}) => {
|
3120
3382
|
const { useMessage } = useMessageContext();
|
3121
3383
|
const contentLength = useMessage((s) => s.message.content.length) || 1;
|
3122
|
-
return
|
3123
|
-
const partIndex = idx;
|
3124
|
-
return /* @__PURE__ */ jsx22(
|
3125
|
-
MessageContentPart,
|
3126
|
-
{
|
3127
|
-
partIndex,
|
3128
|
-
components
|
3129
|
-
},
|
3130
|
-
partIndex
|
3131
|
-
);
|
3132
|
-
});
|
3384
|
+
return Array.from({ length: contentLength }, (_, index) => /* @__PURE__ */ jsx22(MessageContentPart, { partIndex: index, components }, index));
|
3133
3385
|
};
|
3134
3386
|
MessagePrimitiveContent.displayName = "MessagePrimitive.Content";
|
3135
3387
|
|
@@ -3139,16 +3391,137 @@ var MessagePrimitiveInProgress = () => {
|
|
3139
3391
|
};
|
3140
3392
|
MessagePrimitiveInProgress.displayName = "MessagePrimitive.InProgress";
|
3141
3393
|
|
3142
|
-
// src/primitives/
|
3394
|
+
// src/primitives/message/MessageAttachments.tsx
|
3395
|
+
import { memo as memo3 } from "react";
|
3396
|
+
|
3397
|
+
// src/context/react/AttachmentContext.ts
|
3398
|
+
import { createContext as createContext6, useContext as useContext6 } from "react";
|
3399
|
+
var AttachmentContext = createContext6(
|
3400
|
+
null
|
3401
|
+
);
|
3402
|
+
function useAttachmentContext(options) {
|
3403
|
+
const context = useContext6(AttachmentContext);
|
3404
|
+
if (options?.type === "composer" && context?.type !== "composer")
|
3405
|
+
throw new Error(
|
3406
|
+
"This component must be used within a ComposerPrimitive.Attachments component."
|
3407
|
+
);
|
3408
|
+
if (options?.type === "message" && context?.type !== "message")
|
3409
|
+
throw new Error(
|
3410
|
+
"This component must be used within a MessagePrimitive.Attachments component."
|
3411
|
+
);
|
3412
|
+
if (!options?.optional && !context)
|
3413
|
+
throw new Error(
|
3414
|
+
"This component must be used within a ComposerPrimitive.Attachments or MessagePrimitive.Attachments component."
|
3415
|
+
);
|
3416
|
+
return context;
|
3417
|
+
}
|
3418
|
+
|
3419
|
+
// src/context/providers/MessageAttachmentProvider.tsx
|
3420
|
+
import { useEffect as useEffect10, useState as useState11 } from "react";
|
3421
|
+
import { create as create13 } from "zustand";
|
3143
3422
|
import { jsx as jsx23 } from "react/jsx-runtime";
|
3423
|
+
var getAttachment = ({ message }, useAttachment, partIndex) => {
|
3424
|
+
if (message.role !== "user") return null;
|
3425
|
+
const attachments = message.attachments;
|
3426
|
+
let attachment = attachments[partIndex];
|
3427
|
+
if (!attachment) return null;
|
3428
|
+
const currentState = useAttachment?.getState();
|
3429
|
+
if (currentState && currentState.attachment === attachment) return null;
|
3430
|
+
return Object.freeze({ attachment });
|
3431
|
+
};
|
3432
|
+
var useMessageAttachmentContext = (partIndex) => {
|
3433
|
+
const { useMessage } = useMessageContext();
|
3434
|
+
const [context] = useState11(
|
3435
|
+
() => {
|
3436
|
+
const useAttachment = create13(
|
3437
|
+
() => getAttachment(useMessage.getState(), void 0, partIndex)
|
3438
|
+
);
|
3439
|
+
return { type: "message", useAttachment };
|
3440
|
+
}
|
3441
|
+
);
|
3442
|
+
useEffect10(() => {
|
3443
|
+
const syncAttachment = (messageState) => {
|
3444
|
+
const newState = getAttachment(
|
3445
|
+
messageState,
|
3446
|
+
context.useAttachment,
|
3447
|
+
partIndex
|
3448
|
+
);
|
3449
|
+
if (!newState) return;
|
3450
|
+
writableStore(context.useAttachment).setState(newState, true);
|
3451
|
+
};
|
3452
|
+
syncAttachment(useMessage.getState());
|
3453
|
+
return useMessage.subscribe(syncAttachment);
|
3454
|
+
}, [context, useMessage, partIndex]);
|
3455
|
+
return context;
|
3456
|
+
};
|
3457
|
+
var MessageAttachmentProvider = ({
|
3458
|
+
attachmentIndex: partIndex,
|
3459
|
+
children
|
3460
|
+
}) => {
|
3461
|
+
const context = useMessageAttachmentContext(partIndex);
|
3462
|
+
return /* @__PURE__ */ jsx23(AttachmentContext.Provider, { value: context, children });
|
3463
|
+
};
|
3464
|
+
|
3465
|
+
// src/primitives/message/MessageAttachments.tsx
|
3466
|
+
import { jsx as jsx24 } from "react/jsx-runtime";
|
3467
|
+
var getComponent = (components, attachment) => {
|
3468
|
+
const type = attachment.type;
|
3469
|
+
switch (type) {
|
3470
|
+
case "image":
|
3471
|
+
return components?.Image ?? components?.Attachment;
|
3472
|
+
case "document":
|
3473
|
+
return components?.Document ?? components?.Attachment;
|
3474
|
+
case "file":
|
3475
|
+
return components?.File ?? components?.Attachment;
|
3476
|
+
default:
|
3477
|
+
const _exhaustiveCheck = type;
|
3478
|
+
throw new Error(`Unknown attachment type: ${_exhaustiveCheck}`);
|
3479
|
+
}
|
3480
|
+
};
|
3481
|
+
var AttachmentComponent = ({ components }) => {
|
3482
|
+
const { useAttachment } = useAttachmentContext({ type: "message" });
|
3483
|
+
const Component = useAttachment(
|
3484
|
+
(a) => getComponent(components, a.attachment)
|
3485
|
+
);
|
3486
|
+
if (!Component) return null;
|
3487
|
+
return /* @__PURE__ */ jsx24(Component, {});
|
3488
|
+
};
|
3489
|
+
var MessageAttachmentImpl = ({ components, attachmentIndex }) => {
|
3490
|
+
return /* @__PURE__ */ jsx24(MessageAttachmentProvider, { attachmentIndex, children: /* @__PURE__ */ jsx24(AttachmentComponent, { components }) });
|
3491
|
+
};
|
3492
|
+
var MessageAttachment = memo3(
|
3493
|
+
MessageAttachmentImpl,
|
3494
|
+
(prev, next) => prev.attachmentIndex === next.attachmentIndex && prev.components?.Image === next.components?.Image && prev.components?.Document === next.components?.Document && prev.components?.File === next.components?.File && prev.components?.Attachment === next.components?.Attachment
|
3495
|
+
);
|
3496
|
+
var MessagePrimitiveAttachments = ({ components }) => {
|
3497
|
+
const { useMessage } = useMessageContext();
|
3498
|
+
const attachmentsCount = useMessage(({ message }) => {
|
3499
|
+
if (message.role !== "user") return 0;
|
3500
|
+
return message.attachments.length;
|
3501
|
+
});
|
3502
|
+
return Array.from({ length: attachmentsCount }, (_, index) => /* @__PURE__ */ jsx24(
|
3503
|
+
MessageAttachment,
|
3504
|
+
{
|
3505
|
+
attachmentIndex: index,
|
3506
|
+
components
|
3507
|
+
},
|
3508
|
+
index
|
3509
|
+
));
|
3510
|
+
};
|
3511
|
+
MessagePrimitiveAttachments.displayName = "MessagePrimitive.Attachments";
|
3512
|
+
|
3513
|
+
// src/primitives/branchPicker/BranchPickerRoot.tsx
|
3514
|
+
import { jsx as jsx25 } from "react/jsx-runtime";
|
3144
3515
|
var BranchPickerPrimitiveRoot = forwardRef14(({ hideWhenSingleBranch, ...rest }, ref) => {
|
3145
|
-
return /* @__PURE__ */
|
3516
|
+
return /* @__PURE__ */ jsx25(MessagePrimitiveIf, { hasBranches: hideWhenSingleBranch ? true : void 0, children: /* @__PURE__ */ jsx25(Primitive7.div, { ...rest, ref }) });
|
3146
3517
|
});
|
3147
3518
|
BranchPickerPrimitiveRoot.displayName = "BranchPickerPrimitive.Root";
|
3148
3519
|
|
3149
3520
|
// src/primitives/composer/index.ts
|
3150
3521
|
var composer_exports = {};
|
3151
3522
|
__export(composer_exports, {
|
3523
|
+
AddAttachment: () => ComposerPrimitiveAddAttachment,
|
3524
|
+
Attachments: () => ComposerPrimitiveAttachments,
|
3152
3525
|
Cancel: () => ComposerPrimitiveCancel,
|
3153
3526
|
If: () => ComposerPrimitiveIf,
|
3154
3527
|
Input: () => ComposerPrimitiveInput,
|
@@ -3162,7 +3535,7 @@ import { Primitive as Primitive8 } from "@radix-ui/react-primitive";
|
|
3162
3535
|
import {
|
3163
3536
|
forwardRef as forwardRef15
|
3164
3537
|
} from "react";
|
3165
|
-
import { jsx as
|
3538
|
+
import { jsx as jsx26 } from "react/jsx-runtime";
|
3166
3539
|
var ComposerPrimitiveRoot = forwardRef15(({ onSubmit, ...rest }, forwardedRef) => {
|
3167
3540
|
const send = useComposerSend();
|
3168
3541
|
const handleSubmit = (e) => {
|
@@ -3170,7 +3543,7 @@ var ComposerPrimitiveRoot = forwardRef15(({ onSubmit, ...rest }, forwardedRef) =
|
|
3170
3543
|
if (!send) return;
|
3171
3544
|
send();
|
3172
3545
|
};
|
3173
|
-
return /* @__PURE__ */
|
3546
|
+
return /* @__PURE__ */ jsx26(
|
3174
3547
|
Primitive8.form,
|
3175
3548
|
{
|
3176
3549
|
...rest,
|
@@ -3187,13 +3560,13 @@ import { useComposedRefs as useComposedRefs2 } from "@radix-ui/react-compose-ref
|
|
3187
3560
|
import { Slot } from "@radix-ui/react-slot";
|
3188
3561
|
import {
|
3189
3562
|
forwardRef as forwardRef16,
|
3190
|
-
useCallback as
|
3191
|
-
useEffect as
|
3563
|
+
useCallback as useCallback17,
|
3564
|
+
useEffect as useEffect11,
|
3192
3565
|
useRef as useRef4
|
3193
3566
|
} from "react";
|
3194
3567
|
import TextareaAutosize from "react-textarea-autosize";
|
3195
3568
|
import { useEscapeKeydown as useEscapeKeydown2 } from "@radix-ui/react-use-escape-keydown";
|
3196
|
-
import { jsx as
|
3569
|
+
import { jsx as jsx27 } from "react/jsx-runtime";
|
3197
3570
|
var ComposerPrimitiveInput = forwardRef16(
|
3198
3571
|
({
|
3199
3572
|
autoFocus = false,
|
@@ -3232,7 +3605,7 @@ var ComposerPrimitiveInput = forwardRef16(
|
|
3232
3605
|
}
|
3233
3606
|
};
|
3234
3607
|
const autoFocusEnabled = autoFocus && !isDisabled;
|
3235
|
-
const focus =
|
3608
|
+
const focus = useCallback17(() => {
|
3236
3609
|
const textarea = textareaRef.current;
|
3237
3610
|
if (!textarea || !autoFocusEnabled) return;
|
3238
3611
|
textarea.focus({ preventScroll: true });
|
@@ -3241,13 +3614,13 @@ var ComposerPrimitiveInput = forwardRef16(
|
|
3241
3614
|
textareaRef.current.value.length
|
3242
3615
|
);
|
3243
3616
|
}, [autoFocusEnabled]);
|
3244
|
-
|
3617
|
+
useEffect11(() => focus(), [focus]);
|
3245
3618
|
useOnComposerFocus(() => {
|
3246
3619
|
if (type === "new") {
|
3247
3620
|
focus();
|
3248
3621
|
}
|
3249
3622
|
});
|
3250
|
-
return /* @__PURE__ */
|
3623
|
+
return /* @__PURE__ */ jsx27(
|
3251
3624
|
Component,
|
3252
3625
|
{
|
3253
3626
|
name: "input",
|
@@ -3268,23 +3641,10 @@ var ComposerPrimitiveInput = forwardRef16(
|
|
3268
3641
|
ComposerPrimitiveInput.displayName = "ComposerPrimitive.Input";
|
3269
3642
|
|
3270
3643
|
// src/primitives/composer/ComposerSend.tsx
|
3271
|
-
|
3272
|
-
|
3273
|
-
|
3274
|
-
|
3275
|
-
const { useComposer } = useComposerContext();
|
3276
|
-
const hasValue = useComposer((c) => c.isEditing && c.text.length > 0);
|
3277
|
-
return /* @__PURE__ */ jsx26(
|
3278
|
-
Primitive9.button,
|
3279
|
-
{
|
3280
|
-
type: "submit",
|
3281
|
-
...rest,
|
3282
|
-
ref,
|
3283
|
-
disabled: disabled || !hasValue
|
3284
|
-
}
|
3285
|
-
);
|
3286
|
-
});
|
3287
|
-
ComposerPrimitiveSend.displayName = "ComposerPrimitive.Send";
|
3644
|
+
var ComposerPrimitiveSend = createActionButton(
|
3645
|
+
"ComposerPrimitive.Send",
|
3646
|
+
useComposerSend
|
3647
|
+
);
|
3288
3648
|
|
3289
3649
|
// src/primitives/composer/ComposerCancel.tsx
|
3290
3650
|
var ComposerPrimitiveCancel = createActionButton(
|
@@ -3292,6 +3652,101 @@ var ComposerPrimitiveCancel = createActionButton(
|
|
3292
3652
|
useComposerCancel
|
3293
3653
|
);
|
3294
3654
|
|
3655
|
+
// src/primitives/composer/ComposerAddAttachment.tsx
|
3656
|
+
var ComposerPrimitiveAddAttachment = createActionButton(
|
3657
|
+
"ComposerPrimitive.AddAttachment",
|
3658
|
+
useComposerAddAttachment
|
3659
|
+
);
|
3660
|
+
|
3661
|
+
// src/primitives/composer/ComposerAttachments.tsx
|
3662
|
+
import { memo as memo4 } from "react";
|
3663
|
+
|
3664
|
+
// src/context/providers/ComposerAttachmentProvider.tsx
|
3665
|
+
import { useEffect as useEffect12, useState as useState12 } from "react";
|
3666
|
+
import { create as create14 } from "zustand";
|
3667
|
+
import { jsx as jsx28 } from "react/jsx-runtime";
|
3668
|
+
var getAttachment2 = ({ attachments }, useAttachment, partIndex) => {
|
3669
|
+
let attachment = attachments[partIndex];
|
3670
|
+
if (!attachment) return null;
|
3671
|
+
const currentState = useAttachment?.getState();
|
3672
|
+
if (currentState && currentState.attachment === attachment) return null;
|
3673
|
+
return Object.freeze({ attachment });
|
3674
|
+
};
|
3675
|
+
var useComposerAttachmentContext = (partIndex) => {
|
3676
|
+
const { useComposer } = useThreadContext();
|
3677
|
+
const [context] = useState12(
|
3678
|
+
() => {
|
3679
|
+
const useAttachment = create14(
|
3680
|
+
() => getAttachment2(useComposer.getState(), void 0, partIndex)
|
3681
|
+
);
|
3682
|
+
return { type: "composer", useAttachment };
|
3683
|
+
}
|
3684
|
+
);
|
3685
|
+
useEffect12(() => {
|
3686
|
+
const syncAttachment = (composer) => {
|
3687
|
+
const newState = getAttachment2(
|
3688
|
+
composer,
|
3689
|
+
context.useAttachment,
|
3690
|
+
partIndex
|
3691
|
+
);
|
3692
|
+
if (!newState) return;
|
3693
|
+
writableStore(context.useAttachment).setState(newState, true);
|
3694
|
+
};
|
3695
|
+
syncAttachment(useComposer.getState());
|
3696
|
+
return useComposer.subscribe(syncAttachment);
|
3697
|
+
}, [context, useComposer, partIndex]);
|
3698
|
+
return context;
|
3699
|
+
};
|
3700
|
+
var ComposerAttachmentProvider = ({ attachmentIndex: partIndex, children }) => {
|
3701
|
+
const context = useComposerAttachmentContext(partIndex);
|
3702
|
+
return /* @__PURE__ */ jsx28(AttachmentContext.Provider, { value: context, children });
|
3703
|
+
};
|
3704
|
+
|
3705
|
+
// src/primitives/composer/ComposerAttachments.tsx
|
3706
|
+
import { jsx as jsx29 } from "react/jsx-runtime";
|
3707
|
+
var getComponent2 = (components, attachment) => {
|
3708
|
+
const type = attachment.type;
|
3709
|
+
switch (type) {
|
3710
|
+
case "image":
|
3711
|
+
return components?.Image ?? components?.Attachment;
|
3712
|
+
case "document":
|
3713
|
+
return components?.Document ?? components?.Attachment;
|
3714
|
+
case "file":
|
3715
|
+
return components?.File ?? components?.Attachment;
|
3716
|
+
default:
|
3717
|
+
const _exhaustiveCheck = type;
|
3718
|
+
throw new Error(`Unknown attachment type: ${_exhaustiveCheck}`);
|
3719
|
+
}
|
3720
|
+
};
|
3721
|
+
var AttachmentComponent2 = ({ components }) => {
|
3722
|
+
const { useAttachment } = useAttachmentContext({ type: "composer" });
|
3723
|
+
const Component = useAttachment(
|
3724
|
+
(a) => getComponent2(components, a.attachment)
|
3725
|
+
);
|
3726
|
+
if (!Component) return null;
|
3727
|
+
return /* @__PURE__ */ jsx29(Component, {});
|
3728
|
+
};
|
3729
|
+
var ComposerAttachmentImpl = ({ components, attachmentIndex }) => {
|
3730
|
+
return /* @__PURE__ */ jsx29(ComposerAttachmentProvider, { attachmentIndex, children: /* @__PURE__ */ jsx29(AttachmentComponent2, { components }) });
|
3731
|
+
};
|
3732
|
+
var ComposerAttachment = memo4(
|
3733
|
+
ComposerAttachmentImpl,
|
3734
|
+
(prev, next) => prev.attachmentIndex === next.attachmentIndex && prev.components?.Image === next.components?.Image && prev.components?.Document === next.components?.Document && prev.components?.File === next.components?.File && prev.components?.Attachment === next.components?.Attachment
|
3735
|
+
);
|
3736
|
+
var ComposerPrimitiveAttachments = ({ components }) => {
|
3737
|
+
const { useComposer } = useThreadContext();
|
3738
|
+
const attachmentsCount = useComposer((s) => s.attachments.length);
|
3739
|
+
return Array.from({ length: attachmentsCount }, (_, index) => /* @__PURE__ */ jsx29(
|
3740
|
+
ComposerAttachment,
|
3741
|
+
{
|
3742
|
+
attachmentIndex: index,
|
3743
|
+
components
|
3744
|
+
},
|
3745
|
+
index
|
3746
|
+
));
|
3747
|
+
};
|
3748
|
+
ComposerPrimitiveAttachments.displayName = "ComposerPrimitive.Attachments";
|
3749
|
+
|
3295
3750
|
// src/primitives/composer/ComposerIf.tsx
|
3296
3751
|
var ComposerPrimitiveIf = ({
|
3297
3752
|
children,
|
@@ -3324,11 +3779,11 @@ __export(thread_exports, {
|
|
3324
3779
|
});
|
3325
3780
|
|
3326
3781
|
// src/primitives/thread/ThreadRoot.tsx
|
3327
|
-
import { Primitive as
|
3328
|
-
import { forwardRef as
|
3329
|
-
import { jsx as
|
3330
|
-
var ThreadPrimitiveRoot =
|
3331
|
-
return /* @__PURE__ */
|
3782
|
+
import { Primitive as Primitive9 } from "@radix-ui/react-primitive";
|
3783
|
+
import { forwardRef as forwardRef17 } from "react";
|
3784
|
+
import { jsx as jsx30 } from "react/jsx-runtime";
|
3785
|
+
var ThreadPrimitiveRoot = forwardRef17((props, ref) => {
|
3786
|
+
return /* @__PURE__ */ jsx30(Primitive9.div, { ...props, ref });
|
3332
3787
|
});
|
3333
3788
|
ThreadPrimitiveRoot.displayName = "ThreadPrimitive.Root";
|
3334
3789
|
|
@@ -3353,8 +3808,8 @@ ThreadPrimitiveIf.displayName = "ThreadPrimitive.If";
|
|
3353
3808
|
|
3354
3809
|
// src/primitives/thread/ThreadViewport.tsx
|
3355
3810
|
import { useComposedRefs as useComposedRefs4 } from "@radix-ui/react-compose-refs";
|
3356
|
-
import { Primitive as
|
3357
|
-
import { forwardRef as
|
3811
|
+
import { Primitive as Primitive10 } from "@radix-ui/react-primitive";
|
3812
|
+
import { forwardRef as forwardRef18 } from "react";
|
3358
3813
|
|
3359
3814
|
// src/primitive-hooks/thread/useThreadViewportAutoScroll.tsx
|
3360
3815
|
import { useComposedRefs as useComposedRefs3 } from "@radix-ui/react-compose-refs";
|
@@ -3362,10 +3817,10 @@ import { useRef as useRef5 } from "react";
|
|
3362
3817
|
|
3363
3818
|
// src/utils/hooks/useOnResizeContent.tsx
|
3364
3819
|
import { useCallbackRef as useCallbackRef3 } from "@radix-ui/react-use-callback-ref";
|
3365
|
-
import { useCallback as
|
3820
|
+
import { useCallback as useCallback18 } from "react";
|
3366
3821
|
var useOnResizeContent = (callback) => {
|
3367
3822
|
const callbackRef = useCallbackRef3(callback);
|
3368
|
-
const refCallback =
|
3823
|
+
const refCallback = useCallback18(
|
3369
3824
|
(el) => {
|
3370
3825
|
const resizeObserver = new ResizeObserver(() => {
|
3371
3826
|
callbackRef();
|
@@ -3402,11 +3857,11 @@ var useOnResizeContent = (callback) => {
|
|
3402
3857
|
|
3403
3858
|
// src/utils/hooks/useOnScrollToBottom.tsx
|
3404
3859
|
import { useCallbackRef as useCallbackRef4 } from "@radix-ui/react-use-callback-ref";
|
3405
|
-
import { useEffect as
|
3860
|
+
import { useEffect as useEffect13 } from "react";
|
3406
3861
|
var useOnScrollToBottom = (callback) => {
|
3407
3862
|
const callbackRef = useCallbackRef4(callback);
|
3408
3863
|
const { useViewport } = useThreadContext();
|
3409
|
-
|
3864
|
+
useEffect13(() => {
|
3410
3865
|
return useViewport.getState().onScrollToBottom(() => {
|
3411
3866
|
callbackRef();
|
3412
3867
|
});
|
@@ -3438,9 +3893,7 @@ var useThreadViewportAutoScroll = ({
|
|
3438
3893
|
isScrollingToBottomRef.current = false;
|
3439
3894
|
}
|
3440
3895
|
if (newIsAtBottom !== isAtBottom) {
|
3441
|
-
useViewport.setState({
|
3442
|
-
isAtBottom: newIsAtBottom
|
3443
|
-
});
|
3896
|
+
writableStore(useViewport).setState({ isAtBottom: newIsAtBottom });
|
3444
3897
|
}
|
3445
3898
|
}
|
3446
3899
|
lastScrollTop.current = div.scrollTop;
|
@@ -3465,29 +3918,29 @@ var useThreadViewportAutoScroll = ({
|
|
3465
3918
|
};
|
3466
3919
|
|
3467
3920
|
// src/primitives/thread/ThreadViewport.tsx
|
3468
|
-
import { jsx as
|
3469
|
-
var ThreadPrimitiveViewport =
|
3921
|
+
import { jsx as jsx31 } from "react/jsx-runtime";
|
3922
|
+
var ThreadPrimitiveViewport = forwardRef18(({ autoScroll, onScroll, children, ...rest }, forwardedRef) => {
|
3470
3923
|
const autoScrollRef = useThreadViewportAutoScroll({
|
3471
3924
|
autoScroll
|
3472
3925
|
});
|
3473
3926
|
const ref = useComposedRefs4(forwardedRef, autoScrollRef);
|
3474
|
-
return /* @__PURE__ */
|
3927
|
+
return /* @__PURE__ */ jsx31(Primitive10.div, { ...rest, ref, children });
|
3475
3928
|
});
|
3476
3929
|
ThreadPrimitiveViewport.displayName = "ThreadPrimitive.Viewport";
|
3477
3930
|
|
3478
3931
|
// src/primitives/thread/ThreadMessages.tsx
|
3479
|
-
import { memo as
|
3932
|
+
import { memo as memo5 } from "react";
|
3480
3933
|
|
3481
3934
|
// src/context/providers/MessageProvider.tsx
|
3482
|
-
import { useEffect as
|
3483
|
-
import { create as
|
3935
|
+
import { useEffect as useEffect14, useState as useState13 } from "react";
|
3936
|
+
import { create as create17 } from "zustand";
|
3484
3937
|
|
3485
3938
|
// src/context/stores/EditComposer.ts
|
3486
|
-
import { create as
|
3939
|
+
import { create as create15 } from "zustand";
|
3487
3940
|
var makeEditComposerStore = ({
|
3488
3941
|
onEdit,
|
3489
3942
|
onSend
|
3490
|
-
}) =>
|
3943
|
+
}) => create15()((set, get) => ({
|
3491
3944
|
get value() {
|
3492
3945
|
return get().text;
|
3493
3946
|
},
|
@@ -3496,13 +3949,19 @@ var makeEditComposerStore = ({
|
|
3496
3949
|
},
|
3497
3950
|
text: "",
|
3498
3951
|
setText: (text) => {
|
3499
|
-
set({ text });
|
3952
|
+
set({ text, isEmpty: text.trim().length === 0 });
|
3500
3953
|
},
|
3501
3954
|
canCancel: false,
|
3502
3955
|
isEditing: false,
|
3956
|
+
isEmpty: true,
|
3503
3957
|
edit: () => {
|
3504
3958
|
const text = onEdit();
|
3505
|
-
set({
|
3959
|
+
set({
|
3960
|
+
isEditing: true,
|
3961
|
+
canCancel: true,
|
3962
|
+
isEmpty: text.trim().length === 0,
|
3963
|
+
text
|
3964
|
+
});
|
3506
3965
|
},
|
3507
3966
|
send: () => {
|
3508
3967
|
const text = get().text;
|
@@ -3515,8 +3974,8 @@ var makeEditComposerStore = ({
|
|
3515
3974
|
}));
|
3516
3975
|
|
3517
3976
|
// src/context/stores/MessageUtils.ts
|
3518
|
-
import { create as
|
3519
|
-
var makeMessageUtilsStore = () =>
|
3977
|
+
import { create as create16 } from "zustand";
|
3978
|
+
var makeMessageUtilsStore = () => create16((set) => {
|
3520
3979
|
let utterance = null;
|
3521
3980
|
return {
|
3522
3981
|
isCopied: false,
|
@@ -3542,7 +4001,7 @@ var makeMessageUtilsStore = () => create14((set) => {
|
|
3542
4001
|
});
|
3543
4002
|
|
3544
4003
|
// src/context/providers/MessageProvider.tsx
|
3545
|
-
import { jsx as
|
4004
|
+
import { jsx as jsx32 } from "react/jsx-runtime";
|
3546
4005
|
var getIsLast = (messages, message) => {
|
3547
4006
|
return messages[messages.length - 1]?.id === message.id;
|
3548
4007
|
};
|
@@ -3564,8 +4023,8 @@ var getMessageState = (messages, getBranches, useMessage, messageIndex) => {
|
|
3564
4023
|
};
|
3565
4024
|
var useMessageContext2 = (messageIndex) => {
|
3566
4025
|
const { useThreadMessages, useThreadActions } = useThreadContext();
|
3567
|
-
const [context] =
|
3568
|
-
const useMessage =
|
4026
|
+
const [context] = useState13(() => {
|
4027
|
+
const useMessage = create17(
|
3569
4028
|
() => getMessageState(
|
3570
4029
|
useThreadMessages.getState(),
|
3571
4030
|
useThreadActions.getState().getBranches,
|
@@ -3596,13 +4055,14 @@ var useMessageContext2 = (messageIndex) => {
|
|
3596
4055
|
useThreadActions.getState().append({
|
3597
4056
|
parentId,
|
3598
4057
|
role: "user",
|
3599
|
-
content: [{ type: "text", text }, ...nonTextParts]
|
4058
|
+
content: [{ type: "text", text }, ...nonTextParts],
|
4059
|
+
attachments: message.attachments
|
3600
4060
|
});
|
3601
4061
|
}
|
3602
4062
|
});
|
3603
4063
|
return { useMessage, useMessageUtils, useEditComposer };
|
3604
4064
|
});
|
3605
|
-
|
4065
|
+
useEffect14(() => {
|
3606
4066
|
const syncMessage = (thread) => {
|
3607
4067
|
const newState = getMessageState(
|
3608
4068
|
thread,
|
@@ -3611,10 +4071,7 @@ var useMessageContext2 = (messageIndex) => {
|
|
3611
4071
|
messageIndex
|
3612
4072
|
);
|
3613
4073
|
if (!newState) return;
|
3614
|
-
context.useMessage.setState(
|
3615
|
-
newState,
|
3616
|
-
true
|
3617
|
-
);
|
4074
|
+
writableStore(context.useMessage).setState(newState, true);
|
3618
4075
|
};
|
3619
4076
|
syncMessage(useThreadMessages.getState());
|
3620
4077
|
return useThreadMessages.subscribe(syncMessage);
|
@@ -3626,11 +4083,11 @@ var MessageProvider = ({
|
|
3626
4083
|
children
|
3627
4084
|
}) => {
|
3628
4085
|
const context = useMessageContext2(messageIndex);
|
3629
|
-
return /* @__PURE__ */
|
4086
|
+
return /* @__PURE__ */ jsx32(MessageContext.Provider, { value: context, children });
|
3630
4087
|
};
|
3631
4088
|
|
3632
4089
|
// src/primitives/thread/ThreadMessages.tsx
|
3633
|
-
import { jsx as
|
4090
|
+
import { jsx as jsx33, jsxs as jsxs4 } from "react/jsx-runtime";
|
3634
4091
|
var DEFAULT_SYSTEM_MESSAGE = () => null;
|
3635
4092
|
var getComponents = (components) => {
|
3636
4093
|
return {
|
@@ -3647,14 +4104,14 @@ var ThreadMessageImpl = ({
|
|
3647
4104
|
const { UserMessage: UserMessage2, EditComposer: EditComposer2, AssistantMessage: AssistantMessage2, SystemMessage: SystemMessage2 } = getComponents(components);
|
3648
4105
|
return /* @__PURE__ */ jsxs4(MessageProvider, { messageIndex, children: [
|
3649
4106
|
/* @__PURE__ */ jsxs4(MessagePrimitiveIf, { user: true, children: [
|
3650
|
-
/* @__PURE__ */
|
3651
|
-
/* @__PURE__ */
|
4107
|
+
/* @__PURE__ */ jsx33(ComposerPrimitiveIf, { editing: false, children: /* @__PURE__ */ jsx33(UserMessage2, {}) }),
|
4108
|
+
/* @__PURE__ */ jsx33(ComposerPrimitiveIf, { editing: true, children: /* @__PURE__ */ jsx33(EditComposer2, {}) })
|
3652
4109
|
] }),
|
3653
|
-
/* @__PURE__ */
|
3654
|
-
/* @__PURE__ */
|
4110
|
+
/* @__PURE__ */ jsx33(MessagePrimitiveIf, { assistant: true, children: /* @__PURE__ */ jsx33(AssistantMessage2, {}) }),
|
4111
|
+
/* @__PURE__ */ jsx33(MessagePrimitiveIf, { system: true, children: /* @__PURE__ */ jsx33(SystemMessage2, {}) })
|
3655
4112
|
] });
|
3656
4113
|
};
|
3657
|
-
var ThreadMessage =
|
4114
|
+
var ThreadMessage = memo5(
|
3658
4115
|
ThreadMessageImpl,
|
3659
4116
|
(prev, next) => prev.messageIndex === next.messageIndex && prev.components.Message === next.components.Message && prev.components.UserMessage === next.components.UserMessage && prev.components.EditComposer === next.components.EditComposer && prev.components.AssistantMessage === next.components.AssistantMessage && prev.components.SystemMessage === next.components.SystemMessage
|
3660
4117
|
);
|
@@ -3664,20 +4121,10 @@ var ThreadPrimitiveMessagesImpl = ({
|
|
3664
4121
|
const { useThreadMessages } = useThreadContext();
|
3665
4122
|
const messagesLength = useThreadMessages((t) => t.length);
|
3666
4123
|
if (messagesLength === 0) return null;
|
3667
|
-
return
|
3668
|
-
const messageIndex = idx;
|
3669
|
-
return /* @__PURE__ */ jsx30(
|
3670
|
-
ThreadMessage,
|
3671
|
-
{
|
3672
|
-
messageIndex,
|
3673
|
-
components
|
3674
|
-
},
|
3675
|
-
messageIndex
|
3676
|
-
);
|
3677
|
-
});
|
4124
|
+
return Array.from({ length: messagesLength }, (_, index) => /* @__PURE__ */ jsx33(ThreadMessage, { messageIndex: index, components }, index));
|
3678
4125
|
};
|
3679
4126
|
ThreadPrimitiveMessagesImpl.displayName = "ThreadPrimitive.Messages";
|
3680
|
-
var ThreadPrimitiveMessages =
|
4127
|
+
var ThreadPrimitiveMessages = memo5(
|
3681
4128
|
ThreadPrimitiveMessagesImpl,
|
3682
4129
|
(prev, next) => prev.components?.Message === next.components?.Message && prev.components?.UserMessage === next.components?.UserMessage && prev.components?.EditComposer === next.components?.EditComposer && prev.components?.AssistantMessage === next.components?.AssistantMessage && prev.components?.SystemMessage === next.components?.SystemMessage
|
3683
4130
|
);
|
@@ -3697,32 +4144,32 @@ var ThreadPrimitiveSuggestion = createActionButton(
|
|
3697
4144
|
|
3698
4145
|
// src/ui/thread-config.tsx
|
3699
4146
|
import {
|
3700
|
-
createContext as
|
3701
|
-
useContext as
|
4147
|
+
createContext as createContext7,
|
4148
|
+
useContext as useContext7
|
3702
4149
|
} from "react";
|
3703
|
-
import { Fragment as Fragment3, jsx as
|
3704
|
-
var ThreadConfigContext =
|
4150
|
+
import { Fragment as Fragment3, jsx as jsx34 } from "react/jsx-runtime";
|
4151
|
+
var ThreadConfigContext = createContext7({});
|
3705
4152
|
var useThreadConfig = () => {
|
3706
|
-
return
|
4153
|
+
return useContext7(ThreadConfigContext);
|
3707
4154
|
};
|
3708
4155
|
var ThreadConfigProvider = ({
|
3709
4156
|
children,
|
3710
4157
|
config
|
3711
4158
|
}) => {
|
3712
4159
|
const assistant = useAssistantContext({ optional: true });
|
3713
|
-
const configProvider = config && Object.keys(config ?? {}).length > 0 ? /* @__PURE__ */
|
4160
|
+
const configProvider = config && Object.keys(config ?? {}).length > 0 ? /* @__PURE__ */ jsx34(ThreadConfigContext.Provider, { value: config, children }) : /* @__PURE__ */ jsx34(Fragment3, { children });
|
3714
4161
|
if (!config?.runtime) return configProvider;
|
3715
4162
|
if (assistant) {
|
3716
4163
|
throw new Error(
|
3717
4164
|
"You provided a runtime to <Thread> while simulataneously using <AssistantRuntimeProvider>. This is not allowed."
|
3718
4165
|
);
|
3719
4166
|
}
|
3720
|
-
return /* @__PURE__ */
|
4167
|
+
return /* @__PURE__ */ jsx34(AssistantRuntimeProvider, { runtime: config.runtime, children: configProvider });
|
3721
4168
|
};
|
3722
4169
|
ThreadConfigProvider.displayName = "ThreadConfigProvider";
|
3723
4170
|
|
3724
4171
|
// src/ui/assistant-action-bar.tsx
|
3725
|
-
import { forwardRef as
|
4172
|
+
import { forwardRef as forwardRef19 } from "react";
|
3726
4173
|
import {
|
3727
4174
|
AudioLinesIcon,
|
3728
4175
|
CheckIcon,
|
@@ -3730,7 +4177,7 @@ import {
|
|
3730
4177
|
RefreshCwIcon,
|
3731
4178
|
StopCircleIcon
|
3732
4179
|
} from "lucide-react";
|
3733
|
-
import { Fragment as Fragment4, jsx as
|
4180
|
+
import { Fragment as Fragment4, jsx as jsx35, jsxs as jsxs5 } from "react/jsx-runtime";
|
3734
4181
|
var useAllowCopy = (ensureCapability = false) => {
|
3735
4182
|
const { assistantMessage: { allowCopy = true } = {} } = useThreadConfig();
|
3736
4183
|
const { useThread } = useThreadContext();
|
@@ -3761,9 +4208,9 @@ var AssistantActionBar = () => {
|
|
3761
4208
|
autohide: "not-last",
|
3762
4209
|
autohideFloat: "single-branch",
|
3763
4210
|
children: [
|
3764
|
-
allowSpeak && /* @__PURE__ */
|
3765
|
-
allowCopy && /* @__PURE__ */
|
3766
|
-
allowReload && /* @__PURE__ */
|
4211
|
+
allowSpeak && /* @__PURE__ */ jsx35(AssistantActionBarSpeechControl, {}),
|
4212
|
+
allowCopy && /* @__PURE__ */ jsx35(AssistantActionBarCopy, {}),
|
4213
|
+
allowReload && /* @__PURE__ */ jsx35(AssistantActionBarReload, {})
|
3767
4214
|
]
|
3768
4215
|
}
|
3769
4216
|
);
|
@@ -3773,36 +4220,35 @@ var AssistantActionBarRoot = withDefaults(actionBar_exports.Root, {
|
|
3773
4220
|
className: "aui-assistant-action-bar-root"
|
3774
4221
|
});
|
3775
4222
|
AssistantActionBarRoot.displayName = "AssistantActionBarRoot";
|
3776
|
-
var AssistantActionBarCopy =
|
4223
|
+
var AssistantActionBarCopy = forwardRef19((props, ref) => {
|
3777
4224
|
const {
|
3778
4225
|
strings: {
|
3779
4226
|
assistantMessage: { copy: { tooltip = "Copy" } = {} } = {}
|
3780
4227
|
} = {}
|
3781
4228
|
} = useThreadConfig();
|
3782
|
-
return /* @__PURE__ */
|
3783
|
-
/* @__PURE__ */
|
3784
|
-
/* @__PURE__ */
|
4229
|
+
return /* @__PURE__ */ jsx35(actionBar_exports.Copy, { asChild: true, children: /* @__PURE__ */ jsx35(TooltipIconButton, { tooltip, ...props, ref, children: props.children ?? /* @__PURE__ */ jsxs5(Fragment4, { children: [
|
4230
|
+
/* @__PURE__ */ jsx35(message_exports.If, { copied: true, children: /* @__PURE__ */ jsx35(CheckIcon, {}) }),
|
4231
|
+
/* @__PURE__ */ jsx35(message_exports.If, { copied: false, children: /* @__PURE__ */ jsx35(CopyIcon, {}) })
|
3785
4232
|
] }) }) });
|
3786
4233
|
});
|
3787
4234
|
AssistantActionBarCopy.displayName = "AssistantActionBarCopy";
|
3788
4235
|
var AssistantActionBarSpeechControl = () => {
|
3789
4236
|
return /* @__PURE__ */ jsxs5(Fragment4, { children: [
|
3790
|
-
/* @__PURE__ */
|
3791
|
-
/* @__PURE__ */
|
4237
|
+
/* @__PURE__ */ jsx35(message_exports.If, { speaking: false, children: /* @__PURE__ */ jsx35(AssistantActionBarSpeak, {}) }),
|
4238
|
+
/* @__PURE__ */ jsx35(message_exports.If, { speaking: true, children: /* @__PURE__ */ jsx35(AssistantActionBarStopSpeaking, {}) })
|
3792
4239
|
] });
|
3793
4240
|
};
|
3794
|
-
var AssistantActionBarSpeak =
|
4241
|
+
var AssistantActionBarSpeak = forwardRef19((props, ref) => {
|
3795
4242
|
const {
|
3796
4243
|
strings: {
|
3797
4244
|
assistantMessage: { speak: { tooltip = "Read aloud" } = {} } = {}
|
3798
4245
|
} = {}
|
3799
4246
|
} = useThreadConfig();
|
3800
4247
|
const allowSpeak = useAllowSpeak();
|
3801
|
-
|
3802
|
-
return /* @__PURE__ */ jsx32(actionBar_exports.Speak, { asChild: true, children: /* @__PURE__ */ jsx32(TooltipIconButton, { tooltip, ...props, ref, children: props.children ?? /* @__PURE__ */ jsx32(AudioLinesIcon, {}) }) });
|
4248
|
+
return /* @__PURE__ */ jsx35(actionBar_exports.Speak, { disabled: !allowSpeak, asChild: true, children: /* @__PURE__ */ jsx35(TooltipIconButton, { tooltip, ...props, ref, children: props.children ?? /* @__PURE__ */ jsx35(AudioLinesIcon, {}) }) });
|
3803
4249
|
});
|
3804
4250
|
AssistantActionBarSpeak.displayName = "AssistantActionBarSpeak";
|
3805
|
-
var AssistantActionBarStopSpeaking =
|
4251
|
+
var AssistantActionBarStopSpeaking = forwardRef19((props, ref) => {
|
3806
4252
|
const {
|
3807
4253
|
strings: {
|
3808
4254
|
assistantMessage: {
|
@@ -3811,19 +4257,17 @@ var AssistantActionBarStopSpeaking = forwardRef20((props, ref) => {
|
|
3811
4257
|
} = {}
|
3812
4258
|
} = useThreadConfig();
|
3813
4259
|
const allowSpeak = useAllowSpeak();
|
3814
|
-
|
3815
|
-
return /* @__PURE__ */ jsx32(actionBar_exports.StopSpeaking, { asChild: true, children: /* @__PURE__ */ jsx32(TooltipIconButton, { tooltip: stopTooltip, ...props, ref, children: props.children ?? /* @__PURE__ */ jsx32(StopCircleIcon, {}) }) });
|
4260
|
+
return /* @__PURE__ */ jsx35(actionBar_exports.StopSpeaking, { disabled: !allowSpeak, asChild: true, children: /* @__PURE__ */ jsx35(TooltipIconButton, { tooltip: stopTooltip, ...props, ref, children: props.children ?? /* @__PURE__ */ jsx35(StopCircleIcon, {}) }) });
|
3816
4261
|
});
|
3817
4262
|
AssistantActionBarStopSpeaking.displayName = "AssistantActionBarStopSpeaking";
|
3818
|
-
var AssistantActionBarReload =
|
4263
|
+
var AssistantActionBarReload = forwardRef19((props, ref) => {
|
3819
4264
|
const {
|
3820
4265
|
strings: {
|
3821
4266
|
assistantMessage: { reload: { tooltip = "Refresh" } = {} } = {}
|
3822
4267
|
} = {}
|
3823
4268
|
} = useThreadConfig();
|
3824
4269
|
const allowReload = useAllowReload();
|
3825
|
-
|
3826
|
-
return /* @__PURE__ */ jsx32(actionBar_exports.Reload, { asChild: true, children: /* @__PURE__ */ jsx32(TooltipIconButton, { tooltip, ...props, ref, children: /* @__PURE__ */ jsx32(RefreshCwIcon, {}) }) });
|
4270
|
+
return /* @__PURE__ */ jsx35(actionBar_exports.Reload, { disabled: !allowReload, asChild: true, children: /* @__PURE__ */ jsx35(TooltipIconButton, { tooltip, ...props, ref, children: /* @__PURE__ */ jsx35(RefreshCwIcon, {}) }) });
|
3827
4271
|
});
|
3828
4272
|
AssistantActionBarReload.displayName = "AssistantActionBarReload";
|
3829
4273
|
var exports = {
|
@@ -3840,25 +4284,25 @@ var assistant_action_bar_default = Object.assign(
|
|
3840
4284
|
);
|
3841
4285
|
|
3842
4286
|
// src/ui/assistant-message.tsx
|
3843
|
-
import { forwardRef as
|
4287
|
+
import { forwardRef as forwardRef21, useMemo as useMemo5 } from "react";
|
3844
4288
|
|
3845
4289
|
// src/ui/branch-picker.tsx
|
3846
|
-
import { forwardRef as
|
4290
|
+
import { forwardRef as forwardRef20 } from "react";
|
3847
4291
|
import { ChevronLeftIcon, ChevronRightIcon } from "lucide-react";
|
3848
|
-
import { jsx as
|
3849
|
-
var useAllowBranchPicker = () => {
|
4292
|
+
import { jsx as jsx36, jsxs as jsxs6 } from "react/jsx-runtime";
|
4293
|
+
var useAllowBranchPicker = (ensureCapability = false) => {
|
3850
4294
|
const { branchPicker: { allowBranchPicker = true } = {} } = useThreadConfig();
|
3851
4295
|
const { useThread } = useThreadContext();
|
3852
4296
|
const branchPickerSupported = useThread((t) => t.capabilities.edit);
|
3853
|
-
return
|
4297
|
+
return allowBranchPicker && (!ensureCapability || branchPickerSupported);
|
3854
4298
|
};
|
3855
4299
|
var BranchPicker = () => {
|
3856
4300
|
const allowBranchPicker = useAllowBranchPicker();
|
3857
4301
|
if (!allowBranchPicker) return null;
|
3858
4302
|
return /* @__PURE__ */ jsxs6(BranchPickerRoot, { hideWhenSingleBranch: true, children: [
|
3859
|
-
/* @__PURE__ */
|
3860
|
-
/* @__PURE__ */
|
3861
|
-
/* @__PURE__ */
|
4303
|
+
/* @__PURE__ */ jsx36(BranchPickerPrevious2, {}),
|
4304
|
+
/* @__PURE__ */ jsx36(BranchPickerState, {}),
|
4305
|
+
/* @__PURE__ */ jsx36(BranchPickerNext, {})
|
3862
4306
|
] });
|
3863
4307
|
};
|
3864
4308
|
BranchPicker.displayName = "BranchPicker";
|
@@ -3866,31 +4310,33 @@ var BranchPickerRoot = withDefaults(branchPicker_exports.Root, {
|
|
3866
4310
|
className: "aui-branch-picker-root"
|
3867
4311
|
});
|
3868
4312
|
BranchPickerRoot.displayName = "BranchPickerRoot";
|
3869
|
-
var BranchPickerPrevious2 =
|
4313
|
+
var BranchPickerPrevious2 = forwardRef20((props, ref) => {
|
3870
4314
|
const {
|
3871
4315
|
strings: {
|
3872
4316
|
branchPicker: { previous: { tooltip = "Previous" } = {} } = {}
|
3873
4317
|
} = {}
|
3874
4318
|
} = useThreadConfig();
|
3875
|
-
|
4319
|
+
const allowBranchPicker = useAllowBranchPicker();
|
4320
|
+
return /* @__PURE__ */ jsx36(branchPicker_exports.Previous, { disabled: !allowBranchPicker, asChild: true, children: /* @__PURE__ */ jsx36(TooltipIconButton, { tooltip, ...props, ref, children: props.children ?? /* @__PURE__ */ jsx36(ChevronLeftIcon, {}) }) });
|
3876
4321
|
});
|
3877
4322
|
BranchPickerPrevious2.displayName = "BranchPickerPrevious";
|
3878
4323
|
var BranchPickerStateWrapper = withDefaults("span", {
|
3879
4324
|
className: "aui-branch-picker-state"
|
3880
4325
|
});
|
3881
|
-
var BranchPickerState =
|
4326
|
+
var BranchPickerState = forwardRef20((props, ref) => {
|
3882
4327
|
return /* @__PURE__ */ jsxs6(BranchPickerStateWrapper, { ...props, ref, children: [
|
3883
|
-
/* @__PURE__ */
|
4328
|
+
/* @__PURE__ */ jsx36(branchPicker_exports.Number, {}),
|
3884
4329
|
" / ",
|
3885
|
-
/* @__PURE__ */
|
4330
|
+
/* @__PURE__ */ jsx36(branchPicker_exports.Count, {})
|
3886
4331
|
] });
|
3887
4332
|
});
|
3888
4333
|
BranchPickerState.displayName = "BranchPickerState";
|
3889
|
-
var BranchPickerNext =
|
4334
|
+
var BranchPickerNext = forwardRef20((props, ref) => {
|
3890
4335
|
const {
|
3891
4336
|
strings: { branchPicker: { next: { tooltip = "Next" } = {} } = {} } = {}
|
3892
4337
|
} = useThreadConfig();
|
3893
|
-
|
4338
|
+
const allowBranchPicker = useAllowBranchPicker();
|
4339
|
+
return /* @__PURE__ */ jsx36(branchPicker_exports.Next, { disabled: !allowBranchPicker, asChild: true, children: /* @__PURE__ */ jsx36(TooltipIconButton, { tooltip, ...props, ref, children: props.children ?? /* @__PURE__ */ jsx36(ChevronRightIcon, {}) }) });
|
3894
4340
|
});
|
3895
4341
|
BranchPickerNext.displayName = "BranchPickerNext";
|
3896
4342
|
var exports2 = {
|
@@ -3902,12 +4348,12 @@ var branch_picker_default = Object.assign(BranchPicker, exports2);
|
|
3902
4348
|
|
3903
4349
|
// src/ui/base/avatar.tsx
|
3904
4350
|
import * as AvatarPrimitive from "@radix-ui/react-avatar";
|
3905
|
-
import { jsx as
|
4351
|
+
import { jsx as jsx37, jsxs as jsxs7 } from "react/jsx-runtime";
|
3906
4352
|
var Avatar = ({ src, alt, fallback }) => {
|
3907
4353
|
if (src == null && fallback == null) return null;
|
3908
4354
|
return /* @__PURE__ */ jsxs7(AvatarRoot, { children: [
|
3909
|
-
src != null && /* @__PURE__ */
|
3910
|
-
fallback != null && /* @__PURE__ */
|
4355
|
+
src != null && /* @__PURE__ */ jsx37(AvatarImage, { src, alt }),
|
4356
|
+
fallback != null && /* @__PURE__ */ jsx37(AvatarFallback, { children: fallback })
|
3911
4357
|
] });
|
3912
4358
|
};
|
3913
4359
|
Avatar.displayName = "Avatar";
|
@@ -3926,10 +4372,10 @@ AvatarFallback.displayName = "AvatarFallback";
|
|
3926
4372
|
|
3927
4373
|
// src/ui/content-part.tsx
|
3928
4374
|
import classNames2 from "classnames";
|
3929
|
-
import { jsx as
|
4375
|
+
import { jsx as jsx38 } from "react/jsx-runtime";
|
3930
4376
|
var Text = () => {
|
3931
4377
|
const status = useSmoothStatus();
|
3932
|
-
return /* @__PURE__ */
|
4378
|
+
return /* @__PURE__ */ jsx38(
|
3933
4379
|
contentPart_exports.Text,
|
3934
4380
|
{
|
3935
4381
|
className: classNames2(
|
@@ -3944,19 +4390,19 @@ var exports3 = { Text: withSmoothContextProvider(Text) };
|
|
3944
4390
|
var content_part_default = exports3;
|
3945
4391
|
|
3946
4392
|
// src/ui/assistant-message.tsx
|
3947
|
-
import { jsx as
|
4393
|
+
import { jsx as jsx39, jsxs as jsxs8 } from "react/jsx-runtime";
|
3948
4394
|
var AssistantMessage = () => {
|
3949
4395
|
return /* @__PURE__ */ jsxs8(AssistantMessageRoot, { children: [
|
3950
|
-
/* @__PURE__ */
|
3951
|
-
/* @__PURE__ */
|
3952
|
-
/* @__PURE__ */
|
3953
|
-
/* @__PURE__ */
|
4396
|
+
/* @__PURE__ */ jsx39(AssistantMessageAvatar, {}),
|
4397
|
+
/* @__PURE__ */ jsx39(AssistantMessageContent, {}),
|
4398
|
+
/* @__PURE__ */ jsx39(branch_picker_default, {}),
|
4399
|
+
/* @__PURE__ */ jsx39(assistant_action_bar_default, {})
|
3954
4400
|
] });
|
3955
4401
|
};
|
3956
4402
|
AssistantMessage.displayName = "AssistantMessage";
|
3957
4403
|
var AssistantMessageAvatar = () => {
|
3958
4404
|
const { assistantAvatar: avatar = { fallback: "A" } } = useThreadConfig();
|
3959
|
-
return /* @__PURE__ */
|
4405
|
+
return /* @__PURE__ */ jsx39(Avatar, { ...avatar });
|
3960
4406
|
};
|
3961
4407
|
var AssistantMessageRoot = withDefaults(message_exports.Root, {
|
3962
4408
|
className: "aui-assistant-message-root"
|
@@ -3965,23 +4411,28 @@ AssistantMessageRoot.displayName = "AssistantMessageRoot";
|
|
3965
4411
|
var AssistantMessageContentWrapper = withDefaults("div", {
|
3966
4412
|
className: "aui-assistant-message-content"
|
3967
4413
|
});
|
3968
|
-
var AssistantMessageContent =
|
4414
|
+
var AssistantMessageContent = forwardRef21(({ components: componentsProp, ...rest }, ref) => {
|
3969
4415
|
const { tools, assistantMessage: { components = {} } = {} } = useThreadConfig();
|
3970
|
-
|
4416
|
+
const toolsComponents = useMemo5(
|
4417
|
+
() => ({
|
4418
|
+
by_name: !tools ? void 0 : Object.fromEntries(
|
4419
|
+
tools.map((t) => [
|
4420
|
+
t.unstable_tool.toolName,
|
4421
|
+
t.unstable_tool.render
|
4422
|
+
])
|
4423
|
+
),
|
4424
|
+
Fallback: components.ToolFallback
|
4425
|
+
}),
|
4426
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
4427
|
+
[...tools ?? [], components.ToolFallback]
|
4428
|
+
);
|
4429
|
+
return /* @__PURE__ */ jsx39(AssistantMessageContentWrapper, { ...rest, ref, children: /* @__PURE__ */ jsx39(
|
3971
4430
|
message_exports.Content,
|
3972
4431
|
{
|
3973
4432
|
components: {
|
3974
4433
|
...componentsProp,
|
3975
4434
|
Text: componentsProp?.Text ?? components.Text ?? content_part_default.Text,
|
3976
|
-
tools:
|
3977
|
-
by_name: !tools ? void 0 : Object.fromEntries(
|
3978
|
-
tools.map((t) => [
|
3979
|
-
t.unstable_tool.toolName,
|
3980
|
-
t.unstable_tool.render
|
3981
|
-
])
|
3982
|
-
),
|
3983
|
-
Fallback: components.ToolFallback
|
3984
|
-
}
|
4435
|
+
tools: toolsComponents
|
3985
4436
|
}
|
3986
4437
|
}
|
3987
4438
|
) });
|
@@ -4007,12 +4458,12 @@ import { ArrowDownIcon } from "lucide-react";
|
|
4007
4458
|
|
4008
4459
|
// src/ui/composer.tsx
|
4009
4460
|
import { forwardRef as forwardRef23 } from "react";
|
4010
|
-
import { SendHorizontalIcon } from "lucide-react";
|
4461
|
+
import { PaperclipIcon, SendHorizontalIcon } from "lucide-react";
|
4011
4462
|
|
4012
4463
|
// src/ui/base/CircleStopIcon.tsx
|
4013
|
-
import { jsx as
|
4464
|
+
import { jsx as jsx40 } from "react/jsx-runtime";
|
4014
4465
|
var CircleStopIcon = () => {
|
4015
|
-
return /* @__PURE__ */
|
4466
|
+
return /* @__PURE__ */ jsx40(
|
4016
4467
|
"svg",
|
4017
4468
|
{
|
4018
4469
|
xmlns: "http://www.w3.org/2000/svg",
|
@@ -4020,18 +4471,79 @@ var CircleStopIcon = () => {
|
|
4020
4471
|
fill: "currentColor",
|
4021
4472
|
width: "16",
|
4022
4473
|
height: "16",
|
4023
|
-
children: /* @__PURE__ */
|
4474
|
+
children: /* @__PURE__ */ jsx40("rect", { width: "10", height: "10", x: "3", y: "3", rx: "2" })
|
4024
4475
|
}
|
4025
4476
|
);
|
4026
4477
|
};
|
4027
4478
|
CircleStopIcon.displayName = "CircleStopIcon";
|
4028
4479
|
|
4480
|
+
// src/ui/composer-attachment.tsx
|
4481
|
+
import { forwardRef as forwardRef22 } from "react";
|
4482
|
+
import { CircleXIcon } from "lucide-react";
|
4483
|
+
import { jsx as jsx41, jsxs as jsxs9 } from "react/jsx-runtime";
|
4484
|
+
var ComposerAttachmentRoot = withDefaults("div", {
|
4485
|
+
className: "aui-composer-attachment-root"
|
4486
|
+
});
|
4487
|
+
ComposerAttachmentRoot.displayName = "ComposerAttachmentRoot";
|
4488
|
+
var ComposerAttachment2 = () => {
|
4489
|
+
const { useAttachment } = useAttachmentContext({ type: "composer" });
|
4490
|
+
const attachment = useAttachment((a) => a.attachment);
|
4491
|
+
return /* @__PURE__ */ jsxs9(ComposerAttachmentRoot, { children: [
|
4492
|
+
".",
|
4493
|
+
attachment.name.split(".").pop(),
|
4494
|
+
/* @__PURE__ */ jsx41(ComposerAttachmentRemove, {})
|
4495
|
+
] });
|
4496
|
+
};
|
4497
|
+
ComposerAttachment2.displayName = "ComposerAttachment";
|
4498
|
+
var ComposerAttachmentRemove = forwardRef22((props, ref) => {
|
4499
|
+
const {
|
4500
|
+
strings: {
|
4501
|
+
composer: { removeAttachment: { tooltip = "Remove file" } = {} } = {}
|
4502
|
+
} = {}
|
4503
|
+
} = useThreadConfig();
|
4504
|
+
const { useComposer } = useThreadContext();
|
4505
|
+
const { useAttachment } = useAttachmentContext();
|
4506
|
+
const handleRemoveAttachment = () => {
|
4507
|
+
useComposer.getState().removeAttachment(useAttachment.getState().attachment.id);
|
4508
|
+
};
|
4509
|
+
return /* @__PURE__ */ jsx41(
|
4510
|
+
TooltipIconButton,
|
4511
|
+
{
|
4512
|
+
tooltip,
|
4513
|
+
className: "aui-composer-attachment-remove",
|
4514
|
+
side: "top",
|
4515
|
+
...props,
|
4516
|
+
onClick: handleRemoveAttachment,
|
4517
|
+
ref,
|
4518
|
+
children: props.children ?? /* @__PURE__ */ jsx41(CircleXIcon, {})
|
4519
|
+
}
|
4520
|
+
);
|
4521
|
+
});
|
4522
|
+
ComposerAttachmentRemove.displayName = "ComposerAttachmentRemove";
|
4523
|
+
var exports5 = {
|
4524
|
+
Root: ComposerAttachmentRoot,
|
4525
|
+
Remove: ComposerAttachmentRemove
|
4526
|
+
};
|
4527
|
+
var composer_attachment_default = Object.assign(
|
4528
|
+
ComposerAttachment2,
|
4529
|
+
exports5
|
4530
|
+
);
|
4531
|
+
|
4029
4532
|
// src/ui/composer.tsx
|
4030
|
-
import { Fragment as Fragment5, jsx as
|
4533
|
+
import { Fragment as Fragment5, jsx as jsx42, jsxs as jsxs10 } from "react/jsx-runtime";
|
4534
|
+
var useAllowAttachments = (ensureCapability = false) => {
|
4535
|
+
const { composer: { allowAttachments = true } = {} } = useThreadConfig();
|
4536
|
+
const { useThread } = useThreadContext();
|
4537
|
+
const attachmentsSupported = useThread((t) => t.capabilities.attachments);
|
4538
|
+
return allowAttachments && (!ensureCapability || attachmentsSupported);
|
4539
|
+
};
|
4031
4540
|
var Composer = () => {
|
4032
|
-
|
4033
|
-
|
4034
|
-
/* @__PURE__ */
|
4541
|
+
const allowAttachments = useAllowAttachments(true);
|
4542
|
+
return /* @__PURE__ */ jsxs10(ComposerRoot, { children: [
|
4543
|
+
allowAttachments && /* @__PURE__ */ jsx42(ComposerAttachments, {}),
|
4544
|
+
allowAttachments && /* @__PURE__ */ jsx42(ComposerAddAttachment, {}),
|
4545
|
+
/* @__PURE__ */ jsx42(ComposerInput, { autoFocus: true }),
|
4546
|
+
/* @__PURE__ */ jsx42(ComposerAction, {})
|
4035
4547
|
] });
|
4036
4548
|
};
|
4037
4549
|
Composer.displayName = "Composer";
|
@@ -4051,10 +4563,47 @@ var ComposerInput = forwardRef23(
|
|
4051
4563
|
composer: { input: { placeholder = "Write a message..." } = {} } = {}
|
4052
4564
|
} = {}
|
4053
4565
|
} = useThreadConfig();
|
4054
|
-
return /* @__PURE__ */
|
4566
|
+
return /* @__PURE__ */ jsx42(ComposerInputStyled, { placeholder, ...props, ref });
|
4055
4567
|
}
|
4056
4568
|
);
|
4057
4569
|
ComposerInput.displayName = "ComposerInput";
|
4570
|
+
var ComposerAttachmentsContainer = withDefaults("div", {
|
4571
|
+
className: "aui-composer-attachments"
|
4572
|
+
});
|
4573
|
+
var ComposerAttachments = ({ components }) => {
|
4574
|
+
return /* @__PURE__ */ jsx42(ComposerAttachmentsContainer, { children: /* @__PURE__ */ jsx42(
|
4575
|
+
composer_exports.Attachments,
|
4576
|
+
{
|
4577
|
+
components: {
|
4578
|
+
...components,
|
4579
|
+
Attachment: components?.Attachment ?? composer_attachment_default
|
4580
|
+
}
|
4581
|
+
}
|
4582
|
+
) });
|
4583
|
+
};
|
4584
|
+
var ComposerAttachButton = withDefaults(TooltipIconButton, {
|
4585
|
+
variant: "default",
|
4586
|
+
className: "aui-composer-attach"
|
4587
|
+
});
|
4588
|
+
var ComposerAddAttachment = forwardRef23((props, ref) => {
|
4589
|
+
const {
|
4590
|
+
strings: {
|
4591
|
+
composer: { addAttachment: { tooltip = "Attach file" } = {} } = {}
|
4592
|
+
} = {}
|
4593
|
+
} = useThreadConfig();
|
4594
|
+
const allowAttachments = useAllowAttachments();
|
4595
|
+
return /* @__PURE__ */ jsx42(composer_exports.AddAttachment, { disabled: !allowAttachments, asChild: true, children: /* @__PURE__ */ jsx42(
|
4596
|
+
ComposerAttachButton,
|
4597
|
+
{
|
4598
|
+
tooltip,
|
4599
|
+
variant: "ghost",
|
4600
|
+
...props,
|
4601
|
+
ref,
|
4602
|
+
children: props.children ?? /* @__PURE__ */ jsx42(PaperclipIcon, {})
|
4603
|
+
}
|
4604
|
+
) });
|
4605
|
+
});
|
4606
|
+
ComposerAddAttachment.displayName = "ComposerAddAttachment";
|
4058
4607
|
var useAllowCancel = () => {
|
4059
4608
|
const { useThread } = useThreadContext();
|
4060
4609
|
const cancelSupported = useThread((t) => t.capabilities.cancel);
|
@@ -4062,10 +4611,10 @@ var useAllowCancel = () => {
|
|
4062
4611
|
};
|
4063
4612
|
var ComposerAction = () => {
|
4064
4613
|
const allowCancel = useAllowCancel();
|
4065
|
-
if (!allowCancel) return /* @__PURE__ */
|
4066
|
-
return /* @__PURE__ */
|
4067
|
-
/* @__PURE__ */
|
4068
|
-
/* @__PURE__ */
|
4614
|
+
if (!allowCancel) return /* @__PURE__ */ jsx42(ComposerSend, {});
|
4615
|
+
return /* @__PURE__ */ jsxs10(Fragment5, { children: [
|
4616
|
+
/* @__PURE__ */ jsx42(thread_exports.If, { running: false, children: /* @__PURE__ */ jsx42(ComposerSend, {}) }),
|
4617
|
+
/* @__PURE__ */ jsx42(thread_exports.If, { running: true, children: /* @__PURE__ */ jsx42(ComposerCancel, {}) })
|
4069
4618
|
] });
|
4070
4619
|
};
|
4071
4620
|
ComposerAction.displayName = "ComposerAction";
|
@@ -4077,7 +4626,7 @@ var ComposerSend = forwardRef23((props, ref) => {
|
|
4077
4626
|
const {
|
4078
4627
|
strings: { composer: { send: { tooltip = "Send" } = {} } = {} } = {}
|
4079
4628
|
} = useThreadConfig();
|
4080
|
-
return /* @__PURE__ */
|
4629
|
+
return /* @__PURE__ */ jsx42(composer_exports.Send, { asChild: true, children: /* @__PURE__ */ jsx42(ComposerSendButton, { tooltip, ...props, ref, children: props.children ?? /* @__PURE__ */ jsx42(SendHorizontalIcon, {}) }) });
|
4081
4630
|
});
|
4082
4631
|
ComposerSend.displayName = "ComposerSend";
|
4083
4632
|
var ComposerCancelButton = withDefaults(TooltipIconButton, {
|
@@ -4088,28 +4637,30 @@ var ComposerCancel = forwardRef23((props, ref) => {
|
|
4088
4637
|
const {
|
4089
4638
|
strings: { composer: { cancel: { tooltip = "Cancel" } = {} } = {} } = {}
|
4090
4639
|
} = useThreadConfig();
|
4091
|
-
return /* @__PURE__ */
|
4640
|
+
return /* @__PURE__ */ jsx42(composer_exports.Cancel, { asChild: true, children: /* @__PURE__ */ jsx42(ComposerCancelButton, { tooltip, ...props, ref, children: props.children ?? /* @__PURE__ */ jsx42(CircleStopIcon, {}) }) });
|
4092
4641
|
});
|
4093
4642
|
ComposerCancel.displayName = "ComposerCancel";
|
4094
|
-
var
|
4643
|
+
var exports6 = {
|
4095
4644
|
Root: ComposerRoot,
|
4096
4645
|
Input: ComposerInput,
|
4097
4646
|
Action: ComposerAction,
|
4098
4647
|
Send: ComposerSend,
|
4099
|
-
Cancel: ComposerCancel
|
4648
|
+
Cancel: ComposerCancel,
|
4649
|
+
AddAttachment: ComposerAddAttachment,
|
4650
|
+
Attachments: ComposerAttachments
|
4100
4651
|
};
|
4101
|
-
var composer_default = Object.assign(Composer,
|
4652
|
+
var composer_default = Object.assign(Composer, exports6);
|
4102
4653
|
|
4103
4654
|
// src/ui/thread-welcome.tsx
|
4104
4655
|
import { forwardRef as forwardRef24 } from "react";
|
4105
|
-
import { jsx as
|
4656
|
+
import { jsx as jsx43, jsxs as jsxs11 } from "react/jsx-runtime";
|
4106
4657
|
var ThreadWelcome = () => {
|
4107
|
-
return /* @__PURE__ */
|
4108
|
-
/* @__PURE__ */
|
4109
|
-
/* @__PURE__ */
|
4110
|
-
/* @__PURE__ */
|
4658
|
+
return /* @__PURE__ */ jsxs11(ThreadWelcomeRoot, { children: [
|
4659
|
+
/* @__PURE__ */ jsxs11(ThreadWelcomeCenter, { children: [
|
4660
|
+
/* @__PURE__ */ jsx43(ThreadWelcomeAvatar, {}),
|
4661
|
+
/* @__PURE__ */ jsx43(ThreadWelcomeMessage, {})
|
4111
4662
|
] }),
|
4112
|
-
/* @__PURE__ */
|
4663
|
+
/* @__PURE__ */ jsx43(ThreadWelcomeSuggestions, {})
|
4113
4664
|
] });
|
4114
4665
|
};
|
4115
4666
|
ThreadWelcome.displayName = "ThreadWelcome";
|
@@ -4121,20 +4672,20 @@ var ThreadWelcomeCenter = withDefaults("div", {
|
|
4121
4672
|
});
|
4122
4673
|
var ThreadWelcomeRoot = forwardRef24(
|
4123
4674
|
(props, ref) => {
|
4124
|
-
return /* @__PURE__ */
|
4675
|
+
return /* @__PURE__ */ jsx43(thread_exports.Empty, { children: /* @__PURE__ */ jsx43(ThreadWelcomeRootStyled, { ...props, ref }) });
|
4125
4676
|
}
|
4126
4677
|
);
|
4127
4678
|
ThreadWelcomeRoot.displayName = "ThreadWelcomeRoot";
|
4128
4679
|
var ThreadWelcomeAvatar = () => {
|
4129
4680
|
const { assistantAvatar: avatar = { fallback: "A" } } = useThreadConfig();
|
4130
|
-
return /* @__PURE__ */
|
4681
|
+
return /* @__PURE__ */ jsx43(Avatar, { ...avatar });
|
4131
4682
|
};
|
4132
4683
|
var ThreadWelcomeMessageStyled = withDefaults("p", {
|
4133
4684
|
className: "aui-thread-welcome-message"
|
4134
4685
|
});
|
4135
4686
|
var ThreadWelcomeMessage = forwardRef24(({ message: messageProp, ...rest }, ref) => {
|
4136
4687
|
const { welcome: { message = "How can I help you today?" } = {} } = useThreadConfig();
|
4137
|
-
return /* @__PURE__ */
|
4688
|
+
return /* @__PURE__ */ jsx43(ThreadWelcomeMessageStyled, { ...rest, ref, children: messageProp ?? message });
|
4138
4689
|
});
|
4139
4690
|
ThreadWelcomeMessage.displayName = "ThreadWelcomeMessage";
|
4140
4691
|
var ThreadWelcomeSuggestionContainer = withDefaults("div", {
|
@@ -4146,25 +4697,25 @@ var ThreadWelcomeSuggestionStyled = withDefaults(thread_exports.Suggestion, {
|
|
4146
4697
|
var ThreadWelcomeSuggestion = ({
|
4147
4698
|
suggestion: { text, prompt }
|
4148
4699
|
}) => {
|
4149
|
-
return /* @__PURE__ */
|
4700
|
+
return /* @__PURE__ */ jsx43(
|
4150
4701
|
ThreadWelcomeSuggestionStyled,
|
4151
4702
|
{
|
4152
4703
|
prompt,
|
4153
4704
|
method: "replace",
|
4154
4705
|
autoSend: true,
|
4155
|
-
children: /* @__PURE__ */
|
4706
|
+
children: /* @__PURE__ */ jsx43("span", { className: "aui-thread-welcome-suggestion-text", children: text ?? prompt })
|
4156
4707
|
}
|
4157
4708
|
);
|
4158
4709
|
};
|
4159
4710
|
var ThreadWelcomeSuggestions = () => {
|
4160
4711
|
const { welcome: { suggestions } = {} } = useThreadConfig();
|
4161
|
-
return /* @__PURE__ */
|
4712
|
+
return /* @__PURE__ */ jsx43(ThreadWelcomeSuggestionContainer, { children: suggestions?.map((suggestion, idx) => {
|
4162
4713
|
const key = `${suggestion.prompt}-${idx}`;
|
4163
|
-
return /* @__PURE__ */
|
4714
|
+
return /* @__PURE__ */ jsx43(ThreadWelcomeSuggestion, { suggestion }, key);
|
4164
4715
|
}) });
|
4165
4716
|
};
|
4166
4717
|
ThreadWelcomeSuggestions.displayName = "ThreadWelcomeSuggestions";
|
4167
|
-
var
|
4718
|
+
var exports7 = {
|
4168
4719
|
Root: ThreadWelcomeRoot,
|
4169
4720
|
Center: ThreadWelcomeCenter,
|
4170
4721
|
Avatar: ThreadWelcomeAvatar,
|
@@ -4172,7 +4723,7 @@ var exports6 = {
|
|
4172
4723
|
Suggestions: ThreadWelcomeSuggestions,
|
4173
4724
|
Suggestion: ThreadWelcomeSuggestion
|
4174
4725
|
};
|
4175
|
-
var thread_welcome_default = Object.assign(ThreadWelcome,
|
4726
|
+
var thread_welcome_default = Object.assign(ThreadWelcome, exports7);
|
4176
4727
|
|
4177
4728
|
// src/ui/user-message.tsx
|
4178
4729
|
import { forwardRef as forwardRef26 } from "react";
|
@@ -4180,7 +4731,7 @@ import { forwardRef as forwardRef26 } from "react";
|
|
4180
4731
|
// src/ui/user-action-bar.tsx
|
4181
4732
|
import { forwardRef as forwardRef25 } from "react";
|
4182
4733
|
import { PencilIcon } from "lucide-react";
|
4183
|
-
import { jsx as
|
4734
|
+
import { jsx as jsx44 } from "react/jsx-runtime";
|
4184
4735
|
var useAllowEdit = (ensureCapability = false) => {
|
4185
4736
|
const { userMessage: { allowEdit = true } = {} } = useThreadConfig();
|
4186
4737
|
const { useThread } = useThreadContext();
|
@@ -4190,7 +4741,7 @@ var useAllowEdit = (ensureCapability = false) => {
|
|
4190
4741
|
var UserActionBar = () => {
|
4191
4742
|
const allowEdit = useAllowEdit(true);
|
4192
4743
|
if (!allowEdit) return null;
|
4193
|
-
return /* @__PURE__ */
|
4744
|
+
return /* @__PURE__ */ jsx44(UserActionBarRoot, { hideWhenRunning: true, autohide: "not-last", children: /* @__PURE__ */ jsx44(UserActionBarEdit, {}) });
|
4194
4745
|
};
|
4195
4746
|
UserActionBar.displayName = "UserActionBar";
|
4196
4747
|
var UserActionBarRoot = withDefaults(actionBar_exports.Root, {
|
@@ -4202,23 +4753,46 @@ var UserActionBarEdit = forwardRef25((props, ref) => {
|
|
4202
4753
|
strings: { userMessage: { edit: { tooltip = "Edit" } = {} } = {} } = {}
|
4203
4754
|
} = useThreadConfig();
|
4204
4755
|
const allowEdit = useAllowEdit();
|
4205
|
-
|
4206
|
-
return /* @__PURE__ */ jsx40(actionBar_exports.Edit, { asChild: true, children: /* @__PURE__ */ jsx40(TooltipIconButton, { tooltip, ...props, ref, children: props.children ?? /* @__PURE__ */ jsx40(PencilIcon, {}) }) });
|
4756
|
+
return /* @__PURE__ */ jsx44(actionBar_exports.Edit, { disabled: !allowEdit, asChild: true, children: /* @__PURE__ */ jsx44(TooltipIconButton, { tooltip, ...props, ref, children: props.children ?? /* @__PURE__ */ jsx44(PencilIcon, {}) }) });
|
4207
4757
|
});
|
4208
4758
|
UserActionBarEdit.displayName = "UserActionBarEdit";
|
4209
|
-
var
|
4759
|
+
var exports8 = {
|
4210
4760
|
Root: UserActionBarRoot,
|
4211
4761
|
Edit: UserActionBarEdit
|
4212
4762
|
};
|
4213
|
-
var user_action_bar_default = Object.assign(UserActionBar,
|
4763
|
+
var user_action_bar_default = Object.assign(UserActionBar, exports8);
|
4764
|
+
|
4765
|
+
// src/ui/user-message-attachment.tsx
|
4766
|
+
import { jsxs as jsxs12 } from "react/jsx-runtime";
|
4767
|
+
var UserMessageAttachmentRoot = withDefaults("div", {
|
4768
|
+
className: "aui-user-message-attachment-root"
|
4769
|
+
});
|
4770
|
+
UserMessageAttachmentRoot.displayName = "UserMessageAttachmentRoot";
|
4771
|
+
var UserMessageAttachment = () => {
|
4772
|
+
const { useAttachment } = useAttachmentContext();
|
4773
|
+
const attachment = useAttachment((a) => a.attachment);
|
4774
|
+
return /* @__PURE__ */ jsxs12(UserMessageAttachmentRoot, { children: [
|
4775
|
+
".",
|
4776
|
+
attachment.name.split(".").pop()
|
4777
|
+
] });
|
4778
|
+
};
|
4779
|
+
UserMessageAttachment.displayName = "UserMessageAttachment";
|
4780
|
+
var exports9 = {
|
4781
|
+
Root: UserMessageAttachmentRoot
|
4782
|
+
};
|
4783
|
+
var user_message_attachment_default = Object.assign(
|
4784
|
+
UserMessageAttachment,
|
4785
|
+
exports9
|
4786
|
+
);
|
4214
4787
|
|
4215
4788
|
// src/ui/user-message.tsx
|
4216
|
-
import { jsx as
|
4789
|
+
import { jsx as jsx45, jsxs as jsxs13 } from "react/jsx-runtime";
|
4217
4790
|
var UserMessage = () => {
|
4218
|
-
return /* @__PURE__ */
|
4219
|
-
/* @__PURE__ */
|
4220
|
-
/* @__PURE__ */
|
4221
|
-
/* @__PURE__ */
|
4791
|
+
return /* @__PURE__ */ jsxs13(UserMessageRoot, { children: [
|
4792
|
+
/* @__PURE__ */ jsx45(UserMessageAttachments, {}),
|
4793
|
+
/* @__PURE__ */ jsx45(user_action_bar_default, {}),
|
4794
|
+
/* @__PURE__ */ jsx45(UserMessageContent, {}),
|
4795
|
+
/* @__PURE__ */ jsx45(branch_picker_default, {})
|
4222
4796
|
] });
|
4223
4797
|
};
|
4224
4798
|
UserMessage.displayName = "UserMessage";
|
@@ -4231,7 +4805,7 @@ var UserMessageContentWrapper = withDefaults("div", {
|
|
4231
4805
|
});
|
4232
4806
|
var UserMessageContent = forwardRef26(
|
4233
4807
|
({ components, ...props }, ref) => {
|
4234
|
-
return /* @__PURE__ */
|
4808
|
+
return /* @__PURE__ */ jsx45(UserMessageContentWrapper, { ...props, ref, children: /* @__PURE__ */ jsx45(
|
4235
4809
|
message_exports.Content,
|
4236
4810
|
{
|
4237
4811
|
components: {
|
@@ -4243,21 +4817,38 @@ var UserMessageContent = forwardRef26(
|
|
4243
4817
|
}
|
4244
4818
|
);
|
4245
4819
|
UserMessageContent.displayName = "UserMessageContent";
|
4246
|
-
var
|
4820
|
+
var UserMessageAttachmentsContainer = withDefaults("div", {
|
4821
|
+
className: "aui-user-message-attachments"
|
4822
|
+
});
|
4823
|
+
var UserMessageAttachments = ({
|
4824
|
+
components
|
4825
|
+
}) => {
|
4826
|
+
return /* @__PURE__ */ jsx45(message_exports.If, { hasAttachments: true, children: /* @__PURE__ */ jsx45(UserMessageAttachmentsContainer, { children: /* @__PURE__ */ jsx45(
|
4827
|
+
message_exports.Attachments,
|
4828
|
+
{
|
4829
|
+
components: {
|
4830
|
+
...components,
|
4831
|
+
Attachment: components?.Attachment ?? user_message_attachment_default
|
4832
|
+
}
|
4833
|
+
}
|
4834
|
+
) }) });
|
4835
|
+
};
|
4836
|
+
var exports10 = {
|
4247
4837
|
Root: UserMessageRoot,
|
4248
|
-
Content: UserMessageContent
|
4838
|
+
Content: UserMessageContent,
|
4839
|
+
Attachments: UserMessageAttachments
|
4249
4840
|
};
|
4250
|
-
var user_message_default = Object.assign(UserMessage,
|
4841
|
+
var user_message_default = Object.assign(UserMessage, exports10);
|
4251
4842
|
|
4252
4843
|
// src/ui/edit-composer.tsx
|
4253
4844
|
import { forwardRef as forwardRef27 } from "react";
|
4254
|
-
import { jsx as
|
4845
|
+
import { jsx as jsx46, jsxs as jsxs14 } from "react/jsx-runtime";
|
4255
4846
|
var EditComposer = () => {
|
4256
|
-
return /* @__PURE__ */
|
4257
|
-
/* @__PURE__ */
|
4258
|
-
/* @__PURE__ */
|
4259
|
-
/* @__PURE__ */
|
4260
|
-
/* @__PURE__ */
|
4847
|
+
return /* @__PURE__ */ jsxs14(EditComposerRoot, { children: [
|
4848
|
+
/* @__PURE__ */ jsx46(EditComposerInput, {}),
|
4849
|
+
/* @__PURE__ */ jsxs14(EditComposerFooter, { children: [
|
4850
|
+
/* @__PURE__ */ jsx46(EditComposerCancel, {}),
|
4851
|
+
/* @__PURE__ */ jsx46(EditComposerSend, {})
|
4261
4852
|
] })
|
4262
4853
|
] });
|
4263
4854
|
};
|
@@ -4281,7 +4872,7 @@ var EditComposerCancel = forwardRef27(
|
|
4281
4872
|
editComposer: { cancel: { label = "Cancel" } = {} } = {}
|
4282
4873
|
} = {}
|
4283
4874
|
} = useThreadConfig();
|
4284
|
-
return /* @__PURE__ */
|
4875
|
+
return /* @__PURE__ */ jsx46(composer_exports.Cancel, { asChild: true, children: /* @__PURE__ */ jsx46(Button, { variant: "ghost", ...props, ref, children: props.children ?? label }) });
|
4285
4876
|
}
|
4286
4877
|
);
|
4287
4878
|
EditComposerCancel.displayName = "EditComposerCancel";
|
@@ -4290,28 +4881,28 @@ var EditComposerSend = forwardRef27(
|
|
4290
4881
|
const {
|
4291
4882
|
strings: { editComposer: { send: { label = "Send" } = {} } = {} } = {}
|
4292
4883
|
} = useThreadConfig();
|
4293
|
-
return /* @__PURE__ */
|
4884
|
+
return /* @__PURE__ */ jsx46(composer_exports.Send, { asChild: true, children: /* @__PURE__ */ jsx46(Button, { ...props, ref, children: props.children ?? label }) });
|
4294
4885
|
}
|
4295
4886
|
);
|
4296
4887
|
EditComposerSend.displayName = "EditComposerSend";
|
4297
|
-
var
|
4888
|
+
var exports11 = {
|
4298
4889
|
Root: EditComposerRoot,
|
4299
4890
|
Input: EditComposerInput,
|
4300
4891
|
Footer: EditComposerFooter,
|
4301
4892
|
Cancel: EditComposerCancel,
|
4302
4893
|
Send: EditComposerSend
|
4303
4894
|
};
|
4304
|
-
var edit_composer_default = Object.assign(EditComposer,
|
4895
|
+
var edit_composer_default = Object.assign(EditComposer, exports11);
|
4305
4896
|
|
4306
4897
|
// src/ui/thread.tsx
|
4307
|
-
import { jsx as
|
4898
|
+
import { jsx as jsx47, jsxs as jsxs15 } from "react/jsx-runtime";
|
4308
4899
|
var Thread = (config) => {
|
4309
|
-
return /* @__PURE__ */
|
4310
|
-
/* @__PURE__ */
|
4311
|
-
/* @__PURE__ */
|
4312
|
-
/* @__PURE__ */
|
4313
|
-
/* @__PURE__ */
|
4314
|
-
/* @__PURE__ */
|
4900
|
+
return /* @__PURE__ */ jsx47(ThreadRoot, { config, children: /* @__PURE__ */ jsxs15(ThreadViewport, { children: [
|
4901
|
+
/* @__PURE__ */ jsx47(thread_welcome_default, {}),
|
4902
|
+
/* @__PURE__ */ jsx47(ThreadMessages, {}),
|
4903
|
+
/* @__PURE__ */ jsxs15(ThreadViewportFooter, { children: [
|
4904
|
+
/* @__PURE__ */ jsx47(ThreadScrollToBottom, {}),
|
4905
|
+
/* @__PURE__ */ jsx47(composer_default, {})
|
4315
4906
|
] })
|
4316
4907
|
] }) });
|
4317
4908
|
};
|
@@ -4320,7 +4911,7 @@ var ThreadRootStyled = withDefaults(thread_exports.Root, {
|
|
4320
4911
|
});
|
4321
4912
|
var ThreadRoot = forwardRef28(
|
4322
4913
|
({ config, ...props }, ref) => {
|
4323
|
-
return /* @__PURE__ */
|
4914
|
+
return /* @__PURE__ */ jsx47(ThreadConfigProvider, { config, children: /* @__PURE__ */ jsx47(ThreadRootStyled, { ...props, ref }) });
|
4324
4915
|
}
|
4325
4916
|
);
|
4326
4917
|
ThreadRoot.displayName = "ThreadRoot";
|
@@ -4334,7 +4925,7 @@ var ThreadViewportFooter = withDefaults("div", {
|
|
4334
4925
|
ThreadViewportFooter.displayName = "ThreadViewportFooter";
|
4335
4926
|
var SystemMessage = () => null;
|
4336
4927
|
var ThreadMessages = ({ components, ...rest }) => {
|
4337
|
-
return /* @__PURE__ */
|
4928
|
+
return /* @__PURE__ */ jsx47(
|
4338
4929
|
thread_exports.Messages,
|
4339
4930
|
{
|
4340
4931
|
components: {
|
@@ -4358,33 +4949,33 @@ var ThreadScrollToBottom = forwardRef28((props, ref) => {
|
|
4358
4949
|
thread: { scrollToBottom: { tooltip = "Scroll to bottom" } = {} } = {}
|
4359
4950
|
} = {}
|
4360
4951
|
} = useThreadConfig();
|
4361
|
-
return /* @__PURE__ */
|
4952
|
+
return /* @__PURE__ */ jsx47(thread_exports.ScrollToBottom, { asChild: true, children: /* @__PURE__ */ jsx47(ThreadScrollToBottomIconButton, { tooltip, ...props, ref, children: props.children ?? /* @__PURE__ */ jsx47(ArrowDownIcon, {}) }) });
|
4362
4953
|
});
|
4363
4954
|
ThreadScrollToBottom.displayName = "ThreadScrollToBottom";
|
4364
|
-
var
|
4955
|
+
var exports12 = {
|
4365
4956
|
Root: ThreadRoot,
|
4366
4957
|
Viewport: ThreadViewport,
|
4367
4958
|
Messages: ThreadMessages,
|
4368
4959
|
ScrollToBottom: ThreadScrollToBottom,
|
4369
4960
|
ViewportFooter: ThreadViewportFooter
|
4370
4961
|
};
|
4371
|
-
var thread_default = Object.assign(Thread,
|
4962
|
+
var thread_default = Object.assign(Thread, exports12);
|
4372
4963
|
|
4373
4964
|
// src/ui/assistant-modal.tsx
|
4374
|
-
import { Fragment as Fragment6, jsx as
|
4965
|
+
import { Fragment as Fragment6, jsx as jsx48, jsxs as jsxs16 } from "react/jsx-runtime";
|
4375
4966
|
var AssistantModal = (config) => {
|
4376
|
-
return /* @__PURE__ */
|
4377
|
-
/* @__PURE__ */
|
4378
|
-
/* @__PURE__ */
|
4967
|
+
return /* @__PURE__ */ jsxs16(AssistantModalRoot, { config, children: [
|
4968
|
+
/* @__PURE__ */ jsx48(AssistantModalTrigger, {}),
|
4969
|
+
/* @__PURE__ */ jsx48(AssistantModalContent, { children: /* @__PURE__ */ jsx48(thread_default, {}) })
|
4379
4970
|
] });
|
4380
4971
|
};
|
4381
4972
|
AssistantModal.displayName = "AssistantModal";
|
4382
4973
|
var AssistantModalRoot = ({ config, ...props }) => {
|
4383
|
-
return /* @__PURE__ */
|
4974
|
+
return /* @__PURE__ */ jsx48(ThreadConfigProvider, { config, children: /* @__PURE__ */ jsx48(assistantModal_exports.Root, { ...props }) });
|
4384
4975
|
};
|
4385
4976
|
AssistantModalRoot.displayName = "AssistantModalRoot";
|
4386
4977
|
var AssistantModalTrigger = forwardRef29((props, ref) => {
|
4387
|
-
return /* @__PURE__ */
|
4978
|
+
return /* @__PURE__ */ jsx48(AssistantModalAnchor, { children: /* @__PURE__ */ jsx48(assistantModal_exports.Trigger, { asChild: true, children: /* @__PURE__ */ jsx48(AssistantModalButton, { ...props, ref }) }) });
|
4388
4979
|
});
|
4389
4980
|
AssistantModalTrigger.displayName = "AssistantModalTrigger";
|
4390
4981
|
var AssistantModalAnchor = withDefaults(assistantModal_exports.Anchor, {
|
@@ -4409,7 +5000,7 @@ var AssistantModalButton = forwardRef29(({ "data-state": state, ...rest }, ref)
|
|
4409
5000
|
} = {}
|
4410
5001
|
} = useThreadConfig();
|
4411
5002
|
const tooltip = state === "open" ? openTooltip : closedTooltip;
|
4412
|
-
return /* @__PURE__ */
|
5003
|
+
return /* @__PURE__ */ jsx48(
|
4413
5004
|
ModalButtonStyled,
|
4414
5005
|
{
|
4415
5006
|
side: "left",
|
@@ -4417,15 +5008,15 @@ var AssistantModalButton = forwardRef29(({ "data-state": state, ...rest }, ref)
|
|
4417
5008
|
"data-state": state,
|
4418
5009
|
...rest,
|
4419
5010
|
ref,
|
4420
|
-
children: rest.children ?? /* @__PURE__ */
|
4421
|
-
/* @__PURE__ */
|
5011
|
+
children: rest.children ?? /* @__PURE__ */ jsxs16(Fragment6, { children: [
|
5012
|
+
/* @__PURE__ */ jsx48(
|
4422
5013
|
BotIcon,
|
4423
5014
|
{
|
4424
5015
|
"data-state": state,
|
4425
5016
|
className: "aui-modal-button-closed-icon"
|
4426
5017
|
}
|
4427
5018
|
),
|
4428
|
-
/* @__PURE__ */
|
5019
|
+
/* @__PURE__ */ jsx48(
|
4429
5020
|
ChevronDownIcon,
|
4430
5021
|
{
|
4431
5022
|
"data-state": state,
|
@@ -4442,14 +5033,14 @@ var AssistantModalContent = withDefaults(assistantModal_exports.Content, {
|
|
4442
5033
|
sideOffset: 16
|
4443
5034
|
});
|
4444
5035
|
AssistantModalContent.displayName = "AssistantModalContent";
|
4445
|
-
var
|
5036
|
+
var exports13 = {
|
4446
5037
|
Root: AssistantModalRoot,
|
4447
5038
|
Trigger: AssistantModalTrigger,
|
4448
5039
|
Content: AssistantModalContent,
|
4449
5040
|
Button: AssistantModalButton,
|
4450
5041
|
Anchor: AssistantModalAnchor
|
4451
5042
|
};
|
4452
|
-
var assistant_modal_default = Object.assign(AssistantModal,
|
5043
|
+
var assistant_modal_default = Object.assign(AssistantModal, exports13);
|
4453
5044
|
export {
|
4454
5045
|
actionBar_exports as ActionBarPrimitive,
|
4455
5046
|
assistant_action_bar_default as AssistantActionBar,
|
@@ -4460,7 +5051,9 @@ export {
|
|
4460
5051
|
branch_picker_default as BranchPicker,
|
4461
5052
|
branchPicker_exports as BranchPickerPrimitive,
|
4462
5053
|
composer_default as Composer,
|
5054
|
+
composer_attachment_default as ComposerAttachment,
|
4463
5055
|
composer_exports as ComposerPrimitive,
|
5056
|
+
CompositeAttachmentAdapter,
|
4464
5057
|
content_part_default as ContentPart,
|
4465
5058
|
contentPart_exports as ContentPartPrimitive,
|
4466
5059
|
EdgeChatAdapter,
|
@@ -4468,12 +5061,15 @@ export {
|
|
4468
5061
|
ExternalStoreRuntime,
|
4469
5062
|
internal_exports as INTERNAL,
|
4470
5063
|
message_exports as MessagePrimitive,
|
5064
|
+
SimpleImageAttachmentAdapter,
|
5065
|
+
SimpleTextAttachmentAdapter,
|
4471
5066
|
thread_default as Thread,
|
4472
5067
|
ThreadConfigProvider,
|
4473
5068
|
thread_exports as ThreadPrimitive,
|
4474
5069
|
thread_welcome_default as ThreadWelcome,
|
4475
5070
|
user_action_bar_default as UserActionBar,
|
4476
5071
|
user_message_default as UserMessage,
|
5072
|
+
user_message_attachment_default as UserMessageAttachment,
|
4477
5073
|
WebSpeechSynthesisAdapter,
|
4478
5074
|
fromCoreMessage,
|
4479
5075
|
fromCoreMessages,
|
@@ -4502,6 +5098,7 @@ export {
|
|
4502
5098
|
useBranchPickerNext,
|
4503
5099
|
useBranchPickerNumber,
|
4504
5100
|
useBranchPickerPrevious,
|
5101
|
+
useComposerAddAttachment,
|
4505
5102
|
useComposerCancel,
|
4506
5103
|
useComposerContext,
|
4507
5104
|
useComposerIf,
|