@assistant-ui/react 0.2.4 → 0.3.1
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 +67 -52
- package/dist/index.d.ts +67 -52
- package/dist/index.js +194 -192
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +182 -177
- package/dist/index.mjs.map +1 -1
- package/package.json +3 -2
package/dist/index.js
CHANGED
@@ -210,11 +210,14 @@ var makeBaseComposer = (set) => ({
|
|
210
210
|
});
|
211
211
|
|
212
212
|
// src/context/stores/Composer.ts
|
213
|
-
var makeComposerStore = (
|
213
|
+
var makeComposerStore = (useThreadMessages, useThreadActions) => {
|
214
214
|
const focusListeners = /* @__PURE__ */ new Set();
|
215
215
|
return (0, import_zustand3.create)()((set, get, store) => {
|
216
216
|
return {
|
217
217
|
...makeBaseComposer(set, get, store),
|
218
|
+
get canCancel() {
|
219
|
+
return useThreadActions.getState().capabilities.cancel;
|
220
|
+
},
|
218
221
|
isEditing: true,
|
219
222
|
send: () => {
|
220
223
|
const { setValue, value } = get();
|
@@ -226,10 +229,7 @@ var makeComposerStore = (useThread, useThreadMessages, useThreadActions) => {
|
|
226
229
|
});
|
227
230
|
},
|
228
231
|
cancel: () => {
|
229
|
-
const thread = useThread.getState();
|
230
|
-
if (!thread.isRunning) return false;
|
231
232
|
useThreadActions.getState().cancelRun();
|
232
|
-
return true;
|
233
233
|
},
|
234
234
|
focus: () => {
|
235
235
|
for (const listener of focusListeners) {
|
@@ -279,6 +279,9 @@ var import_zustand6 = require("zustand");
|
|
279
279
|
var makeThreadActionStore = (runtimeRef) => {
|
280
280
|
return (0, import_zustand6.create)(
|
281
281
|
() => Object.freeze({
|
282
|
+
get capabilities() {
|
283
|
+
return runtimeRef.current.capabilities;
|
284
|
+
},
|
282
285
|
getBranches: (messageId) => runtimeRef.current.getBranches(messageId),
|
283
286
|
switchToBranch: (branchId) => runtimeRef.current.switchToBranch(branchId),
|
284
287
|
startRun: (parentId) => runtimeRef.current.startRun(parentId),
|
@@ -310,11 +313,7 @@ var ThreadProvider = ({
|
|
310
313
|
const useThreadMessages = makeThreadMessagesStore(runtimeRef);
|
311
314
|
const useThreadActions = makeThreadActionStore(runtimeRef);
|
312
315
|
const useViewport = makeThreadViewportStore();
|
313
|
-
const useComposer = makeComposerStore(
|
314
|
-
useThread,
|
315
|
-
useThreadMessages,
|
316
|
-
useThreadActions
|
317
|
-
);
|
316
|
+
const useComposer = makeComposerStore(useThreadMessages, useThreadActions);
|
318
317
|
return {
|
319
318
|
useThread,
|
320
319
|
useThreadMessages,
|
@@ -584,7 +583,7 @@ var useActionBarCopy = ({
|
|
584
583
|
const hasCopyableContent = useCombinedStore(
|
585
584
|
[useMessage, useEditComposer],
|
586
585
|
(m, c) => {
|
587
|
-
return !c.isEditing && m.message.content.some((c2) => c2.type === "text");
|
586
|
+
return !c.isEditing && m.message.content.some((c2) => c2.type === "text" && c2.text.length > 0);
|
588
587
|
}
|
589
588
|
);
|
590
589
|
const callback = (0, import_react16.useCallback)(() => {
|
@@ -687,7 +686,7 @@ var useBranchPickerPrevious = () => {
|
|
687
686
|
var import_react21 = require("react");
|
688
687
|
var useComposerCancel = () => {
|
689
688
|
const { useComposer } = useComposerContext();
|
690
|
-
const disabled = useComposer((c) => !c.
|
689
|
+
const disabled = useComposer((c) => !c.canCancel);
|
691
690
|
const callback = (0, import_react21.useCallback)(() => {
|
692
691
|
const { cancel } = useComposer.getState();
|
693
692
|
cancel();
|
@@ -757,7 +756,7 @@ var useContentPartText = () => {
|
|
757
756
|
throw new Error(
|
758
757
|
"ContentPartText can only be used inside text content parts."
|
759
758
|
);
|
760
|
-
return c
|
759
|
+
return c;
|
761
760
|
});
|
762
761
|
return text;
|
763
762
|
};
|
@@ -819,15 +818,18 @@ var useThreadSuggestion = ({
|
|
819
818
|
autoSend
|
820
819
|
}) => {
|
821
820
|
const { useThread, useComposer } = useThreadContext();
|
821
|
+
const append = useAppendMessage();
|
822
822
|
const disabled = useThread((t) => t.isRunning);
|
823
823
|
const callback = (0, import_react24.useCallback)(() => {
|
824
824
|
const thread = useThread.getState();
|
825
825
|
const composer = useComposer.getState();
|
826
|
-
composer.setValue(prompt);
|
827
826
|
if (autoSend && !thread.isRunning) {
|
828
|
-
|
827
|
+
append(prompt);
|
828
|
+
composer.setValue("");
|
829
|
+
} else {
|
830
|
+
composer.setValue(prompt);
|
829
831
|
}
|
830
|
-
}, [useThread, useComposer,
|
832
|
+
}, [useThread, useComposer, autoSend, append, prompt]);
|
831
833
|
if (disabled) return null;
|
832
834
|
return callback;
|
833
835
|
};
|
@@ -1107,28 +1109,57 @@ __export(message_exports, {
|
|
1107
1109
|
});
|
1108
1110
|
|
1109
1111
|
// src/primitives/message/MessageRoot.tsx
|
1110
|
-
var import_primitive4 = require("@radix-ui/primitive");
|
1111
1112
|
var import_react_primitive3 = require("@radix-ui/react-primitive");
|
1113
|
+
var import_react33 = require("react");
|
1114
|
+
|
1115
|
+
// src/utils/hooks/useManagedRef.ts
|
1112
1116
|
var import_react32 = require("react");
|
1117
|
+
var useManagedRef = (callback) => {
|
1118
|
+
const cleanupRef = (0, import_react32.useRef)();
|
1119
|
+
const ref = (0, import_react32.useCallback)(
|
1120
|
+
(el) => {
|
1121
|
+
if (cleanupRef.current) {
|
1122
|
+
cleanupRef.current();
|
1123
|
+
}
|
1124
|
+
if (el) {
|
1125
|
+
cleanupRef.current = callback(el);
|
1126
|
+
}
|
1127
|
+
},
|
1128
|
+
[callback]
|
1129
|
+
);
|
1130
|
+
return ref;
|
1131
|
+
};
|
1132
|
+
|
1133
|
+
// src/primitives/message/MessageRoot.tsx
|
1134
|
+
var import_react_compose_refs = require("@radix-ui/react-compose-refs");
|
1113
1135
|
var import_jsx_runtime12 = require("react/jsx-runtime");
|
1114
|
-
var
|
1136
|
+
var useIsHoveringRef = () => {
|
1115
1137
|
const { useMessageUtils } = useMessageContext();
|
1116
|
-
const
|
1117
|
-
|
1118
|
-
|
1119
|
-
|
1120
|
-
|
1121
|
-
|
1122
|
-
|
1123
|
-
|
1124
|
-
|
1125
|
-
|
1126
|
-
|
1127
|
-
|
1128
|
-
|
1129
|
-
|
1130
|
-
|
1138
|
+
const callbackRef = (0, import_react33.useCallback)(
|
1139
|
+
(el) => {
|
1140
|
+
const setIsHovering = useMessageUtils.getState().setIsHovering;
|
1141
|
+
const handleMouseEnter = () => {
|
1142
|
+
setIsHovering(true);
|
1143
|
+
};
|
1144
|
+
const handleMouseLeave = () => {
|
1145
|
+
setIsHovering(false);
|
1146
|
+
};
|
1147
|
+
el.addEventListener("mouseenter", handleMouseEnter);
|
1148
|
+
el.addEventListener("mouseleave", handleMouseLeave);
|
1149
|
+
return () => {
|
1150
|
+
el.removeEventListener("mouseenter", handleMouseEnter);
|
1151
|
+
el.removeEventListener("mouseleave", handleMouseLeave);
|
1152
|
+
setIsHovering(false);
|
1153
|
+
};
|
1154
|
+
},
|
1155
|
+
[useMessageUtils]
|
1131
1156
|
);
|
1157
|
+
return useManagedRef(callbackRef);
|
1158
|
+
};
|
1159
|
+
var MessagePrimitiveRoot = (0, import_react33.forwardRef)(({ onMouseEnter, onMouseLeave, ...rest }, forwardRef15) => {
|
1160
|
+
const isHoveringRef = useIsHoveringRef();
|
1161
|
+
const ref = (0, import_react_compose_refs.useComposedRefs)(forwardRef15, isHoveringRef);
|
1162
|
+
return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_react_primitive3.Primitive.div, { ...rest, ref });
|
1132
1163
|
});
|
1133
1164
|
MessagePrimitiveRoot.displayName = "MessagePrimitive.Root";
|
1134
1165
|
|
@@ -1143,10 +1174,10 @@ var MessagePrimitiveIf = ({
|
|
1143
1174
|
MessagePrimitiveIf.displayName = "MessagePrimitive.If";
|
1144
1175
|
|
1145
1176
|
// src/primitives/message/MessageContent.tsx
|
1146
|
-
var
|
1177
|
+
var import_react37 = require("react");
|
1147
1178
|
|
1148
1179
|
// src/context/providers/ContentPartProvider.tsx
|
1149
|
-
var
|
1180
|
+
var import_react34 = require("react");
|
1150
1181
|
var import_zustand9 = require("zustand");
|
1151
1182
|
var import_jsx_runtime13 = require("react/jsx-runtime");
|
1152
1183
|
var syncContentPart = ({ message }, useContentPart, partIndex) => {
|
@@ -1165,14 +1196,14 @@ var syncContentPart = ({ message }, useContentPart, partIndex) => {
|
|
1165
1196
|
};
|
1166
1197
|
var useContentPartContext2 = (partIndex) => {
|
1167
1198
|
const { useMessage } = useMessageContext();
|
1168
|
-
const [context] = (0,
|
1199
|
+
const [context] = (0, import_react34.useState)(() => {
|
1169
1200
|
const useContentPart = (0, import_zustand9.create)(
|
1170
1201
|
() => ({})
|
1171
1202
|
);
|
1172
1203
|
syncContentPart(useMessage.getState(), useContentPart, partIndex);
|
1173
1204
|
return { useContentPart };
|
1174
1205
|
});
|
1175
|
-
(0,
|
1206
|
+
(0, import_react34.useEffect)(() => {
|
1176
1207
|
syncContentPart(useMessage.getState(), context.useContentPart, partIndex);
|
1177
1208
|
return useMessage.subscribe((message) => {
|
1178
1209
|
syncContentPart(message, context.useContentPart, partIndex);
|
@@ -1188,6 +1219,29 @@ var ContentPartProvider = ({
|
|
1188
1219
|
return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(ContentPartContext.Provider, { value: context, children });
|
1189
1220
|
};
|
1190
1221
|
|
1222
|
+
// src/primitives/contentPart/ContentPartText.tsx
|
1223
|
+
var import_react_primitive4 = require("@radix-ui/react-primitive");
|
1224
|
+
var import_react35 = require("react");
|
1225
|
+
var import_jsx_runtime14 = require("react/jsx-runtime");
|
1226
|
+
var ContentPartPrimitiveText = (0, import_react35.forwardRef)((props, forwardedRef) => {
|
1227
|
+
const {
|
1228
|
+
part: { text },
|
1229
|
+
status
|
1230
|
+
} = useContentPartText();
|
1231
|
+
return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_react_primitive4.Primitive.span, { "data-status": status, ...props, ref: forwardedRef, children: text });
|
1232
|
+
});
|
1233
|
+
ContentPartPrimitiveText.displayName = "ContentPartPrimitive.Text";
|
1234
|
+
|
1235
|
+
// src/primitives/contentPart/ContentPartImage.tsx
|
1236
|
+
var import_react_primitive5 = require("@radix-ui/react-primitive");
|
1237
|
+
var import_react36 = require("react");
|
1238
|
+
var import_jsx_runtime15 = require("react/jsx-runtime");
|
1239
|
+
var ContentPartPrimitiveImage = (0, import_react36.forwardRef)((props, forwardedRef) => {
|
1240
|
+
const image = useContentPartImage();
|
1241
|
+
return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_react_primitive5.Primitive.img, { src: image, ...props, ref: forwardedRef });
|
1242
|
+
});
|
1243
|
+
ContentPartPrimitiveImage.displayName = "ContentPartPrimitive.Image";
|
1244
|
+
|
1191
1245
|
// src/primitives/contentPart/ContentPartDisplay.tsx
|
1192
1246
|
var ContentPartPrimitiveDisplay = () => {
|
1193
1247
|
const display = useContentPartDisplay();
|
@@ -1195,61 +1249,31 @@ var ContentPartPrimitiveDisplay = () => {
|
|
1195
1249
|
};
|
1196
1250
|
ContentPartPrimitiveDisplay.displayName = "ContentPartPrimitive.Display";
|
1197
1251
|
|
1198
|
-
// src/
|
1199
|
-
var
|
1200
|
-
|
1201
|
-
|
1202
|
-
const parentRef = (0, import_react34.useRef)(null);
|
1203
|
-
(0, import_react34.useLayoutEffect)(() => {
|
1204
|
-
const parent = parentRef.current;
|
1205
|
-
if (!parent || !node) return;
|
1206
|
-
parent.appendChild(node);
|
1207
|
-
return () => {
|
1208
|
-
parent.removeChild(node);
|
1209
|
-
};
|
1210
|
-
}, [node]);
|
1211
|
-
if (!node) return null;
|
1212
|
-
return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { ref: parentRef });
|
1213
|
-
};
|
1214
|
-
|
1215
|
-
// src/primitives/contentPart/ContentPartInProgressIndicator.tsx
|
1216
|
-
var import_jsx_runtime15 = require("react/jsx-runtime");
|
1217
|
-
var ContentPartPrimitiveInProgressIndicator = () => {
|
1218
|
-
const { useMessageUtils } = useMessageContext();
|
1252
|
+
// src/primitives/contentPart/ContentPartInProgress.tsx
|
1253
|
+
var ContentPartPrimitiveInProgress = ({
|
1254
|
+
children
|
1255
|
+
}) => {
|
1219
1256
|
const { useContentPart } = useContentPartContext();
|
1220
|
-
const
|
1221
|
-
|
1222
|
-
(m, c) => c.status === "in_progress" ? m.inProgressIndicator : null
|
1223
|
-
);
|
1224
|
-
return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(OutPortal, { node: indicator });
|
1257
|
+
const isInProgress = useContentPart((c) => c.status === "in_progress");
|
1258
|
+
return isInProgress ? children : null;
|
1225
1259
|
};
|
1226
|
-
|
1227
|
-
|
1228
|
-
// src/primitives/contentPart/ContentPartText.tsx
|
1229
|
-
var import_react_primitive4 = require("@radix-ui/react-primitive");
|
1230
|
-
var import_react35 = require("react");
|
1231
|
-
var import_jsx_runtime16 = require("react/jsx-runtime");
|
1232
|
-
var ContentPartPrimitiveText = (0, import_react35.forwardRef)((props, forwardedRef) => {
|
1233
|
-
const text = useContentPartText();
|
1234
|
-
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_react_primitive4.Primitive.span, { ...props, ref: forwardedRef, children: text });
|
1235
|
-
});
|
1236
|
-
ContentPartPrimitiveText.displayName = "ContentPartPrimitive.Text";
|
1260
|
+
ContentPartPrimitiveInProgress.displayName = "ContentPartPrimitive.InProgress";
|
1237
1261
|
|
1238
1262
|
// src/primitives/message/MessageContent.tsx
|
1239
|
-
var
|
1263
|
+
var import_jsx_runtime16 = require("react/jsx-runtime");
|
1240
1264
|
var defaultComponents = {
|
1241
|
-
Text: () => /* @__PURE__ */ (0,
|
1242
|
-
/* @__PURE__ */ (0,
|
1243
|
-
/* @__PURE__ */ (0,
|
1265
|
+
Text: () => /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("p", { style: { whiteSpace: "pre-line" }, children: [
|
1266
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)(ContentPartPrimitiveText, {}),
|
1267
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)(ContentPartPrimitiveInProgress, { children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { style: { fontFamily: "revert" }, children: " \u25CF" }) })
|
1244
1268
|
] }),
|
1245
|
-
Image: () =>
|
1246
|
-
UI: () => /* @__PURE__ */ (0,
|
1269
|
+
Image: () => /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(ContentPartPrimitiveImage, {}),
|
1270
|
+
UI: () => /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(ContentPartPrimitiveDisplay, {}),
|
1247
1271
|
tools: {
|
1248
1272
|
Fallback: (props) => {
|
1249
1273
|
const { useToolUIs } = useAssistantContext();
|
1250
1274
|
const Render = useToolUIs((s) => s.getToolUI(props.part.toolName));
|
1251
1275
|
if (!Render) return null;
|
1252
|
-
return /* @__PURE__ */ (0,
|
1276
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(Render, { ...props });
|
1253
1277
|
}
|
1254
1278
|
}
|
1255
1279
|
};
|
@@ -1268,15 +1292,15 @@ var MessageContentPartComponent = ({
|
|
1268
1292
|
const type = part.type;
|
1269
1293
|
switch (type) {
|
1270
1294
|
case "text":
|
1271
|
-
return /* @__PURE__ */ (0,
|
1295
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(Text, { part, status });
|
1272
1296
|
case "image":
|
1273
|
-
return /* @__PURE__ */ (0,
|
1297
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(Image, { part, status });
|
1274
1298
|
case "ui":
|
1275
|
-
return /* @__PURE__ */ (0,
|
1299
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(UI, { part, status });
|
1276
1300
|
case "tool-call": {
|
1277
1301
|
const Tool = by_name[part.toolName] || Fallback;
|
1278
1302
|
const addResult = (result) => addToolResult(part.toolCallId, result);
|
1279
|
-
return /* @__PURE__ */ (0,
|
1303
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(Tool, { part, status, addResult });
|
1280
1304
|
}
|
1281
1305
|
default:
|
1282
1306
|
throw new Error(`Unknown content part type: ${type}`);
|
@@ -1286,9 +1310,9 @@ var MessageContentPartImpl = ({
|
|
1286
1310
|
partIndex,
|
1287
1311
|
components
|
1288
1312
|
}) => {
|
1289
|
-
return /* @__PURE__ */ (0,
|
1313
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(ContentPartProvider, { partIndex, children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(MessageContentPartComponent, { components }) });
|
1290
1314
|
};
|
1291
|
-
var MessageContentPart = (0,
|
1315
|
+
var MessageContentPart = (0, import_react37.memo)(
|
1292
1316
|
MessageContentPartImpl,
|
1293
1317
|
(prev, next) => prev.partIndex === next.partIndex && prev.components?.Text === next.components?.Text && prev.components?.Image === next.components?.Image && prev.components?.UI === next.components?.UI && prev.components?.tools === next.components?.tools
|
1294
1318
|
);
|
@@ -1299,7 +1323,7 @@ var MessagePrimitiveContent = ({
|
|
1299
1323
|
const contentLength = useMessage((s) => s.message.content.length);
|
1300
1324
|
return new Array(contentLength).fill(null).map((_, idx) => {
|
1301
1325
|
const partIndex = idx;
|
1302
|
-
return /* @__PURE__ */ (0,
|
1326
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
1303
1327
|
MessageContentPart,
|
1304
1328
|
{
|
1305
1329
|
partIndex,
|
@@ -1312,21 +1336,15 @@ var MessagePrimitiveContent = ({
|
|
1312
1336
|
MessagePrimitiveContent.displayName = "MessagePrimitive.Content";
|
1313
1337
|
|
1314
1338
|
// src/primitives/message/MessageInProgress.tsx
|
1315
|
-
var
|
1316
|
-
|
1317
|
-
|
1318
|
-
var import_jsx_runtime18 = require("react/jsx-runtime");
|
1319
|
-
var MessagePrimitiveInProgress = (0, import_react37.forwardRef)((props, ref) => {
|
1320
|
-
const { useMessageUtils } = useMessageContext();
|
1321
|
-
const portalNode = useMessageUtils((s) => s.inProgressIndicator);
|
1322
|
-
return (0, import_react_dom.createPortal)(/* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_react_primitive5.Primitive.span, { ...props, ref }), portalNode);
|
1323
|
-
});
|
1339
|
+
var MessagePrimitiveInProgress = () => {
|
1340
|
+
return null;
|
1341
|
+
};
|
1324
1342
|
MessagePrimitiveInProgress.displayName = "MessagePrimitive.InProgress";
|
1325
1343
|
|
1326
1344
|
// src/primitives/branchPicker/BranchPickerRoot.tsx
|
1327
|
-
var
|
1345
|
+
var import_jsx_runtime17 = require("react/jsx-runtime");
|
1328
1346
|
var BranchPickerPrimitiveRoot = (0, import_react38.forwardRef)(({ hideWhenSingleBranch, ...rest }, ref) => {
|
1329
|
-
return /* @__PURE__ */ (0,
|
1347
|
+
return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(MessagePrimitiveIf, { hasBranches: hideWhenSingleBranch ? true : void 0, children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_react_primitive6.Primitive.div, { ...rest, ref }) });
|
1330
1348
|
});
|
1331
1349
|
BranchPickerPrimitiveRoot.displayName = "BranchPickerPrimitive.Root";
|
1332
1350
|
|
@@ -1341,10 +1359,10 @@ __export(composer_exports, {
|
|
1341
1359
|
});
|
1342
1360
|
|
1343
1361
|
// src/primitives/composer/ComposerRoot.tsx
|
1344
|
-
var
|
1362
|
+
var import_primitive4 = require("@radix-ui/primitive");
|
1345
1363
|
var import_react_primitive7 = require("@radix-ui/react-primitive");
|
1346
1364
|
var import_react39 = require("react");
|
1347
|
-
var
|
1365
|
+
var import_jsx_runtime18 = require("react/jsx-runtime");
|
1348
1366
|
var ComposerPrimitiveRoot = (0, import_react39.forwardRef)(({ onSubmit, ...rest }, forwardedRef) => {
|
1349
1367
|
const send = useComposerSend();
|
1350
1368
|
const handleSubmit = (e) => {
|
@@ -1352,25 +1370,25 @@ var ComposerPrimitiveRoot = (0, import_react39.forwardRef)(({ onSubmit, ...rest
|
|
1352
1370
|
if (!send) return;
|
1353
1371
|
send();
|
1354
1372
|
};
|
1355
|
-
return /* @__PURE__ */ (0,
|
1373
|
+
return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
|
1356
1374
|
import_react_primitive7.Primitive.form,
|
1357
1375
|
{
|
1358
1376
|
...rest,
|
1359
1377
|
ref: forwardedRef,
|
1360
|
-
onSubmit: (0,
|
1378
|
+
onSubmit: (0, import_primitive4.composeEventHandlers)(onSubmit, handleSubmit)
|
1361
1379
|
}
|
1362
1380
|
);
|
1363
1381
|
});
|
1364
1382
|
ComposerPrimitiveRoot.displayName = "ComposerPrimitive.Root";
|
1365
1383
|
|
1366
1384
|
// src/primitives/composer/ComposerInput.tsx
|
1367
|
-
var
|
1368
|
-
var
|
1385
|
+
var import_primitive5 = require("@radix-ui/primitive");
|
1386
|
+
var import_react_compose_refs2 = require("@radix-ui/react-compose-refs");
|
1369
1387
|
var import_react_slot = require("@radix-ui/react-slot");
|
1370
1388
|
var import_react40 = require("react");
|
1371
1389
|
var import_react_textarea_autosize = __toESM(require("react-textarea-autosize"));
|
1372
1390
|
var import_react_use_escape_keydown = require("@radix-ui/react-use-escape-keydown");
|
1373
|
-
var
|
1391
|
+
var import_jsx_runtime19 = require("react/jsx-runtime");
|
1374
1392
|
var ComposerPrimitiveInput = (0, import_react40.forwardRef)(
|
1375
1393
|
({ autoFocus = false, asChild, disabled, onChange, onKeyDown, ...rest }, forwardedRef) => {
|
1376
1394
|
const { useThread } = useThreadContext();
|
@@ -1381,10 +1399,11 @@ var ComposerPrimitiveInput = (0, import_react40.forwardRef)(
|
|
1381
1399
|
});
|
1382
1400
|
const Component = asChild ? import_react_slot.Slot : import_react_textarea_autosize.default;
|
1383
1401
|
const textareaRef = (0, import_react40.useRef)(null);
|
1384
|
-
const ref = (0,
|
1402
|
+
const ref = (0, import_react_compose_refs2.useComposedRefs)(forwardedRef, textareaRef);
|
1385
1403
|
(0, import_react_use_escape_keydown.useEscapeKeydown)((e) => {
|
1386
1404
|
const composer = useComposer.getState();
|
1387
|
-
if (composer.
|
1405
|
+
if (composer.canCancel) {
|
1406
|
+
composer.cancel();
|
1388
1407
|
e.preventDefault();
|
1389
1408
|
}
|
1390
1409
|
});
|
@@ -1414,19 +1433,20 @@ var ComposerPrimitiveInput = (0, import_react40.forwardRef)(
|
|
1414
1433
|
focus();
|
1415
1434
|
}
|
1416
1435
|
});
|
1417
|
-
return /* @__PURE__ */ (0,
|
1436
|
+
return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
|
1418
1437
|
Component,
|
1419
1438
|
{
|
1439
|
+
name: "input",
|
1420
1440
|
value,
|
1421
1441
|
...rest,
|
1422
1442
|
ref,
|
1423
1443
|
disabled,
|
1424
|
-
onChange: (0,
|
1444
|
+
onChange: (0, import_primitive5.composeEventHandlers)(onChange, (e) => {
|
1425
1445
|
const composerState = useComposer.getState();
|
1426
1446
|
if (!composerState.isEditing) return;
|
1427
1447
|
return composerState.setValue(e.target.value);
|
1428
1448
|
}),
|
1429
|
-
onKeyDown: (0,
|
1449
|
+
onKeyDown: (0, import_primitive5.composeEventHandlers)(onKeyDown, handleKeyPress)
|
1430
1450
|
}
|
1431
1451
|
);
|
1432
1452
|
}
|
@@ -1436,11 +1456,11 @@ ComposerPrimitiveInput.displayName = "ComposerPrimitive.Input";
|
|
1436
1456
|
// src/primitives/composer/ComposerSend.tsx
|
1437
1457
|
var import_react41 = require("react");
|
1438
1458
|
var import_react_primitive8 = require("@radix-ui/react-primitive");
|
1439
|
-
var
|
1459
|
+
var import_jsx_runtime20 = require("react/jsx-runtime");
|
1440
1460
|
var ComposerPrimitiveSend = (0, import_react41.forwardRef)(({ disabled, ...rest }, ref) => {
|
1441
1461
|
const { useComposer } = useComposerContext();
|
1442
1462
|
const hasValue = useComposer((c) => c.isEditing && c.value.length > 0);
|
1443
|
-
return /* @__PURE__ */ (0,
|
1463
|
+
return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
|
1444
1464
|
import_react_primitive8.Primitive.button,
|
1445
1465
|
{
|
1446
1466
|
type: "submit",
|
@@ -1473,20 +1493,10 @@ var contentPart_exports = {};
|
|
1473
1493
|
__export(contentPart_exports, {
|
1474
1494
|
Display: () => ContentPartPrimitiveDisplay,
|
1475
1495
|
Image: () => ContentPartPrimitiveImage,
|
1476
|
-
|
1496
|
+
InProgress: () => ContentPartPrimitiveInProgress,
|
1477
1497
|
Text: () => ContentPartPrimitiveText
|
1478
1498
|
});
|
1479
1499
|
|
1480
|
-
// src/primitives/contentPart/ContentPartImage.tsx
|
1481
|
-
var import_react_primitive9 = require("@radix-ui/react-primitive");
|
1482
|
-
var import_react42 = require("react");
|
1483
|
-
var import_jsx_runtime23 = require("react/jsx-runtime");
|
1484
|
-
var ContentPartPrimitiveImage = (0, import_react42.forwardRef)((props, forwardedRef) => {
|
1485
|
-
const image = useContentPartImage();
|
1486
|
-
return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_react_primitive9.Primitive.img, { src: image, ...props, ref: forwardedRef });
|
1487
|
-
});
|
1488
|
-
ContentPartPrimitiveImage.displayName = "ContentPartPrimitive.Image";
|
1489
|
-
|
1490
1500
|
// src/primitives/thread/index.ts
|
1491
1501
|
var thread_exports = {};
|
1492
1502
|
__export(thread_exports, {
|
@@ -1500,11 +1510,11 @@ __export(thread_exports, {
|
|
1500
1510
|
});
|
1501
1511
|
|
1502
1512
|
// src/primitives/thread/ThreadRoot.tsx
|
1503
|
-
var
|
1504
|
-
var
|
1505
|
-
var
|
1506
|
-
var ThreadPrimitiveRoot = (0,
|
1507
|
-
return /* @__PURE__ */ (0,
|
1513
|
+
var import_react_primitive9 = require("@radix-ui/react-primitive");
|
1514
|
+
var import_react42 = require("react");
|
1515
|
+
var import_jsx_runtime21 = require("react/jsx-runtime");
|
1516
|
+
var ThreadPrimitiveRoot = (0, import_react42.forwardRef)((props, ref) => {
|
1517
|
+
return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_react_primitive9.Primitive.div, { ...props, ref });
|
1508
1518
|
});
|
1509
1519
|
ThreadPrimitiveRoot.displayName = "ThreadPrimitive.Root";
|
1510
1520
|
|
@@ -1528,40 +1538,20 @@ var ThreadPrimitiveIf = ({
|
|
1528
1538
|
ThreadPrimitiveIf.displayName = "ThreadPrimitive.If";
|
1529
1539
|
|
1530
1540
|
// src/primitives/thread/ThreadViewport.tsx
|
1531
|
-
var
|
1532
|
-
var
|
1533
|
-
var
|
1541
|
+
var import_react_compose_refs4 = require("@radix-ui/react-compose-refs");
|
1542
|
+
var import_react_primitive10 = require("@radix-ui/react-primitive");
|
1543
|
+
var import_react46 = require("react");
|
1534
1544
|
|
1535
1545
|
// src/primitive-hooks/thread/useThreadViewportAutoScroll.tsx
|
1536
|
-
var
|
1537
|
-
var import_react47 = require("react");
|
1538
|
-
|
1539
|
-
// src/utils/hooks/useOnResizeContent.tsx
|
1540
|
-
var import_react_use_callback_ref2 = require("@radix-ui/react-use-callback-ref");
|
1546
|
+
var import_react_compose_refs3 = require("@radix-ui/react-compose-refs");
|
1541
1547
|
var import_react45 = require("react");
|
1542
1548
|
|
1543
|
-
// src/utils/hooks/useManagedRef.ts
|
1544
|
-
var import_react44 = require("react");
|
1545
|
-
var useManagedRef = (callback) => {
|
1546
|
-
const cleanupRef = (0, import_react44.useRef)();
|
1547
|
-
const ref = (0, import_react44.useCallback)(
|
1548
|
-
(el) => {
|
1549
|
-
if (cleanupRef.current) {
|
1550
|
-
cleanupRef.current();
|
1551
|
-
}
|
1552
|
-
if (el) {
|
1553
|
-
cleanupRef.current = callback(el);
|
1554
|
-
}
|
1555
|
-
},
|
1556
|
-
[callback]
|
1557
|
-
);
|
1558
|
-
return ref;
|
1559
|
-
};
|
1560
|
-
|
1561
1549
|
// src/utils/hooks/useOnResizeContent.tsx
|
1550
|
+
var import_react_use_callback_ref2 = require("@radix-ui/react-use-callback-ref");
|
1551
|
+
var import_react43 = require("react");
|
1562
1552
|
var useOnResizeContent = (callback) => {
|
1563
1553
|
const callbackRef = (0, import_react_use_callback_ref2.useCallbackRef)(callback);
|
1564
|
-
const refCallback = (0,
|
1554
|
+
const refCallback = (0, import_react43.useCallback)(
|
1565
1555
|
(el) => {
|
1566
1556
|
const resizeObserver = new ResizeObserver(() => {
|
1567
1557
|
callbackRef();
|
@@ -1598,11 +1588,11 @@ var useOnResizeContent = (callback) => {
|
|
1598
1588
|
|
1599
1589
|
// src/utils/hooks/useOnScrollToBottom.tsx
|
1600
1590
|
var import_react_use_callback_ref3 = require("@radix-ui/react-use-callback-ref");
|
1601
|
-
var
|
1591
|
+
var import_react44 = require("react");
|
1602
1592
|
var useOnScrollToBottom = (callback) => {
|
1603
1593
|
const callbackRef = (0, import_react_use_callback_ref3.useCallbackRef)(callback);
|
1604
1594
|
const { useViewport } = useThreadContext();
|
1605
|
-
(0,
|
1595
|
+
(0, import_react44.useEffect)(() => {
|
1606
1596
|
return useViewport.getState().onScrollToBottom(() => {
|
1607
1597
|
callbackRef();
|
1608
1598
|
});
|
@@ -1613,11 +1603,11 @@ var useOnScrollToBottom = (callback) => {
|
|
1613
1603
|
var useThreadViewportAutoScroll = ({
|
1614
1604
|
autoScroll = true
|
1615
1605
|
}) => {
|
1616
|
-
const divRef = (0,
|
1606
|
+
const divRef = (0, import_react45.useRef)(null);
|
1617
1607
|
const { useViewport } = useThreadContext();
|
1618
|
-
const firstRenderRef = (0,
|
1619
|
-
const lastScrollTop = (0,
|
1620
|
-
const isScrollingToBottomRef = (0,
|
1608
|
+
const firstRenderRef = (0, import_react45.useRef)(true);
|
1609
|
+
const lastScrollTop = (0, import_react45.useRef)(0);
|
1610
|
+
const isScrollingToBottomRef = (0, import_react45.useRef)(false);
|
1621
1611
|
const scrollToBottom = () => {
|
1622
1612
|
const div = divRef.current;
|
1623
1613
|
if (!div || !autoScroll) return;
|
@@ -1655,7 +1645,7 @@ var useThreadViewportAutoScroll = ({
|
|
1655
1645
|
el.removeEventListener("scroll", handleScroll);
|
1656
1646
|
};
|
1657
1647
|
});
|
1658
|
-
const autoScrollRef = (0,
|
1648
|
+
const autoScrollRef = (0, import_react_compose_refs3.useComposedRefs)(resizeRef, scrollRef, divRef);
|
1659
1649
|
useOnScrollToBottom(() => {
|
1660
1650
|
scrollToBottom();
|
1661
1651
|
});
|
@@ -1663,21 +1653,21 @@ var useThreadViewportAutoScroll = ({
|
|
1663
1653
|
};
|
1664
1654
|
|
1665
1655
|
// src/primitives/thread/ThreadViewport.tsx
|
1666
|
-
var
|
1667
|
-
var ThreadPrimitiveViewport = (0,
|
1656
|
+
var import_jsx_runtime22 = require("react/jsx-runtime");
|
1657
|
+
var ThreadPrimitiveViewport = (0, import_react46.forwardRef)(({ autoScroll, onScroll, children, ...rest }, forwardedRef) => {
|
1668
1658
|
const autoScrollRef = useThreadViewportAutoScroll({
|
1669
1659
|
autoScroll
|
1670
1660
|
});
|
1671
|
-
const ref = (0,
|
1672
|
-
return /* @__PURE__ */ (0,
|
1661
|
+
const ref = (0, import_react_compose_refs4.useComposedRefs)(forwardedRef, autoScrollRef);
|
1662
|
+
return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_react_primitive10.Primitive.div, { ...rest, ref, children });
|
1673
1663
|
});
|
1674
1664
|
ThreadPrimitiveViewport.displayName = "ThreadPrimitive.Viewport";
|
1675
1665
|
|
1676
1666
|
// src/primitives/thread/ThreadMessages.tsx
|
1677
|
-
var
|
1667
|
+
var import_react48 = require("react");
|
1678
1668
|
|
1679
1669
|
// src/context/providers/MessageProvider.tsx
|
1680
|
-
var
|
1670
|
+
var import_react47 = require("react");
|
1681
1671
|
var import_zustand12 = require("zustand");
|
1682
1672
|
|
1683
1673
|
// src/context/stores/EditComposer.ts
|
@@ -1687,27 +1677,25 @@ var makeEditComposerStore = ({
|
|
1687
1677
|
onSend
|
1688
1678
|
}) => (0, import_zustand10.create)()((set, get, store) => ({
|
1689
1679
|
...makeBaseComposer(set, get, store),
|
1680
|
+
canCancel: false,
|
1690
1681
|
isEditing: false,
|
1691
1682
|
edit: () => {
|
1692
1683
|
const value = onEdit();
|
1693
|
-
set({ isEditing: true, value });
|
1684
|
+
set({ isEditing: true, canCancel: true, value });
|
1694
1685
|
},
|
1695
1686
|
send: () => {
|
1696
1687
|
const value = get().value;
|
1697
|
-
set({ isEditing: false });
|
1688
|
+
set({ isEditing: false, canCancel: false });
|
1698
1689
|
onSend(value);
|
1699
1690
|
},
|
1700
1691
|
cancel: () => {
|
1701
|
-
|
1702
|
-
set({ isEditing: false });
|
1703
|
-
return true;
|
1692
|
+
set({ isEditing: false, canCancel: false });
|
1704
1693
|
}
|
1705
1694
|
}));
|
1706
1695
|
|
1707
1696
|
// src/context/stores/MessageUtils.ts
|
1708
1697
|
var import_zustand11 = require("zustand");
|
1709
1698
|
var makeMessageUtilsStore = () => (0, import_zustand11.create)((set) => ({
|
1710
|
-
inProgressIndicator: document.createElement("span"),
|
1711
1699
|
isCopied: false,
|
1712
1700
|
setIsCopied: (value) => {
|
1713
1701
|
set({ isCopied: value });
|
@@ -1719,7 +1707,7 @@ var makeMessageUtilsStore = () => (0, import_zustand11.create)((set) => ({
|
|
1719
1707
|
}));
|
1720
1708
|
|
1721
1709
|
// src/context/providers/MessageProvider.tsx
|
1722
|
-
var
|
1710
|
+
var import_jsx_runtime23 = require("react/jsx-runtime");
|
1723
1711
|
var getIsLast = (messages, message) => {
|
1724
1712
|
return messages[messages.length - 1]?.id === message.id;
|
1725
1713
|
};
|
@@ -1741,7 +1729,7 @@ var syncMessage = (messages, getBranches, useMessage, messageIndex) => {
|
|
1741
1729
|
};
|
1742
1730
|
var useMessageContext2 = (messageIndex) => {
|
1743
1731
|
const { useThreadMessages, useThreadActions } = useThreadContext();
|
1744
|
-
const [context] = (0,
|
1732
|
+
const [context] = (0, import_react47.useState)(() => {
|
1745
1733
|
const useMessage = (0, import_zustand12.create)(() => ({}));
|
1746
1734
|
const useMessageUtils = makeMessageUtilsStore();
|
1747
1735
|
const useEditComposer = makeEditComposerStore({
|
@@ -1778,7 +1766,7 @@ var useMessageContext2 = (messageIndex) => {
|
|
1778
1766
|
);
|
1779
1767
|
return { useMessage, useMessageUtils, useEditComposer };
|
1780
1768
|
});
|
1781
|
-
(0,
|
1769
|
+
(0, import_react47.useEffect)(() => {
|
1782
1770
|
return useThreadMessages.subscribe((thread) => {
|
1783
1771
|
syncMessage(
|
1784
1772
|
thread,
|
@@ -1795,11 +1783,11 @@ var MessageProvider = ({
|
|
1795
1783
|
children
|
1796
1784
|
}) => {
|
1797
1785
|
const context = useMessageContext2(messageIndex);
|
1798
|
-
return /* @__PURE__ */ (0,
|
1786
|
+
return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(MessageContext.Provider, { value: context, children });
|
1799
1787
|
};
|
1800
1788
|
|
1801
1789
|
// src/primitives/thread/ThreadMessages.tsx
|
1802
|
-
var
|
1790
|
+
var import_jsx_runtime24 = require("react/jsx-runtime");
|
1803
1791
|
var getComponents = (components) => {
|
1804
1792
|
return {
|
1805
1793
|
EditComposer: components.EditComposer ?? components.UserMessage ?? components.Message,
|
@@ -1812,19 +1800,19 @@ var ThreadMessageImpl = ({
|
|
1812
1800
|
components
|
1813
1801
|
}) => {
|
1814
1802
|
const { UserMessage, EditComposer, AssistantMessage } = getComponents(components);
|
1815
|
-
return /* @__PURE__ */ (0,
|
1816
|
-
/* @__PURE__ */ (0,
|
1817
|
-
/* @__PURE__ */ (0,
|
1818
|
-
/* @__PURE__ */ (0,
|
1803
|
+
return /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(MessageProvider, { messageIndex, children: [
|
1804
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(MessagePrimitiveIf, { user: true, children: [
|
1805
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)(ComposerPrimitiveIf, { editing: false, children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(UserMessage, {}) }),
|
1806
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)(ComposerPrimitiveIf, { editing: true, children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(EditComposer, {}) })
|
1819
1807
|
] }),
|
1820
|
-
/* @__PURE__ */ (0,
|
1808
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)(MessagePrimitiveIf, { assistant: true, children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(AssistantMessage, {}) })
|
1821
1809
|
] });
|
1822
1810
|
};
|
1823
|
-
var ThreadMessage = (0,
|
1811
|
+
var ThreadMessage = (0, import_react48.memo)(
|
1824
1812
|
ThreadMessageImpl,
|
1825
|
-
(prev, next) => prev.messageIndex === next.messageIndex && prev.components.UserMessage === next.components.UserMessage && prev.components.EditComposer === next.components.EditComposer && prev.components.AssistantMessage === next.components.AssistantMessage
|
1813
|
+
(prev, next) => prev.messageIndex === next.messageIndex && prev.components.Message === next.components.Message && prev.components.UserMessage === next.components.UserMessage && prev.components.EditComposer === next.components.EditComposer && prev.components.AssistantMessage === next.components.AssistantMessage
|
1826
1814
|
);
|
1827
|
-
var
|
1815
|
+
var ThreadPrimitiveMessagesImpl = ({
|
1828
1816
|
components
|
1829
1817
|
}) => {
|
1830
1818
|
const { useThreadMessages } = useThreadContext();
|
@@ -1832,7 +1820,7 @@ var ThreadPrimitiveMessages = ({
|
|
1832
1820
|
if (messagesLength === 0) return null;
|
1833
1821
|
return new Array(messagesLength).fill(null).map((_, idx) => {
|
1834
1822
|
const messageIndex = idx;
|
1835
|
-
return /* @__PURE__ */ (0,
|
1823
|
+
return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
|
1836
1824
|
ThreadMessage,
|
1837
1825
|
{
|
1838
1826
|
messageIndex,
|
@@ -1842,7 +1830,11 @@ var ThreadPrimitiveMessages = ({
|
|
1842
1830
|
);
|
1843
1831
|
});
|
1844
1832
|
};
|
1845
|
-
|
1833
|
+
ThreadPrimitiveMessagesImpl.displayName = "ThreadPrimitive.Messages";
|
1834
|
+
var ThreadPrimitiveMessages = (0, import_react48.memo)(
|
1835
|
+
ThreadPrimitiveMessagesImpl,
|
1836
|
+
(prev, next) => prev.components?.Message === next.components?.Message && prev.components?.UserMessage === next.components?.UserMessage && prev.components?.EditComposer === next.components?.EditComposer && prev.components?.AssistantMessage === next.components?.AssistantMessage
|
1837
|
+
);
|
1846
1838
|
|
1847
1839
|
// src/primitives/thread/ThreadScrollToBottom.tsx
|
1848
1840
|
var ThreadPrimitiveScrollToBottom = createActionButton(
|
@@ -1857,7 +1849,7 @@ var ThreadPrimitiveSuggestion = createActionButton(
|
|
1857
1849
|
);
|
1858
1850
|
|
1859
1851
|
// src/runtime/local/useLocalRuntime.tsx
|
1860
|
-
var
|
1852
|
+
var import_react49 = require("react");
|
1861
1853
|
|
1862
1854
|
// src/runtime/utils/idUtils.tsx
|
1863
1855
|
var import_non_secure = require("nanoid/non-secure");
|
@@ -2026,6 +2018,9 @@ var BaseAssistantRuntime = class {
|
|
2026
2018
|
this._thread = _thread;
|
2027
2019
|
this._unsubscribe = this._thread.subscribe(this.subscriptionHandler);
|
2028
2020
|
}
|
2021
|
+
get capabilities() {
|
2022
|
+
return this._thread.capabilities;
|
2023
|
+
}
|
2029
2024
|
_unsubscribe;
|
2030
2025
|
get thread() {
|
2031
2026
|
return this._thread;
|
@@ -2098,6 +2093,12 @@ var LocalRuntime = class extends BaseAssistantRuntime {
|
|
2098
2093
|
);
|
2099
2094
|
}
|
2100
2095
|
};
|
2096
|
+
var CAPABILITIES = Object.freeze({
|
2097
|
+
edit: true,
|
2098
|
+
reload: true,
|
2099
|
+
cancel: true,
|
2100
|
+
copy: true
|
2101
|
+
});
|
2101
2102
|
var LocalThreadRuntime = class {
|
2102
2103
|
constructor(_configProviders, adapter) {
|
2103
2104
|
this._configProviders = _configProviders;
|
@@ -2106,6 +2107,7 @@ var LocalThreadRuntime = class {
|
|
2106
2107
|
_subscriptions = /* @__PURE__ */ new Set();
|
2107
2108
|
abortController = null;
|
2108
2109
|
repository = new MessageRepository();
|
2110
|
+
capabilities = CAPABILITIES;
|
2109
2111
|
get messages() {
|
2110
2112
|
return this.repository.getMessages();
|
2111
2113
|
}
|
@@ -2189,8 +2191,8 @@ var LocalThreadRuntime = class {
|
|
2189
2191
|
|
2190
2192
|
// src/runtime/local/useLocalRuntime.tsx
|
2191
2193
|
var useLocalRuntime = (adapter) => {
|
2192
|
-
const [runtime] = (0,
|
2193
|
-
(0,
|
2194
|
+
const [runtime] = (0, import_react49.useState)(() => new LocalRuntime(adapter));
|
2195
|
+
(0, import_react49.useInsertionEffect)(() => {
|
2194
2196
|
runtime.adapter = adapter;
|
2195
2197
|
});
|
2196
2198
|
return runtime;
|