@assistant-ui/react 0.2.4 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
package/dist/index.js CHANGED
@@ -584,7 +584,7 @@ var useActionBarCopy = ({
584
584
  const hasCopyableContent = useCombinedStore(
585
585
  [useMessage, useEditComposer],
586
586
  (m, c) => {
587
- return !c.isEditing && m.message.content.some((c2) => c2.type === "text");
587
+ return !c.isEditing && m.message.content.some((c2) => c2.type === "text" && c2.text.length > 0);
588
588
  }
589
589
  );
590
590
  const callback = (0, import_react16.useCallback)(() => {
@@ -757,7 +757,7 @@ var useContentPartText = () => {
757
757
  throw new Error(
758
758
  "ContentPartText can only be used inside text content parts."
759
759
  );
760
- return c.part.text;
760
+ return c;
761
761
  });
762
762
  return text;
763
763
  };
@@ -1107,28 +1107,57 @@ __export(message_exports, {
1107
1107
  });
1108
1108
 
1109
1109
  // src/primitives/message/MessageRoot.tsx
1110
- var import_primitive4 = require("@radix-ui/primitive");
1111
1110
  var import_react_primitive3 = require("@radix-ui/react-primitive");
1111
+ var import_react33 = require("react");
1112
+
1113
+ // src/utils/hooks/useManagedRef.ts
1112
1114
  var import_react32 = require("react");
1115
+ var useManagedRef = (callback) => {
1116
+ const cleanupRef = (0, import_react32.useRef)();
1117
+ const ref = (0, import_react32.useCallback)(
1118
+ (el) => {
1119
+ if (cleanupRef.current) {
1120
+ cleanupRef.current();
1121
+ }
1122
+ if (el) {
1123
+ cleanupRef.current = callback(el);
1124
+ }
1125
+ },
1126
+ [callback]
1127
+ );
1128
+ return ref;
1129
+ };
1130
+
1131
+ // src/primitives/message/MessageRoot.tsx
1132
+ var import_react_compose_refs = require("@radix-ui/react-compose-refs");
1113
1133
  var import_jsx_runtime12 = require("react/jsx-runtime");
1114
- var MessagePrimitiveRoot = (0, import_react32.forwardRef)(({ onMouseEnter, onMouseLeave, ...rest }, ref) => {
1134
+ var useIsHoveringRef = () => {
1115
1135
  const { useMessageUtils } = useMessageContext();
1116
- const setIsHovering = useMessageUtils((s) => s.setIsHovering);
1117
- const handleMouseEnter = () => {
1118
- setIsHovering(true);
1119
- };
1120
- const handleMouseLeave = () => {
1121
- setIsHovering(false);
1122
- };
1123
- return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
1124
- import_react_primitive3.Primitive.div,
1125
- {
1126
- ...rest,
1127
- ref,
1128
- onMouseEnter: (0, import_primitive4.composeEventHandlers)(onMouseEnter, handleMouseEnter),
1129
- onMouseLeave: (0, import_primitive4.composeEventHandlers)(onMouseLeave, handleMouseLeave)
1130
- }
1136
+ const callbackRef = (0, import_react33.useCallback)(
1137
+ (el) => {
1138
+ const setIsHovering = useMessageUtils.getState().setIsHovering;
1139
+ const handleMouseEnter = () => {
1140
+ setIsHovering(true);
1141
+ };
1142
+ const handleMouseLeave = () => {
1143
+ setIsHovering(false);
1144
+ };
1145
+ el.addEventListener("mouseenter", handleMouseEnter);
1146
+ el.addEventListener("mouseleave", handleMouseLeave);
1147
+ return () => {
1148
+ el.removeEventListener("mouseenter", handleMouseEnter);
1149
+ el.removeEventListener("mouseleave", handleMouseLeave);
1150
+ setIsHovering(false);
1151
+ };
1152
+ },
1153
+ [useMessageUtils]
1131
1154
  );
1155
+ return useManagedRef(callbackRef);
1156
+ };
1157
+ var MessagePrimitiveRoot = (0, import_react33.forwardRef)(({ onMouseEnter, onMouseLeave, ...rest }, forwardRef15) => {
1158
+ const isHoveringRef = useIsHoveringRef();
1159
+ const ref = (0, import_react_compose_refs.useComposedRefs)(forwardRef15, isHoveringRef);
1160
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_react_primitive3.Primitive.div, { ...rest, ref });
1132
1161
  });
1133
1162
  MessagePrimitiveRoot.displayName = "MessagePrimitive.Root";
1134
1163
 
@@ -1143,10 +1172,10 @@ var MessagePrimitiveIf = ({
1143
1172
  MessagePrimitiveIf.displayName = "MessagePrimitive.If";
1144
1173
 
1145
1174
  // src/primitives/message/MessageContent.tsx
1146
- var import_react36 = require("react");
1175
+ var import_react37 = require("react");
1147
1176
 
1148
1177
  // src/context/providers/ContentPartProvider.tsx
1149
- var import_react33 = require("react");
1178
+ var import_react34 = require("react");
1150
1179
  var import_zustand9 = require("zustand");
1151
1180
  var import_jsx_runtime13 = require("react/jsx-runtime");
1152
1181
  var syncContentPart = ({ message }, useContentPart, partIndex) => {
@@ -1165,14 +1194,14 @@ var syncContentPart = ({ message }, useContentPart, partIndex) => {
1165
1194
  };
1166
1195
  var useContentPartContext2 = (partIndex) => {
1167
1196
  const { useMessage } = useMessageContext();
1168
- const [context] = (0, import_react33.useState)(() => {
1197
+ const [context] = (0, import_react34.useState)(() => {
1169
1198
  const useContentPart = (0, import_zustand9.create)(
1170
1199
  () => ({})
1171
1200
  );
1172
1201
  syncContentPart(useMessage.getState(), useContentPart, partIndex);
1173
1202
  return { useContentPart };
1174
1203
  });
1175
- (0, import_react33.useEffect)(() => {
1204
+ (0, import_react34.useEffect)(() => {
1176
1205
  syncContentPart(useMessage.getState(), context.useContentPart, partIndex);
1177
1206
  return useMessage.subscribe((message) => {
1178
1207
  syncContentPart(message, context.useContentPart, partIndex);
@@ -1188,6 +1217,29 @@ var ContentPartProvider = ({
1188
1217
  return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(ContentPartContext.Provider, { value: context, children });
1189
1218
  };
1190
1219
 
1220
+ // src/primitives/contentPart/ContentPartText.tsx
1221
+ var import_react_primitive4 = require("@radix-ui/react-primitive");
1222
+ var import_react35 = require("react");
1223
+ var import_jsx_runtime14 = require("react/jsx-runtime");
1224
+ var ContentPartPrimitiveText = (0, import_react35.forwardRef)((props, forwardedRef) => {
1225
+ const {
1226
+ part: { text },
1227
+ status
1228
+ } = useContentPartText();
1229
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_react_primitive4.Primitive.span, { "data-status": status, ...props, ref: forwardedRef, children: text });
1230
+ });
1231
+ ContentPartPrimitiveText.displayName = "ContentPartPrimitive.Text";
1232
+
1233
+ // src/primitives/contentPart/ContentPartImage.tsx
1234
+ var import_react_primitive5 = require("@radix-ui/react-primitive");
1235
+ var import_react36 = require("react");
1236
+ var import_jsx_runtime15 = require("react/jsx-runtime");
1237
+ var ContentPartPrimitiveImage = (0, import_react36.forwardRef)((props, forwardedRef) => {
1238
+ const image = useContentPartImage();
1239
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_react_primitive5.Primitive.img, { src: image, ...props, ref: forwardedRef });
1240
+ });
1241
+ ContentPartPrimitiveImage.displayName = "ContentPartPrimitive.Image";
1242
+
1191
1243
  // src/primitives/contentPart/ContentPartDisplay.tsx
1192
1244
  var ContentPartPrimitiveDisplay = () => {
1193
1245
  const display = useContentPartDisplay();
@@ -1195,61 +1247,31 @@ var ContentPartPrimitiveDisplay = () => {
1195
1247
  };
1196
1248
  ContentPartPrimitiveDisplay.displayName = "ContentPartPrimitive.Display";
1197
1249
 
1198
- // src/utils/OutPortal.tsx
1199
- var import_react34 = require("react");
1200
- var import_jsx_runtime14 = require("react/jsx-runtime");
1201
- var OutPortal = ({ node }) => {
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();
1250
+ // src/primitives/contentPart/ContentPartInProgress.tsx
1251
+ var ContentPartPrimitiveInProgress = ({
1252
+ children
1253
+ }) => {
1219
1254
  const { useContentPart } = useContentPartContext();
1220
- const indicator = useCombinedStore(
1221
- [useMessageUtils, useContentPart],
1222
- (m, c) => c.status === "in_progress" ? m.inProgressIndicator : null
1223
- );
1224
- return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(OutPortal, { node: indicator });
1255
+ const isInProgress = useContentPart((c) => c.status === "in_progress");
1256
+ return isInProgress ? children : null;
1225
1257
  };
1226
- ContentPartPrimitiveInProgressIndicator.displayName = "ContentPartPrimitive.InProgressIndicator";
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";
1258
+ ContentPartPrimitiveInProgress.displayName = "ContentPartPrimitive.InProgress";
1237
1259
 
1238
1260
  // src/primitives/message/MessageContent.tsx
1239
- var import_jsx_runtime17 = require("react/jsx-runtime");
1261
+ var import_jsx_runtime16 = require("react/jsx-runtime");
1240
1262
  var defaultComponents = {
1241
- Text: () => /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("p", { style: { whiteSpace: "pre-line" }, children: [
1242
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(ContentPartPrimitiveText, {}),
1243
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(ContentPartPrimitiveInProgressIndicator, {})
1263
+ Text: () => /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("p", { style: { whiteSpace: "pre-line" }, children: [
1264
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(ContentPartPrimitiveText, {}),
1265
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(ContentPartPrimitiveInProgress, { children: " \u25CF" })
1244
1266
  ] }),
1245
- Image: () => null,
1246
- UI: () => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(ContentPartPrimitiveDisplay, {}),
1267
+ Image: () => /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(ContentPartPrimitiveImage, {}),
1268
+ UI: () => /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(ContentPartPrimitiveDisplay, {}),
1247
1269
  tools: {
1248
1270
  Fallback: (props) => {
1249
1271
  const { useToolUIs } = useAssistantContext();
1250
1272
  const Render = useToolUIs((s) => s.getToolUI(props.part.toolName));
1251
1273
  if (!Render) return null;
1252
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(Render, { ...props });
1274
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(Render, { ...props });
1253
1275
  }
1254
1276
  }
1255
1277
  };
@@ -1268,15 +1290,15 @@ var MessageContentPartComponent = ({
1268
1290
  const type = part.type;
1269
1291
  switch (type) {
1270
1292
  case "text":
1271
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(Text, { part, status });
1293
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(Text, { part, status });
1272
1294
  case "image":
1273
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(Image, { part, status });
1295
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(Image, { part, status });
1274
1296
  case "ui":
1275
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(UI, { part, status });
1297
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(UI, { part, status });
1276
1298
  case "tool-call": {
1277
1299
  const Tool = by_name[part.toolName] || Fallback;
1278
1300
  const addResult = (result) => addToolResult(part.toolCallId, result);
1279
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(Tool, { part, status, addResult });
1301
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(Tool, { part, status, addResult });
1280
1302
  }
1281
1303
  default:
1282
1304
  throw new Error(`Unknown content part type: ${type}`);
@@ -1286,9 +1308,9 @@ var MessageContentPartImpl = ({
1286
1308
  partIndex,
1287
1309
  components
1288
1310
  }) => {
1289
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(ContentPartProvider, { partIndex, children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(MessageContentPartComponent, { components }) });
1311
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(ContentPartProvider, { partIndex, children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(MessageContentPartComponent, { components }) });
1290
1312
  };
1291
- var MessageContentPart = (0, import_react36.memo)(
1313
+ var MessageContentPart = (0, import_react37.memo)(
1292
1314
  MessageContentPartImpl,
1293
1315
  (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
1316
  );
@@ -1299,7 +1321,7 @@ var MessagePrimitiveContent = ({
1299
1321
  const contentLength = useMessage((s) => s.message.content.length);
1300
1322
  return new Array(contentLength).fill(null).map((_, idx) => {
1301
1323
  const partIndex = idx;
1302
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1324
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
1303
1325
  MessageContentPart,
1304
1326
  {
1305
1327
  partIndex,
@@ -1312,21 +1334,15 @@ var MessagePrimitiveContent = ({
1312
1334
  MessagePrimitiveContent.displayName = "MessagePrimitive.Content";
1313
1335
 
1314
1336
  // src/primitives/message/MessageInProgress.tsx
1315
- var import_react_dom = require("react-dom");
1316
- var import_react_primitive5 = require("@radix-ui/react-primitive");
1317
- var import_react37 = require("react");
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
- });
1337
+ var MessagePrimitiveInProgress = () => {
1338
+ return null;
1339
+ };
1324
1340
  MessagePrimitiveInProgress.displayName = "MessagePrimitive.InProgress";
1325
1341
 
1326
1342
  // src/primitives/branchPicker/BranchPickerRoot.tsx
1327
- var import_jsx_runtime19 = require("react/jsx-runtime");
1343
+ var import_jsx_runtime17 = require("react/jsx-runtime");
1328
1344
  var BranchPickerPrimitiveRoot = (0, import_react38.forwardRef)(({ hideWhenSingleBranch, ...rest }, ref) => {
1329
- return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(MessagePrimitiveIf, { hasBranches: hideWhenSingleBranch ? true : void 0, children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_react_primitive6.Primitive.div, { ...rest, ref }) });
1345
+ 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
1346
  });
1331
1347
  BranchPickerPrimitiveRoot.displayName = "BranchPickerPrimitive.Root";
1332
1348
 
@@ -1341,10 +1357,10 @@ __export(composer_exports, {
1341
1357
  });
1342
1358
 
1343
1359
  // src/primitives/composer/ComposerRoot.tsx
1344
- var import_primitive5 = require("@radix-ui/primitive");
1360
+ var import_primitive4 = require("@radix-ui/primitive");
1345
1361
  var import_react_primitive7 = require("@radix-ui/react-primitive");
1346
1362
  var import_react39 = require("react");
1347
- var import_jsx_runtime20 = require("react/jsx-runtime");
1363
+ var import_jsx_runtime18 = require("react/jsx-runtime");
1348
1364
  var ComposerPrimitiveRoot = (0, import_react39.forwardRef)(({ onSubmit, ...rest }, forwardedRef) => {
1349
1365
  const send = useComposerSend();
1350
1366
  const handleSubmit = (e) => {
@@ -1352,25 +1368,25 @@ var ComposerPrimitiveRoot = (0, import_react39.forwardRef)(({ onSubmit, ...rest
1352
1368
  if (!send) return;
1353
1369
  send();
1354
1370
  };
1355
- return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
1371
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
1356
1372
  import_react_primitive7.Primitive.form,
1357
1373
  {
1358
1374
  ...rest,
1359
1375
  ref: forwardedRef,
1360
- onSubmit: (0, import_primitive5.composeEventHandlers)(onSubmit, handleSubmit)
1376
+ onSubmit: (0, import_primitive4.composeEventHandlers)(onSubmit, handleSubmit)
1361
1377
  }
1362
1378
  );
1363
1379
  });
1364
1380
  ComposerPrimitiveRoot.displayName = "ComposerPrimitive.Root";
1365
1381
 
1366
1382
  // src/primitives/composer/ComposerInput.tsx
1367
- var import_primitive6 = require("@radix-ui/primitive");
1368
- var import_react_compose_refs = require("@radix-ui/react-compose-refs");
1383
+ var import_primitive5 = require("@radix-ui/primitive");
1384
+ var import_react_compose_refs2 = require("@radix-ui/react-compose-refs");
1369
1385
  var import_react_slot = require("@radix-ui/react-slot");
1370
1386
  var import_react40 = require("react");
1371
1387
  var import_react_textarea_autosize = __toESM(require("react-textarea-autosize"));
1372
1388
  var import_react_use_escape_keydown = require("@radix-ui/react-use-escape-keydown");
1373
- var import_jsx_runtime21 = require("react/jsx-runtime");
1389
+ var import_jsx_runtime19 = require("react/jsx-runtime");
1374
1390
  var ComposerPrimitiveInput = (0, import_react40.forwardRef)(
1375
1391
  ({ autoFocus = false, asChild, disabled, onChange, onKeyDown, ...rest }, forwardedRef) => {
1376
1392
  const { useThread } = useThreadContext();
@@ -1381,7 +1397,7 @@ var ComposerPrimitiveInput = (0, import_react40.forwardRef)(
1381
1397
  });
1382
1398
  const Component = asChild ? import_react_slot.Slot : import_react_textarea_autosize.default;
1383
1399
  const textareaRef = (0, import_react40.useRef)(null);
1384
- const ref = (0, import_react_compose_refs.useComposedRefs)(forwardedRef, textareaRef);
1400
+ const ref = (0, import_react_compose_refs2.useComposedRefs)(forwardedRef, textareaRef);
1385
1401
  (0, import_react_use_escape_keydown.useEscapeKeydown)((e) => {
1386
1402
  const composer = useComposer.getState();
1387
1403
  if (composer.cancel()) {
@@ -1414,19 +1430,20 @@ var ComposerPrimitiveInput = (0, import_react40.forwardRef)(
1414
1430
  focus();
1415
1431
  }
1416
1432
  });
1417
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
1433
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
1418
1434
  Component,
1419
1435
  {
1436
+ name: "input",
1420
1437
  value,
1421
1438
  ...rest,
1422
1439
  ref,
1423
1440
  disabled,
1424
- onChange: (0, import_primitive6.composeEventHandlers)(onChange, (e) => {
1441
+ onChange: (0, import_primitive5.composeEventHandlers)(onChange, (e) => {
1425
1442
  const composerState = useComposer.getState();
1426
1443
  if (!composerState.isEditing) return;
1427
1444
  return composerState.setValue(e.target.value);
1428
1445
  }),
1429
- onKeyDown: (0, import_primitive6.composeEventHandlers)(onKeyDown, handleKeyPress)
1446
+ onKeyDown: (0, import_primitive5.composeEventHandlers)(onKeyDown, handleKeyPress)
1430
1447
  }
1431
1448
  );
1432
1449
  }
@@ -1436,11 +1453,11 @@ ComposerPrimitiveInput.displayName = "ComposerPrimitive.Input";
1436
1453
  // src/primitives/composer/ComposerSend.tsx
1437
1454
  var import_react41 = require("react");
1438
1455
  var import_react_primitive8 = require("@radix-ui/react-primitive");
1439
- var import_jsx_runtime22 = require("react/jsx-runtime");
1456
+ var import_jsx_runtime20 = require("react/jsx-runtime");
1440
1457
  var ComposerPrimitiveSend = (0, import_react41.forwardRef)(({ disabled, ...rest }, ref) => {
1441
1458
  const { useComposer } = useComposerContext();
1442
1459
  const hasValue = useComposer((c) => c.isEditing && c.value.length > 0);
1443
- return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
1460
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
1444
1461
  import_react_primitive8.Primitive.button,
1445
1462
  {
1446
1463
  type: "submit",
@@ -1473,20 +1490,10 @@ var contentPart_exports = {};
1473
1490
  __export(contentPart_exports, {
1474
1491
  Display: () => ContentPartPrimitiveDisplay,
1475
1492
  Image: () => ContentPartPrimitiveImage,
1476
- InProgressIndicator: () => ContentPartPrimitiveInProgressIndicator,
1493
+ InProgress: () => ContentPartPrimitiveInProgress,
1477
1494
  Text: () => ContentPartPrimitiveText
1478
1495
  });
1479
1496
 
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
1497
  // src/primitives/thread/index.ts
1491
1498
  var thread_exports = {};
1492
1499
  __export(thread_exports, {
@@ -1500,11 +1507,11 @@ __export(thread_exports, {
1500
1507
  });
1501
1508
 
1502
1509
  // src/primitives/thread/ThreadRoot.tsx
1503
- var import_react_primitive10 = require("@radix-ui/react-primitive");
1504
- var import_react43 = require("react");
1505
- var import_jsx_runtime24 = require("react/jsx-runtime");
1506
- var ThreadPrimitiveRoot = (0, import_react43.forwardRef)((props, ref) => {
1507
- return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_react_primitive10.Primitive.div, { ...props, ref });
1510
+ var import_react_primitive9 = require("@radix-ui/react-primitive");
1511
+ var import_react42 = require("react");
1512
+ var import_jsx_runtime21 = require("react/jsx-runtime");
1513
+ var ThreadPrimitiveRoot = (0, import_react42.forwardRef)((props, ref) => {
1514
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_react_primitive9.Primitive.div, { ...props, ref });
1508
1515
  });
1509
1516
  ThreadPrimitiveRoot.displayName = "ThreadPrimitive.Root";
1510
1517
 
@@ -1528,40 +1535,20 @@ var ThreadPrimitiveIf = ({
1528
1535
  ThreadPrimitiveIf.displayName = "ThreadPrimitive.If";
1529
1536
 
1530
1537
  // src/primitives/thread/ThreadViewport.tsx
1531
- var import_react_compose_refs3 = require("@radix-ui/react-compose-refs");
1532
- var import_react_primitive11 = require("@radix-ui/react-primitive");
1533
- var import_react48 = require("react");
1538
+ var import_react_compose_refs4 = require("@radix-ui/react-compose-refs");
1539
+ var import_react_primitive10 = require("@radix-ui/react-primitive");
1540
+ var import_react46 = require("react");
1534
1541
 
1535
1542
  // src/primitive-hooks/thread/useThreadViewportAutoScroll.tsx
1536
- var import_react_compose_refs2 = require("@radix-ui/react-compose-refs");
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");
1543
+ var import_react_compose_refs3 = require("@radix-ui/react-compose-refs");
1541
1544
  var import_react45 = require("react");
1542
1545
 
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
1546
  // src/utils/hooks/useOnResizeContent.tsx
1547
+ var import_react_use_callback_ref2 = require("@radix-ui/react-use-callback-ref");
1548
+ var import_react43 = require("react");
1562
1549
  var useOnResizeContent = (callback) => {
1563
1550
  const callbackRef = (0, import_react_use_callback_ref2.useCallbackRef)(callback);
1564
- const refCallback = (0, import_react45.useCallback)(
1551
+ const refCallback = (0, import_react43.useCallback)(
1565
1552
  (el) => {
1566
1553
  const resizeObserver = new ResizeObserver(() => {
1567
1554
  callbackRef();
@@ -1598,11 +1585,11 @@ var useOnResizeContent = (callback) => {
1598
1585
 
1599
1586
  // src/utils/hooks/useOnScrollToBottom.tsx
1600
1587
  var import_react_use_callback_ref3 = require("@radix-ui/react-use-callback-ref");
1601
- var import_react46 = require("react");
1588
+ var import_react44 = require("react");
1602
1589
  var useOnScrollToBottom = (callback) => {
1603
1590
  const callbackRef = (0, import_react_use_callback_ref3.useCallbackRef)(callback);
1604
1591
  const { useViewport } = useThreadContext();
1605
- (0, import_react46.useEffect)(() => {
1592
+ (0, import_react44.useEffect)(() => {
1606
1593
  return useViewport.getState().onScrollToBottom(() => {
1607
1594
  callbackRef();
1608
1595
  });
@@ -1613,11 +1600,11 @@ var useOnScrollToBottom = (callback) => {
1613
1600
  var useThreadViewportAutoScroll = ({
1614
1601
  autoScroll = true
1615
1602
  }) => {
1616
- const divRef = (0, import_react47.useRef)(null);
1603
+ const divRef = (0, import_react45.useRef)(null);
1617
1604
  const { useViewport } = useThreadContext();
1618
- const firstRenderRef = (0, import_react47.useRef)(true);
1619
- const lastScrollTop = (0, import_react47.useRef)(0);
1620
- const isScrollingToBottomRef = (0, import_react47.useRef)(false);
1605
+ const firstRenderRef = (0, import_react45.useRef)(true);
1606
+ const lastScrollTop = (0, import_react45.useRef)(0);
1607
+ const isScrollingToBottomRef = (0, import_react45.useRef)(false);
1621
1608
  const scrollToBottom = () => {
1622
1609
  const div = divRef.current;
1623
1610
  if (!div || !autoScroll) return;
@@ -1655,7 +1642,7 @@ var useThreadViewportAutoScroll = ({
1655
1642
  el.removeEventListener("scroll", handleScroll);
1656
1643
  };
1657
1644
  });
1658
- const autoScrollRef = (0, import_react_compose_refs2.useComposedRefs)(resizeRef, scrollRef, divRef);
1645
+ const autoScrollRef = (0, import_react_compose_refs3.useComposedRefs)(resizeRef, scrollRef, divRef);
1659
1646
  useOnScrollToBottom(() => {
1660
1647
  scrollToBottom();
1661
1648
  });
@@ -1663,21 +1650,21 @@ var useThreadViewportAutoScroll = ({
1663
1650
  };
1664
1651
 
1665
1652
  // src/primitives/thread/ThreadViewport.tsx
1666
- var import_jsx_runtime25 = require("react/jsx-runtime");
1667
- var ThreadPrimitiveViewport = (0, import_react48.forwardRef)(({ autoScroll, onScroll, children, ...rest }, forwardedRef) => {
1653
+ var import_jsx_runtime22 = require("react/jsx-runtime");
1654
+ var ThreadPrimitiveViewport = (0, import_react46.forwardRef)(({ autoScroll, onScroll, children, ...rest }, forwardedRef) => {
1668
1655
  const autoScrollRef = useThreadViewportAutoScroll({
1669
1656
  autoScroll
1670
1657
  });
1671
- const ref = (0, import_react_compose_refs3.useComposedRefs)(forwardedRef, autoScrollRef);
1672
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_react_primitive11.Primitive.div, { ...rest, ref, children });
1658
+ const ref = (0, import_react_compose_refs4.useComposedRefs)(forwardedRef, autoScrollRef);
1659
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_react_primitive10.Primitive.div, { ...rest, ref, children });
1673
1660
  });
1674
1661
  ThreadPrimitiveViewport.displayName = "ThreadPrimitive.Viewport";
1675
1662
 
1676
1663
  // src/primitives/thread/ThreadMessages.tsx
1677
- var import_react50 = require("react");
1664
+ var import_react48 = require("react");
1678
1665
 
1679
1666
  // src/context/providers/MessageProvider.tsx
1680
- var import_react49 = require("react");
1667
+ var import_react47 = require("react");
1681
1668
  var import_zustand12 = require("zustand");
1682
1669
 
1683
1670
  // src/context/stores/EditComposer.ts
@@ -1707,7 +1694,6 @@ var makeEditComposerStore = ({
1707
1694
  // src/context/stores/MessageUtils.ts
1708
1695
  var import_zustand11 = require("zustand");
1709
1696
  var makeMessageUtilsStore = () => (0, import_zustand11.create)((set) => ({
1710
- inProgressIndicator: document.createElement("span"),
1711
1697
  isCopied: false,
1712
1698
  setIsCopied: (value) => {
1713
1699
  set({ isCopied: value });
@@ -1719,7 +1705,7 @@ var makeMessageUtilsStore = () => (0, import_zustand11.create)((set) => ({
1719
1705
  }));
1720
1706
 
1721
1707
  // src/context/providers/MessageProvider.tsx
1722
- var import_jsx_runtime26 = require("react/jsx-runtime");
1708
+ var import_jsx_runtime23 = require("react/jsx-runtime");
1723
1709
  var getIsLast = (messages, message) => {
1724
1710
  return messages[messages.length - 1]?.id === message.id;
1725
1711
  };
@@ -1741,7 +1727,7 @@ var syncMessage = (messages, getBranches, useMessage, messageIndex) => {
1741
1727
  };
1742
1728
  var useMessageContext2 = (messageIndex) => {
1743
1729
  const { useThreadMessages, useThreadActions } = useThreadContext();
1744
- const [context] = (0, import_react49.useState)(() => {
1730
+ const [context] = (0, import_react47.useState)(() => {
1745
1731
  const useMessage = (0, import_zustand12.create)(() => ({}));
1746
1732
  const useMessageUtils = makeMessageUtilsStore();
1747
1733
  const useEditComposer = makeEditComposerStore({
@@ -1778,7 +1764,7 @@ var useMessageContext2 = (messageIndex) => {
1778
1764
  );
1779
1765
  return { useMessage, useMessageUtils, useEditComposer };
1780
1766
  });
1781
- (0, import_react49.useEffect)(() => {
1767
+ (0, import_react47.useEffect)(() => {
1782
1768
  return useThreadMessages.subscribe((thread) => {
1783
1769
  syncMessage(
1784
1770
  thread,
@@ -1795,11 +1781,11 @@ var MessageProvider = ({
1795
1781
  children
1796
1782
  }) => {
1797
1783
  const context = useMessageContext2(messageIndex);
1798
- return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(MessageContext.Provider, { value: context, children });
1784
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(MessageContext.Provider, { value: context, children });
1799
1785
  };
1800
1786
 
1801
1787
  // src/primitives/thread/ThreadMessages.tsx
1802
- var import_jsx_runtime27 = require("react/jsx-runtime");
1788
+ var import_jsx_runtime24 = require("react/jsx-runtime");
1803
1789
  var getComponents = (components) => {
1804
1790
  return {
1805
1791
  EditComposer: components.EditComposer ?? components.UserMessage ?? components.Message,
@@ -1812,15 +1798,15 @@ var ThreadMessageImpl = ({
1812
1798
  components
1813
1799
  }) => {
1814
1800
  const { UserMessage, EditComposer, AssistantMessage } = getComponents(components);
1815
- return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(MessageProvider, { messageIndex, children: [
1816
- /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(MessagePrimitiveIf, { user: true, children: [
1817
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(ComposerPrimitiveIf, { editing: false, children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(UserMessage, {}) }),
1818
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(ComposerPrimitiveIf, { editing: true, children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(EditComposer, {}) })
1801
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(MessageProvider, { messageIndex, children: [
1802
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(MessagePrimitiveIf, { user: true, children: [
1803
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(ComposerPrimitiveIf, { editing: false, children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(UserMessage, {}) }),
1804
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(ComposerPrimitiveIf, { editing: true, children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(EditComposer, {}) })
1819
1805
  ] }),
1820
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(MessagePrimitiveIf, { assistant: true, children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(AssistantMessage, {}) })
1806
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(MessagePrimitiveIf, { assistant: true, children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(AssistantMessage, {}) })
1821
1807
  ] });
1822
1808
  };
1823
- var ThreadMessage = (0, import_react50.memo)(
1809
+ var ThreadMessage = (0, import_react48.memo)(
1824
1810
  ThreadMessageImpl,
1825
1811
  (prev, next) => prev.messageIndex === next.messageIndex && prev.components.UserMessage === next.components.UserMessage && prev.components.EditComposer === next.components.EditComposer && prev.components.AssistantMessage === next.components.AssistantMessage
1826
1812
  );
@@ -1832,7 +1818,7 @@ var ThreadPrimitiveMessages = ({
1832
1818
  if (messagesLength === 0) return null;
1833
1819
  return new Array(messagesLength).fill(null).map((_, idx) => {
1834
1820
  const messageIndex = idx;
1835
- return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
1821
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
1836
1822
  ThreadMessage,
1837
1823
  {
1838
1824
  messageIndex,
@@ -1857,7 +1843,7 @@ var ThreadPrimitiveSuggestion = createActionButton(
1857
1843
  );
1858
1844
 
1859
1845
  // src/runtime/local/useLocalRuntime.tsx
1860
- var import_react51 = require("react");
1846
+ var import_react49 = require("react");
1861
1847
 
1862
1848
  // src/runtime/utils/idUtils.tsx
1863
1849
  var import_non_secure = require("nanoid/non-secure");
@@ -2189,8 +2175,8 @@ var LocalThreadRuntime = class {
2189
2175
 
2190
2176
  // src/runtime/local/useLocalRuntime.tsx
2191
2177
  var useLocalRuntime = (adapter) => {
2192
- const [runtime] = (0, import_react51.useState)(() => new LocalRuntime(adapter));
2193
- (0, import_react51.useInsertionEffect)(() => {
2178
+ const [runtime] = (0, import_react49.useState)(() => new LocalRuntime(adapter));
2179
+ (0, import_react49.useInsertionEffect)(() => {
2194
2180
  runtime.adapter = adapter;
2195
2181
  });
2196
2182
  return runtime;