@assistant-ui/react 0.5.75 → 0.5.77
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/index.d.mts +196 -180
- package/dist/index.d.ts +196 -180
- package/dist/index.js +525 -456
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +463 -394
- package/dist/index.mjs.map +1 -1
- package/dist/styles/index.css +149 -19
- package/dist/styles/index.css.map +1 -1
- package/dist/styles/tailwindcss/base-components.css +14 -2
- package/dist/styles/tailwindcss/thread.css +26 -10
- package/package.json +4 -3
package/dist/index.mjs
CHANGED
@@ -632,13 +632,9 @@ var useActionBarStopSpeaking = () => {
|
|
632
632
|
import { useCallback as useCallback8 } from "react";
|
633
633
|
var useActionBarFeedbackPositive = () => {
|
634
634
|
const messageRuntime = useMessageRuntime();
|
635
|
-
const messageUtilsStore = useMessageUtilsStore();
|
636
635
|
const callback = useCallback8(() => {
|
637
|
-
messageRuntime.submitFeedback({
|
638
|
-
|
639
|
-
});
|
640
|
-
messageUtilsStore.getState().setSubmittedFeedback("positive");
|
641
|
-
}, [messageUtilsStore, messageRuntime]);
|
636
|
+
messageRuntime.submitFeedback({ type: "positive" });
|
637
|
+
}, [messageRuntime]);
|
642
638
|
return callback;
|
643
639
|
};
|
644
640
|
|
@@ -646,13 +642,9 @@ var useActionBarFeedbackPositive = () => {
|
|
646
642
|
import { useCallback as useCallback9 } from "react";
|
647
643
|
var useActionBarFeedbackNegative = () => {
|
648
644
|
const messageRuntime = useMessageRuntime();
|
649
|
-
const messageUtilsStore = useMessageUtilsStore();
|
650
645
|
const callback = useCallback9(() => {
|
651
|
-
messageRuntime.submitFeedback({
|
652
|
-
|
653
|
-
});
|
654
|
-
messageUtilsStore.getState().setSubmittedFeedback("negative");
|
655
|
-
}, [messageUtilsStore, messageRuntime]);
|
646
|
+
messageRuntime.submitFeedback({ type: "negative" });
|
647
|
+
}, [messageRuntime]);
|
656
648
|
return callback;
|
657
649
|
};
|
658
650
|
|
@@ -740,23 +732,21 @@ var useComposerSend = () => {
|
|
740
732
|
import { useCallback as useCallback14 } from "react";
|
741
733
|
var useComposerAddAttachment = () => {
|
742
734
|
const disabled = useComposer((c) => !c.isEditing);
|
743
|
-
const
|
744
|
-
const threadRuntimeStore = useThreadComposerStore();
|
735
|
+
const composerRuntime = useComposerRuntime();
|
745
736
|
const callback = useCallback14(() => {
|
746
|
-
const { addAttachment } = threadComposerStore.getState();
|
747
|
-
const { attachmentAccept } = threadRuntimeStore.getState();
|
748
737
|
const input = document.createElement("input");
|
749
738
|
input.type = "file";
|
739
|
+
const attachmentAccept = composerRuntime.getAttachmentAccept();
|
750
740
|
if (attachmentAccept !== "*") {
|
751
741
|
input.accept = attachmentAccept;
|
752
742
|
}
|
753
743
|
input.onchange = (e) => {
|
754
744
|
const file = e.target.files?.[0];
|
755
745
|
if (!file) return;
|
756
|
-
addAttachment(file);
|
746
|
+
composerRuntime.addAttachment(file);
|
757
747
|
};
|
758
748
|
input.click();
|
759
|
-
}, [
|
749
|
+
}, [composerRuntime]);
|
760
750
|
if (disabled) return null;
|
761
751
|
return callback;
|
762
752
|
};
|
@@ -803,7 +793,15 @@ var useMessageIf = (props) => {
|
|
803
793
|
const messageUtilsStore = useMessageUtilsStore();
|
804
794
|
return useCombinedStore(
|
805
795
|
[messageStore, messageUtilsStore],
|
806
|
-
({
|
796
|
+
({
|
797
|
+
role,
|
798
|
+
attachments,
|
799
|
+
content,
|
800
|
+
branchCount,
|
801
|
+
isLast,
|
802
|
+
speech,
|
803
|
+
submittedFeedback
|
804
|
+
}, { isCopied, isHovering }) => {
|
807
805
|
if (props.hasBranches === true && branchCount < 2) return false;
|
808
806
|
if (props.user && role !== "user") return false;
|
809
807
|
if (props.assistant && role !== "assistant") return false;
|
@@ -817,7 +815,9 @@ var useMessageIf = (props) => {
|
|
817
815
|
return false;
|
818
816
|
if (props.hasAttachments === false && role === "user" && !!attachments.length)
|
819
817
|
return false;
|
820
|
-
if (props.
|
818
|
+
if (props.hasContent === true && content.length === 0) return false;
|
819
|
+
if (props.hasContent === false && content.length > 0) return false;
|
820
|
+
if (props.submittedFeedback !== void 0 && (submittedFeedback?.type ?? null) !== props.submittedFeedback)
|
821
821
|
return false;
|
822
822
|
return true;
|
823
823
|
}
|
@@ -913,7 +913,7 @@ var useActionBarFloatStatus = ({
|
|
913
913
|
const autohideEnabled = autohide === "always" || autohide === "not-last" && !m.isLast;
|
914
914
|
if (!autohideEnabled) return "normal" /* Normal */;
|
915
915
|
if (!mu.isHovering) return "hidden" /* Hidden */;
|
916
|
-
if (autohideFloat === "always" || autohideFloat === "single-branch" && m.
|
916
|
+
if (autohideFloat === "always" || autohideFloat === "single-branch" && m.branchCount <= 1)
|
917
917
|
return "floating" /* Floating */;
|
918
918
|
return "normal" /* Normal */;
|
919
919
|
}
|
@@ -1051,8 +1051,8 @@ import { composeEventHandlers as composeEventHandlers4 } from "@radix-ui/primiti
|
|
1051
1051
|
import { Primitive as Primitive5 } from "@radix-ui/react-primitive";
|
1052
1052
|
import { jsx as jsx8 } from "react/jsx-runtime";
|
1053
1053
|
var ActionBarPrimitiveFeedbackPositive = forwardRef5(({ onClick, disabled, ...props }, forwardedRef) => {
|
1054
|
-
const isSubmitted =
|
1055
|
-
(u) => u.submittedFeedback === "positive"
|
1054
|
+
const isSubmitted = useMessage(
|
1055
|
+
(u) => u.submittedFeedback?.type === "positive"
|
1056
1056
|
);
|
1057
1057
|
const callback = useActionBarFeedbackPositive();
|
1058
1058
|
return /* @__PURE__ */ jsx8(
|
@@ -1077,8 +1077,8 @@ import { composeEventHandlers as composeEventHandlers5 } from "@radix-ui/primiti
|
|
1077
1077
|
import { Primitive as Primitive6 } from "@radix-ui/react-primitive";
|
1078
1078
|
import { jsx as jsx9 } from "react/jsx-runtime";
|
1079
1079
|
var ActionBarPrimitiveFeedbackNegative = forwardRef6(({ onClick, disabled, ...props }, forwardedRef) => {
|
1080
|
-
const isSubmitted =
|
1081
|
-
(u) => u.submittedFeedback === "negative"
|
1080
|
+
const isSubmitted = useMessage(
|
1081
|
+
(u) => u.submittedFeedback?.type === "negative"
|
1082
1082
|
);
|
1083
1083
|
const callback = useActionBarFeedbackNegative();
|
1084
1084
|
return /* @__PURE__ */ jsx9(
|
@@ -1302,9 +1302,9 @@ var { useAttachment: useMessageAttachment } = createContextStoreHook(
|
|
1302
1302
|
// src/primitives/attachment/AttachmentThumb.tsx
|
1303
1303
|
import { Primitive as Primitive8 } from "@radix-ui/react-primitive";
|
1304
1304
|
import { jsxs } from "react/jsx-runtime";
|
1305
|
-
var AttachmentPrimitiveThumb = forwardRef11(() => {
|
1305
|
+
var AttachmentPrimitiveThumb = forwardRef11((props, ref) => {
|
1306
1306
|
const ext = useAttachment((a) => a.name.split(".").pop());
|
1307
|
-
return /* @__PURE__ */ jsxs(Primitive8.div, { children: [
|
1307
|
+
return /* @__PURE__ */ jsxs(Primitive8.div, { ...props, ref, children: [
|
1308
1308
|
".",
|
1309
1309
|
ext
|
1310
1310
|
] });
|
@@ -1438,9 +1438,9 @@ var useIsHoveringRef = () => {
|
|
1438
1438
|
);
|
1439
1439
|
return useManagedRef(callbackRef);
|
1440
1440
|
};
|
1441
|
-
var MessagePrimitiveRoot = forwardRef12((props,
|
1441
|
+
var MessagePrimitiveRoot = forwardRef12((props, forwardRef36) => {
|
1442
1442
|
const isHoveringRef = useIsHoveringRef();
|
1443
|
-
const ref = useComposedRefs(
|
1443
|
+
const ref = useComposedRefs(forwardRef36, isHoveringRef);
|
1444
1444
|
return /* @__PURE__ */ jsx18(Primitive9.div, { ...props, ref });
|
1445
1445
|
});
|
1446
1446
|
MessagePrimitiveRoot.displayName = "MessagePrimitive.Root";
|
@@ -1845,7 +1845,6 @@ var getThreadComposerState = (runtime, focus, onFocus) => {
|
|
1845
1845
|
isEmpty: runtime?.isEmpty ?? true,
|
1846
1846
|
text: runtime?.text ?? "",
|
1847
1847
|
attachments: runtime?.attachments ?? EMPTY_ARRAY,
|
1848
|
-
attachmentAccept: runtime?.attachmentAccept ?? "*",
|
1849
1848
|
value: runtime?.text ?? "",
|
1850
1849
|
setValue: runtime?.setText.bind(runtime) ?? METHOD_NOT_SUPPORTED,
|
1851
1850
|
setText: runtime?.setText.bind(runtime) ?? METHOD_NOT_SUPPORTED,
|
@@ -1867,7 +1866,6 @@ var getEditComposerState = (runtime, beginEdit) => {
|
|
1867
1866
|
isEmpty: runtime?.isEmpty ?? true,
|
1868
1867
|
text: runtime?.text ?? "",
|
1869
1868
|
attachments: runtime?.attachments ?? EMPTY_ARRAY,
|
1870
|
-
attachmentAccept: runtime?.attachmentAccept ?? "*",
|
1871
1869
|
value: runtime?.text ?? "",
|
1872
1870
|
setValue: runtime?.setText.bind(runtime) ?? METHOD_NOT_SUPPORTED,
|
1873
1871
|
setText: runtime?.setText.bind(runtime) ?? METHOD_NOT_SUPPORTED,
|
@@ -1904,12 +1902,6 @@ var ComposerRuntimeImpl = class {
|
|
1904
1902
|
get text() {
|
1905
1903
|
return this.getState().text;
|
1906
1904
|
}
|
1907
|
-
/**
|
1908
|
-
* @deprecated Use `getState().attachmentAccept` instead. This will be removed in 0.6.0.
|
1909
|
-
*/
|
1910
|
-
get attachmentAccept() {
|
1911
|
-
return this.getState().attachmentAccept;
|
1912
|
-
}
|
1913
1905
|
/**
|
1914
1906
|
* @deprecated Use `getState().attachments` instead. This will be removed in 0.6.0.
|
1915
1907
|
*/
|
@@ -1964,6 +1956,11 @@ var ComposerRuntimeImpl = class {
|
|
1964
1956
|
subscribe(callback) {
|
1965
1957
|
return this._core.subscribe(callback);
|
1966
1958
|
}
|
1959
|
+
getAttachmentAccept() {
|
1960
|
+
const core = this._core.getState();
|
1961
|
+
if (!core) throw new Error("Composer is not available");
|
1962
|
+
return core.getAttachmentAccept();
|
1963
|
+
}
|
1967
1964
|
};
|
1968
1965
|
var ThreadComposerRuntimeImpl = class extends ComposerRuntimeImpl {
|
1969
1966
|
get type() {
|
@@ -2828,10 +2825,6 @@ var makeMessageUtilsStore = () => create9((set) => {
|
|
2828
2825
|
isHovering: false,
|
2829
2826
|
setIsHovering: (value) => {
|
2830
2827
|
set({ isHovering: value });
|
2831
|
-
},
|
2832
|
-
submittedFeedback: null,
|
2833
|
-
setSubmittedFeedback: (feedback) => {
|
2834
|
-
set({ submittedFeedback: feedback });
|
2835
2828
|
}
|
2836
2829
|
};
|
2837
2830
|
});
|
@@ -3028,7 +3021,9 @@ __export(internal_exports, {
|
|
3028
3021
|
var isAttachmentComplete = (a) => a.status.type === "complete";
|
3029
3022
|
var BaseComposerRuntimeCore = class {
|
3030
3023
|
isEditing = true;
|
3031
|
-
|
3024
|
+
getAttachmentAccept() {
|
3025
|
+
return this.getAttachmentAdapter()?.accept ?? "*";
|
3026
|
+
}
|
3032
3027
|
_attachments = [];
|
3033
3028
|
set attachments(value) {
|
3034
3029
|
this._attachments = value;
|
@@ -3054,10 +3049,11 @@ var BaseComposerRuntimeCore = class {
|
|
3054
3049
|
this.notifySubscribers();
|
3055
3050
|
}
|
3056
3051
|
async send() {
|
3057
|
-
const
|
3052
|
+
const adapter = this.getAttachmentAdapter();
|
3053
|
+
const attachments = adapter && this.attachments.length > 0 ? await Promise.all(
|
3058
3054
|
this.attachments.map(async (a) => {
|
3059
3055
|
if (isAttachmentComplete(a)) return a;
|
3060
|
-
const result = await
|
3056
|
+
const result = await adapter.send(a);
|
3061
3057
|
if (result.status?.type !== "complete") {
|
3062
3058
|
result.status = { type: "complete" };
|
3063
3059
|
}
|
@@ -3072,19 +3068,10 @@ var BaseComposerRuntimeCore = class {
|
|
3072
3068
|
this.reset();
|
3073
3069
|
this.handleSend(message);
|
3074
3070
|
}
|
3075
|
-
_attachmentAdapter;
|
3076
|
-
setAttachmentAdapter(adapter) {
|
3077
|
-
this._attachmentAdapter = adapter;
|
3078
|
-
const accept = adapter?.accept ?? "*";
|
3079
|
-
if (this.attachmentAccept !== accept) {
|
3080
|
-
this.attachmentAccept = accept;
|
3081
|
-
this.notifySubscribers();
|
3082
|
-
}
|
3083
|
-
}
|
3084
3071
|
async addAttachment(file) {
|
3085
|
-
|
3086
|
-
|
3087
|
-
const attachment = await
|
3072
|
+
const adapter = this.getAttachmentAdapter();
|
3073
|
+
if (!adapter) throw new Error("Attachments are not supported");
|
3074
|
+
const attachment = await adapter.add({ file });
|
3088
3075
|
if (attachment.status === void 0) {
|
3089
3076
|
attachment.status = { type: "requires-action", reason: "composer-send" };
|
3090
3077
|
}
|
@@ -3092,12 +3079,12 @@ var BaseComposerRuntimeCore = class {
|
|
3092
3079
|
this.notifySubscribers();
|
3093
3080
|
}
|
3094
3081
|
async removeAttachment(attachmentId) {
|
3095
|
-
|
3096
|
-
|
3082
|
+
const adapter = this.getAttachmentAdapter();
|
3083
|
+
if (!adapter) throw new Error("Attachments are not supported");
|
3097
3084
|
const index = this._attachments.findIndex((a) => a.id === attachmentId);
|
3098
3085
|
if (index === -1) throw new Error("Attachment not found");
|
3099
3086
|
const attachment = this._attachments[index];
|
3100
|
-
await
|
3087
|
+
await adapter.remove(attachment);
|
3101
3088
|
this._attachments = this._attachments.toSpliced(index, 1);
|
3102
3089
|
this.notifySubscribers();
|
3103
3090
|
}
|
@@ -3125,6 +3112,9 @@ var DefaultThreadComposerRuntimeCore = class extends BaseComposerRuntimeCore {
|
|
3125
3112
|
get attachments() {
|
3126
3113
|
return super.attachments;
|
3127
3114
|
}
|
3115
|
+
getAttachmentAdapter() {
|
3116
|
+
return this.runtime.adapters?.attachments;
|
3117
|
+
}
|
3128
3118
|
connect() {
|
3129
3119
|
return this.runtime.subscribe(() => {
|
3130
3120
|
if (this.canCancel !== this.runtime.capabilities.cancel) {
|
@@ -3503,36 +3493,6 @@ var TooltipIconButton = forwardRef23(({ children, tooltip, side = "bottom", ...r
|
|
3503
3493
|
});
|
3504
3494
|
TooltipIconButton.displayName = "TooltipIconButton";
|
3505
3495
|
|
3506
|
-
// src/api/AssistantRuntime.ts
|
3507
|
-
var AssistantRuntimeImpl = class {
|
3508
|
-
constructor(_core, CustomThreadRuntime) {
|
3509
|
-
this._core = _core;
|
3510
|
-
this.thread = new CustomThreadRuntime(
|
3511
|
-
new NestedSubscriptionSubject({
|
3512
|
-
getState: () => this._core.thread,
|
3513
|
-
subscribe: (callback) => this._core.subscribe(callback)
|
3514
|
-
})
|
3515
|
-
);
|
3516
|
-
}
|
3517
|
-
thread;
|
3518
|
-
switchToNewThread() {
|
3519
|
-
return this._core.switchToNewThread();
|
3520
|
-
}
|
3521
|
-
switchToThread(threadId) {
|
3522
|
-
return this._core.switchToThread(threadId);
|
3523
|
-
}
|
3524
|
-
registerModelConfigProvider(provider) {
|
3525
|
-
return this._core.registerModelConfigProvider(provider);
|
3526
|
-
}
|
3527
|
-
// TODO events for thread switching
|
3528
|
-
/**
|
3529
|
-
* @deprecated Thread is now static and never gets updated. This will be removed in 0.6.0.
|
3530
|
-
*/
|
3531
|
-
subscribe(callback) {
|
3532
|
-
return this._core.subscribe(callback);
|
3533
|
-
}
|
3534
|
-
};
|
3535
|
-
|
3536
3496
|
// src/api/ThreadRuntime.ts
|
3537
3497
|
var toAppendMessage = (messages2, message) => {
|
3538
3498
|
if (typeof message === "string") {
|
@@ -3685,6 +3645,9 @@ var ThreadRuntimeImpl = class {
|
|
3685
3645
|
stopSpeaking() {
|
3686
3646
|
return this._threadBinding.getState().stopSpeaking();
|
3687
3647
|
}
|
3648
|
+
getSubmittedFeedback(messageId) {
|
3649
|
+
return this._threadBinding.getState().getSubmittedFeedback(messageId);
|
3650
|
+
}
|
3688
3651
|
/**
|
3689
3652
|
* @deprecated Use `getMesssageById(id).submitFeedback({ type })` instead. This will be removed in 0.6.0.
|
3690
3653
|
*/
|
@@ -3717,7 +3680,9 @@ var ThreadRuntimeImpl = class {
|
|
3717
3680
|
const { messages: messages2, speech: speechState } = this.getState();
|
3718
3681
|
const message = messages2[idx];
|
3719
3682
|
if (!message) return SKIP_UPDATE;
|
3720
|
-
const
|
3683
|
+
const thread = this._threadBinding.getState();
|
3684
|
+
const branches = thread.getBranches(message.id);
|
3685
|
+
const submittedFeedback = thread.getSubmittedFeedback(message.id);
|
3721
3686
|
return {
|
3722
3687
|
...message,
|
3723
3688
|
message,
|
@@ -3726,7 +3691,8 @@ var ThreadRuntimeImpl = class {
|
|
3726
3691
|
branches,
|
3727
3692
|
branchNumber: branches.indexOf(message.id) + 1,
|
3728
3693
|
branchCount: branches.length,
|
3729
|
-
speech: speechState?.messageId === message.id ? speechState :
|
3694
|
+
speech: speechState?.messageId === message.id ? speechState : void 0,
|
3695
|
+
submittedFeedback
|
3730
3696
|
};
|
3731
3697
|
},
|
3732
3698
|
subscribe: (callback) => this._threadBinding.subscribe(callback)
|
@@ -3736,6 +3702,47 @@ var ThreadRuntimeImpl = class {
|
|
3736
3702
|
}
|
3737
3703
|
};
|
3738
3704
|
|
3705
|
+
// src/api/AssistantRuntime.ts
|
3706
|
+
var AssistantRuntimeImpl = class _AssistantRuntimeImpl {
|
3707
|
+
constructor(_core, _thread) {
|
3708
|
+
this._core = _core;
|
3709
|
+
this._thread = _thread;
|
3710
|
+
}
|
3711
|
+
get thread() {
|
3712
|
+
return this._thread;
|
3713
|
+
}
|
3714
|
+
switchToNewThread() {
|
3715
|
+
return this._core.switchToNewThread();
|
3716
|
+
}
|
3717
|
+
switchToThread(threadId) {
|
3718
|
+
return this._core.switchToThread(threadId);
|
3719
|
+
}
|
3720
|
+
registerModelConfigProvider(provider) {
|
3721
|
+
return this._core.registerModelConfigProvider(provider);
|
3722
|
+
}
|
3723
|
+
// TODO events for thread switching
|
3724
|
+
/**
|
3725
|
+
* @deprecated Thread is now static and never gets updated. This will be removed in 0.6.0.
|
3726
|
+
*/
|
3727
|
+
subscribe(callback) {
|
3728
|
+
return this._core.subscribe(callback);
|
3729
|
+
}
|
3730
|
+
static createThreadRuntime(_core, CustomThreadRuntime = ThreadRuntimeImpl) {
|
3731
|
+
return new CustomThreadRuntime(
|
3732
|
+
new NestedSubscriptionSubject({
|
3733
|
+
getState: () => _core.thread,
|
3734
|
+
subscribe: (callback) => _core.subscribe(callback)
|
3735
|
+
})
|
3736
|
+
);
|
3737
|
+
}
|
3738
|
+
static create(_core, CustomThreadRuntime = ThreadRuntimeImpl) {
|
3739
|
+
return new _AssistantRuntimeImpl(
|
3740
|
+
_core,
|
3741
|
+
_AssistantRuntimeImpl.createThreadRuntime(_core, CustomThreadRuntime)
|
3742
|
+
);
|
3743
|
+
}
|
3744
|
+
};
|
3745
|
+
|
3739
3746
|
// src/runtimes/edge/converters/fromLanguageModelMessages.ts
|
3740
3747
|
var fromLanguageModelMessages = (lm, { mergeSteps }) => {
|
3741
3748
|
const messages2 = [];
|
@@ -4098,10 +4105,14 @@ var DefaultEditComposerRuntimeCore = class extends BaseComposerRuntimeCore {
|
|
4098
4105
|
this._nonTextParts = message.content.filter(
|
4099
4106
|
(part) => part.type !== "text" && part.type !== "ui"
|
4100
4107
|
);
|
4108
|
+
this.attachments = message.attachments ?? [];
|
4101
4109
|
}
|
4102
4110
|
get canCancel() {
|
4103
4111
|
return true;
|
4104
4112
|
}
|
4113
|
+
getAttachmentAdapter() {
|
4114
|
+
return this.runtime.adapters?.attachments;
|
4115
|
+
}
|
4105
4116
|
_nonTextParts;
|
4106
4117
|
_previousText;
|
4107
4118
|
_parentId;
|
@@ -4123,10 +4134,107 @@ var DefaultEditComposerRuntimeCore = class extends BaseComposerRuntimeCore {
|
|
4123
4134
|
}
|
4124
4135
|
};
|
4125
4136
|
|
4137
|
+
// src/runtimes/core/BaseThreadRuntimeCore.tsx
|
4138
|
+
var BaseThreadRuntimeCore = class {
|
4139
|
+
constructor(configProvider) {
|
4140
|
+
this.configProvider = configProvider;
|
4141
|
+
}
|
4142
|
+
_subscriptions = /* @__PURE__ */ new Set();
|
4143
|
+
repository = new MessageRepository();
|
4144
|
+
get messages() {
|
4145
|
+
return this.repository.getMessages();
|
4146
|
+
}
|
4147
|
+
composer = new DefaultThreadComposerRuntimeCore(this);
|
4148
|
+
getModelConfig() {
|
4149
|
+
return this.configProvider.getModelConfig();
|
4150
|
+
}
|
4151
|
+
_editComposers = /* @__PURE__ */ new Map();
|
4152
|
+
getEditComposer(messageId) {
|
4153
|
+
return this._editComposers.get(messageId);
|
4154
|
+
}
|
4155
|
+
beginEdit(messageId) {
|
4156
|
+
if (this._editComposers.has(messageId))
|
4157
|
+
throw new Error("Edit already in progress");
|
4158
|
+
this._editComposers.set(
|
4159
|
+
messageId,
|
4160
|
+
new DefaultEditComposerRuntimeCore(
|
4161
|
+
this,
|
4162
|
+
() => this._editComposers.delete(messageId),
|
4163
|
+
this.repository.getMessage(messageId)
|
4164
|
+
)
|
4165
|
+
);
|
4166
|
+
this.notifySubscribers();
|
4167
|
+
}
|
4168
|
+
getBranches(messageId) {
|
4169
|
+
return this.repository.getBranches(messageId);
|
4170
|
+
}
|
4171
|
+
switchToBranch(branchId) {
|
4172
|
+
this.repository.switchToBranch(branchId);
|
4173
|
+
this.notifySubscribers();
|
4174
|
+
}
|
4175
|
+
notifySubscribers() {
|
4176
|
+
for (const callback of this._subscriptions) callback();
|
4177
|
+
}
|
4178
|
+
subscribe(callback) {
|
4179
|
+
this._subscriptions.add(callback);
|
4180
|
+
return () => this._subscriptions.delete(callback);
|
4181
|
+
}
|
4182
|
+
_submittedFeedback = {};
|
4183
|
+
getSubmittedFeedback(messageId) {
|
4184
|
+
return this._submittedFeedback[messageId];
|
4185
|
+
}
|
4186
|
+
submitFeedback({ messageId, type }) {
|
4187
|
+
const adapter = this.adapters?.feedback;
|
4188
|
+
if (!adapter) throw new Error("Feedback adapter not configured");
|
4189
|
+
const { message } = this.repository.getMessage(messageId);
|
4190
|
+
adapter.submit({ message, type });
|
4191
|
+
this._submittedFeedback[messageId] = { type };
|
4192
|
+
this.notifySubscribers();
|
4193
|
+
}
|
4194
|
+
_stopSpeaking;
|
4195
|
+
speech;
|
4196
|
+
speak(messageId) {
|
4197
|
+
const adapter = this.adapters?.speech;
|
4198
|
+
if (!adapter) throw new Error("Speech adapter not configured");
|
4199
|
+
const { message } = this.repository.getMessage(messageId);
|
4200
|
+
this._stopSpeaking?.();
|
4201
|
+
const utterance = adapter.speak(message);
|
4202
|
+
const unsub = utterance.subscribe(() => {
|
4203
|
+
if (utterance.status.type === "ended") {
|
4204
|
+
this._stopSpeaking = void 0;
|
4205
|
+
this.speech = void 0;
|
4206
|
+
} else {
|
4207
|
+
this.speech = { messageId, status: utterance.status };
|
4208
|
+
}
|
4209
|
+
this.notifySubscribers();
|
4210
|
+
});
|
4211
|
+
this.speech = { messageId, status: utterance.status };
|
4212
|
+
this.notifySubscribers();
|
4213
|
+
this._stopSpeaking = () => {
|
4214
|
+
utterance.cancel();
|
4215
|
+
unsub();
|
4216
|
+
this.speech = void 0;
|
4217
|
+
this._stopSpeaking = void 0;
|
4218
|
+
};
|
4219
|
+
}
|
4220
|
+
stopSpeaking() {
|
4221
|
+
if (!this._stopSpeaking) throw new Error("No message is being spoken");
|
4222
|
+
this._stopSpeaking();
|
4223
|
+
this.notifySubscribers();
|
4224
|
+
}
|
4225
|
+
export() {
|
4226
|
+
return this.repository.export();
|
4227
|
+
}
|
4228
|
+
import(data) {
|
4229
|
+
this.repository.import(data);
|
4230
|
+
this.notifySubscribers();
|
4231
|
+
}
|
4232
|
+
};
|
4233
|
+
|
4126
4234
|
// src/runtimes/local/LocalThreadRuntimeCore.tsx
|
4127
|
-
var LocalThreadRuntimeCore = class {
|
4235
|
+
var LocalThreadRuntimeCore = class extends BaseThreadRuntimeCore {
|
4128
4236
|
constructor(configProvider, adapter, { initialMessages, ...options }) {
|
4129
|
-
|
4237
|
+
super(configProvider);
|
4130
4238
|
this.adapter = adapter;
|
4131
4239
|
this.threadId = generateId();
|
4132
4240
|
this.options = options;
|
@@ -4139,28 +4247,22 @@ var LocalThreadRuntimeCore = class {
|
|
4139
4247
|
}
|
4140
4248
|
}
|
4141
4249
|
}
|
4142
|
-
_subscriptions = /* @__PURE__ */ new Set();
|
4143
|
-
abortController = null;
|
4144
|
-
repository = new MessageRepository();
|
4145
4250
|
capabilities = {
|
4146
4251
|
switchToBranch: true,
|
4147
4252
|
edit: true,
|
4148
4253
|
reload: true,
|
4149
4254
|
cancel: true,
|
4150
4255
|
unstable_copy: true,
|
4151
|
-
|
4256
|
+
speech: false,
|
4152
4257
|
attachments: false,
|
4153
4258
|
feedback: false
|
4154
4259
|
};
|
4260
|
+
abortController = null;
|
4155
4261
|
threadId;
|
4156
4262
|
isDisabled = false;
|
4157
4263
|
suggestions = [];
|
4158
|
-
get
|
4159
|
-
return this.
|
4160
|
-
}
|
4161
|
-
composer = new DefaultThreadComposerRuntimeCore(this);
|
4162
|
-
getModelConfig() {
|
4163
|
-
return this.configProvider.getModelConfig();
|
4264
|
+
get adapters() {
|
4265
|
+
return this.options.adapters;
|
4164
4266
|
}
|
4165
4267
|
_options;
|
4166
4268
|
get options() {
|
@@ -4173,11 +4275,10 @@ var LocalThreadRuntimeCore = class {
|
|
4173
4275
|
this._options = options;
|
4174
4276
|
let hasUpdates = false;
|
4175
4277
|
const canSpeak = options.adapters?.speech !== void 0;
|
4176
|
-
if (this.capabilities.
|
4177
|
-
this.capabilities.
|
4278
|
+
if (this.capabilities.speech !== canSpeak) {
|
4279
|
+
this.capabilities.speech = canSpeak;
|
4178
4280
|
hasUpdates = true;
|
4179
4281
|
}
|
4180
|
-
this.composer.setAttachmentAdapter(options.adapters?.attachments);
|
4181
4282
|
const canAttach = options.adapters?.attachments !== void 0;
|
4182
4283
|
if (this.capabilities.attachments !== canAttach) {
|
4183
4284
|
this.capabilities.attachments = canAttach;
|
@@ -4190,30 +4291,6 @@ var LocalThreadRuntimeCore = class {
|
|
4190
4291
|
}
|
4191
4292
|
if (hasUpdates) this.notifySubscribers();
|
4192
4293
|
}
|
4193
|
-
_editComposers = /* @__PURE__ */ new Map();
|
4194
|
-
getEditComposer(messageId) {
|
4195
|
-
return this._editComposers.get(messageId);
|
4196
|
-
}
|
4197
|
-
beginEdit(messageId) {
|
4198
|
-
if (this._editComposers.has(messageId))
|
4199
|
-
throw new Error("Edit already in progress");
|
4200
|
-
this._editComposers.set(
|
4201
|
-
messageId,
|
4202
|
-
new DefaultEditComposerRuntimeCore(
|
4203
|
-
this,
|
4204
|
-
() => this._editComposers.delete(messageId),
|
4205
|
-
this.repository.getMessage(messageId)
|
4206
|
-
)
|
4207
|
-
);
|
4208
|
-
this.notifySubscribers();
|
4209
|
-
}
|
4210
|
-
getBranches(messageId) {
|
4211
|
-
return this.repository.getBranches(messageId);
|
4212
|
-
}
|
4213
|
-
switchToBranch(branchId) {
|
4214
|
-
this.repository.switchToBranch(branchId);
|
4215
|
-
this.notifySubscribers();
|
4216
|
-
}
|
4217
4294
|
async append(message) {
|
4218
4295
|
const newMessage = fromCoreMessage(message, {
|
4219
4296
|
attachments: message.attachments
|
@@ -4290,7 +4367,7 @@ var LocalThreadRuntimeCore = class {
|
|
4290
4367
|
const promiseOrGenerator = this.adapter.run({
|
4291
4368
|
messages: messages2,
|
4292
4369
|
abortSignal: this.abortController.signal,
|
4293
|
-
config: this.
|
4370
|
+
config: this.getModelConfig(),
|
4294
4371
|
onUpdate: updateMessage
|
4295
4372
|
});
|
4296
4373
|
if (Symbol.asyncIterator in promiseOrGenerator) {
|
@@ -4322,17 +4399,9 @@ var LocalThreadRuntimeCore = class {
|
|
4322
4399
|
return message;
|
4323
4400
|
}
|
4324
4401
|
cancelRun() {
|
4325
|
-
|
4326
|
-
this.abortController.abort();
|
4402
|
+
this.abortController?.abort();
|
4327
4403
|
this.abortController = null;
|
4328
4404
|
}
|
4329
|
-
notifySubscribers() {
|
4330
|
-
for (const callback of this._subscriptions) callback();
|
4331
|
-
}
|
4332
|
-
subscribe(callback) {
|
4333
|
-
this._subscriptions.add(callback);
|
4334
|
-
return () => this._subscriptions.delete(callback);
|
4335
|
-
}
|
4336
4405
|
addToolResult({
|
4337
4406
|
messageId,
|
4338
4407
|
toolCallId,
|
@@ -4366,49 +4435,6 @@ var LocalThreadRuntimeCore = class {
|
|
4366
4435
|
this.performRoundtrip(parentId, message);
|
4367
4436
|
}
|
4368
4437
|
}
|
4369
|
-
// TODO speech runtime?
|
4370
|
-
_stopSpeaking;
|
4371
|
-
speech = null;
|
4372
|
-
speak(messageId) {
|
4373
|
-
const adapter = this.options.adapters?.speech;
|
4374
|
-
if (!adapter) throw new Error("Speech adapter not configured");
|
4375
|
-
const { message } = this.repository.getMessage(messageId);
|
4376
|
-
this._stopSpeaking?.();
|
4377
|
-
const utterance = adapter.speak(message);
|
4378
|
-
const unsub = utterance.subscribe(() => {
|
4379
|
-
if (utterance.status.type === "ended") {
|
4380
|
-
this._stopSpeaking = void 0;
|
4381
|
-
this.speech = null;
|
4382
|
-
} else {
|
4383
|
-
this.speech = { messageId, status: utterance.status };
|
4384
|
-
}
|
4385
|
-
this.notifySubscribers();
|
4386
|
-
});
|
4387
|
-
this.speech = { messageId, status: utterance.status };
|
4388
|
-
this._stopSpeaking = () => {
|
4389
|
-
utterance.cancel();
|
4390
|
-
unsub();
|
4391
|
-
this.speech = null;
|
4392
|
-
this._stopSpeaking = void 0;
|
4393
|
-
};
|
4394
|
-
}
|
4395
|
-
stopSpeaking() {
|
4396
|
-
if (!this._stopSpeaking) throw new Error("No message is being spoken");
|
4397
|
-
this._stopSpeaking();
|
4398
|
-
}
|
4399
|
-
submitFeedback({ messageId, type }) {
|
4400
|
-
const adapter = this.options.adapters?.feedback;
|
4401
|
-
if (!adapter) throw new Error("Feedback adapter not configured");
|
4402
|
-
const { message } = this.repository.getMessage(messageId);
|
4403
|
-
adapter.submit({ message, type });
|
4404
|
-
}
|
4405
|
-
export() {
|
4406
|
-
return this.repository.export();
|
4407
|
-
}
|
4408
|
-
import(data) {
|
4409
|
-
this.repository.import(data);
|
4410
|
-
this.notifySubscribers();
|
4411
|
-
}
|
4412
4438
|
};
|
4413
4439
|
|
4414
4440
|
// src/runtimes/local/LocalRuntimeCore.tsx
|
@@ -4452,14 +4478,20 @@ var LocalRuntimeCore = class extends BaseAssistantRuntimeCore {
|
|
4452
4478
|
};
|
4453
4479
|
|
4454
4480
|
// src/runtimes/local/useLocalRuntime.tsx
|
4455
|
-
var
|
4456
|
-
constructor(core) {
|
4457
|
-
super(core,
|
4481
|
+
var LocalRuntimeImpl = class _LocalRuntimeImpl extends AssistantRuntimeImpl {
|
4482
|
+
constructor(core, thread) {
|
4483
|
+
super(core, thread);
|
4458
4484
|
this.core = core;
|
4459
4485
|
}
|
4460
4486
|
reset(options) {
|
4461
4487
|
this.core.reset(options);
|
4462
4488
|
}
|
4489
|
+
static create(_core) {
|
4490
|
+
return new _LocalRuntimeImpl(
|
4491
|
+
_core,
|
4492
|
+
AssistantRuntimeImpl.createThreadRuntime(_core, ThreadRuntimeImpl)
|
4493
|
+
);
|
4494
|
+
}
|
4463
4495
|
};
|
4464
4496
|
var useLocalRuntime = (adapter, options = {}) => {
|
4465
4497
|
const [runtime] = useState11(() => new LocalRuntimeCore(adapter, options));
|
@@ -4467,7 +4499,7 @@ var useLocalRuntime = (adapter, options = {}) => {
|
|
4467
4499
|
runtime.thread.adapter = adapter;
|
4468
4500
|
runtime.thread.options = options;
|
4469
4501
|
});
|
4470
|
-
return useMemo11(() =>
|
4502
|
+
return useMemo11(() => LocalRuntimeImpl.create(runtime), [runtime]);
|
4471
4503
|
};
|
4472
4504
|
|
4473
4505
|
// src/runtimes/external-store/useExternalStoreRuntime.tsx
|
@@ -4580,13 +4612,7 @@ var EMPTY_ARRAY2 = Object.freeze([]);
|
|
4580
4612
|
var hasUpcomingMessage = (isRunning, messages2) => {
|
4581
4613
|
return isRunning && messages2[messages2.length - 1]?.role !== "assistant";
|
4582
4614
|
};
|
4583
|
-
var ExternalStoreThreadRuntimeCore = class {
|
4584
|
-
constructor(configProvider, store) {
|
4585
|
-
this.configProvider = configProvider;
|
4586
|
-
this.store = store;
|
4587
|
-
}
|
4588
|
-
_subscriptions = /* @__PURE__ */ new Set();
|
4589
|
-
repository = new MessageRepository();
|
4615
|
+
var ExternalStoreThreadRuntimeCore = class extends BaseThreadRuntimeCore {
|
4590
4616
|
assistantOptimisticId = null;
|
4591
4617
|
_capabilities = {
|
4592
4618
|
switchToBranch: false,
|
@@ -4594,7 +4620,7 @@ var ExternalStoreThreadRuntimeCore = class {
|
|
4594
4620
|
reload: false,
|
4595
4621
|
cancel: false,
|
4596
4622
|
unstable_copy: false,
|
4597
|
-
|
4623
|
+
speech: false,
|
4598
4624
|
attachments: false,
|
4599
4625
|
feedback: false
|
4600
4626
|
};
|
@@ -4602,29 +4628,26 @@ var ExternalStoreThreadRuntimeCore = class {
|
|
4602
4628
|
return this._capabilities;
|
4603
4629
|
}
|
4604
4630
|
threadId;
|
4605
|
-
|
4631
|
+
_messages;
|
4606
4632
|
isDisabled;
|
4633
|
+
get messages() {
|
4634
|
+
return this._messages;
|
4635
|
+
}
|
4636
|
+
get adapters() {
|
4637
|
+
return this._store.adapters;
|
4638
|
+
}
|
4607
4639
|
suggestions = [];
|
4608
4640
|
extras = void 0;
|
4609
4641
|
_converter = new ThreadMessageConverter();
|
4610
4642
|
_store;
|
4611
|
-
composer = new DefaultThreadComposerRuntimeCore(this);
|
4612
|
-
_editComposers = /* @__PURE__ */ new Map();
|
4613
|
-
getEditComposer(messageId) {
|
4614
|
-
return this._editComposers.get(messageId);
|
4615
|
-
}
|
4616
4643
|
beginEdit(messageId) {
|
4617
|
-
if (this.
|
4618
|
-
throw new Error("
|
4619
|
-
|
4620
|
-
|
4621
|
-
|
4622
|
-
|
4623
|
-
|
4624
|
-
this.repository.getMessage(messageId)
|
4625
|
-
)
|
4626
|
-
);
|
4627
|
-
this.notifySubscribers();
|
4644
|
+
if (!this.store.onEdit)
|
4645
|
+
throw new Error("Runtime does not support editing.");
|
4646
|
+
super.beginEdit(messageId);
|
4647
|
+
}
|
4648
|
+
constructor(configProvider, store) {
|
4649
|
+
super(configProvider);
|
4650
|
+
this.store = store;
|
4628
4651
|
}
|
4629
4652
|
get store() {
|
4630
4653
|
return this._store;
|
@@ -4643,13 +4666,12 @@ var ExternalStoreThreadRuntimeCore = class {
|
|
4643
4666
|
edit: this._store.onEdit !== void 0,
|
4644
4667
|
reload: this._store.onReload !== void 0,
|
4645
4668
|
cancel: this._store.onCancel !== void 0,
|
4646
|
-
|
4669
|
+
speech: this._store.adapters?.speech !== void 0,
|
4647
4670
|
unstable_copy: this._store.unstable_capabilities?.copy !== false,
|
4648
4671
|
// default true
|
4649
4672
|
attachments: !!this.store.adapters?.attachments,
|
4650
4673
|
feedback: !!this.store.adapters?.feedback
|
4651
4674
|
};
|
4652
|
-
this.composer.setAttachmentAdapter(this._store.adapters?.attachments);
|
4653
4675
|
if (oldStore) {
|
4654
4676
|
if (oldStore.convertMessage !== store.convertMessage) {
|
4655
4677
|
this._converter = new ThreadMessageConverter();
|
@@ -4693,18 +4715,9 @@ var ExternalStoreThreadRuntimeCore = class {
|
|
4693
4715
|
this.repository.resetHead(
|
4694
4716
|
this.assistantOptimisticId ?? messages2.at(-1)?.id ?? null
|
4695
4717
|
);
|
4696
|
-
this.
|
4718
|
+
this._messages = this.repository.getMessages();
|
4697
4719
|
this.notifySubscribers();
|
4698
4720
|
}
|
4699
|
-
getModelConfig() {
|
4700
|
-
return this.configProvider.getModelConfig();
|
4701
|
-
}
|
4702
|
-
notifySubscribers() {
|
4703
|
-
for (const callback of this._subscriptions) callback();
|
4704
|
-
}
|
4705
|
-
getBranches(messageId) {
|
4706
|
-
return this.repository.getBranches(messageId);
|
4707
|
-
}
|
4708
4721
|
switchToBranch(branchId) {
|
4709
4722
|
if (!this._store.setMessages)
|
4710
4723
|
throw new Error("Runtime does not support switching branches.");
|
@@ -4753,60 +4766,11 @@ var ExternalStoreThreadRuntimeCore = class {
|
|
4753
4766
|
throw new Error("Runtime does not support tool results.");
|
4754
4767
|
this._store.onAddToolResult(options);
|
4755
4768
|
}
|
4756
|
-
// TODO speech runtime?
|
4757
|
-
_stopSpeaking;
|
4758
|
-
speech = null;
|
4759
|
-
speak(messageId) {
|
4760
|
-
let adapter = this.store.adapters?.speech;
|
4761
|
-
if (!adapter && this.store.onSpeak) {
|
4762
|
-
adapter = { speak: this.store.onSpeak };
|
4763
|
-
}
|
4764
|
-
if (!adapter) throw new Error("Speech adapter not configured");
|
4765
|
-
const { message } = this.repository.getMessage(messageId);
|
4766
|
-
this._stopSpeaking?.();
|
4767
|
-
const utterance = adapter.speak(message);
|
4768
|
-
const unsub = utterance.subscribe(() => {
|
4769
|
-
if (utterance.status.type === "ended") {
|
4770
|
-
this._stopSpeaking = void 0;
|
4771
|
-
this.speech = null;
|
4772
|
-
} else {
|
4773
|
-
this.speech = { messageId, status: utterance.status };
|
4774
|
-
}
|
4775
|
-
this.notifySubscribers();
|
4776
|
-
});
|
4777
|
-
this.speech = { messageId, status: utterance.status };
|
4778
|
-
this._stopSpeaking = () => {
|
4779
|
-
utterance.cancel();
|
4780
|
-
unsub();
|
4781
|
-
this.speech = null;
|
4782
|
-
this._stopSpeaking = void 0;
|
4783
|
-
};
|
4784
|
-
}
|
4785
|
-
stopSpeaking() {
|
4786
|
-
if (!this._stopSpeaking) throw new Error("No message is being spoken");
|
4787
|
-
this._stopSpeaking();
|
4788
|
-
}
|
4789
|
-
submitFeedback({ messageId, type }) {
|
4790
|
-
const adapter = this._store.adapters?.feedback;
|
4791
|
-
if (!adapter) throw new Error("Feedback adapter not configured");
|
4792
|
-
const { message } = this.repository.getMessage(messageId);
|
4793
|
-
adapter.submit({ message, type });
|
4794
|
-
}
|
4795
|
-
subscribe(callback) {
|
4796
|
-
this._subscriptions.add(callback);
|
4797
|
-
return () => this._subscriptions.delete(callback);
|
4798
|
-
}
|
4799
4769
|
updateMessages = (messages2) => {
|
4800
4770
|
this._store.setMessages?.(
|
4801
4771
|
messages2.flatMap(getExternalStoreMessage).filter((m) => m != null)
|
4802
4772
|
);
|
4803
4773
|
};
|
4804
|
-
import(repository) {
|
4805
|
-
this.repository.import(repository);
|
4806
|
-
}
|
4807
|
-
export() {
|
4808
|
-
return this.repository.export();
|
4809
|
-
}
|
4810
4774
|
};
|
4811
4775
|
|
4812
4776
|
// src/runtimes/external-store/ExternalStoreRuntimeCore.tsx
|
@@ -4861,7 +4825,7 @@ var useExternalStoreRuntime = (store) => {
|
|
4861
4825
|
runtime.thread.store = store;
|
4862
4826
|
});
|
4863
4827
|
return useMemo12(
|
4864
|
-
() =>
|
4828
|
+
() => AssistantRuntimeImpl.create(runtime, ThreadRuntimeImpl),
|
4865
4829
|
[runtime]
|
4866
4830
|
);
|
4867
4831
|
};
|
@@ -5281,8 +5245,8 @@ var useAllowCopy = (ensureCapability = false) => {
|
|
5281
5245
|
};
|
5282
5246
|
var useAllowSpeak = (ensureCapability = false) => {
|
5283
5247
|
const { assistantMessage: { allowSpeak = true } = {} } = useThreadConfig();
|
5284
|
-
const
|
5285
|
-
return allowSpeak && (!ensureCapability ||
|
5248
|
+
const speechSupported = useThread((t) => t.capabilities.speech);
|
5249
|
+
return allowSpeak && (!ensureCapability || speechSupported);
|
5286
5250
|
};
|
5287
5251
|
var useAllowReload = (ensureCapability = false) => {
|
5288
5252
|
const { assistantMessage: { allowReload = true } = {} } = useThreadConfig();
|
@@ -5598,15 +5562,15 @@ var assistant_message_default = Object.assign(
|
|
5598
5562
|
);
|
5599
5563
|
|
5600
5564
|
// src/ui/assistant-modal.tsx
|
5601
|
-
import { forwardRef as
|
5565
|
+
import { forwardRef as forwardRef35 } from "react";
|
5602
5566
|
import { BotIcon, ChevronDownIcon } from "lucide-react";
|
5603
5567
|
|
5604
5568
|
// src/ui/thread.tsx
|
5605
|
-
import { forwardRef as
|
5569
|
+
import { forwardRef as forwardRef34 } from "react";
|
5606
5570
|
import { ArrowDownIcon } from "lucide-react";
|
5607
5571
|
|
5608
5572
|
// src/ui/composer.tsx
|
5609
|
-
import { forwardRef as
|
5573
|
+
import { forwardRef as forwardRef29 } from "react";
|
5610
5574
|
import { PaperclipIcon, SendHorizontalIcon } from "lucide-react";
|
5611
5575
|
|
5612
5576
|
// src/ui/base/CircleStopIcon.tsx
|
@@ -5626,51 +5590,171 @@ var CircleStopIcon = () => {
|
|
5626
5590
|
};
|
5627
5591
|
CircleStopIcon.displayName = "CircleStopIcon";
|
5628
5592
|
|
5629
|
-
// src/ui/
|
5630
|
-
import {
|
5631
|
-
|
5593
|
+
// src/ui/attachment.tsx
|
5594
|
+
import {
|
5595
|
+
forwardRef as forwardRef28,
|
5596
|
+
useEffect as useEffect15,
|
5597
|
+
useState as useState14
|
5598
|
+
} from "react";
|
5599
|
+
import { CircleXIcon, FileIcon } from "lucide-react";
|
5600
|
+
|
5601
|
+
// src/ui/base/dialog.tsx
|
5602
|
+
import * as React from "react";
|
5603
|
+
import * as DialogPrimitive from "@radix-ui/react-dialog";
|
5604
|
+
import classNames3 from "classnames";
|
5632
5605
|
import { jsx as jsx45, jsxs as jsxs8 } from "react/jsx-runtime";
|
5633
|
-
var
|
5634
|
-
|
5606
|
+
var Dialog = DialogPrimitive.Root;
|
5607
|
+
var DialogTrigger = DialogPrimitive.Trigger;
|
5608
|
+
var DialogPortal = DialogPrimitive.Portal;
|
5609
|
+
var DialogOverlay = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx45(
|
5610
|
+
DialogPrimitive.Overlay,
|
5611
|
+
{
|
5612
|
+
ref,
|
5613
|
+
className: classNames3("aui-dialog-overlay", className),
|
5614
|
+
...props
|
5615
|
+
}
|
5616
|
+
));
|
5617
|
+
DialogOverlay.displayName = DialogPrimitive.Overlay.displayName;
|
5618
|
+
var DialogContent = React.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs8(DialogPortal, { children: [
|
5619
|
+
/* @__PURE__ */ jsx45(DialogOverlay, {}),
|
5620
|
+
/* @__PURE__ */ jsx45(
|
5621
|
+
DialogPrimitive.Content,
|
5622
|
+
{
|
5623
|
+
ref,
|
5624
|
+
className: classNames3("aui-dialog-content", className),
|
5625
|
+
...props,
|
5626
|
+
children
|
5627
|
+
}
|
5628
|
+
)
|
5629
|
+
] }));
|
5630
|
+
DialogContent.displayName = DialogPrimitive.Content.displayName;
|
5631
|
+
|
5632
|
+
// src/ui/attachment.tsx
|
5633
|
+
import { AvatarFallback as AvatarFallback2 } from "@radix-ui/react-avatar";
|
5634
|
+
import { jsx as jsx46, jsxs as jsxs9 } from "react/jsx-runtime";
|
5635
|
+
var AttachmentRoot = withDefaults(attachment_exports.Root, {
|
5636
|
+
className: "aui-attachment-root"
|
5635
5637
|
});
|
5636
|
-
|
5637
|
-
var
|
5638
|
-
|
5639
|
-
|
5640
|
-
|
5638
|
+
AttachmentRoot.displayName = "AttachmentRoot";
|
5639
|
+
var useFileSrc = (file) => {
|
5640
|
+
const [src, setSrc] = useState14(void 0);
|
5641
|
+
useEffect15(() => {
|
5642
|
+
if (!file) {
|
5643
|
+
setSrc(void 0);
|
5644
|
+
return;
|
5645
|
+
}
|
5646
|
+
const objectUrl = URL.createObjectURL(file);
|
5647
|
+
setSrc(objectUrl);
|
5648
|
+
return () => {
|
5649
|
+
URL.revokeObjectURL(objectUrl);
|
5650
|
+
};
|
5651
|
+
}, [file]);
|
5652
|
+
return src;
|
5653
|
+
};
|
5654
|
+
var useAttachmentSrc = () => {
|
5655
|
+
const { file, src } = useAttachment((a) => {
|
5656
|
+
if (a.type !== "image") return {};
|
5657
|
+
if (a.file) return { file: a.file };
|
5658
|
+
const src2 = a.content?.filter((c) => c.type === "image")[0]?.image;
|
5659
|
+
if (!src2) return {};
|
5660
|
+
return { src: src2 };
|
5661
|
+
});
|
5662
|
+
return useFileSrc(file) ?? src;
|
5663
|
+
};
|
5664
|
+
var AttachmentPreview = ({ src }) => {
|
5665
|
+
const [isLoaded, setIsLoaded] = useState14(false);
|
5666
|
+
return (
|
5667
|
+
// eslint-disable-next-line @next/next/no-img-element
|
5668
|
+
/* @__PURE__ */ jsx46(
|
5669
|
+
"img",
|
5670
|
+
{
|
5671
|
+
src,
|
5672
|
+
style: {
|
5673
|
+
width: "auto",
|
5674
|
+
height: "auto",
|
5675
|
+
maxWidth: "75dvh",
|
5676
|
+
maxHeight: "75dvh",
|
5677
|
+
display: isLoaded ? "block" : "none",
|
5678
|
+
overflow: "clip"
|
5679
|
+
},
|
5680
|
+
onLoad: () => setIsLoaded(true),
|
5681
|
+
alt: "Image Preview"
|
5682
|
+
}
|
5683
|
+
)
|
5684
|
+
);
|
5685
|
+
};
|
5686
|
+
var AttachmentPreviewDialog = ({ children }) => {
|
5687
|
+
const src = useAttachmentSrc();
|
5688
|
+
if (!src) return children;
|
5689
|
+
return /* @__PURE__ */ jsxs9(Dialog, { children: [
|
5690
|
+
/* @__PURE__ */ jsx46(DialogTrigger, { className: "aui-attachment-preview-trigger", asChild: true, children }),
|
5691
|
+
/* @__PURE__ */ jsx46(DialogContent, { children: /* @__PURE__ */ jsx46(AttachmentPreview, { src }) })
|
5692
|
+
] });
|
5693
|
+
};
|
5694
|
+
var AttachmentThumb = () => {
|
5695
|
+
const isImage = useAttachment((a) => a.type === "image");
|
5696
|
+
const src = useAttachmentSrc();
|
5697
|
+
return /* @__PURE__ */ jsxs9(AvatarRoot, { className: "aui-attachment-thumb", children: [
|
5698
|
+
/* @__PURE__ */ jsx46(AvatarFallback2, { delayMs: isImage ? 200 : 0, children: /* @__PURE__ */ jsx46(FileIcon, {}) }),
|
5699
|
+
/* @__PURE__ */ jsx46(AvatarImage, { src })
|
5641
5700
|
] });
|
5642
5701
|
};
|
5643
|
-
|
5644
|
-
|
5702
|
+
var Attachment = () => {
|
5703
|
+
const canRemove = useAttachment((a) => a.source !== "message");
|
5704
|
+
const typeLabel = useAttachment((a) => {
|
5705
|
+
const type = a.type;
|
5706
|
+
switch (type) {
|
5707
|
+
case "image":
|
5708
|
+
return "Image";
|
5709
|
+
case "document":
|
5710
|
+
return "Document";
|
5711
|
+
case "file":
|
5712
|
+
return "File";
|
5713
|
+
default:
|
5714
|
+
const _exhaustiveCheck = type;
|
5715
|
+
throw new Error(`Unknown attachment type: ${_exhaustiveCheck}`);
|
5716
|
+
}
|
5717
|
+
});
|
5718
|
+
return /* @__PURE__ */ jsxs9(Tooltip, { children: [
|
5719
|
+
/* @__PURE__ */ jsx46(AttachmentPreviewDialog, { children: /* @__PURE__ */ jsx46(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsxs9(AttachmentRoot, { children: [
|
5720
|
+
/* @__PURE__ */ jsx46(AttachmentThumb, {}),
|
5721
|
+
/* @__PURE__ */ jsxs9("div", { className: "aui-attachment-text", children: [
|
5722
|
+
/* @__PURE__ */ jsx46("p", { className: "aui-attachment-name", children: /* @__PURE__ */ jsx46(attachment_exports.Name, {}) }),
|
5723
|
+
/* @__PURE__ */ jsx46("p", { className: "aui-attachment-type", children: typeLabel })
|
5724
|
+
] }),
|
5725
|
+
canRemove && /* @__PURE__ */ jsx46(AttachmentRemove, {})
|
5726
|
+
] }) }) }),
|
5727
|
+
/* @__PURE__ */ jsx46(TooltipContent, { side: "top", children: /* @__PURE__ */ jsx46(attachment_exports.Name, {}) })
|
5728
|
+
] });
|
5729
|
+
};
|
5730
|
+
Attachment.displayName = "Attachment";
|
5731
|
+
var AttachmentRemove = forwardRef28((props, ref) => {
|
5645
5732
|
const {
|
5646
5733
|
strings: {
|
5647
5734
|
composer: { removeAttachment: { tooltip = "Remove file" } = {} } = {}
|
5648
5735
|
} = {}
|
5649
5736
|
} = useThreadConfig();
|
5650
|
-
return /* @__PURE__ */
|
5737
|
+
return /* @__PURE__ */ jsx46(attachment_exports.Remove, { asChild: true, children: /* @__PURE__ */ jsx46(
|
5651
5738
|
TooltipIconButton,
|
5652
5739
|
{
|
5653
5740
|
tooltip,
|
5654
|
-
className: "aui-
|
5741
|
+
className: "aui-attachment-remove",
|
5655
5742
|
side: "top",
|
5656
5743
|
...props,
|
5657
5744
|
ref,
|
5658
|
-
children: props.children ?? /* @__PURE__ */
|
5745
|
+
children: props.children ?? /* @__PURE__ */ jsx46(CircleXIcon, {})
|
5659
5746
|
}
|
5660
5747
|
) });
|
5661
5748
|
});
|
5662
|
-
|
5749
|
+
AttachmentRemove.displayName = "AttachmentRemove";
|
5663
5750
|
var exports5 = {
|
5664
|
-
Root:
|
5665
|
-
Remove:
|
5751
|
+
Root: AttachmentRoot,
|
5752
|
+
Remove: AttachmentRemove
|
5666
5753
|
};
|
5667
|
-
var
|
5668
|
-
ComposerAttachment2,
|
5669
|
-
exports5
|
5670
|
-
);
|
5754
|
+
var attachment_default = Object.assign(Attachment, exports5);
|
5671
5755
|
|
5672
5756
|
// src/ui/composer.tsx
|
5673
|
-
import { Fragment as Fragment6, jsx as
|
5757
|
+
import { Fragment as Fragment6, jsx as jsx47, jsxs as jsxs10 } from "react/jsx-runtime";
|
5674
5758
|
var useAllowAttachments = (ensureCapability = false) => {
|
5675
5759
|
const { composer: { allowAttachments = true } = {} } = useThreadConfig();
|
5676
5760
|
const attachmentsSupported = useThread((t) => t.capabilities.attachments);
|
@@ -5678,11 +5762,11 @@ var useAllowAttachments = (ensureCapability = false) => {
|
|
5678
5762
|
};
|
5679
5763
|
var Composer = () => {
|
5680
5764
|
const allowAttachments = useAllowAttachments(true);
|
5681
|
-
return /* @__PURE__ */
|
5682
|
-
allowAttachments && /* @__PURE__ */
|
5683
|
-
allowAttachments && /* @__PURE__ */
|
5684
|
-
/* @__PURE__ */
|
5685
|
-
/* @__PURE__ */
|
5765
|
+
return /* @__PURE__ */ jsxs10(ComposerRoot, { children: [
|
5766
|
+
allowAttachments && /* @__PURE__ */ jsx47(ComposerAttachments, {}),
|
5767
|
+
allowAttachments && /* @__PURE__ */ jsx47(ComposerAddAttachment, {}),
|
5768
|
+
/* @__PURE__ */ jsx47(ComposerInput, { autoFocus: true }),
|
5769
|
+
/* @__PURE__ */ jsx47(ComposerAction, {})
|
5686
5770
|
] });
|
5687
5771
|
};
|
5688
5772
|
Composer.displayName = "Composer";
|
@@ -5695,14 +5779,14 @@ var ComposerInputStyled = withDefaults(composer_exports.Input, {
|
|
5695
5779
|
autoFocus: true,
|
5696
5780
|
className: "aui-composer-input"
|
5697
5781
|
});
|
5698
|
-
var ComposerInput =
|
5782
|
+
var ComposerInput = forwardRef29(
|
5699
5783
|
(props, ref) => {
|
5700
5784
|
const {
|
5701
5785
|
strings: {
|
5702
5786
|
composer: { input: { placeholder = "Write a message..." } = {} } = {}
|
5703
5787
|
} = {}
|
5704
5788
|
} = useThreadConfig();
|
5705
|
-
return /* @__PURE__ */
|
5789
|
+
return /* @__PURE__ */ jsx47(ComposerInputStyled, { placeholder, ...props, ref });
|
5706
5790
|
}
|
5707
5791
|
);
|
5708
5792
|
ComposerInput.displayName = "ComposerInput";
|
@@ -5710,12 +5794,12 @@ var ComposerAttachmentsContainer = withDefaults("div", {
|
|
5710
5794
|
className: "aui-composer-attachments"
|
5711
5795
|
});
|
5712
5796
|
var ComposerAttachments = ({ components }) => {
|
5713
|
-
return /* @__PURE__ */
|
5797
|
+
return /* @__PURE__ */ jsx47(ComposerAttachmentsContainer, { children: /* @__PURE__ */ jsx47(
|
5714
5798
|
composer_exports.Attachments,
|
5715
5799
|
{
|
5716
5800
|
components: {
|
5717
5801
|
...components,
|
5718
|
-
Attachment: components?.Attachment ??
|
5802
|
+
Attachment: components?.Attachment ?? attachment_default
|
5719
5803
|
}
|
5720
5804
|
}
|
5721
5805
|
) });
|
@@ -5724,21 +5808,21 @@ var ComposerAttachButton = withDefaults(TooltipIconButton, {
|
|
5724
5808
|
variant: "default",
|
5725
5809
|
className: "aui-composer-attach"
|
5726
5810
|
});
|
5727
|
-
var ComposerAddAttachment =
|
5811
|
+
var ComposerAddAttachment = forwardRef29((props, ref) => {
|
5728
5812
|
const {
|
5729
5813
|
strings: {
|
5730
5814
|
composer: { addAttachment: { tooltip = "Attach file" } = {} } = {}
|
5731
5815
|
} = {}
|
5732
5816
|
} = useThreadConfig();
|
5733
5817
|
const allowAttachments = useAllowAttachments();
|
5734
|
-
return /* @__PURE__ */
|
5818
|
+
return /* @__PURE__ */ jsx47(composer_exports.AddAttachment, { disabled: !allowAttachments, asChild: true, children: /* @__PURE__ */ jsx47(
|
5735
5819
|
ComposerAttachButton,
|
5736
5820
|
{
|
5737
5821
|
tooltip,
|
5738
5822
|
variant: "ghost",
|
5739
5823
|
...props,
|
5740
5824
|
ref,
|
5741
|
-
children: props.children ?? /* @__PURE__ */
|
5825
|
+
children: props.children ?? /* @__PURE__ */ jsx47(PaperclipIcon, {})
|
5742
5826
|
}
|
5743
5827
|
) });
|
5744
5828
|
});
|
@@ -5749,10 +5833,10 @@ var useAllowCancel = () => {
|
|
5749
5833
|
};
|
5750
5834
|
var ComposerAction = () => {
|
5751
5835
|
const allowCancel = useAllowCancel();
|
5752
|
-
if (!allowCancel) return /* @__PURE__ */
|
5753
|
-
return /* @__PURE__ */
|
5754
|
-
/* @__PURE__ */
|
5755
|
-
/* @__PURE__ */
|
5836
|
+
if (!allowCancel) return /* @__PURE__ */ jsx47(ComposerSend, {});
|
5837
|
+
return /* @__PURE__ */ jsxs10(Fragment6, { children: [
|
5838
|
+
/* @__PURE__ */ jsx47(thread_exports.If, { running: false, children: /* @__PURE__ */ jsx47(ComposerSend, {}) }),
|
5839
|
+
/* @__PURE__ */ jsx47(thread_exports.If, { running: true, children: /* @__PURE__ */ jsx47(ComposerCancel, {}) })
|
5756
5840
|
] });
|
5757
5841
|
};
|
5758
5842
|
ComposerAction.displayName = "ComposerAction";
|
@@ -5760,12 +5844,12 @@ var ComposerSendButton = withDefaults(TooltipIconButton, {
|
|
5760
5844
|
variant: "default",
|
5761
5845
|
className: "aui-composer-send"
|
5762
5846
|
});
|
5763
|
-
var ComposerSend =
|
5847
|
+
var ComposerSend = forwardRef29(
|
5764
5848
|
(props, ref) => {
|
5765
5849
|
const {
|
5766
5850
|
strings: { composer: { send: { tooltip = "Send" } = {} } = {} } = {}
|
5767
5851
|
} = useThreadConfig();
|
5768
|
-
return /* @__PURE__ */
|
5852
|
+
return /* @__PURE__ */ jsx47(composer_exports.Send, { asChild: true, children: /* @__PURE__ */ jsx47(ComposerSendButton, { tooltip, ...props, ref, children: props.children ?? /* @__PURE__ */ jsx47(SendHorizontalIcon, {}) }) });
|
5769
5853
|
}
|
5770
5854
|
);
|
5771
5855
|
ComposerSend.displayName = "ComposerSend";
|
@@ -5773,12 +5857,12 @@ var ComposerCancelButton = withDefaults(TooltipIconButton, {
|
|
5773
5857
|
variant: "default",
|
5774
5858
|
className: "aui-composer-cancel"
|
5775
5859
|
});
|
5776
|
-
var ComposerCancel =
|
5860
|
+
var ComposerCancel = forwardRef29(
|
5777
5861
|
(props, ref) => {
|
5778
5862
|
const {
|
5779
5863
|
strings: { composer: { cancel: { tooltip = "Cancel" } = {} } = {} } = {}
|
5780
5864
|
} = useThreadConfig();
|
5781
|
-
return /* @__PURE__ */
|
5865
|
+
return /* @__PURE__ */ jsx47(composer_exports.Cancel, { asChild: true, children: /* @__PURE__ */ jsx47(ComposerCancelButton, { tooltip, ...props, ref, children: props.children ?? /* @__PURE__ */ jsx47(CircleStopIcon, {}) }) });
|
5782
5866
|
}
|
5783
5867
|
);
|
5784
5868
|
ComposerCancel.displayName = "ComposerCancel";
|
@@ -5794,15 +5878,15 @@ var exports6 = {
|
|
5794
5878
|
var composer_default = Object.assign(Composer, exports6);
|
5795
5879
|
|
5796
5880
|
// src/ui/thread-welcome.tsx
|
5797
|
-
import { forwardRef as
|
5798
|
-
import { jsx as
|
5881
|
+
import { forwardRef as forwardRef30 } from "react";
|
5882
|
+
import { jsx as jsx48, jsxs as jsxs11 } from "react/jsx-runtime";
|
5799
5883
|
var ThreadWelcome = () => {
|
5800
|
-
return /* @__PURE__ */
|
5801
|
-
/* @__PURE__ */
|
5802
|
-
/* @__PURE__ */
|
5803
|
-
/* @__PURE__ */
|
5884
|
+
return /* @__PURE__ */ jsxs11(ThreadWelcomeRoot, { children: [
|
5885
|
+
/* @__PURE__ */ jsxs11(ThreadWelcomeCenter, { children: [
|
5886
|
+
/* @__PURE__ */ jsx48(ThreadWelcomeAvatar, {}),
|
5887
|
+
/* @__PURE__ */ jsx48(ThreadWelcomeMessage, {})
|
5804
5888
|
] }),
|
5805
|
-
/* @__PURE__ */
|
5889
|
+
/* @__PURE__ */ jsx48(ThreadWelcomeSuggestions, {})
|
5806
5890
|
] });
|
5807
5891
|
};
|
5808
5892
|
ThreadWelcome.displayName = "ThreadWelcome";
|
@@ -5812,20 +5896,20 @@ var ThreadWelcomeRootStyled = withDefaults("div", {
|
|
5812
5896
|
var ThreadWelcomeCenter = withDefaults("div", {
|
5813
5897
|
className: "aui-thread-welcome-center"
|
5814
5898
|
});
|
5815
|
-
var ThreadWelcomeRoot =
|
5816
|
-
return /* @__PURE__ */
|
5899
|
+
var ThreadWelcomeRoot = forwardRef30((props, ref) => {
|
5900
|
+
return /* @__PURE__ */ jsx48(thread_exports.Empty, { children: /* @__PURE__ */ jsx48(ThreadWelcomeRootStyled, { ...props, ref }) });
|
5817
5901
|
});
|
5818
5902
|
ThreadWelcomeRoot.displayName = "ThreadWelcomeRoot";
|
5819
5903
|
var ThreadWelcomeAvatar = () => {
|
5820
5904
|
const { assistantAvatar: avatar = { fallback: "A" } } = useThreadConfig();
|
5821
|
-
return /* @__PURE__ */
|
5905
|
+
return /* @__PURE__ */ jsx48(Avatar, { ...avatar });
|
5822
5906
|
};
|
5823
5907
|
var ThreadWelcomeMessageStyled = withDefaults("p", {
|
5824
5908
|
className: "aui-thread-welcome-message"
|
5825
5909
|
});
|
5826
|
-
var ThreadWelcomeMessage =
|
5910
|
+
var ThreadWelcomeMessage = forwardRef30(({ message: messageProp, ...rest }, ref) => {
|
5827
5911
|
const { welcome: { message = "How can I help you today?" } = {} } = useThreadConfig();
|
5828
|
-
return /* @__PURE__ */
|
5912
|
+
return /* @__PURE__ */ jsx48(ThreadWelcomeMessageStyled, { ...rest, ref, children: messageProp ?? message });
|
5829
5913
|
});
|
5830
5914
|
ThreadWelcomeMessage.displayName = "ThreadWelcomeMessage";
|
5831
5915
|
var ThreadWelcomeSuggestionContainer = withDefaults("div", {
|
@@ -5837,15 +5921,15 @@ var ThreadWelcomeSuggestionStyled = withDefaults(thread_exports.Suggestion, {
|
|
5837
5921
|
var ThreadWelcomeSuggestion = ({
|
5838
5922
|
suggestion: { text, prompt }
|
5839
5923
|
}) => {
|
5840
|
-
return /* @__PURE__ */
|
5924
|
+
return /* @__PURE__ */ jsx48(ThreadWelcomeSuggestionStyled, { prompt, method: "replace", autoSend: true, children: /* @__PURE__ */ jsx48("span", { className: "aui-thread-welcome-suggestion-text", children: text ?? prompt }) });
|
5841
5925
|
};
|
5842
5926
|
var ThreadWelcomeSuggestions = () => {
|
5843
5927
|
const suggestions2 = useThread((t) => t.suggestions);
|
5844
5928
|
const { welcome: { suggestions } = {} } = useThreadConfig();
|
5845
5929
|
const finalSuggestions = suggestions2.length ? suggestions2 : suggestions;
|
5846
|
-
return /* @__PURE__ */
|
5930
|
+
return /* @__PURE__ */ jsx48(ThreadWelcomeSuggestionContainer, { children: finalSuggestions?.map((suggestion, idx) => {
|
5847
5931
|
const key = `${suggestion.prompt}-${idx}`;
|
5848
|
-
return /* @__PURE__ */
|
5932
|
+
return /* @__PURE__ */ jsx48(ThreadWelcomeSuggestion, { suggestion }, key);
|
5849
5933
|
}) });
|
5850
5934
|
};
|
5851
5935
|
ThreadWelcomeSuggestions.displayName = "ThreadWelcomeSuggestions";
|
@@ -5860,12 +5944,12 @@ var exports7 = {
|
|
5860
5944
|
var thread_welcome_default = Object.assign(ThreadWelcome, exports7);
|
5861
5945
|
|
5862
5946
|
// src/ui/user-message.tsx
|
5863
|
-
import { forwardRef as
|
5947
|
+
import { forwardRef as forwardRef32 } from "react";
|
5864
5948
|
|
5865
5949
|
// src/ui/user-action-bar.tsx
|
5866
|
-
import { forwardRef as
|
5950
|
+
import { forwardRef as forwardRef31 } from "react";
|
5867
5951
|
import { PencilIcon } from "lucide-react";
|
5868
|
-
import { jsx as
|
5952
|
+
import { jsx as jsx49 } from "react/jsx-runtime";
|
5869
5953
|
var useAllowEdit = (ensureCapability = false) => {
|
5870
5954
|
const { userMessage: { allowEdit = true } = {} } = useThreadConfig();
|
5871
5955
|
const editSupported = useThread((t) => t.capabilities.edit);
|
@@ -5874,19 +5958,19 @@ var useAllowEdit = (ensureCapability = false) => {
|
|
5874
5958
|
var UserActionBar = () => {
|
5875
5959
|
const allowEdit = useAllowEdit(true);
|
5876
5960
|
if (!allowEdit) return null;
|
5877
|
-
return /* @__PURE__ */
|
5961
|
+
return /* @__PURE__ */ jsx49(UserActionBarRoot, { hideWhenRunning: true, autohide: "not-last", children: /* @__PURE__ */ jsx49(UserActionBarEdit, {}) });
|
5878
5962
|
};
|
5879
5963
|
UserActionBar.displayName = "UserActionBar";
|
5880
5964
|
var UserActionBarRoot = withDefaults(actionBar_exports.Root, {
|
5881
5965
|
className: "aui-user-action-bar-root"
|
5882
5966
|
});
|
5883
5967
|
UserActionBarRoot.displayName = "UserActionBarRoot";
|
5884
|
-
var UserActionBarEdit =
|
5968
|
+
var UserActionBarEdit = forwardRef31((props, ref) => {
|
5885
5969
|
const {
|
5886
5970
|
strings: { userMessage: { edit: { tooltip = "Edit" } = {} } = {} } = {}
|
5887
5971
|
} = useThreadConfig();
|
5888
5972
|
const allowEdit = useAllowEdit();
|
5889
|
-
return /* @__PURE__ */
|
5973
|
+
return /* @__PURE__ */ jsx49(actionBar_exports.Edit, { disabled: !allowEdit, asChild: true, children: /* @__PURE__ */ jsx49(TooltipIconButton, { tooltip, ...props, ref, children: props.children ?? /* @__PURE__ */ jsx49(PencilIcon, {}) }) });
|
5890
5974
|
});
|
5891
5975
|
UserActionBarEdit.displayName = "UserActionBarEdit";
|
5892
5976
|
var exports8 = {
|
@@ -5895,31 +5979,15 @@ var exports8 = {
|
|
5895
5979
|
};
|
5896
5980
|
var user_action_bar_default = Object.assign(UserActionBar, exports8);
|
5897
5981
|
|
5898
|
-
// src/ui/user-message-attachment.tsx
|
5899
|
-
import { jsx as jsx49 } from "react/jsx-runtime";
|
5900
|
-
var UserMessageAttachmentRoot = withDefaults(attachment_exports.Root, {
|
5901
|
-
className: "aui-user-message-attachment-root"
|
5902
|
-
});
|
5903
|
-
UserMessageAttachmentRoot.displayName = "UserMessageAttachmentRoot";
|
5904
|
-
var UserMessageAttachment = () => {
|
5905
|
-
return /* @__PURE__ */ jsx49(UserMessageAttachmentRoot, { children: /* @__PURE__ */ jsx49(attachment_exports.unstable_Thumb, {}) });
|
5906
|
-
};
|
5907
|
-
UserMessageAttachment.displayName = "UserMessageAttachment";
|
5908
|
-
var exports9 = {
|
5909
|
-
Root: UserMessageAttachmentRoot
|
5910
|
-
};
|
5911
|
-
var user_message_attachment_default = Object.assign(
|
5912
|
-
UserMessageAttachment,
|
5913
|
-
exports9
|
5914
|
-
);
|
5915
|
-
|
5916
5982
|
// src/ui/user-message.tsx
|
5917
|
-
import { jsx as jsx50, jsxs as
|
5983
|
+
import { jsx as jsx50, jsxs as jsxs12 } from "react/jsx-runtime";
|
5918
5984
|
var UserMessage = () => {
|
5919
|
-
return /* @__PURE__ */
|
5985
|
+
return /* @__PURE__ */ jsxs12(UserMessageRoot, { children: [
|
5920
5986
|
/* @__PURE__ */ jsx50(UserMessageAttachments, {}),
|
5921
|
-
/* @__PURE__ */
|
5922
|
-
|
5987
|
+
/* @__PURE__ */ jsxs12(message_exports.If, { hasContent: true, children: [
|
5988
|
+
/* @__PURE__ */ jsx50(user_action_bar_default, {}),
|
5989
|
+
/* @__PURE__ */ jsx50(UserMessageContent, {})
|
5990
|
+
] }),
|
5923
5991
|
/* @__PURE__ */ jsx50(branch_picker_default, {})
|
5924
5992
|
] });
|
5925
5993
|
};
|
@@ -5931,7 +5999,7 @@ UserMessageRoot.displayName = "UserMessageRoot";
|
|
5931
5999
|
var UserMessageContentWrapper = withDefaults("div", {
|
5932
6000
|
className: "aui-user-message-content"
|
5933
6001
|
});
|
5934
|
-
var UserMessageContent =
|
6002
|
+
var UserMessageContent = forwardRef32(({ components, ...props }, ref) => {
|
5935
6003
|
return /* @__PURE__ */ jsx50(UserMessageContentWrapper, { ...props, ref, children: /* @__PURE__ */ jsx50(
|
5936
6004
|
message_exports.Content,
|
5937
6005
|
{
|
@@ -5954,25 +6022,25 @@ var UserMessageAttachments = ({
|
|
5954
6022
|
{
|
5955
6023
|
components: {
|
5956
6024
|
...components,
|
5957
|
-
Attachment: components?.Attachment ??
|
6025
|
+
Attachment: components?.Attachment ?? attachment_default
|
5958
6026
|
}
|
5959
6027
|
}
|
5960
6028
|
) }) });
|
5961
6029
|
};
|
5962
|
-
var
|
6030
|
+
var exports9 = {
|
5963
6031
|
Root: UserMessageRoot,
|
5964
6032
|
Content: UserMessageContent,
|
5965
6033
|
Attachments: UserMessageAttachments
|
5966
6034
|
};
|
5967
|
-
var user_message_default = Object.assign(UserMessage,
|
6035
|
+
var user_message_default = Object.assign(UserMessage, exports9);
|
5968
6036
|
|
5969
6037
|
// src/ui/edit-composer.tsx
|
5970
|
-
import { forwardRef as
|
5971
|
-
import { jsx as jsx51, jsxs as
|
6038
|
+
import { forwardRef as forwardRef33 } from "react";
|
6039
|
+
import { jsx as jsx51, jsxs as jsxs13 } from "react/jsx-runtime";
|
5972
6040
|
var EditComposer = () => {
|
5973
|
-
return /* @__PURE__ */
|
6041
|
+
return /* @__PURE__ */ jsxs13(EditComposerRoot, { children: [
|
5974
6042
|
/* @__PURE__ */ jsx51(EditComposerInput, {}),
|
5975
|
-
/* @__PURE__ */
|
6043
|
+
/* @__PURE__ */ jsxs13(EditComposerFooter, { children: [
|
5976
6044
|
/* @__PURE__ */ jsx51(EditComposerCancel, {}),
|
5977
6045
|
/* @__PURE__ */ jsx51(EditComposerSend, {})
|
5978
6046
|
] })
|
@@ -5991,31 +6059,31 @@ var EditComposerFooter = withDefaults("div", {
|
|
5991
6059
|
className: "aui-edit-composer-footer"
|
5992
6060
|
});
|
5993
6061
|
EditComposerFooter.displayName = "EditComposerFooter";
|
5994
|
-
var EditComposerCancel =
|
6062
|
+
var EditComposerCancel = forwardRef33((props, ref) => {
|
5995
6063
|
const {
|
5996
6064
|
strings: { editComposer: { cancel: { label = "Cancel" } = {} } = {} } = {}
|
5997
6065
|
} = useThreadConfig();
|
5998
6066
|
return /* @__PURE__ */ jsx51(composer_exports.Cancel, { asChild: true, children: /* @__PURE__ */ jsx51(Button, { variant: "ghost", ...props, ref, children: props.children ?? label }) });
|
5999
6067
|
});
|
6000
6068
|
EditComposerCancel.displayName = "EditComposerCancel";
|
6001
|
-
var EditComposerSend =
|
6069
|
+
var EditComposerSend = forwardRef33((props, ref) => {
|
6002
6070
|
const {
|
6003
6071
|
strings: { editComposer: { send: { label = "Send" } = {} } = {} } = {}
|
6004
6072
|
} = useThreadConfig();
|
6005
6073
|
return /* @__PURE__ */ jsx51(composer_exports.Send, { asChild: true, children: /* @__PURE__ */ jsx51(Button, { ...props, ref, children: props.children ?? label }) });
|
6006
6074
|
});
|
6007
6075
|
EditComposerSend.displayName = "EditComposerSend";
|
6008
|
-
var
|
6076
|
+
var exports10 = {
|
6009
6077
|
Root: EditComposerRoot,
|
6010
6078
|
Input: EditComposerInput,
|
6011
6079
|
Footer: EditComposerFooter,
|
6012
6080
|
Cancel: EditComposerCancel,
|
6013
6081
|
Send: EditComposerSend
|
6014
6082
|
};
|
6015
|
-
var edit_composer_default = Object.assign(EditComposer,
|
6083
|
+
var edit_composer_default = Object.assign(EditComposer, exports10);
|
6016
6084
|
|
6017
6085
|
// src/ui/thread.tsx
|
6018
|
-
import { Fragment as Fragment7, jsx as jsx52, jsxs as
|
6086
|
+
import { Fragment as Fragment7, jsx as jsx52, jsxs as jsxs14 } from "react/jsx-runtime";
|
6019
6087
|
var Thread = (config) => {
|
6020
6088
|
const {
|
6021
6089
|
components: {
|
@@ -6023,11 +6091,11 @@ var Thread = (config) => {
|
|
6023
6091
|
ThreadWelcome: ThreadWelcomeComponent = thread_welcome_default
|
6024
6092
|
} = {}
|
6025
6093
|
} = config;
|
6026
|
-
return /* @__PURE__ */ jsx52(ThreadRoot, { config, children: /* @__PURE__ */
|
6094
|
+
return /* @__PURE__ */ jsx52(ThreadRoot, { config, children: /* @__PURE__ */ jsxs14(ThreadViewport, { children: [
|
6027
6095
|
/* @__PURE__ */ jsx52(ThreadWelcomeComponent, {}),
|
6028
6096
|
/* @__PURE__ */ jsx52(ThreadMessages, {}),
|
6029
6097
|
/* @__PURE__ */ jsx52(ThreadFollowupSuggestions, {}),
|
6030
|
-
/* @__PURE__ */
|
6098
|
+
/* @__PURE__ */ jsxs14(ThreadViewportFooter, { children: [
|
6031
6099
|
/* @__PURE__ */ jsx52(ThreadScrollToBottom, {}),
|
6032
6100
|
/* @__PURE__ */ jsx52(ComposerComponent, {})
|
6033
6101
|
] })
|
@@ -6036,7 +6104,7 @@ var Thread = (config) => {
|
|
6036
6104
|
var ThreadRootStyled = withDefaults(thread_exports.Root, {
|
6037
6105
|
className: "aui-root aui-thread-root"
|
6038
6106
|
});
|
6039
|
-
var ThreadRoot =
|
6107
|
+
var ThreadRoot = forwardRef34(
|
6040
6108
|
({ config, ...props }, ref) => {
|
6041
6109
|
return /* @__PURE__ */ jsx52(ThreadConfigProvider, { config, children: /* @__PURE__ */ jsx52(ThreadRootStyled, { ...props, ref }) });
|
6042
6110
|
}
|
@@ -6052,7 +6120,7 @@ var ThreadViewportFooter = withDefaults("div", {
|
|
6052
6120
|
ThreadViewportFooter.displayName = "ThreadViewportFooter";
|
6053
6121
|
var SystemMessage = () => null;
|
6054
6122
|
var ThreadMessages = ({ components, unstable_flexGrowDiv: flexGrowDiv = true, ...rest }) => {
|
6055
|
-
return /* @__PURE__ */
|
6123
|
+
return /* @__PURE__ */ jsxs14(Fragment7, { children: [
|
6056
6124
|
/* @__PURE__ */ jsx52(
|
6057
6125
|
thread_exports.Messages,
|
6058
6126
|
{
|
@@ -6087,7 +6155,7 @@ var ThreadScrollToBottomIconButton = withDefaults(TooltipIconButton, {
|
|
6087
6155
|
variant: "outline",
|
6088
6156
|
className: "aui-thread-scroll-to-bottom"
|
6089
6157
|
});
|
6090
|
-
var ThreadScrollToBottom =
|
6158
|
+
var ThreadScrollToBottom = forwardRef34((props, ref) => {
|
6091
6159
|
const {
|
6092
6160
|
strings: {
|
6093
6161
|
thread: { scrollToBottom: { tooltip = "Scroll to bottom" } = {} } = {}
|
@@ -6096,7 +6164,7 @@ var ThreadScrollToBottom = forwardRef33((props, ref) => {
|
|
6096
6164
|
return /* @__PURE__ */ jsx52(thread_exports.ScrollToBottom, { asChild: true, children: /* @__PURE__ */ jsx52(ThreadScrollToBottomIconButton, { tooltip, ...props, ref, children: props.children ?? /* @__PURE__ */ jsx52(ArrowDownIcon, {}) }) });
|
6097
6165
|
});
|
6098
6166
|
ThreadScrollToBottom.displayName = "ThreadScrollToBottom";
|
6099
|
-
var
|
6167
|
+
var exports11 = {
|
6100
6168
|
Root: ThreadRoot,
|
6101
6169
|
Viewport: ThreadViewport,
|
6102
6170
|
Messages: ThreadMessages,
|
@@ -6104,12 +6172,12 @@ var exports12 = {
|
|
6104
6172
|
ScrollToBottom: ThreadScrollToBottom,
|
6105
6173
|
ViewportFooter: ThreadViewportFooter
|
6106
6174
|
};
|
6107
|
-
var thread_default = Object.assign(Thread,
|
6175
|
+
var thread_default = Object.assign(Thread, exports11);
|
6108
6176
|
|
6109
6177
|
// src/ui/assistant-modal.tsx
|
6110
|
-
import { Fragment as Fragment8, jsx as jsx53, jsxs as
|
6178
|
+
import { Fragment as Fragment8, jsx as jsx53, jsxs as jsxs15 } from "react/jsx-runtime";
|
6111
6179
|
var AssistantModal = (config) => {
|
6112
|
-
return /* @__PURE__ */
|
6180
|
+
return /* @__PURE__ */ jsxs15(AssistantModalRoot, { config, children: [
|
6113
6181
|
/* @__PURE__ */ jsx53(AssistantModalTrigger, {}),
|
6114
6182
|
/* @__PURE__ */ jsx53(AssistantModalContent, { children: /* @__PURE__ */ jsx53(thread_default, {}) })
|
6115
6183
|
] });
|
@@ -6122,7 +6190,7 @@ var AssistantModalRoot = ({
|
|
6122
6190
|
return /* @__PURE__ */ jsx53(ThreadConfigProvider, { config, children: /* @__PURE__ */ jsx53(assistantModal_exports.Root, { ...props }) });
|
6123
6191
|
};
|
6124
6192
|
AssistantModalRoot.displayName = "AssistantModalRoot";
|
6125
|
-
var AssistantModalTrigger =
|
6193
|
+
var AssistantModalTrigger = forwardRef35((props, ref) => {
|
6126
6194
|
return /* @__PURE__ */ jsx53(AssistantModalAnchor, { children: /* @__PURE__ */ jsx53(assistantModal_exports.Trigger, { asChild: true, children: /* @__PURE__ */ jsx53(AssistantModalButton, { ...props, ref }) }) });
|
6127
6195
|
});
|
6128
6196
|
AssistantModalTrigger.displayName = "AssistantModalTrigger";
|
@@ -6134,7 +6202,7 @@ var ModalButtonStyled = withDefaults(TooltipIconButton, {
|
|
6134
6202
|
variant: "default",
|
6135
6203
|
className: "aui-modal-button"
|
6136
6204
|
});
|
6137
|
-
var AssistantModalButton =
|
6205
|
+
var AssistantModalButton = forwardRef35(({ "data-state": state, ...rest }, ref) => {
|
6138
6206
|
const {
|
6139
6207
|
strings: {
|
6140
6208
|
assistantModal: {
|
@@ -6156,7 +6224,7 @@ var AssistantModalButton = forwardRef34(({ "data-state": state, ...rest }, ref)
|
|
6156
6224
|
"data-state": state,
|
6157
6225
|
...rest,
|
6158
6226
|
ref,
|
6159
|
-
children: rest.children ?? /* @__PURE__ */
|
6227
|
+
children: rest.children ?? /* @__PURE__ */ jsxs15(Fragment8, { children: [
|
6160
6228
|
/* @__PURE__ */ jsx53(
|
6161
6229
|
BotIcon,
|
6162
6230
|
{
|
@@ -6181,14 +6249,14 @@ var AssistantModalContent = withDefaults(assistantModal_exports.Content, {
|
|
6181
6249
|
sideOffset: 16
|
6182
6250
|
});
|
6183
6251
|
AssistantModalContent.displayName = "AssistantModalContent";
|
6184
|
-
var
|
6252
|
+
var exports12 = {
|
6185
6253
|
Root: AssistantModalRoot,
|
6186
6254
|
Trigger: AssistantModalTrigger,
|
6187
6255
|
Content: AssistantModalContent,
|
6188
6256
|
Button: AssistantModalButton,
|
6189
6257
|
Anchor: AssistantModalAnchor
|
6190
6258
|
};
|
6191
|
-
var assistant_modal_default = Object.assign(AssistantModal,
|
6259
|
+
var assistant_modal_default = Object.assign(AssistantModal, exports12);
|
6192
6260
|
export {
|
6193
6261
|
actionBar_exports as ActionBarPrimitive,
|
6194
6262
|
assistant_action_bar_default as AssistantActionBar,
|
@@ -6197,10 +6265,11 @@ export {
|
|
6197
6265
|
assistantModal_exports as AssistantModalPrimitive,
|
6198
6266
|
AssistantRuntimeProvider,
|
6199
6267
|
attachment_exports as AttachmentPrimitive,
|
6268
|
+
attachment_default as AttachmentUI,
|
6200
6269
|
branch_picker_default as BranchPicker,
|
6201
6270
|
branchPicker_exports as BranchPickerPrimitive,
|
6202
6271
|
composer_default as Composer,
|
6203
|
-
|
6272
|
+
attachment_default as ComposerAttachment,
|
6204
6273
|
composer_exports as ComposerPrimitive,
|
6205
6274
|
CompositeAttachmentAdapter,
|
6206
6275
|
content_part_default as ContentPart,
|
@@ -6218,7 +6287,7 @@ export {
|
|
6218
6287
|
thread_welcome_default as ThreadWelcome,
|
6219
6288
|
user_action_bar_default as UserActionBar,
|
6220
6289
|
user_message_default as UserMessage,
|
6221
|
-
|
6290
|
+
attachment_default as UserMessageAttachment,
|
6222
6291
|
WebSpeechSynthesisAdapter,
|
6223
6292
|
fromCoreMessage,
|
6224
6293
|
fromCoreMessages,
|