@assistant-ui/react 0.5.75 → 0.5.77
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/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,
|