@assistant-ui/react 0.2.4 → 0.3.0

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.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;