@assistant-ui/react 0.1.9 → 0.1.10
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/README.md +2 -0
- package/dist/{chunk-7O2URLFI.mjs → chunk-KUACYNLE.mjs} +22 -22
- package/dist/chunk-KUACYNLE.mjs.map +1 -0
- package/dist/experimental.d.mts +1 -1
- package/dist/experimental.d.ts +1 -1
- package/dist/experimental.js +7 -7
- package/dist/experimental.js.map +1 -1
- package/dist/experimental.mjs +1 -1
- package/dist/experimental.mjs.map +1 -1
- package/dist/index.d.mts +75 -40
- package/dist/index.d.ts +75 -40
- package/dist/index.js +469 -377
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +376 -300
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
- package/dist/chunk-7O2URLFI.mjs.map +0 -1
package/dist/index.js
CHANGED
@@ -38,19 +38,33 @@ __export(src_exports, {
|
|
38
38
|
INTERNAL: () => internal_exports,
|
39
39
|
MessagePrimitive: () => message_exports,
|
40
40
|
ThreadPrimitive: () => thread_exports,
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
41
|
+
useActionBarCopy: () => useActionBarCopy,
|
42
|
+
useActionBarEdit: () => useActionBarEdit,
|
43
|
+
useActionBarReload: () => useActionBarReload,
|
44
|
+
useBranchPickerCount: () => useBranchPickerCount,
|
45
|
+
useBranchPickerNext: () => useBranchPickerNext,
|
46
|
+
useBranchPickerNumber: () => useBranchPickerNumber,
|
47
|
+
useBranchPickerPrevious: () => useBranchPickerPrevious,
|
48
|
+
useComposerCancel: () => useComposerCancel,
|
49
|
+
useComposerIf: () => useComposerIf,
|
50
|
+
useComposerSend: () => useComposerSend,
|
51
|
+
useContentPartDisplay: () => useContentPartDisplay,
|
52
|
+
useContentPartImage: () => useContentPartImage,
|
53
|
+
useContentPartInProgressIndicator: () => useContentPartInProgressIndicator,
|
54
|
+
useContentPartText: () => useContentPartText,
|
45
55
|
useLocalRuntime: () => useLocalRuntime,
|
46
|
-
|
56
|
+
useMessageIf: () => useMessageIf,
|
57
|
+
useThreadEmpty: () => useThreadEmpty,
|
58
|
+
useThreadIf: () => useThreadIf,
|
59
|
+
useThreadScrollToBottom: () => useThreadScrollToBottom,
|
60
|
+
useThreadSuggestion: () => useThreadSuggestion
|
47
61
|
});
|
48
62
|
module.exports = __toCommonJS(src_exports);
|
49
63
|
|
50
|
-
// src/
|
64
|
+
// src/primitive-hooks/actionBar/useActionBarCopy.tsx
|
51
65
|
var import_react4 = require("react");
|
52
66
|
|
53
|
-
// src/context/MessageContext.ts
|
67
|
+
// src/context/react/MessageContext.ts
|
54
68
|
var import_react = require("react");
|
55
69
|
var MessageContext = (0, import_react.createContext)(null);
|
56
70
|
var useMessageContext = () => {
|
@@ -96,36 +110,54 @@ var getMessageText = (message) => {
|
|
96
110
|
return textParts.map((part) => part.text).join("\n\n");
|
97
111
|
};
|
98
112
|
|
99
|
-
// src/
|
100
|
-
var
|
101
|
-
|
113
|
+
// src/primitive-hooks/actionBar/useActionBarCopy.tsx
|
114
|
+
var useActionBarCopy = ({
|
115
|
+
copiedDuration = 3e3
|
116
|
+
} = {}) => {
|
117
|
+
const { useMessage, useMessageUtils, useEditComposer } = useMessageContext();
|
102
118
|
const hasCopyableContent = useCombinedStore(
|
103
|
-
[useMessage,
|
119
|
+
[useMessage, useEditComposer],
|
104
120
|
(m, c) => {
|
105
|
-
return c.isEditing
|
121
|
+
return !c.isEditing && m.message.content.some((c2) => c2.type === "text");
|
106
122
|
}
|
107
123
|
);
|
108
124
|
const callback = (0, import_react4.useCallback)(() => {
|
109
125
|
const { message } = useMessage.getState();
|
110
126
|
const { setIsCopied } = useMessageUtils.getState();
|
111
|
-
const { isEditing, value: composerValue } =
|
127
|
+
const { isEditing, value: composerValue } = useEditComposer.getState();
|
112
128
|
const valueToCopy = isEditing ? composerValue : getMessageText(message);
|
113
129
|
navigator.clipboard.writeText(valueToCopy);
|
114
130
|
setIsCopied(true);
|
115
131
|
setTimeout(() => setIsCopied(false), copiedDuration);
|
116
|
-
}, [useMessage, useMessageUtils,
|
132
|
+
}, [useMessage, useMessageUtils, useEditComposer, copiedDuration]);
|
117
133
|
if (!hasCopyableContent) return null;
|
118
134
|
return callback;
|
119
135
|
};
|
120
136
|
|
121
|
-
// src/
|
122
|
-
var import_react6 = require("react");
|
123
|
-
|
124
|
-
// src/context/ThreadContext.ts
|
137
|
+
// src/primitive-hooks/actionBar/useActionBarEdit.tsx
|
125
138
|
var import_react5 = require("react");
|
126
|
-
var
|
139
|
+
var useActionBarEdit = () => {
|
140
|
+
const { useMessage, useEditComposer } = useMessageContext();
|
141
|
+
const disabled = useCombinedStore(
|
142
|
+
[useMessage, useEditComposer],
|
143
|
+
(m, c) => m.message.role !== "user" || c.isEditing
|
144
|
+
);
|
145
|
+
const callback = (0, import_react5.useCallback)(() => {
|
146
|
+
const { edit } = useEditComposer.getState();
|
147
|
+
edit();
|
148
|
+
}, [useEditComposer]);
|
149
|
+
if (disabled) return null;
|
150
|
+
return callback;
|
151
|
+
};
|
152
|
+
|
153
|
+
// src/primitive-hooks/actionBar/useActionBarReload.tsx
|
154
|
+
var import_react7 = require("react");
|
155
|
+
|
156
|
+
// src/context/react/ThreadContext.ts
|
157
|
+
var import_react6 = require("react");
|
158
|
+
var ThreadContext = (0, import_react6.createContext)(null);
|
127
159
|
var useThreadContext = () => {
|
128
|
-
const context = (0,
|
160
|
+
const context = (0, import_react6.useContext)(ThreadContext);
|
129
161
|
if (!context)
|
130
162
|
throw new Error(
|
131
163
|
"This component must be used within an AssistantRuntimeProvider."
|
@@ -133,15 +165,15 @@ var useThreadContext = () => {
|
|
133
165
|
return context;
|
134
166
|
};
|
135
167
|
|
136
|
-
// src/
|
137
|
-
var
|
168
|
+
// src/primitive-hooks/actionBar/useActionBarReload.tsx
|
169
|
+
var useActionBarReload = () => {
|
138
170
|
const { useThread, useThreadActions, useViewport } = useThreadContext();
|
139
171
|
const { useMessage } = useMessageContext();
|
140
172
|
const disabled = useCombinedStore(
|
141
173
|
[useThread, useMessage],
|
142
174
|
(t, m) => t.isRunning || m.message.role !== "assistant"
|
143
175
|
);
|
144
|
-
const callback = (0,
|
176
|
+
const callback = (0, import_react7.useCallback)(() => {
|
145
177
|
const { parentId } = useMessage.getState();
|
146
178
|
useThreadActions.getState().startRun(parentId);
|
147
179
|
useViewport.getState().scrollToBottom();
|
@@ -150,29 +182,20 @@ var useReloadMessage = () => {
|
|
150
182
|
return callback;
|
151
183
|
};
|
152
184
|
|
153
|
-
// src/
|
154
|
-
var
|
155
|
-
|
156
|
-
const
|
157
|
-
|
158
|
-
[useMessage, useComposer],
|
159
|
-
(m, c) => m.message.role !== "user" || c.isEditing
|
160
|
-
);
|
161
|
-
const callback = (0, import_react7.useCallback)(() => {
|
162
|
-
const { edit } = useComposer.getState();
|
163
|
-
edit();
|
164
|
-
}, [useComposer]);
|
165
|
-
if (disabled) return null;
|
166
|
-
return callback;
|
185
|
+
// src/primitive-hooks/branchPicker/useBranchPickerCount.tsx
|
186
|
+
var useBranchPickerCount = () => {
|
187
|
+
const { useMessage } = useMessageContext();
|
188
|
+
const branchCount = useMessage((s) => s.branches.length);
|
189
|
+
return branchCount;
|
167
190
|
};
|
168
191
|
|
169
|
-
// src/
|
192
|
+
// src/primitive-hooks/branchPicker/useBranchPickerNext.tsx
|
170
193
|
var import_react8 = require("react");
|
171
|
-
var
|
194
|
+
var useBranchPickerNext = () => {
|
172
195
|
const { useThreadActions } = useThreadContext();
|
173
|
-
const { useMessage,
|
196
|
+
const { useMessage, useEditComposer } = useMessageContext();
|
174
197
|
const disabled = useCombinedStore(
|
175
|
-
[useMessage,
|
198
|
+
[useMessage, useEditComposer],
|
176
199
|
(m, c) => c.isEditing || m.branches.indexOf(m.message.id) + 1 >= m.branches.length
|
177
200
|
);
|
178
201
|
const callback = (0, import_react8.useCallback)(() => {
|
@@ -183,13 +206,20 @@ var useGoToNextBranch = () => {
|
|
183
206
|
return callback;
|
184
207
|
};
|
185
208
|
|
186
|
-
// src/
|
209
|
+
// src/primitive-hooks/branchPicker/useBranchPickerNumber.tsx
|
210
|
+
var useBranchPickerNumber = () => {
|
211
|
+
const { useMessage } = useMessageContext();
|
212
|
+
const branchIdx = useMessage((s) => s.branches.indexOf(s.message.id));
|
213
|
+
return branchIdx + 1;
|
214
|
+
};
|
215
|
+
|
216
|
+
// src/primitive-hooks/branchPicker/useBranchPickerPrevious.tsx
|
187
217
|
var import_react9 = require("react");
|
188
|
-
var
|
218
|
+
var useBranchPickerPrevious = () => {
|
189
219
|
const { useThreadActions } = useThreadContext();
|
190
|
-
const { useMessage,
|
220
|
+
const { useMessage, useEditComposer } = useMessageContext();
|
191
221
|
const disabled = useCombinedStore(
|
192
|
-
[useMessage,
|
222
|
+
[useMessage, useEditComposer],
|
193
223
|
(m, c) => c.isEditing || m.branches.indexOf(m.message.id) <= 0
|
194
224
|
);
|
195
225
|
const callback = (0, import_react9.useCallback)(() => {
|
@@ -200,6 +230,203 @@ var useGoToPreviousBranch = () => {
|
|
200
230
|
return callback;
|
201
231
|
};
|
202
232
|
|
233
|
+
// src/primitive-hooks/composer/useComposerCancel.tsx
|
234
|
+
var import_react13 = require("react");
|
235
|
+
|
236
|
+
// src/context/react/AssistantContext.ts
|
237
|
+
var import_react10 = require("react");
|
238
|
+
var AssistantContext = (0, import_react10.createContext)(
|
239
|
+
null
|
240
|
+
);
|
241
|
+
var useAssistantContext = () => {
|
242
|
+
const context = (0, import_react10.useContext)(AssistantContext);
|
243
|
+
if (!context)
|
244
|
+
throw new Error(
|
245
|
+
"This component must be used within an AssistantRuntimeProvider."
|
246
|
+
);
|
247
|
+
return context;
|
248
|
+
};
|
249
|
+
|
250
|
+
// src/context/react/ComposerContext.ts
|
251
|
+
var import_react11 = require("react");
|
252
|
+
var useComposerContext = () => {
|
253
|
+
const { useComposer } = useThreadContext();
|
254
|
+
const { useEditComposer } = (0, import_react11.useContext)(MessageContext) ?? {};
|
255
|
+
return (0, import_react11.useMemo)(
|
256
|
+
() => ({
|
257
|
+
useComposer: useEditComposer ?? useComposer,
|
258
|
+
type: useEditComposer ? "edit" : "new"
|
259
|
+
}),
|
260
|
+
[useEditComposer, useComposer]
|
261
|
+
);
|
262
|
+
};
|
263
|
+
|
264
|
+
// src/context/react/ContentPartContext.ts
|
265
|
+
var import_react12 = require("react");
|
266
|
+
var ContentPartContext = (0, import_react12.createContext)(
|
267
|
+
null
|
268
|
+
);
|
269
|
+
var useContentPartContext = () => {
|
270
|
+
const context = (0, import_react12.useContext)(ContentPartContext);
|
271
|
+
if (!context)
|
272
|
+
throw new Error(
|
273
|
+
"This component can only be used inside a component passed to <MessagePrimitive.Content components={...} >."
|
274
|
+
);
|
275
|
+
return context;
|
276
|
+
};
|
277
|
+
|
278
|
+
// src/primitive-hooks/composer/useComposerCancel.tsx
|
279
|
+
var useComposerCancel = () => {
|
280
|
+
const { useComposer } = useComposerContext();
|
281
|
+
const disabled = useComposer((c) => !c.isEditing);
|
282
|
+
const callback = (0, import_react13.useCallback)(() => {
|
283
|
+
const { cancel } = useComposer.getState();
|
284
|
+
cancel();
|
285
|
+
}, [useComposer]);
|
286
|
+
if (disabled) return null;
|
287
|
+
return callback;
|
288
|
+
};
|
289
|
+
|
290
|
+
// src/primitive-hooks/composer/useComposerIf.tsx
|
291
|
+
var useComposerIf = (props) => {
|
292
|
+
const { useComposer } = useComposerContext();
|
293
|
+
return useComposer((composer) => {
|
294
|
+
if (props.editing === true && !composer.isEditing) return false;
|
295
|
+
if (props.editing === false && composer.isEditing) return false;
|
296
|
+
return true;
|
297
|
+
});
|
298
|
+
};
|
299
|
+
|
300
|
+
// src/primitive-hooks/composer/useComposerSend.tsx
|
301
|
+
var import_react14 = require("react");
|
302
|
+
var useComposerSend = () => {
|
303
|
+
const { useComposer } = useComposerContext();
|
304
|
+
const disabled = useComposer((c) => !c.isEditing || c.value.length === 0);
|
305
|
+
const callback = (0, import_react14.useCallback)(() => {
|
306
|
+
const { send } = useComposer.getState();
|
307
|
+
send();
|
308
|
+
}, [useComposer]);
|
309
|
+
if (disabled) return null;
|
310
|
+
return callback;
|
311
|
+
};
|
312
|
+
|
313
|
+
// src/primitive-hooks/contentPart/useContentPartDisplay.tsx
|
314
|
+
var useContentPartDisplay = () => {
|
315
|
+
const { useContentPart } = useContentPartContext();
|
316
|
+
const display = useContentPart((c) => {
|
317
|
+
if (c.part.type !== "ui")
|
318
|
+
throw new Error(
|
319
|
+
"This component can only be used inside ui content parts."
|
320
|
+
);
|
321
|
+
return c.part.display;
|
322
|
+
});
|
323
|
+
return display;
|
324
|
+
};
|
325
|
+
|
326
|
+
// src/primitive-hooks/contentPart/useContentPartImage.tsx
|
327
|
+
var useContentPartImage = () => {
|
328
|
+
const { useContentPart } = useContentPartContext();
|
329
|
+
const image = useContentPart((c) => {
|
330
|
+
if (c.part.type !== "image")
|
331
|
+
throw new Error(
|
332
|
+
"ContentPartImage can only be used inside image content parts."
|
333
|
+
);
|
334
|
+
return c.part.image;
|
335
|
+
});
|
336
|
+
return image;
|
337
|
+
};
|
338
|
+
|
339
|
+
// src/primitive-hooks/contentPart/useContentPartInProgressIndicator.tsx
|
340
|
+
var useContentPartInProgressIndicator = () => {
|
341
|
+
const { useMessageUtils } = useMessageContext();
|
342
|
+
const { useContentPart } = useContentPartContext();
|
343
|
+
const indicator = useCombinedStore(
|
344
|
+
[useMessageUtils, useContentPart],
|
345
|
+
(m, c) => c.status === "in_progress" ? m.inProgressIndicator : null
|
346
|
+
);
|
347
|
+
return indicator;
|
348
|
+
};
|
349
|
+
|
350
|
+
// src/primitive-hooks/contentPart/useContentPartText.tsx
|
351
|
+
var useContentPartText = () => {
|
352
|
+
const { useContentPart } = useContentPartContext();
|
353
|
+
const text = useContentPart((c) => {
|
354
|
+
if (c.part.type !== "text")
|
355
|
+
throw new Error(
|
356
|
+
"ContentPartText can only be used inside text content parts."
|
357
|
+
);
|
358
|
+
return c.part.text;
|
359
|
+
});
|
360
|
+
return text;
|
361
|
+
};
|
362
|
+
|
363
|
+
// src/primitive-hooks/message/useMessageIf.tsx
|
364
|
+
var useMessageIf = (props) => {
|
365
|
+
const { useMessage, useMessageUtils } = useMessageContext();
|
366
|
+
return useCombinedStore(
|
367
|
+
[useMessage, useMessageUtils],
|
368
|
+
({ message, branches, isLast }, { isCopied, isHovering }) => {
|
369
|
+
if (props.hasBranches === true && branches.length < 2) return false;
|
370
|
+
if (props.user && message.role !== "user") return false;
|
371
|
+
if (props.assistant && message.role !== "assistant") return false;
|
372
|
+
if (props.lastOrHover === true && !isHovering && !isLast) return false;
|
373
|
+
if (props.copied === true && !isCopied) return false;
|
374
|
+
if (props.copied === false && isCopied) return false;
|
375
|
+
return true;
|
376
|
+
}
|
377
|
+
);
|
378
|
+
};
|
379
|
+
|
380
|
+
// src/primitive-hooks/thread/useThreadIf.tsx
|
381
|
+
var useThreadIf = (props) => {
|
382
|
+
const { useThread } = useThreadContext();
|
383
|
+
return useThread((thread) => {
|
384
|
+
if (props.empty === true && thread.messages.length !== 0) return false;
|
385
|
+
if (props.empty === false && thread.messages.length === 0) return false;
|
386
|
+
if (props.running === true && !thread.isRunning) return false;
|
387
|
+
if (props.running === false && thread.isRunning) return false;
|
388
|
+
return true;
|
389
|
+
});
|
390
|
+
};
|
391
|
+
|
392
|
+
// src/primitive-hooks/thread/useThreadEmpty.tsx
|
393
|
+
var useThreadEmpty = () => {
|
394
|
+
return useThreadIf({ empty: true });
|
395
|
+
};
|
396
|
+
|
397
|
+
// src/primitive-hooks/thread/useThreadScrollToBottom.tsx
|
398
|
+
var import_react15 = require("react");
|
399
|
+
var useThreadScrollToBottom = () => {
|
400
|
+
const { useViewport } = useThreadContext();
|
401
|
+
const isAtBottom = useViewport((s) => s.isAtBottom);
|
402
|
+
const handleScrollToBottom = (0, import_react15.useCallback)(() => {
|
403
|
+
const { scrollToBottom } = useViewport.getState();
|
404
|
+
scrollToBottom();
|
405
|
+
}, [useViewport]);
|
406
|
+
if (isAtBottom) return null;
|
407
|
+
return handleScrollToBottom;
|
408
|
+
};
|
409
|
+
|
410
|
+
// src/primitive-hooks/thread/useThreadSuggestion.tsx
|
411
|
+
var import_react16 = require("react");
|
412
|
+
var useThreadSuggestion = ({
|
413
|
+
prompt,
|
414
|
+
autoSend
|
415
|
+
}) => {
|
416
|
+
const { useThread, useComposer } = useThreadContext();
|
417
|
+
const disabled = useThread((t) => t.isRunning);
|
418
|
+
const callback = (0, import_react16.useCallback)(() => {
|
419
|
+
const thread = useThread.getState();
|
420
|
+
const composer = useComposer.getState();
|
421
|
+
composer.setValue(prompt);
|
422
|
+
if (autoSend && !thread.isRunning) {
|
423
|
+
composer.send();
|
424
|
+
}
|
425
|
+
}, [useThread, useComposer, prompt, autoSend]);
|
426
|
+
if (disabled) return null;
|
427
|
+
return callback;
|
428
|
+
};
|
429
|
+
|
203
430
|
// src/primitives/thread/index.ts
|
204
431
|
var thread_exports = {};
|
205
432
|
__export(thread_exports, {
|
@@ -214,9 +441,9 @@ __export(thread_exports, {
|
|
214
441
|
|
215
442
|
// src/primitives/thread/ThreadRoot.tsx
|
216
443
|
var import_react_primitive = require("@radix-ui/react-primitive");
|
217
|
-
var
|
444
|
+
var import_react17 = require("react");
|
218
445
|
var import_jsx_runtime = require("react/jsx-runtime");
|
219
|
-
var ThreadRoot = (0,
|
446
|
+
var ThreadRoot = (0, import_react17.forwardRef)(
|
220
447
|
(props, ref) => {
|
221
448
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react_primitive.Primitive.div, { ...props, ref });
|
222
449
|
}
|
@@ -224,16 +451,6 @@ var ThreadRoot = (0, import_react10.forwardRef)(
|
|
224
451
|
ThreadRoot.displayName = "ThreadRoot";
|
225
452
|
|
226
453
|
// src/primitives/thread/ThreadIf.tsx
|
227
|
-
var useThreadIf = (props) => {
|
228
|
-
const { useThread } = useThreadContext();
|
229
|
-
return useThread((thread) => {
|
230
|
-
if (props.empty === true && thread.messages.length !== 0) return false;
|
231
|
-
if (props.empty === false && thread.messages.length === 0) return false;
|
232
|
-
if (props.running === true && !thread.isRunning) return false;
|
233
|
-
if (props.running === false && thread.isRunning) return false;
|
234
|
-
return true;
|
235
|
-
});
|
236
|
-
};
|
237
454
|
var ThreadIf = ({ children, ...query }) => {
|
238
455
|
const result = useThreadIf(query);
|
239
456
|
return result ? children : null;
|
@@ -249,15 +466,15 @@ var ThreadEmpty = ({ children }) => {
|
|
249
466
|
var import_primitive = require("@radix-ui/primitive");
|
250
467
|
var import_react_compose_refs = require("@radix-ui/react-compose-refs");
|
251
468
|
var import_react_primitive2 = require("@radix-ui/react-primitive");
|
252
|
-
var
|
469
|
+
var import_react20 = require("react");
|
253
470
|
|
254
471
|
// src/utils/hooks/useOnResizeContent.tsx
|
255
472
|
var import_react_use_callback_ref = require("@radix-ui/react-use-callback-ref");
|
256
|
-
var
|
473
|
+
var import_react18 = require("react");
|
257
474
|
var useOnResizeContent = (ref, callback) => {
|
258
475
|
const callbackRef = (0, import_react_use_callback_ref.useCallbackRef)(callback);
|
259
|
-
|
260
|
-
|
476
|
+
(0, import_react18.useEffect)(() => {
|
477
|
+
const el = ref.current;
|
261
478
|
if (!el) return;
|
262
479
|
const resizeObserver = new ResizeObserver(() => {
|
263
480
|
callbackRef();
|
@@ -286,16 +503,16 @@ var useOnResizeContent = (ref, callback) => {
|
|
286
503
|
resizeObserver.disconnect();
|
287
504
|
mutationObserver.disconnect();
|
288
505
|
};
|
289
|
-
}, [
|
506
|
+
}, [ref, callbackRef]);
|
290
507
|
};
|
291
508
|
|
292
509
|
// src/utils/hooks/useOnScrollToBottom.tsx
|
293
510
|
var import_react_use_callback_ref2 = require("@radix-ui/react-use-callback-ref");
|
294
|
-
var
|
511
|
+
var import_react19 = require("react");
|
295
512
|
var useOnScrollToBottom = (callback) => {
|
296
513
|
const callbackRef = (0, import_react_use_callback_ref2.useCallbackRef)(callback);
|
297
514
|
const { useViewport } = useThreadContext();
|
298
|
-
(0,
|
515
|
+
(0, import_react19.useEffect)(() => {
|
299
516
|
return useViewport.getState().onScrollToBottom(() => {
|
300
517
|
callbackRef();
|
301
518
|
});
|
@@ -304,14 +521,14 @@ var useOnScrollToBottom = (callback) => {
|
|
304
521
|
|
305
522
|
// src/primitives/thread/ThreadViewport.tsx
|
306
523
|
var import_jsx_runtime3 = require("react/jsx-runtime");
|
307
|
-
var ThreadViewport = (0,
|
308
|
-
const messagesEndRef = (0,
|
309
|
-
const divRef = (0,
|
524
|
+
var ThreadViewport = (0, import_react20.forwardRef)(({ autoScroll = true, onScroll, children, ...rest }, forwardedRef) => {
|
525
|
+
const messagesEndRef = (0, import_react20.useRef)(null);
|
526
|
+
const divRef = (0, import_react20.useRef)(null);
|
310
527
|
const ref = (0, import_react_compose_refs.useComposedRefs)(forwardedRef, divRef);
|
311
528
|
const { useViewport } = useThreadContext();
|
312
|
-
const firstRenderRef = (0,
|
313
|
-
const isScrollingToBottomRef = (0,
|
314
|
-
const lastScrollTop = (0,
|
529
|
+
const firstRenderRef = (0, import_react20.useRef)(true);
|
530
|
+
const isScrollingToBottomRef = (0, import_react20.useRef)(false);
|
531
|
+
const lastScrollTop = (0, import_react20.useRef)(0);
|
315
532
|
const scrollToBottom = () => {
|
316
533
|
const div = messagesEndRef.current;
|
317
534
|
if (!div || !autoScroll) return;
|
@@ -360,13 +577,13 @@ var ThreadViewport = (0, import_react13.forwardRef)(({ autoScroll = true, onScro
|
|
360
577
|
ThreadViewport.displayName = "ThreadViewport";
|
361
578
|
|
362
579
|
// src/primitives/thread/ThreadMessages.tsx
|
363
|
-
var
|
580
|
+
var import_react22 = require("react");
|
364
581
|
|
365
582
|
// src/context/providers/MessageProvider.tsx
|
366
|
-
var
|
583
|
+
var import_react21 = require("react");
|
367
584
|
var import_zustand3 = require("zustand");
|
368
585
|
|
369
|
-
// src/context/stores/
|
586
|
+
// src/context/stores/EditComposer.ts
|
370
587
|
var import_zustand = require("zustand");
|
371
588
|
|
372
589
|
// src/context/stores/BaseComposer.ts
|
@@ -377,7 +594,7 @@ var makeBaseComposer = (set) => ({
|
|
377
594
|
}
|
378
595
|
});
|
379
596
|
|
380
|
-
// src/context/stores/
|
597
|
+
// src/context/stores/EditComposer.ts
|
381
598
|
var makeEditComposerStore = ({
|
382
599
|
onEdit,
|
383
600
|
onSend
|
@@ -440,10 +657,10 @@ var syncMessage = (thread, getBranches, useMessage, messageIndex) => {
|
|
440
657
|
};
|
441
658
|
var useMessageContext2 = (messageIndex) => {
|
442
659
|
const { useThread, useThreadActions } = useThreadContext();
|
443
|
-
const [context] = (0,
|
660
|
+
const [context] = (0, import_react21.useState)(() => {
|
444
661
|
const useMessage = (0, import_zustand3.create)(() => ({}));
|
445
662
|
const useMessageUtils = makeMessageUtilsStore();
|
446
|
-
const
|
663
|
+
const useEditComposer = makeEditComposerStore({
|
447
664
|
onEdit: () => {
|
448
665
|
const message = useMessage.getState().message;
|
449
666
|
if (message.role !== "user")
|
@@ -474,9 +691,9 @@ var useMessageContext2 = (messageIndex) => {
|
|
474
691
|
useMessage,
|
475
692
|
messageIndex
|
476
693
|
);
|
477
|
-
return { useMessage, useMessageUtils,
|
694
|
+
return { useMessage, useMessageUtils, useEditComposer };
|
478
695
|
});
|
479
|
-
(0,
|
696
|
+
(0, import_react21.useEffect)(() => {
|
480
697
|
return useThread.subscribe((thread) => {
|
481
698
|
syncMessage(
|
482
699
|
thread,
|
@@ -496,50 +713,13 @@ var MessageProvider = ({
|
|
496
713
|
return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(MessageContext.Provider, { value: context, children });
|
497
714
|
};
|
498
715
|
|
499
|
-
// src/context/ComposerContext.ts
|
500
|
-
var import_react15 = require("react");
|
501
|
-
var useComposerContext = () => {
|
502
|
-
const { useComposer } = useThreadContext();
|
503
|
-
const { useComposer: useEditComposer } = (0, import_react15.useContext)(MessageContext) ?? {};
|
504
|
-
return (0, import_react15.useMemo)(
|
505
|
-
() => ({
|
506
|
-
useComposer: useEditComposer ?? useComposer,
|
507
|
-
type: useEditComposer ? "edit" : "new"
|
508
|
-
}),
|
509
|
-
[useEditComposer, useComposer]
|
510
|
-
);
|
511
|
-
};
|
512
|
-
|
513
716
|
// src/primitives/composer/ComposerIf.tsx
|
514
|
-
var useComposerIf = (props) => {
|
515
|
-
const { useComposer } = useComposerContext();
|
516
|
-
return useComposer((composer) => {
|
517
|
-
if (props.editing === true && !composer.isEditing) return false;
|
518
|
-
if (props.editing === false && composer.isEditing) return false;
|
519
|
-
return true;
|
520
|
-
});
|
521
|
-
};
|
522
717
|
var ComposerIf = ({ children, ...query }) => {
|
523
718
|
const result = useComposerIf(query);
|
524
719
|
return result ? children : null;
|
525
720
|
};
|
526
721
|
|
527
722
|
// src/primitives/message/MessageIf.tsx
|
528
|
-
var useMessageIf = (props) => {
|
529
|
-
const { useMessage, useMessageUtils } = useMessageContext();
|
530
|
-
return useCombinedStore(
|
531
|
-
[useMessage, useMessageUtils],
|
532
|
-
({ message, branches, isLast }, { isCopied, isHovering }) => {
|
533
|
-
if (props.hasBranches === true && branches.length < 2) return false;
|
534
|
-
if (props.user && message.role !== "user") return false;
|
535
|
-
if (props.assistant && message.role !== "assistant") return false;
|
536
|
-
if (props.lastOrHover === true && !isHovering && !isLast) return false;
|
537
|
-
if (props.copied === true && !isCopied) return false;
|
538
|
-
if (props.copied === false && isCopied) return false;
|
539
|
-
return true;
|
540
|
-
}
|
541
|
-
);
|
542
|
-
};
|
543
723
|
var MessageIf = ({ children, ...query }) => {
|
544
724
|
const result = useMessageIf(query);
|
545
725
|
return result ? children : null;
|
@@ -567,7 +747,7 @@ var ThreadMessageImpl = ({
|
|
567
747
|
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(MessageIf, { assistant: true, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(AssistantMessage, {}) })
|
568
748
|
] });
|
569
749
|
};
|
570
|
-
var ThreadMessage = (0,
|
750
|
+
var ThreadMessage = (0, import_react22.memo)(
|
571
751
|
ThreadMessageImpl,
|
572
752
|
(prev, next) => prev.messageIndex === next.messageIndex && prev.components.UserMessage === next.components.UserMessage && prev.components.EditComposer === next.components.EditComposer && prev.components.AssistantMessage === next.components.AssistantMessage
|
573
753
|
);
|
@@ -588,56 +768,42 @@ var ThreadMessages = ({ components }) => {
|
|
588
768
|
});
|
589
769
|
};
|
590
770
|
|
591
|
-
// src/
|
771
|
+
// src/utils/createActionButton.tsx
|
592
772
|
var import_primitive2 = require("@radix-ui/primitive");
|
593
773
|
var import_react_primitive3 = require("@radix-ui/react-primitive");
|
594
|
-
var
|
774
|
+
var import_react23 = require("react");
|
595
775
|
var import_jsx_runtime6 = require("react/jsx-runtime");
|
596
|
-
var
|
597
|
-
const
|
598
|
-
|
599
|
-
|
600
|
-
|
601
|
-
|
602
|
-
|
603
|
-
|
604
|
-
|
605
|
-
|
606
|
-
|
607
|
-
|
608
|
-
|
609
|
-
|
610
|
-
|
611
|
-
});
|
612
|
-
|
776
|
+
var createActionButton = (displayName, useActionButton) => {
|
777
|
+
const ActionButton = (0, import_react23.forwardRef)((props, forwardedRef) => {
|
778
|
+
const callback = useActionButton(props);
|
779
|
+
return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
|
780
|
+
import_react_primitive3.Primitive.button,
|
781
|
+
{
|
782
|
+
type: "button",
|
783
|
+
disabled: !callback,
|
784
|
+
...props,
|
785
|
+
ref: forwardedRef,
|
786
|
+
onClick: (0, import_primitive2.composeEventHandlers)(props.onClick, () => {
|
787
|
+
callback?.();
|
788
|
+
})
|
789
|
+
}
|
790
|
+
);
|
791
|
+
});
|
792
|
+
ActionButton.displayName = displayName;
|
793
|
+
return ActionButton;
|
794
|
+
};
|
795
|
+
|
796
|
+
// src/primitives/thread/ThreadScrollToBottom.tsx
|
797
|
+
var ThreadScrollToBottom = createActionButton(
|
798
|
+
"ThreadScrollToBottom",
|
799
|
+
useThreadScrollToBottom
|
800
|
+
);
|
613
801
|
|
614
802
|
// src/primitives/thread/ThreadSuggestion.tsx
|
615
|
-
var
|
616
|
-
|
617
|
-
|
618
|
-
|
619
|
-
var ThreadSuggestion = (0, import_react18.forwardRef)(({ onClick, prompt, method, autoSend: send, ...rest }, ref) => {
|
620
|
-
const { useThread, useComposer } = useThreadContext();
|
621
|
-
const isDisabled = useThread((t) => t.isRunning);
|
622
|
-
const handleApplySuggestion = () => {
|
623
|
-
const thread = useThread.getState();
|
624
|
-
const composer = useComposer.getState();
|
625
|
-
composer.setValue(prompt);
|
626
|
-
if (send && !thread.isRunning) {
|
627
|
-
composer.send();
|
628
|
-
}
|
629
|
-
};
|
630
|
-
return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
|
631
|
-
import_react_primitive4.Primitive.button,
|
632
|
-
{
|
633
|
-
...rest,
|
634
|
-
disabled: isDisabled,
|
635
|
-
ref,
|
636
|
-
onClick: (0, import_primitive3.composeEventHandlers)(onClick, handleApplySuggestion)
|
637
|
-
}
|
638
|
-
);
|
639
|
-
});
|
640
|
-
ThreadSuggestion.displayName = "ThreadSuggestion";
|
803
|
+
var ThreadSuggestion = createActionButton(
|
804
|
+
"ThreadSuggestion",
|
805
|
+
useThreadSuggestion
|
806
|
+
);
|
641
807
|
|
642
808
|
// src/primitives/composer/index.ts
|
643
809
|
var composer_exports = {};
|
@@ -650,16 +816,16 @@ __export(composer_exports, {
|
|
650
816
|
});
|
651
817
|
|
652
818
|
// src/primitives/composer/ComposerRoot.tsx
|
653
|
-
var
|
819
|
+
var import_primitive3 = require("@radix-ui/primitive");
|
654
820
|
var import_react_compose_refs2 = require("@radix-ui/react-compose-refs");
|
655
|
-
var
|
656
|
-
var
|
657
|
-
var
|
658
|
-
var ComposerRoot = (0,
|
821
|
+
var import_react_primitive4 = require("@radix-ui/react-primitive");
|
822
|
+
var import_react24 = require("react");
|
823
|
+
var import_jsx_runtime7 = require("react/jsx-runtime");
|
824
|
+
var ComposerRoot = (0, import_react24.forwardRef)(
|
659
825
|
({ onSubmit, ...rest }, forwardedRef) => {
|
660
826
|
const { useViewport } = useThreadContext();
|
661
827
|
const { useComposer } = useComposerContext();
|
662
|
-
const formRef = (0,
|
828
|
+
const formRef = (0, import_react24.useRef)(null);
|
663
829
|
const ref = (0, import_react_compose_refs2.useComposedRefs)(forwardedRef, formRef);
|
664
830
|
const handleSubmit = (e) => {
|
665
831
|
const composerState = useComposer.getState();
|
@@ -668,12 +834,12 @@ var ComposerRoot = (0, import_react19.forwardRef)(
|
|
668
834
|
composerState.send();
|
669
835
|
useViewport.getState().scrollToBottom();
|
670
836
|
};
|
671
|
-
return /* @__PURE__ */ (0,
|
672
|
-
|
837
|
+
return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
|
838
|
+
import_react_primitive4.Primitive.form,
|
673
839
|
{
|
674
840
|
...rest,
|
675
841
|
ref,
|
676
|
-
onSubmit: (0,
|
842
|
+
onSubmit: (0, import_primitive3.composeEventHandlers)(onSubmit, handleSubmit)
|
677
843
|
}
|
678
844
|
);
|
679
845
|
}
|
@@ -681,13 +847,13 @@ var ComposerRoot = (0, import_react19.forwardRef)(
|
|
681
847
|
ComposerRoot.displayName = "ComposerRoot";
|
682
848
|
|
683
849
|
// src/primitives/composer/ComposerInput.tsx
|
684
|
-
var
|
850
|
+
var import_primitive4 = require("@radix-ui/primitive");
|
685
851
|
var import_react_compose_refs3 = require("@radix-ui/react-compose-refs");
|
686
852
|
var import_react_slot = require("@radix-ui/react-slot");
|
687
|
-
var
|
853
|
+
var import_react25 = require("react");
|
688
854
|
var import_react_textarea_autosize = __toESM(require("react-textarea-autosize"));
|
689
|
-
var
|
690
|
-
var ComposerInput = (0,
|
855
|
+
var import_jsx_runtime8 = require("react/jsx-runtime");
|
856
|
+
var ComposerInput = (0, import_react25.forwardRef)(
|
691
857
|
({ autoFocus = false, asChild, disabled, onChange, onKeyDown, ...rest }, forwardedRef) => {
|
692
858
|
const { useThread } = useThreadContext();
|
693
859
|
const { useComposer, type } = useComposerContext();
|
@@ -696,7 +862,7 @@ var ComposerInput = (0, import_react20.forwardRef)(
|
|
696
862
|
return c.value;
|
697
863
|
});
|
698
864
|
const Component = asChild ? import_react_slot.Slot : import_react_textarea_autosize.default;
|
699
|
-
const textareaRef = (0,
|
865
|
+
const textareaRef = (0, import_react25.useRef)(null);
|
700
866
|
const ref = (0, import_react_compose_refs3.useComposedRefs)(forwardedRef, textareaRef);
|
701
867
|
const handleKeyPress = (e) => {
|
702
868
|
if (disabled) return;
|
@@ -714,23 +880,22 @@ var ComposerInput = (0, import_react20.forwardRef)(
|
|
714
880
|
}
|
715
881
|
};
|
716
882
|
const autoFocusEnabled = autoFocus && !disabled;
|
717
|
-
const focus = (0,
|
883
|
+
const focus = (0, import_react25.useCallback)(() => {
|
718
884
|
const textarea = textareaRef.current;
|
719
885
|
if (!textarea || !autoFocusEnabled) return;
|
720
|
-
console.log("focus");
|
721
886
|
textarea.focus();
|
722
887
|
textarea.setSelectionRange(
|
723
888
|
textareaRef.current.value.length,
|
724
889
|
textareaRef.current.value.length
|
725
890
|
);
|
726
891
|
}, [autoFocusEnabled]);
|
727
|
-
(0,
|
892
|
+
(0, import_react25.useEffect)(() => focus(), [focus]);
|
728
893
|
useOnScrollToBottom(() => {
|
729
894
|
if (type === "new") {
|
730
895
|
focus();
|
731
896
|
}
|
732
897
|
});
|
733
|
-
return /* @__PURE__ */ (0,
|
898
|
+
return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
|
734
899
|
Component,
|
735
900
|
{
|
736
901
|
value,
|
@@ -738,12 +903,12 @@ var ComposerInput = (0, import_react20.forwardRef)(
|
|
738
903
|
ref,
|
739
904
|
autoFocus,
|
740
905
|
disabled,
|
741
|
-
onChange: (0,
|
906
|
+
onChange: (0, import_primitive4.composeEventHandlers)(onChange, (e) => {
|
742
907
|
const composerState = useComposer.getState();
|
743
908
|
if (!composerState.isEditing) return;
|
744
909
|
return composerState.setValue(e.target.value);
|
745
910
|
}),
|
746
|
-
onKeyDown: (0,
|
911
|
+
onKeyDown: (0, import_primitive4.composeEventHandlers)(onKeyDown, handleKeyPress)
|
747
912
|
}
|
748
913
|
);
|
749
914
|
}
|
@@ -751,47 +916,13 @@ var ComposerInput = (0, import_react20.forwardRef)(
|
|
751
916
|
ComposerInput.displayName = "ComposerInput";
|
752
917
|
|
753
918
|
// src/primitives/composer/ComposerSend.tsx
|
754
|
-
var
|
755
|
-
var import_react21 = require("react");
|
756
|
-
var import_jsx_runtime10 = require("react/jsx-runtime");
|
757
|
-
var ComposerSend = (0, import_react21.forwardRef)(
|
758
|
-
({ disabled, ...rest }, ref) => {
|
759
|
-
const { useComposer } = useComposerContext();
|
760
|
-
const hasValue = useComposer((c) => c.isEditing && c.value.length > 0);
|
761
|
-
return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
762
|
-
import_react_primitive6.Primitive.button,
|
763
|
-
{
|
764
|
-
type: "submit",
|
765
|
-
...rest,
|
766
|
-
ref,
|
767
|
-
disabled: disabled || !hasValue
|
768
|
-
}
|
769
|
-
);
|
770
|
-
}
|
771
|
-
);
|
772
|
-
ComposerSend.displayName = "ComposerSend";
|
919
|
+
var ComposerSend = createActionButton("ComposerSend", useComposerSend);
|
773
920
|
|
774
921
|
// src/primitives/composer/ComposerCancel.tsx
|
775
|
-
var
|
776
|
-
|
777
|
-
|
778
|
-
|
779
|
-
var ComposerCancel = (0, import_react22.forwardRef)(({ onClick, ...rest }, ref) => {
|
780
|
-
const { useComposer } = useComposerContext();
|
781
|
-
const handleCancel = () => {
|
782
|
-
useComposer.getState().cancel();
|
783
|
-
};
|
784
|
-
return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
|
785
|
-
import_react_primitive7.Primitive.button,
|
786
|
-
{
|
787
|
-
type: "button",
|
788
|
-
...rest,
|
789
|
-
ref,
|
790
|
-
onClick: (0, import_primitive6.composeEventHandlers)(onClick, handleCancel)
|
791
|
-
}
|
792
|
-
);
|
793
|
-
});
|
794
|
-
ComposerCancel.displayName = "ComposerCancel";
|
922
|
+
var ComposerCancel = createActionButton(
|
923
|
+
"ComposerCancel",
|
924
|
+
useComposerCancel
|
925
|
+
);
|
795
926
|
|
796
927
|
// src/primitives/message/index.ts
|
797
928
|
var message_exports = {};
|
@@ -803,11 +934,11 @@ __export(message_exports, {
|
|
803
934
|
});
|
804
935
|
|
805
936
|
// src/primitives/message/MessageRoot.tsx
|
806
|
-
var
|
807
|
-
var
|
808
|
-
var
|
809
|
-
var
|
810
|
-
var MessageRoot = (0,
|
937
|
+
var import_primitive5 = require("@radix-ui/primitive");
|
938
|
+
var import_react_primitive5 = require("@radix-ui/react-primitive");
|
939
|
+
var import_react26 = require("react");
|
940
|
+
var import_jsx_runtime9 = require("react/jsx-runtime");
|
941
|
+
var MessageRoot = (0, import_react26.forwardRef)(
|
811
942
|
({ onMouseEnter, onMouseLeave, ...rest }, ref) => {
|
812
943
|
const { useMessageUtils } = useMessageContext();
|
813
944
|
const setIsHovering = useMessageUtils((s) => s.setIsHovering);
|
@@ -817,13 +948,13 @@ var MessageRoot = (0, import_react23.forwardRef)(
|
|
817
948
|
const handleMouseLeave = () => {
|
818
949
|
setIsHovering(false);
|
819
950
|
};
|
820
|
-
return /* @__PURE__ */ (0,
|
821
|
-
|
951
|
+
return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
|
952
|
+
import_react_primitive5.Primitive.div,
|
822
953
|
{
|
823
954
|
...rest,
|
824
955
|
ref,
|
825
|
-
onMouseEnter: (0,
|
826
|
-
onMouseLeave: (0,
|
956
|
+
onMouseEnter: (0, import_primitive5.composeEventHandlers)(onMouseEnter, handleMouseEnter),
|
957
|
+
onMouseLeave: (0, import_primitive5.composeEventHandlers)(onMouseLeave, handleMouseLeave)
|
827
958
|
}
|
828
959
|
);
|
829
960
|
}
|
@@ -831,40 +962,12 @@ var MessageRoot = (0, import_react23.forwardRef)(
|
|
831
962
|
MessageRoot.displayName = "MessageRoot";
|
832
963
|
|
833
964
|
// src/primitives/message/MessageContent.tsx
|
834
|
-
var
|
835
|
-
|
836
|
-
// src/context/AssistantContext.ts
|
837
|
-
var import_react24 = require("react");
|
838
|
-
var AssistantContext = (0, import_react24.createContext)(
|
839
|
-
null
|
840
|
-
);
|
841
|
-
var useAssistantContext = () => {
|
842
|
-
const context = (0, import_react24.useContext)(AssistantContext);
|
843
|
-
if (!context)
|
844
|
-
throw new Error(
|
845
|
-
"This component must be used within an AssistantRuntimeProvider."
|
846
|
-
);
|
847
|
-
return context;
|
848
|
-
};
|
849
|
-
|
850
|
-
// src/context/ContentPartContext.ts
|
851
|
-
var import_react25 = require("react");
|
852
|
-
var ContentPartContext = (0, import_react25.createContext)(
|
853
|
-
null
|
854
|
-
);
|
855
|
-
var useContentPartContext = () => {
|
856
|
-
const context = (0, import_react25.useContext)(ContentPartContext);
|
857
|
-
if (!context)
|
858
|
-
throw new Error(
|
859
|
-
"This component can only be used inside a component passed to <MessagePrimitive.Content components={...} >."
|
860
|
-
);
|
861
|
-
return context;
|
862
|
-
};
|
965
|
+
var import_react29 = require("react");
|
863
966
|
|
864
967
|
// src/context/providers/ContentPartProvider.tsx
|
865
|
-
var
|
968
|
+
var import_react27 = require("react");
|
866
969
|
var import_zustand4 = require("zustand");
|
867
|
-
var
|
970
|
+
var import_jsx_runtime10 = require("react/jsx-runtime");
|
868
971
|
var syncContentPart = ({ message }, useContentPart, partIndex) => {
|
869
972
|
const part = message.content[partIndex];
|
870
973
|
if (!part) return;
|
@@ -881,14 +984,14 @@ var syncContentPart = ({ message }, useContentPart, partIndex) => {
|
|
881
984
|
};
|
882
985
|
var useContentPartContext2 = (partIndex) => {
|
883
986
|
const { useMessage } = useMessageContext();
|
884
|
-
const [context] = (0,
|
987
|
+
const [context] = (0, import_react27.useState)(() => {
|
885
988
|
const useContentPart = (0, import_zustand4.create)(
|
886
989
|
() => ({})
|
887
990
|
);
|
888
991
|
syncContentPart(useMessage.getState(), useContentPart, partIndex);
|
889
992
|
return { useContentPart };
|
890
993
|
});
|
891
|
-
(0,
|
994
|
+
(0, import_react27.useEffect)(() => {
|
892
995
|
syncContentPart(useMessage.getState(), context.useContentPart, partIndex);
|
893
996
|
return useMessage.subscribe((message) => {
|
894
997
|
syncContentPart(message, context.useContentPart, partIndex);
|
@@ -901,65 +1004,46 @@ var ContentPartProvider = ({
|
|
901
1004
|
children
|
902
1005
|
}) => {
|
903
1006
|
const context = useContentPartContext2(partIndex);
|
904
|
-
return /* @__PURE__ */ (0,
|
1007
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(ContentPartContext.Provider, { value: context, children });
|
905
1008
|
};
|
906
1009
|
|
907
1010
|
// src/primitives/contentPart/ContentPartDisplay.tsx
|
908
1011
|
var ContentPartDisplay = () => {
|
909
|
-
const
|
910
|
-
const display = useContentPart((c) => {
|
911
|
-
if (c.part.type !== "ui")
|
912
|
-
throw new Error(
|
913
|
-
"ContentPartDisplay can only be used inside ui content parts."
|
914
|
-
);
|
915
|
-
return c.part.display;
|
916
|
-
});
|
1012
|
+
const display = useContentPartDisplay();
|
917
1013
|
return display ?? null;
|
918
1014
|
};
|
919
1015
|
|
920
1016
|
// src/primitives/contentPart/ContentPartInProgressIndicator.tsx
|
921
1017
|
var ContentPartInProgressIndicator = () => {
|
922
|
-
const
|
923
|
-
const { useContentPart } = useContentPartContext();
|
924
|
-
const indicator = useCombinedStore(
|
925
|
-
[useMessageUtils, useContentPart],
|
926
|
-
(m, c) => c.status === "in_progress" ? m.inProgressIndicator : null
|
927
|
-
);
|
1018
|
+
const indicator = useContentPartInProgressIndicator();
|
928
1019
|
return indicator;
|
929
1020
|
};
|
930
1021
|
|
931
1022
|
// src/primitives/contentPart/ContentPartText.tsx
|
932
|
-
var
|
933
|
-
var
|
934
|
-
var
|
935
|
-
var ContentPartText = (0,
|
936
|
-
const
|
937
|
-
|
938
|
-
if (c.part.type !== "text")
|
939
|
-
throw new Error(
|
940
|
-
"ContentPartText can only be used inside text content parts."
|
941
|
-
);
|
942
|
-
return c.part.text;
|
943
|
-
});
|
944
|
-
return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_react_primitive9.Primitive.span, { ...props, ref: forwardedRef, children: text });
|
1023
|
+
var import_react_primitive6 = require("@radix-ui/react-primitive");
|
1024
|
+
var import_react28 = require("react");
|
1025
|
+
var import_jsx_runtime11 = require("react/jsx-runtime");
|
1026
|
+
var ContentPartText = (0, import_react28.forwardRef)((props, forwardedRef) => {
|
1027
|
+
const text = useContentPartText();
|
1028
|
+
return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_react_primitive6.Primitive.span, { ...props, ref: forwardedRef, children: text });
|
945
1029
|
});
|
946
1030
|
ContentPartText.displayName = "ContentPartText";
|
947
1031
|
|
948
1032
|
// src/primitives/message/MessageContent.tsx
|
949
|
-
var
|
1033
|
+
var import_jsx_runtime12 = require("react/jsx-runtime");
|
950
1034
|
var defaultComponents = {
|
951
|
-
Text: () => /* @__PURE__ */ (0,
|
952
|
-
/* @__PURE__ */ (0,
|
953
|
-
/* @__PURE__ */ (0,
|
1035
|
+
Text: () => /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(import_jsx_runtime12.Fragment, { children: [
|
1036
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(ContentPartText, {}),
|
1037
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(ContentPartInProgressIndicator, {})
|
954
1038
|
] }),
|
955
1039
|
Image: () => null,
|
956
|
-
UI: () => /* @__PURE__ */ (0,
|
1040
|
+
UI: () => /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(ContentPartDisplay, {}),
|
957
1041
|
tools: {
|
958
1042
|
Fallback: (props) => {
|
959
1043
|
const { useToolUIs } = useAssistantContext();
|
960
1044
|
const Render = useToolUIs((s) => s.getToolUI(props.part.toolName));
|
961
1045
|
if (!Render) return null;
|
962
|
-
return /* @__PURE__ */ (0,
|
1046
|
+
return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(Render, { ...props });
|
963
1047
|
}
|
964
1048
|
}
|
965
1049
|
};
|
@@ -978,15 +1062,15 @@ var MessageContentPartComponent = ({
|
|
978
1062
|
const type = part.type;
|
979
1063
|
switch (type) {
|
980
1064
|
case "text":
|
981
|
-
return /* @__PURE__ */ (0,
|
1065
|
+
return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(Text, { part, status });
|
982
1066
|
case "image":
|
983
|
-
return /* @__PURE__ */ (0,
|
1067
|
+
return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(Image, { part, status });
|
984
1068
|
case "ui":
|
985
|
-
return /* @__PURE__ */ (0,
|
1069
|
+
return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(UI, { part, status });
|
986
1070
|
case "tool-call": {
|
987
1071
|
const Tool = by_name[part.toolName] || Fallback;
|
988
1072
|
const addResult = (result) => addToolResult(part.toolCallId, result);
|
989
|
-
return /* @__PURE__ */ (0,
|
1073
|
+
return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(Tool, { part, status, addResult });
|
990
1074
|
}
|
991
1075
|
default:
|
992
1076
|
throw new Error(`Unknown content part type: ${type}`);
|
@@ -996,9 +1080,9 @@ var MessageContentPartImpl = ({
|
|
996
1080
|
partIndex,
|
997
1081
|
components
|
998
1082
|
}) => {
|
999
|
-
return /* @__PURE__ */ (0,
|
1083
|
+
return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(ContentPartProvider, { partIndex, children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(MessageContentPartComponent, { components }) });
|
1000
1084
|
};
|
1001
|
-
var MessageContentPart = (0,
|
1085
|
+
var MessageContentPart = (0, import_react29.memo)(
|
1002
1086
|
MessageContentPartImpl,
|
1003
1087
|
(prev, next) => prev.partIndex === next.partIndex && prev.components?.Text === next.components?.Text && prev.components?.Image === next.components?.Image && prev.components?.UI === next.components?.UI && prev.components?.tools === next.components?.tools
|
1004
1088
|
);
|
@@ -1007,7 +1091,7 @@ var MessageContent = ({ components }) => {
|
|
1007
1091
|
const contentLength = useMessage((s) => s.message.content.length);
|
1008
1092
|
return new Array(contentLength).fill(null).map((_, idx) => {
|
1009
1093
|
const partIndex = idx;
|
1010
|
-
return /* @__PURE__ */ (0,
|
1094
|
+
return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
1011
1095
|
MessageContentPart,
|
1012
1096
|
{
|
1013
1097
|
partIndex,
|
@@ -1019,13 +1103,13 @@ var MessageContent = ({ components }) => {
|
|
1019
1103
|
};
|
1020
1104
|
|
1021
1105
|
// src/primitives/message/MessageInProgress.tsx
|
1022
|
-
var
|
1023
|
-
var
|
1024
|
-
var
|
1025
|
-
var MessageInProgress = (0,
|
1106
|
+
var import_react_primitive7 = require("@radix-ui/react-primitive");
|
1107
|
+
var import_react30 = require("react");
|
1108
|
+
var import_jsx_runtime13 = require("react/jsx-runtime");
|
1109
|
+
var MessageInProgress = (0, import_react30.forwardRef)((props, ref) => {
|
1026
1110
|
const { useMessageUtils } = useMessageContext();
|
1027
|
-
(0,
|
1028
|
-
useMessageUtils.getState().setInProgressIndicator(/* @__PURE__ */ (0,
|
1111
|
+
(0, import_react30.useMemo)(() => {
|
1112
|
+
useMessageUtils.getState().setInProgressIndicator(/* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_react_primitive7.Primitive.span, { ...props, ref }));
|
1029
1113
|
}, [useMessageUtils, props, ref]);
|
1030
1114
|
return null;
|
1031
1115
|
});
|
@@ -1041,57 +1125,38 @@ __export(branchPicker_exports, {
|
|
1041
1125
|
Root: () => BranchPickerRoot
|
1042
1126
|
});
|
1043
1127
|
|
1044
|
-
// src/utils/createActionButton.tsx
|
1045
|
-
var import_primitive8 = require("@radix-ui/primitive");
|
1046
|
-
var import_react_primitive11 = require("@radix-ui/react-primitive");
|
1047
|
-
var import_react30 = require("react");
|
1048
|
-
var import_jsx_runtime17 = require("react/jsx-runtime");
|
1049
|
-
var createActionButton = (useActionButton) => {
|
1050
|
-
const ActionButton = (0, import_react30.forwardRef)((props, forwardedRef) => {
|
1051
|
-
const onClick = useActionButton(props);
|
1052
|
-
return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
1053
|
-
import_react_primitive11.Primitive.button,
|
1054
|
-
{
|
1055
|
-
type: "button",
|
1056
|
-
disabled: !onClick,
|
1057
|
-
...props,
|
1058
|
-
ref: forwardedRef,
|
1059
|
-
onClick: (0, import_primitive8.composeEventHandlers)(props.onClick, onClick ?? void 0)
|
1060
|
-
}
|
1061
|
-
);
|
1062
|
-
});
|
1063
|
-
ActionButton.displayName = "ActionButton";
|
1064
|
-
return ActionButton;
|
1065
|
-
};
|
1066
|
-
|
1067
1128
|
// src/primitives/branchPicker/BranchPickerNext.tsx
|
1068
|
-
var BranchPickerNext = createActionButton(
|
1129
|
+
var BranchPickerNext = createActionButton(
|
1130
|
+
"BranchPickerNext",
|
1131
|
+
useBranchPickerNext
|
1132
|
+
);
|
1069
1133
|
|
1070
1134
|
// src/primitives/branchPicker/BranchPickerPrevious.tsx
|
1071
|
-
var BranchPickerPrevious = createActionButton(
|
1135
|
+
var BranchPickerPrevious = createActionButton(
|
1136
|
+
"BranchPickerPrevious",
|
1137
|
+
useBranchPickerPrevious
|
1138
|
+
);
|
1072
1139
|
|
1073
1140
|
// src/primitives/branchPicker/BranchPickerCount.tsx
|
1074
|
-
var
|
1141
|
+
var import_jsx_runtime14 = require("react/jsx-runtime");
|
1075
1142
|
var BranchPickerCount = () => {
|
1076
|
-
const
|
1077
|
-
|
1078
|
-
return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_jsx_runtime18.Fragment, { children: branchCount });
|
1143
|
+
const branchCount = useBranchPickerCount();
|
1144
|
+
return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_jsx_runtime14.Fragment, { children: branchCount });
|
1079
1145
|
};
|
1080
1146
|
|
1081
1147
|
// src/primitives/branchPicker/BranchPickerNumber.tsx
|
1082
|
-
var
|
1148
|
+
var import_jsx_runtime15 = require("react/jsx-runtime");
|
1083
1149
|
var BranchPickerNumber = () => {
|
1084
|
-
const
|
1085
|
-
|
1086
|
-
return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_jsx_runtime19.Fragment, { children: branchIdx + 1 });
|
1150
|
+
const branchNumber = useBranchPickerNumber();
|
1151
|
+
return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_jsx_runtime15.Fragment, { children: branchNumber });
|
1087
1152
|
};
|
1088
1153
|
|
1089
1154
|
// src/primitives/branchPicker/BranchPickerRoot.tsx
|
1090
|
-
var
|
1155
|
+
var import_react_primitive8 = require("@radix-ui/react-primitive");
|
1091
1156
|
var import_react31 = require("react");
|
1092
|
-
var
|
1157
|
+
var import_jsx_runtime16 = require("react/jsx-runtime");
|
1093
1158
|
var BranchPickerRoot = (0, import_react31.forwardRef)(({ hideWhenSingleBranch, ...rest }, ref) => {
|
1094
|
-
return /* @__PURE__ */ (0,
|
1159
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(MessageIf, { hasBranches: hideWhenSingleBranch ? true : void 0, children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_react_primitive8.Primitive.div, { ...rest, ref }) });
|
1095
1160
|
});
|
1096
1161
|
BranchPickerRoot.displayName = "BranchPickerRoot";
|
1097
1162
|
|
@@ -1105,13 +1170,17 @@ __export(actionBar_exports, {
|
|
1105
1170
|
});
|
1106
1171
|
|
1107
1172
|
// src/primitives/actionBar/ActionBarRoot.tsx
|
1108
|
-
var
|
1173
|
+
var import_react_primitive9 = require("@radix-ui/react-primitive");
|
1109
1174
|
var import_react32 = require("react");
|
1110
|
-
var
|
1111
|
-
var
|
1175
|
+
var import_jsx_runtime17 = require("react/jsx-runtime");
|
1176
|
+
var useActionBarFloatStatus = ({
|
1177
|
+
hideWhenRunning,
|
1178
|
+
autohide,
|
1179
|
+
autohideFloat
|
1180
|
+
}) => {
|
1112
1181
|
const { useThread } = useThreadContext();
|
1113
1182
|
const { useMessage, useMessageUtils } = useMessageContext();
|
1114
|
-
|
1183
|
+
return useCombinedStore(
|
1115
1184
|
[useThread, useMessage, useMessageUtils],
|
1116
1185
|
(t, m, mu) => {
|
1117
1186
|
if (hideWhenRunning && t.isRunning) return "hidden" /* Hidden */;
|
@@ -1123,9 +1192,16 @@ var ActionBarRoot = (0, import_react32.forwardRef)(({ hideWhenRunning, autohide,
|
|
1123
1192
|
return "normal" /* Normal */;
|
1124
1193
|
}
|
1125
1194
|
);
|
1195
|
+
};
|
1196
|
+
var ActionBarRoot = (0, import_react32.forwardRef)(({ hideWhenRunning, autohide, autohideFloat, ...rest }, ref) => {
|
1197
|
+
const hideAndfloatStatus = useActionBarFloatStatus({
|
1198
|
+
hideWhenRunning,
|
1199
|
+
autohide,
|
1200
|
+
autohideFloat
|
1201
|
+
});
|
1126
1202
|
if (hideAndfloatStatus === "hidden" /* Hidden */) return null;
|
1127
|
-
return /* @__PURE__ */ (0,
|
1128
|
-
|
1203
|
+
return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
1204
|
+
import_react_primitive9.Primitive.div,
|
1129
1205
|
{
|
1130
1206
|
...hideAndfloatStatus === "floating" /* Floating */ ? { "data-floating": "true" } : null,
|
1131
1207
|
...rest,
|
@@ -1136,13 +1212,22 @@ var ActionBarRoot = (0, import_react32.forwardRef)(({ hideWhenRunning, autohide,
|
|
1136
1212
|
ActionBarRoot.displayName = "ActionBarRoot";
|
1137
1213
|
|
1138
1214
|
// src/primitives/actionBar/ActionBarCopy.tsx
|
1139
|
-
var ActionBarCopy = createActionButton(
|
1215
|
+
var ActionBarCopy = createActionButton(
|
1216
|
+
"ActionBarCopy",
|
1217
|
+
useActionBarCopy
|
1218
|
+
);
|
1140
1219
|
|
1141
1220
|
// src/primitives/actionBar/ActionBarReload.tsx
|
1142
|
-
var ActionBarReload = createActionButton(
|
1221
|
+
var ActionBarReload = createActionButton(
|
1222
|
+
"ActionBarReload",
|
1223
|
+
useActionBarReload
|
1224
|
+
);
|
1143
1225
|
|
1144
1226
|
// src/primitives/actionBar/ActionBarEdit.tsx
|
1145
|
-
var ActionBarEdit = createActionButton(
|
1227
|
+
var ActionBarEdit = createActionButton(
|
1228
|
+
"ActionBarEdit",
|
1229
|
+
useActionBarEdit
|
1230
|
+
);
|
1146
1231
|
|
1147
1232
|
// src/primitives/contentPart/index.ts
|
1148
1233
|
var contentPart_exports = {};
|
@@ -1154,19 +1239,12 @@ __export(contentPart_exports, {
|
|
1154
1239
|
});
|
1155
1240
|
|
1156
1241
|
// src/primitives/contentPart/ContentPartImage.tsx
|
1157
|
-
var
|
1242
|
+
var import_react_primitive10 = require("@radix-ui/react-primitive");
|
1158
1243
|
var import_react33 = require("react");
|
1159
|
-
var
|
1244
|
+
var import_jsx_runtime18 = require("react/jsx-runtime");
|
1160
1245
|
var ContentPartImage = (0, import_react33.forwardRef)((props, forwardedRef) => {
|
1161
|
-
const
|
1162
|
-
|
1163
|
-
if (c.part.type !== "image")
|
1164
|
-
throw new Error(
|
1165
|
-
"ContentPartImage can only be used inside image content parts."
|
1166
|
-
);
|
1167
|
-
return c.part.image;
|
1168
|
-
});
|
1169
|
-
return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_react_primitive14.Primitive.img, { src: image, ...props, ref: forwardedRef });
|
1246
|
+
const image = useContentPartImage();
|
1247
|
+
return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_react_primitive10.Primitive.img, { src: image, ...props, ref: forwardedRef });
|
1170
1248
|
});
|
1171
1249
|
ContentPartImage.displayName = "ContentPartImage";
|
1172
1250
|
|
@@ -1603,7 +1681,7 @@ var makeThreadActionStore = (runtimeRef) => {
|
|
1603
1681
|
};
|
1604
1682
|
|
1605
1683
|
// src/context/providers/ThreadProvider.tsx
|
1606
|
-
var
|
1684
|
+
var import_jsx_runtime19 = require("react/jsx-runtime");
|
1607
1685
|
var ThreadProvider = ({
|
1608
1686
|
children,
|
1609
1687
|
runtime
|
@@ -1638,14 +1716,14 @@ var ThreadProvider = ({
|
|
1638
1716
|
return runtime.subscribe(onRuntimeUpdate);
|
1639
1717
|
}, [context, runtime]);
|
1640
1718
|
const RuntimeSynchronizer = runtime.unstable_synchronizer;
|
1641
|
-
return /* @__PURE__ */ (0,
|
1642
|
-
RuntimeSynchronizer && /* @__PURE__ */ (0,
|
1719
|
+
return /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(ThreadContext.Provider, { value: context, children: [
|
1720
|
+
RuntimeSynchronizer && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(RuntimeSynchronizer, {}),
|
1643
1721
|
children
|
1644
1722
|
] });
|
1645
1723
|
};
|
1646
1724
|
|
1647
1725
|
// src/context/providers/AssistantProvider.tsx
|
1648
|
-
var
|
1726
|
+
var import_jsx_runtime20 = require("react/jsx-runtime");
|
1649
1727
|
var AssistantProvider = ({ children, runtime }) => {
|
1650
1728
|
const runtimeRef = (0, import_react36.useRef)(runtime);
|
1651
1729
|
(0, import_react36.useInsertionEffect)(() => {
|
@@ -1660,13 +1738,13 @@ var AssistantProvider = ({ children, runtime }) => {
|
|
1660
1738
|
(0, import_react36.useEffect)(() => {
|
1661
1739
|
return runtime.registerModelConfigProvider(getModelCOnfig);
|
1662
1740
|
}, [runtime, getModelCOnfig]);
|
1663
|
-
return /* @__PURE__ */ (0,
|
1741
|
+
return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(AssistantContext.Provider, { value: context, children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(ThreadProvider, { runtime, children }) });
|
1664
1742
|
};
|
1665
1743
|
|
1666
1744
|
// src/context/providers/AssistantRuntimeProvider.tsx
|
1667
|
-
var
|
1745
|
+
var import_jsx_runtime21 = require("react/jsx-runtime");
|
1668
1746
|
var AssistantRuntimeProviderImpl = ({ children, runtime }) => {
|
1669
|
-
return /* @__PURE__ */ (0,
|
1747
|
+
return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(AssistantProvider, { runtime, children });
|
1670
1748
|
};
|
1671
1749
|
var AssistantRuntimeProvider = (0, import_react37.memo)(AssistantRuntimeProviderImpl);
|
1672
1750
|
|
@@ -1686,11 +1764,25 @@ __export(internal_exports, {
|
|
1686
1764
|
INTERNAL,
|
1687
1765
|
MessagePrimitive,
|
1688
1766
|
ThreadPrimitive,
|
1689
|
-
|
1690
|
-
|
1691
|
-
|
1692
|
-
|
1767
|
+
useActionBarCopy,
|
1768
|
+
useActionBarEdit,
|
1769
|
+
useActionBarReload,
|
1770
|
+
useBranchPickerCount,
|
1771
|
+
useBranchPickerNext,
|
1772
|
+
useBranchPickerNumber,
|
1773
|
+
useBranchPickerPrevious,
|
1774
|
+
useComposerCancel,
|
1775
|
+
useComposerIf,
|
1776
|
+
useComposerSend,
|
1777
|
+
useContentPartDisplay,
|
1778
|
+
useContentPartImage,
|
1779
|
+
useContentPartInProgressIndicator,
|
1780
|
+
useContentPartText,
|
1693
1781
|
useLocalRuntime,
|
1694
|
-
|
1782
|
+
useMessageIf,
|
1783
|
+
useThreadEmpty,
|
1784
|
+
useThreadIf,
|
1785
|
+
useThreadScrollToBottom,
|
1786
|
+
useThreadSuggestion
|
1695
1787
|
});
|
1696
1788
|
//# sourceMappingURL=index.js.map
|