@superinterface/react 2.10.0 → 2.11.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.cjs CHANGED
@@ -391,6 +391,8 @@ __export(src_exports, {
391
391
  }
392
392
  });
393
393
  module.exports = __toCommonJS(src_exports);
394
+ // src/components/core/SuperinterfaceProvider/index.tsx
395
+ var import_react3 = require("react");
394
396
  // src/lib/misc/merge/index.ts
395
397
  var import_lodash2 = __toESM(require("lodash"), 1);
396
398
  // src/lib/misc/merge/customizer.ts
@@ -451,7 +453,10 @@ var SuperinterfaceContext = (0, import_react.createContext)({
451
453
  queries: {},
452
454
  mutations: {}
453
455
  },
454
- threadIdCookieOptions: options
456
+ threadIdCookieOptions: options,
457
+ createMessageAbortControllerRef: {
458
+ current: null
459
+ }
455
460
  });
456
461
  // src/hooks/core/useSuperinterfaceContext/index.ts
457
462
  var import_react2 = require("react");
@@ -463,7 +468,8 @@ var import_jsx_runtime = require("react/jsx-runtime");
463
468
  var SuperinterfaceProvider = function(param) {
464
469
  var children = param.children, baseUrl2 = param.baseUrl, variables = param.variables, defaultOptions = param.defaultOptions, threadIdCookieOptions = param.threadIdCookieOptions;
465
470
  var superinterfaceContext = useSuperinterfaceContext();
466
- var value = merge(superinterfaceContext, _object_spread({}, baseUrl2 ? {
471
+ var createMessageAbortControllerRef = (0, import_react3.useRef)(null);
472
+ var value = merge(superinterfaceContext, _object_spread_props(_object_spread({}, baseUrl2 ? {
467
473
  baseUrl: baseUrl2
468
474
  } : {}, variables ? {
469
475
  variables: variables
@@ -471,7 +477,9 @@ var SuperinterfaceProvider = function(param) {
471
477
  defaultOptions: defaultOptions
472
478
  } : {}, threadIdCookieOptions ? {
473
479
  threadIdCookieOptions: threadIdCookieOptions
474
- } : {}));
480
+ } : {}), {
481
+ createMessageAbortControllerRef: createMessageAbortControllerRef
482
+ }));
475
483
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(SuperinterfaceContext.Provider, {
476
484
  value: value,
477
485
  children: children
@@ -480,9 +488,9 @@ var SuperinterfaceProvider = function(param) {
480
488
  // src/components/threads/Thread/Messages/index.tsx
481
489
  var import_themes30 = require("@radix-ui/themes");
482
490
  // src/components/threads/Thread/Messages/Content/index.tsx
483
- var import_react20 = require("react");
491
+ var import_react22 = require("react");
484
492
  // src/hooks/messages/useMessages/index.tsx
485
- var import_react3 = require("react");
493
+ var import_react4 = require("react");
486
494
  var import_react_query2 = require("@tanstack/react-query");
487
495
  // src/lib/threads/queryOptions/index.ts
488
496
  var import_react_query = require("@tanstack/react-query");
@@ -610,7 +618,7 @@ var useMessages = function() {
610
618
  threadContext: threadContext,
611
619
  superinterfaceContext: superinterfaceContext
612
620
  }));
613
- return (0, import_react3.useMemo)(function() {
621
+ return (0, import_react4.useMemo)(function() {
614
622
  return _object_spread_props(_object_spread({}, props), {
615
623
  // @ts-ignore-next-line
616
624
  messages: messages({
@@ -622,7 +630,7 @@ var useMessages = function() {
622
630
  ]);
623
631
  };
624
632
  // src/hooks/messageGroups/useMessageGroups/index.ts
625
- var import_react4 = require("react");
633
+ var import_react5 = require("react");
626
634
  // src/hooks/messageGroups/useMessageGroups/lib/messageGroups/index.ts
627
635
  var import_lodash3 = __toESM(require("lodash"), 1);
628
636
  var import_radash2 = require("radash");
@@ -684,7 +692,7 @@ var messageGroups = function(param) {
684
692
  // src/hooks/messageGroups/useMessageGroups/index.ts
685
693
  var useMessageGroups = function(param) {
686
694
  var messages2 = param.messages;
687
- return (0, import_react4.useMemo)(function() {
695
+ return (0, import_react5.useMemo)(function() {
688
696
  return {
689
697
  messageGroups: messageGroups({
690
698
  messages: messages2
@@ -695,13 +703,13 @@ var useMessageGroups = function(param) {
695
703
  ]);
696
704
  };
697
705
  // src/components/skeletons/MessagesSkeleton/index.tsx
698
- var import_react6 = require("react");
706
+ var import_react7 = require("react");
699
707
  var import_themes3 = require("@radix-ui/themes");
700
708
  // src/components/messageGroups/MessageGroupBase/index.tsx
701
- var import_react5 = require("react");
709
+ var import_react6 = require("react");
702
710
  var import_themes = require("@radix-ui/themes");
703
711
  var import_jsx_runtime2 = require("react/jsx-runtime");
704
- var MessageGroupBase = (0, import_react5.forwardRef)(function MessageGroupBase2(param, ref) {
712
+ var MessageGroupBase = (0, import_react6.forwardRef)(function MessageGroupBase2(param, ref) {
705
713
  var children = param.children;
706
714
  return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_themes.Container, {
707
715
  ref: ref,
@@ -731,7 +739,7 @@ var Name = function(param) {
731
739
  };
732
740
  // src/components/skeletons/MessagesSkeleton/index.tsx
733
741
  var import_jsx_runtime4 = require("react/jsx-runtime");
734
- var MessagesSkeleton = (0, import_react6.forwardRef)(function MessagesSkeleton2(_props, ref) {
742
+ var MessagesSkeleton = (0, import_react7.forwardRef)(function MessagesSkeleton2(_props, ref) {
735
743
  return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(MessageGroupBase, {
736
744
  ref: ref,
737
745
  children: [
@@ -779,37 +787,37 @@ var MessagesSkeleton = (0, import_react6.forwardRef)(function MessagesSkeleton2(
779
787
  });
780
788
  });
781
789
  // src/hooks/toasts/useToasts/index.ts
782
- var import_react8 = require("react");
790
+ var import_react9 = require("react");
783
791
  // src/contexts/toasts/ToastsContext/index.ts
784
- var import_react7 = require("react");
785
- var ToastsContext = (0, import_react7.createContext)({
792
+ var import_react8 = require("react");
793
+ var ToastsContext = (0, import_react8.createContext)({
786
794
  toasts: [],
787
795
  addToast: function() {}
788
796
  });
789
797
  // src/hooks/toasts/useToasts/index.ts
790
798
  var useToasts = function() {
791
- return (0, import_react8.useContext)(ToastsContext);
799
+ return (0, import_react9.useContext)(ToastsContext);
792
800
  };
793
801
  // src/components/threads/Thread/Messages/Content/MessageGroup/index.tsx
794
- var import_react19 = require("react");
802
+ var import_react21 = require("react");
795
803
  var import_themes27 = require("@radix-ui/themes");
796
804
  var import_react_icons4 = require("@radix-ui/react-icons");
797
805
  // src/components/messageGroups/MessageGroupBase/AssistantAvatar.tsx
798
- var import_react10 = require("react");
806
+ var import_react11 = require("react");
799
807
  var import_themes5 = require("@radix-ui/themes");
800
808
  // src/contexts/assistants/AssistantAvatarContext/index.tsx
801
- var import_react9 = require("react");
809
+ var import_react10 = require("react");
802
810
  var import_themes4 = require("@radix-ui/themes");
803
811
  var import_react_icons = require("@radix-ui/react-icons");
804
812
  var import_jsx_runtime5 = require("react/jsx-runtime");
805
- var AssistantAvatarContext = (0, import_react9.createContext)(/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_themes4.Avatar, {
813
+ var AssistantAvatarContext = (0, import_react10.createContext)(/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_themes4.Avatar, {
806
814
  fallback: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_react_icons.LightningBoltIcon, {}),
807
815
  size: "1"
808
816
  }));
809
817
  // src/components/messageGroups/MessageGroupBase/AssistantAvatar.tsx
810
818
  var import_jsx_runtime6 = require("react/jsx-runtime");
811
819
  var AssistantAvatar = function() {
812
- var AssistantAvatarContextValue = (0, import_react10.useContext)(AssistantAvatarContext);
820
+ var AssistantAvatarContextValue = (0, import_react11.useContext)(AssistantAvatarContext);
813
821
  return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_themes5.Flex, {
814
822
  flexShrink: "0",
815
823
  height: "24px",
@@ -822,12 +830,12 @@ var AssistantAvatar = function() {
822
830
  });
823
831
  };
824
832
  // src/contexts/assistants/AssistantNameContext/index.tsx
825
- var import_react11 = require("react");
826
- var AssistantNameContext = (0, import_react11.createContext)("Assistant");
833
+ var import_react12 = require("react");
834
+ var AssistantNameContext = (0, import_react12.createContext)("Assistant");
827
835
  // src/components/threads/Thread/Messages/Content/MessageGroup/Content/index.tsx
828
836
  var import_themes26 = require("@radix-ui/themes");
829
837
  // src/components/threads/Thread/Message/index.tsx
830
- var import_react18 = require("react");
838
+ var import_react20 = require("react");
831
839
  var import_themes25 = require("@radix-ui/themes");
832
840
  // src/components/skeletons/StartingContentSkeleton/index.tsx
833
841
  var import_themes6 = require("@radix-ui/themes");
@@ -851,10 +859,10 @@ var import_themes14 = require("@radix-ui/themes");
851
859
  // src/components/runSteps/RunStep/ToolCalls/ToolCall/index.tsx
852
860
  var import_themes12 = require("@radix-ui/themes");
853
861
  // src/components/runSteps/RunStep/ToolCalls/ToolCall/Fn/index.tsx
854
- var import_react14 = require("react");
862
+ var import_react15 = require("react");
855
863
  // src/contexts/functions/FunctionComponentsContext/index.tsx
856
- var import_react12 = require("react");
857
- var FunctionComponentsContext = (0, import_react12.createContext)({});
864
+ var import_react13 = require("react");
865
+ var FunctionComponentsContext = (0, import_react13.createContext)({});
858
866
  // src/components/functions/FunctionBase/index.tsx
859
867
  var import_themes10 = require("@radix-ui/themes");
860
868
  // src/components/toolCalls/ToolCallBase/index.tsx
@@ -902,12 +910,12 @@ var Icon = function(param) {
902
910
  }
903
911
  };
904
912
  // src/components/functions/FunctionBase/Content.tsx
905
- var import_react13 = require("react");
913
+ var import_react14 = require("react");
906
914
  var import_themes9 = require("@radix-ui/themes");
907
915
  var import_jsx_runtime11 = require("react/jsx-runtime");
908
916
  var Content = function(param) {
909
917
  var fn = param.fn;
910
- var args = (0, import_react13.useMemo)(function() {
918
+ var args = (0, import_react14.useMemo)(function() {
911
919
  var result = null;
912
920
  try {
913
921
  result = JSON.parse(fn.arguments);
@@ -918,7 +926,7 @@ var Content = function(param) {
918
926
  }, [
919
927
  fn
920
928
  ]);
921
- var output = (0, import_react13.useMemo)(function() {
929
+ var output = (0, import_react14.useMemo)(function() {
922
930
  if (!fn.output) {
923
931
  return null;
924
932
  }
@@ -1008,7 +1016,7 @@ var import_jsx_runtime14 = // @ts-ignore-next-line
1008
1016
  require("react/jsx-runtime");
1009
1017
  var Fn = function(param) {
1010
1018
  var fn = param.fn, runStep = param.runStep;
1011
- var functionComponentsContext = (0, import_react14.useContext)(FunctionComponentsContext);
1019
+ var functionComponentsContext = (0, import_react15.useContext)(FunctionComponentsContext);
1012
1020
  var Component = functionComponentsContext[fn.name] || DefaultFunction;
1013
1021
  return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(Component, {
1014
1022
  fn: fn,
@@ -1112,9 +1120,27 @@ var RunSteps = function(param) {
1112
1120
  })
1113
1121
  });
1114
1122
  };
1123
+ // src/hooks/messages/useIsMutatingMessage/index.ts
1124
+ var import_react16 = require("react");
1125
+ var import_react_query3 = require("@tanstack/react-query");
1126
+ var useIsMutatingMessage = function() {
1127
+ var threadContext = useSuperinterfaceContext();
1128
+ var mutatingMessagesCount = (0, import_react_query3.useIsMutating)({
1129
+ mutationKey: [
1130
+ "createMessage",
1131
+ threadContext.variables
1132
+ ]
1133
+ });
1134
+ var isMutatingMessage = (0, import_react16.useMemo)(function() {
1135
+ return mutatingMessagesCount > 0;
1136
+ }, [
1137
+ mutatingMessagesCount
1138
+ ]);
1139
+ return isMutatingMessage;
1140
+ };
1115
1141
  // src/contexts/messages/MessageContext/index.ts
1116
- var import_react15 = require("react");
1117
- var MessageContext = (0, import_react15.createContext)({
1142
+ var import_react17 = require("react");
1143
+ var MessageContext = (0, import_react17.createContext)({
1118
1144
  message: null
1119
1145
  });
1120
1146
  // src/components/threads/Thread/Message/Provider.tsx
@@ -1122,9 +1148,9 @@ var Provider = MessageContext.Provider;
1122
1148
  // src/components/threads/Thread/Message/TextContent.tsx
1123
1149
  var import_react_remark = require("react-remark");
1124
1150
  // src/hooks/markdown/useMarkdownContext/index.ts
1125
- var import_react17 = require("react");
1151
+ var import_react19 = require("react");
1126
1152
  // src/contexts/markdown/MarkdownContext/index.ts
1127
- var import_react16 = require("react");
1153
+ var import_react18 = require("react");
1128
1154
  // src/contexts/markdown/MarkdownContext/lib/components/Paragraph.tsx
1129
1155
  var import_themes16 = require("@radix-ui/themes");
1130
1156
  var import_jsx_runtime21 = require("react/jsx-runtime");
@@ -1254,7 +1280,7 @@ var components = {
1254
1280
  img: Img
1255
1281
  };
1256
1282
  // src/contexts/markdown/MarkdownContext/index.ts
1257
- var MarkdownContext = (0, import_react16.createContext)({
1283
+ var MarkdownContext = (0, import_react18.createContext)({
1258
1284
  remarkPlugins: [],
1259
1285
  rehypeReactOptions: {
1260
1286
  components: components
@@ -1262,7 +1288,7 @@ var MarkdownContext = (0, import_react16.createContext)({
1262
1288
  });
1263
1289
  // src/hooks/markdown/useMarkdownContext/index.ts
1264
1290
  var useMarkdownContext = function() {
1265
- return (0, import_react17.useContext)(MarkdownContext);
1291
+ return (0, import_react19.useContext)(MarkdownContext);
1266
1292
  };
1267
1293
  // src/components/threads/Thread/Message/TextContent.tsx
1268
1294
  var TextContent = function(param) {
@@ -1274,7 +1300,7 @@ var TextContent = function(param) {
1274
1300
  var import_jsx_runtime30 = require("react/jsx-runtime");
1275
1301
  var Message = function(param) {
1276
1302
  var message = param.message;
1277
- var _ref = _sliced_to_array((0, import_react18.useMemo)(function() {
1303
+ var _ref = _sliced_to_array((0, import_react20.useMemo)(function() {
1278
1304
  if (!message.runSteps.length) return [
1279
1305
  [],
1280
1306
  []
@@ -1306,7 +1332,9 @@ var Message = function(param) {
1306
1332
  }, [
1307
1333
  message
1308
1334
  ]), 2), olderRunSteps = _ref[0], laterRunSteps = _ref[1];
1309
- var isInProgress = (0, import_react18.useMemo)(function() {
1335
+ var isMutatingMessage = useIsMutatingMessage();
1336
+ var isInProgress = (0, import_react20.useMemo)(function() {
1337
+ if (!isMutatingMessage) return false;
1310
1338
  if (message.status === "in_progress") return true;
1311
1339
  return message.runSteps.some(function(rs) {
1312
1340
  return rs.status === "in_progress";
@@ -1326,7 +1354,7 @@ var Message = function(param) {
1326
1354
  /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(import_themes25.Box, {
1327
1355
  children: [
1328
1356
  message.content.map(function(content, index) {
1329
- return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_react18.Fragment, {
1357
+ return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_react20.Fragment, {
1330
1358
  children: content.type === "text" && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(TextContent, {
1331
1359
  content: content
1332
1360
  })
@@ -1359,7 +1387,7 @@ var Content2 = function(param) {
1359
1387
  var import_jsx_runtime32 = require("react/jsx-runtime");
1360
1388
  var MessageGroup = function(param) {
1361
1389
  var messageGroup = param.messageGroup;
1362
- var assistantNameContext = (0, import_react19.useContext)(AssistantNameContext);
1390
+ var assistantNameContext = (0, import_react21.useContext)(AssistantNameContext);
1363
1391
  return /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(MessageGroupBase, {
1364
1392
  children: [
1365
1393
  messageGroup.role === "user" ? /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_themes27.Avatar, {
@@ -1388,7 +1416,7 @@ var Content3 = function() {
1388
1416
  var _useMessageGroups = useMessageGroups({
1389
1417
  messages: messages2
1390
1418
  }), messageGroups2 = _useMessageGroups.messageGroups;
1391
- (0, import_react20.useEffect)(function() {
1419
+ (0, import_react22.useEffect)(function() {
1392
1420
  if (isLoadingError) {
1393
1421
  addToast({
1394
1422
  type: "error",
@@ -1411,14 +1439,14 @@ var Content3 = function() {
1411
1439
  });
1412
1440
  };
1413
1441
  // src/components/threads/Thread/Messages/Progress/index.tsx
1414
- var import_react24 = require("react");
1442
+ var import_react25 = require("react");
1415
1443
  // src/components/skeletons/StartingSkeleton/index.tsx
1416
- var import_react21 = require("react");
1444
+ var import_react23 = require("react");
1417
1445
  var import_themes28 = require("@radix-ui/themes");
1418
1446
  var import_jsx_runtime34 = require("react/jsx-runtime");
1419
1447
  var StartingSkeleton = function(param) {
1420
1448
  var children = param.children;
1421
- var assistantNameContext = (0, import_react21.useContext)(AssistantNameContext);
1449
+ var assistantNameContext = (0, import_react23.useContext)(AssistantNameContext);
1422
1450
  return /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(MessageGroupBase, {
1423
1451
  children: [
1424
1452
  /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(AssistantAvatar, {}),
@@ -1435,10 +1463,10 @@ var StartingSkeleton = function(param) {
1435
1463
  });
1436
1464
  };
1437
1465
  // src/hooks/messages/useLatestMessage/index.ts
1438
- var import_react22 = require("react");
1466
+ var import_react24 = require("react");
1439
1467
  var useLatestMessage = function() {
1440
1468
  var props = useMessages();
1441
- return (0, import_react22.useMemo)(function() {
1469
+ return (0, import_react24.useMemo)(function() {
1442
1470
  return _object_spread_props(_object_spread({}, props), {
1443
1471
  latestMessage: props.messages[0] || null
1444
1472
  });
@@ -1452,30 +1480,12 @@ var isOptimistic = function(param) {
1452
1480
  var id = param.id;
1453
1481
  return import_lodash4.default.startsWith(id, "-");
1454
1482
  };
1455
- // src/hooks/messages/useIsMutatingMessage/index.ts
1456
- var import_react23 = require("react");
1457
- var import_react_query3 = require("@tanstack/react-query");
1458
- var useIsMutatingMessage = function() {
1459
- var threadContext = useSuperinterfaceContext();
1460
- var mutatingMessagesCount = (0, import_react_query3.useIsMutating)({
1461
- mutationKey: [
1462
- "createMessage",
1463
- threadContext.variables
1464
- ]
1465
- });
1466
- var isMutatingMessage = (0, import_react23.useMemo)(function() {
1467
- return mutatingMessagesCount > 0;
1468
- }, [
1469
- mutatingMessagesCount
1470
- ]);
1471
- return isMutatingMessage;
1472
- };
1473
1483
  // src/components/threads/Thread/Messages/Progress/index.tsx
1474
1484
  var import_jsx_runtime35 = require("react/jsx-runtime");
1475
1485
  var Progress = function() {
1476
1486
  var latestMessage = useLatestMessage().latestMessage;
1477
1487
  var isMutatingMessage = useIsMutatingMessage();
1478
- var isVisible = (0, import_react24.useMemo)(function() {
1488
+ var isVisible = (0, import_react25.useMemo)(function() {
1479
1489
  if (!latestMessage) return false;
1480
1490
  if (latestMessage.role !== "user") return false;
1481
1491
  if (latestMessage.status === "in_progress") return false;
@@ -1494,15 +1504,15 @@ var Progress = function() {
1494
1504
  // src/components/threads/Thread/Messages/Root/index.tsx
1495
1505
  var import_themes29 = require("@radix-ui/themes");
1496
1506
  // src/hooks/misc/useInfiniteScroll/index.tsx
1497
- var import_react26 = require("react");
1507
+ var import_react27 = require("react");
1498
1508
  var import_react_intersection_observer = require("react-intersection-observer");
1499
1509
  // src/hooks/misc/useThrottledEffect/index.tsx
1500
1510
  var import_lodash5 = __toESM(require("lodash"), 1);
1501
- var import_react25 = require("react");
1511
+ var import_react26 = require("react");
1502
1512
  var useThrottledEffect = function(cb, delay, additionalDeps) {
1503
1513
  var _cbRef;
1504
- var cbRef = (0, import_react25.useRef)(cb);
1505
- var throttledCb = (0, import_react25.useCallback)(import_lodash5.default.throttle(function() {
1514
+ var cbRef = (0, import_react26.useRef)(cb);
1515
+ var throttledCb = (0, import_react26.useCallback)(import_lodash5.default.throttle(function() {
1506
1516
  for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){
1507
1517
  args[_key] = arguments[_key];
1508
1518
  }
@@ -1513,17 +1523,17 @@ var useThrottledEffect = function(cb, delay, additionalDeps) {
1513
1523
  }), [
1514
1524
  delay
1515
1525
  ]);
1516
- (0, import_react25.useEffect)(function() {
1526
+ (0, import_react26.useEffect)(function() {
1517
1527
  cbRef.current = cb;
1518
1528
  });
1519
- (0, import_react25.useEffect)(throttledCb, [
1529
+ (0, import_react26.useEffect)(throttledCb, [
1520
1530
  throttledCb
1521
1531
  ].concat(_to_consumable_array(additionalDeps)));
1522
1532
  };
1523
1533
  // src/hooks/misc/useInfiniteScroll/index.tsx
1524
1534
  var useInfiniteScroll = function(param) {
1525
1535
  var isFetchingNextPage = param.isFetchingNextPage, hasNextPage = param.hasNextPage, fetchNextPage = param.fetchNextPage;
1526
- var containerRef = (0, import_react26.useRef)(null);
1536
+ var containerRef = (0, import_react27.useRef)(null);
1527
1537
  var _ref = (0, import_react_intersection_observer.useInView)({
1528
1538
  root: containerRef.current,
1529
1539
  rootMargin: "0px",
@@ -1616,32 +1626,41 @@ var import_themes34 = require("@radix-ui/themes");
1616
1626
  var import_react_icons5 = require("@radix-ui/react-icons");
1617
1627
  var import_themes31 = require("@radix-ui/themes");
1618
1628
  // src/hooks/messages/useMessageFormContext/index.ts
1619
- var import_react28 = require("react");
1629
+ var import_react29 = require("react");
1620
1630
  // src/contexts/messages/MessageFormContext/index.ts
1621
- var import_react27 = require("react");
1622
- var MessageFormContext = (0, import_react27.createContext)({
1631
+ var import_react28 = require("react");
1632
+ var MessageFormContext = (0, import_react28.createContext)({
1623
1633
  isDisabled: false,
1624
1634
  isLoading: false
1625
1635
  });
1626
1636
  // src/hooks/messages/useMessageFormContext/index.ts
1627
1637
  var useMessageFormContext = function() {
1628
- return (0, import_react28.useContext)(MessageFormContext);
1638
+ return (0, import_react29.useContext)(MessageFormContext);
1629
1639
  };
1630
1640
  // src/components/threads/Thread/MessageForm/Submit/index.tsx
1631
1641
  var import_jsx_runtime39 = require("react/jsx-runtime");
1632
1642
  var Submit = function() {
1643
+ var superinterfaceContext = useSuperinterfaceContext();
1633
1644
  var _useMessageFormContext = useMessageFormContext(), isDisabled = _useMessageFormContext.isDisabled, isLoading = _useMessageFormContext.isLoading;
1645
+ if (isLoading) {
1646
+ return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_themes31.IconButton, {
1647
+ type: "button",
1648
+ onClick: function() {
1649
+ var _superinterfaceContext_createMessageAbortControllerRef_current;
1650
+ return (_superinterfaceContext_createMessageAbortControllerRef_current = superinterfaceContext.createMessageAbortControllerRef.current) === null || _superinterfaceContext_createMessageAbortControllerRef_current === void 0 ? void 0 : _superinterfaceContext_createMessageAbortControllerRef_current.abort();
1651
+ },
1652
+ children: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_react_icons5.StopIcon, {})
1653
+ });
1654
+ }
1634
1655
  return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_themes31.IconButton, {
1635
1656
  type: "submit",
1636
- disabled: isDisabled || isLoading,
1637
- children: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_themes31.Spinner, {
1638
- loading: isLoading,
1639
- children: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_react_icons5.ArrowUpIcon, {})
1640
- })
1657
+ disabled: isDisabled,
1658
+ children: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_react_icons5.ArrowUpIcon, {})
1641
1659
  });
1642
1660
  };
1643
1661
  // src/components/threads/Thread/MessageForm/Root/index.tsx
1644
- var import_react29 = require("react");
1662
+ var import_react_query5 = require("@tanstack/react-query");
1663
+ var import_react30 = require("react");
1645
1664
  var import_react_hook_form = require("react-hook-form");
1646
1665
  var import_themes32 = require("@radix-ui/themes");
1647
1666
  // src/hooks/messages/useCreateMessage/index.ts
@@ -2142,10 +2161,12 @@ var mutationFn = function(param) {
2142
2161
  var superinterfaceContext = param.superinterfaceContext, queryClient = param.queryClient, threadContext = param.threadContext;
2143
2162
  return function() {
2144
2163
  var _ref = _async_to_generator(function(variables) {
2145
- var response, parser, reader, messagesQueryKey, _ref, done, value;
2164
+ var abortController, response, parser, reader, messagesQueryKey, _ref, done, value;
2146
2165
  return _ts_generator(this, function(_state) {
2147
2166
  switch(_state.label){
2148
2167
  case 0:
2168
+ abortController = new AbortController();
2169
+ superinterfaceContext.createMessageAbortControllerRef.current = abortController;
2149
2170
  return [
2150
2171
  4,
2151
2172
  fetch("".concat(superinterfaceContext.baseUrl, "/messages"), {
@@ -2153,7 +2174,8 @@ var mutationFn = function(param) {
2153
2174
  body: JSON.stringify(body({
2154
2175
  variables: variables,
2155
2176
  superinterfaceContext: superinterfaceContext
2156
- }))
2177
+ })),
2178
+ signal: abortController.signal
2157
2179
  })
2158
2180
  ];
2159
2181
  case 1:
@@ -2193,7 +2215,6 @@ var mutationFn = function(param) {
2193
2215
  value: value,
2194
2216
  messagesQueryKey: messagesQueryKey,
2195
2217
  queryClient: queryClient,
2196
- variables: variables,
2197
2218
  superinterfaceContext: superinterfaceContext
2198
2219
  });
2199
2220
  return [
@@ -2267,16 +2288,33 @@ var Root2 = function(param) {
2267
2288
  var formProps = (0, import_react_hook_form.useForm)(formOptions);
2268
2289
  var handleSubmit = formProps.handleSubmit, isSubmitting = formProps.formState.isSubmitting, reset = formProps.reset;
2269
2290
  var addToast = useToasts().addToast;
2291
+ var queryClient = (0, import_react_query5.useQueryClient)();
2292
+ var threadContext = useSuperinterfaceContext();
2270
2293
  var createMessage = useCreateMessage({
2271
2294
  onError: function(error) {
2272
- return addToast({
2295
+ if (error.name === "AbortError") {
2296
+ queryClient.invalidateQueries({
2297
+ queryKey: [
2298
+ "messages",
2299
+ threadContext.variables
2300
+ ]
2301
+ });
2302
+ queryClient.invalidateQueries({
2303
+ queryKey: [
2304
+ "runs",
2305
+ threadContext.variables
2306
+ ]
2307
+ });
2308
+ return;
2309
+ }
2310
+ addToast({
2273
2311
  type: "error",
2274
2312
  message: error.message
2275
2313
  });
2276
2314
  }
2277
2315
  }).createMessage;
2278
2316
  var isMutatingMessage = useIsMutatingMessage();
2279
- var isLoading = (0, import_react29.useMemo)(function() {
2317
+ var isLoading = (0, import_react30.useMemo)(function() {
2280
2318
  return isMutatingMessage || isSubmitting;
2281
2319
  }, [
2282
2320
  isMutatingMessage,
@@ -2291,6 +2329,7 @@ var Root2 = function(param) {
2291
2329
  return [
2292
2330
  4,
2293
2331
  createMessage({
2332
+ // @ts-ignore-next-line
2294
2333
  content: data2.content
2295
2334
  })
2296
2335
  ];
@@ -2307,7 +2346,7 @@ var Root2 = function(param) {
2307
2346
  };
2308
2347
  }();
2309
2348
  var latestMessage = useLatestMessage().latestMessage;
2310
- var isDisabled = (0, import_react29.useMemo)(function() {
2349
+ var isDisabled = (0, import_react30.useMemo)(function() {
2311
2350
  var // @ts-ignore-next-line
2312
2351
  _latestMessage_metadata;
2313
2352
  return latestMessage === null || latestMessage === void 0 ? void 0 : (_latestMessage_metadata = latestMessage.metadata) === null || _latestMessage_metadata === void 0 ? void 0 : _latestMessage_metadata.isBlocking;
@@ -2334,13 +2373,13 @@ var Root2 = function(param) {
2334
2373
  };
2335
2374
  // src/components/threads/Thread/MessageForm/Field/index.tsx
2336
2375
  var import_react_use = require("react-use");
2337
- var import_react31 = require("react");
2376
+ var import_react32 = require("react");
2338
2377
  // src/components/textareas/TextareaBase/index.tsx
2339
- var import_react30 = require("react");
2378
+ var import_react31 = require("react");
2340
2379
  var import_react_textarea_autosize = __toESM(require("react-textarea-autosize"), 1);
2341
2380
  var import_jsx_runtime41 = require("react/jsx-runtime");
2342
2381
  var UPSCALE_RATIO = 16 / 14;
2343
- var TextareaBase = (0, import_react30.forwardRef)(function TextareaBase2(props, ref) {
2382
+ var TextareaBase = (0, import_react31.forwardRef)(function TextareaBase2(props, ref) {
2344
2383
  return /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(import_jsx_runtime41.Fragment, {
2345
2384
  children: [
2346
2385
  /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("style", {
@@ -2402,19 +2441,19 @@ var Root3 = function(param) {
2402
2441
  });
2403
2442
  };
2404
2443
  var Control = function() {
2405
- var assistantNameContext = (0, import_react31.useContext)(AssistantNameContext);
2444
+ var assistantNameContext = (0, import_react32.useContext)(AssistantNameContext);
2406
2445
  var register = (0, import_react_hook_form2.useFormContext)().register;
2407
2446
  var _useMessageFormContext = useMessageFormContext(), isDisabled = _useMessageFormContext.isDisabled, isLoading = _useMessageFormContext.isLoading;
2408
- var isSubmitDisabled = (0, import_react31.useMemo)(function() {
2447
+ var isSubmitDisabled = (0, import_react32.useMemo)(function() {
2409
2448
  return isDisabled || isLoading;
2410
2449
  }, [
2411
2450
  isDisabled,
2412
2451
  isLoading
2413
2452
  ]);
2414
2453
  var isDisabledPrevious = (0, import_react_use.usePrevious)(isDisabled);
2415
- var textareaRef = (0, import_react31.useRef)(null);
2454
+ var textareaRef = (0, import_react32.useRef)(null);
2416
2455
  var textareaProps = register("content");
2417
- (0, import_react31.useEffect)(function() {
2456
+ (0, import_react32.useEffect)(function() {
2418
2457
  if (isDisabled) return;
2419
2458
  if (!isDisabledPrevious) return;
2420
2459
  if (!textareaRef.current) return;
@@ -2508,29 +2547,29 @@ Thread.Root = Root4;
2508
2547
  Thread.Messages = Messages;
2509
2548
  Thread.MessageForm = MessageForm;
2510
2549
  // src/hooks/messages/useMessageContext/index.ts
2511
- var import_react32 = require("react");
2550
+ var import_react33 = require("react");
2512
2551
  var useMessageContext = function() {
2513
- return (0, import_react32.useContext)(MessageContext);
2552
+ return (0, import_react33.useContext)(MessageContext);
2514
2553
  };
2515
2554
  // src/components/threads/ThreadDialog/Provider/index.tsx
2516
- var import_react35 = require("react");
2555
+ var import_react36 = require("react");
2517
2556
  // src/contexts/threads/ThreadDialogContext/index.ts
2518
- var import_react33 = require("react");
2519
- var ThreadDialogContext = (0, import_react33.createContext)({
2557
+ var import_react34 = require("react");
2558
+ var ThreadDialogContext = (0, import_react34.createContext)({
2520
2559
  isOpen: false,
2521
2560
  setIsOpen: function() {}
2522
2561
  });
2523
2562
  // src/hooks/threads/useThreadDialogContext/index.ts
2524
- var import_react34 = require("react");
2563
+ var import_react35 = require("react");
2525
2564
  var useThreadDialogContext = function() {
2526
- return (0, import_react34.useContext)(ThreadDialogContext);
2565
+ return (0, import_react35.useContext)(ThreadDialogContext);
2527
2566
  };
2528
2567
  // src/components/threads/ThreadDialog/Provider/index.tsx
2529
2568
  var import_jsx_runtime46 = require("react/jsx-runtime");
2530
2569
  var Provider3 = function(param) {
2531
2570
  var children = param.children;
2532
2571
  var threadDialogContext = useThreadDialogContext();
2533
- var _ref = _sliced_to_array((0, import_react35.useState)(threadDialogContext.isOpen), 2), isOpen = _ref[0], setIsOpen = _ref[1];
2572
+ var _ref = _sliced_to_array((0, import_react36.useState)(threadDialogContext.isOpen), 2), isOpen = _ref[0], setIsOpen = _ref[1];
2534
2573
  return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(ThreadDialogContext.Provider, {
2535
2574
  value: {
2536
2575
  isOpen: isOpen,
@@ -2540,7 +2579,7 @@ var Provider3 = function(param) {
2540
2579
  });
2541
2580
  };
2542
2581
  // src/components/toasts/ToastsProvider/index.tsx
2543
- var import_react36 = require("react");
2582
+ var import_react37 = require("react");
2544
2583
  var Toast2 = __toESM(require("@radix-ui/react-toast"), 1);
2545
2584
  // src/components/toasts/ToastsProvider/CustomToast.tsx
2546
2585
  var Toast = __toESM(require("@radix-ui/react-toast"), 1);
@@ -2579,8 +2618,8 @@ var CustomToast = function(param) {
2579
2618
  var import_jsx_runtime48 = require("react/jsx-runtime");
2580
2619
  var ToastsProvider = function(param) {
2581
2620
  var children = param.children;
2582
- var _ref = _sliced_to_array((0, import_react36.useState)([]), 2), toasts = _ref[0], setToasts = _ref[1];
2583
- var addToast = (0, import_react36.useCallback)(function(toast) {
2621
+ var _ref = _sliced_to_array((0, import_react37.useState)([]), 2), toasts = _ref[0], setToasts = _ref[1];
2622
+ var addToast = (0, import_react37.useCallback)(function(toast) {
2584
2623
  return setToasts(function(prevToasts) {
2585
2624
  return _to_consumable_array(prevToasts).concat([
2586
2625
  toast
@@ -2812,8 +2851,8 @@ ThreadDialog.Content = Content4;
2812
2851
  var import_runtime = require("regenerator-runtime/runtime");
2813
2852
  var import_themes41 = require("@radix-ui/themes");
2814
2853
  // src/contexts/threads/AudioThreadContext/index.ts
2815
- var import_react37 = require("react");
2816
- var AudioThreadContext = (0, import_react37.createContext)({
2854
+ var import_react38 = require("react");
2855
+ var AudioThreadContext = (0, import_react38.createContext)({
2817
2856
  status: "idle",
2818
2857
  recorderProps: {
2819
2858
  status: "idle",
@@ -2881,11 +2920,11 @@ var blobToData = function(blob) {
2881
2920
  });
2882
2921
  };
2883
2922
  // src/hooks/audioThreads/useStatus/index.ts
2884
- var import_react38 = require("react");
2923
+ var import_react39 = require("react");
2885
2924
  var useStatus = function(param) {
2886
2925
  var messageAudioProps = param.messageAudioProps, recorderProps = param.recorderProps, createMessageProps = param.createMessageProps;
2887
2926
  var latestMessageProps = useLatestMessage();
2888
- var status = (0, import_react38.useMemo)(function() {
2927
+ var status = (0, import_react39.useMemo)(function() {
2889
2928
  var _latestMessageProps_latestMessage;
2890
2929
  if (recorderProps.status === "recording") return "recording";
2891
2930
  if (createMessageProps.isPending) return "creatingMessage";
@@ -2909,19 +2948,19 @@ var useStatus = function(param) {
2909
2948
  // src/hooks/audioThreads/useRecorder/index.ts
2910
2949
  var import_dayjs2 = __toESM(require("dayjs"), 1);
2911
2950
  var import_use_audio_capture = require("use-audio-capture");
2912
- var import_react39 = require("react");
2951
+ var import_react40 = require("react");
2913
2952
  var import_react_use_audio_player = require("react-use-audio-player");
2914
2953
  var import_react_use2 = require("react-use");
2915
2954
  var useRecorder = function(param) {
2916
2955
  var isStopOnSilence = param.isStopOnSilence, onStart = param.onStart, onStop = param.onStop;
2917
- var _ref = _sliced_to_array((0, import_react39.useState)(null), 2), silenceStart = _ref[0], setSilenceStart = _ref[1];
2918
- var _ref1 = _sliced_to_array((0, import_react39.useState)(null), 2), noiseStart = _ref1[0], setNoiseStart = _ref1[1];
2919
- var _ref2 = _sliced_to_array((0, import_react39.useState)(null), 2), mediaStream = _ref2[0], setMediaStream = _ref2[1];
2920
- var _ref3 = _sliced_to_array((0, import_react39.useState)("idle"), 2), status = _ref3[0], setStatus = _ref3[1];
2956
+ var _ref = _sliced_to_array((0, import_react40.useState)(null), 2), silenceStart = _ref[0], setSilenceStart = _ref[1];
2957
+ var _ref1 = _sliced_to_array((0, import_react40.useState)(null), 2), noiseStart = _ref1[0], setNoiseStart = _ref1[1];
2958
+ var _ref2 = _sliced_to_array((0, import_react40.useState)(null), 2), mediaStream = _ref2[0], setMediaStream = _ref2[1];
2959
+ var _ref3 = _sliced_to_array((0, import_react40.useState)("idle"), 2), status = _ref3[0], setStatus = _ref3[1];
2921
2960
  var startAudioPlayer = (0, import_react_use_audio_player.useAudioPlayer)();
2922
2961
  var endAudioPlayer = (0, import_react_use_audio_player.useAudioPlayer)();
2923
- var _ref4 = _sliced_to_array((0, import_react39.useState)(false), 2), isLoaded = _ref4[0], setIsLoaded = _ref4[1];
2924
- (0, import_react39.useEffect)(function() {
2962
+ var _ref4 = _sliced_to_array((0, import_react40.useState)(false), 2), isLoaded = _ref4[0], setIsLoaded = _ref4[1];
2963
+ (0, import_react40.useEffect)(function() {
2925
2964
  if (isLoaded) return;
2926
2965
  setIsLoaded(true);
2927
2966
  }, [
@@ -2979,9 +3018,9 @@ var useRecorder = function(param) {
2979
3018
  setNoiseStart(null);
2980
3019
  }
2981
3020
  });
2982
- var _ref5 = _sliced_to_array((0, import_react39.useState)(null), 2), audioEngine = _ref5[0], setAudioEngine = _ref5[1];
2983
- var isInited = (0, import_react39.useRef)(false);
2984
- (0, import_react39.useEffect)(function() {
3021
+ var _ref5 = _sliced_to_array((0, import_react40.useState)(null), 2), audioEngine = _ref5[0], setAudioEngine = _ref5[1];
3022
+ var isInited = (0, import_react40.useRef)(false);
3023
+ (0, import_react40.useEffect)(function() {
2985
3024
  if (!mediaStream) return;
2986
3025
  if (isInited.current) return;
2987
3026
  isInited.current = true;
@@ -2994,7 +3033,7 @@ var useRecorder = function(param) {
2994
3033
  isInited,
2995
3034
  mediaStream
2996
3035
  ]);
2997
- var visualizationAnalyser = (0, import_react39.useMemo)(function() {
3036
+ var visualizationAnalyser = (0, import_react40.useMemo)(function() {
2998
3037
  if (!audioEngine) return null;
2999
3038
  var result = audioEngine.audioContext.createAnalyser();
3000
3039
  audioEngine.source.connect(result);
@@ -3002,7 +3041,7 @@ var useRecorder = function(param) {
3002
3041
  }, [
3003
3042
  audioEngine
3004
3043
  ]);
3005
- var silenceAnalyser = (0, import_react39.useMemo)(function() {
3044
+ var silenceAnalyser = (0, import_react40.useMemo)(function() {
3006
3045
  if (!audioEngine) return null;
3007
3046
  var result = audioEngine.audioContext.createAnalyser();
3008
3047
  result.minDecibels = -45;
@@ -3011,7 +3050,7 @@ var useRecorder = function(param) {
3011
3050
  }, [
3012
3051
  audioEngine
3013
3052
  ]);
3014
- var handleSilence = (0, import_react39.useCallback)(function() {
3053
+ var handleSilence = (0, import_react40.useCallback)(function() {
3015
3054
  if (!silenceAnalyser) return;
3016
3055
  var frequencyData = new Uint8Array(silenceAnalyser.frequencyBinCount);
3017
3056
  silenceAnalyser.getByteFrequencyData(frequencyData);
@@ -3034,7 +3073,7 @@ var useRecorder = function(param) {
3034
3073
  setNoiseStart,
3035
3074
  setSilenceStart
3036
3075
  ]);
3037
- (0, import_react39.useEffect)(function() {
3076
+ (0, import_react40.useEffect)(function() {
3038
3077
  if (!isStopOnSilence) return;
3039
3078
  requestAnimationFrame(function() {
3040
3079
  return handleSilence();
@@ -3057,7 +3096,7 @@ var useRecorder = function(param) {
3057
3096
  });
3058
3097
  };
3059
3098
  // src/hooks/audioThreads/useMessageAudio/index.ts
3060
- var import_react40 = require("react");
3099
+ var import_react41 = require("react");
3061
3100
  var import_compromise = __toESM(require("compromise"), 1);
3062
3101
  var import_howler = require("howler");
3063
3102
  var import_react_use_audio_player2 = require("react-use-audio-player");
@@ -3095,16 +3134,18 @@ var getMessageSentences = function(param) {
3095
3134
  };
3096
3135
  var useMessageAudio = function(param) {
3097
3136
  var onEnd = param.onEnd;
3098
- var _ref = _sliced_to_array((0, import_react40.useState)(false), 2), isAudioPlayed = _ref[0], setIsAudioPlayed = _ref[1];
3099
- var _ref1 = _sliced_to_array((0, import_react40.useState)([]), 2), playedMessageSentences = _ref1[0], setPlayedMessageSentences = _ref1[1];
3137
+ var _ref = _sliced_to_array((0, import_react41.useState)(false), 2), isAudioPlayed = _ref[0], setIsAudioPlayed = _ref[1];
3138
+ var _ref1 = _sliced_to_array((0, import_react41.useState)([]), 2), stoppedMessageIds = _ref1[0], setStoppedMessageIds = _ref1[1];
3139
+ var _ref2 = _sliced_to_array((0, import_react41.useState)([]), 2), playedMessageSentences = _ref2[0], setPlayedMessageSentences = _ref2[1];
3100
3140
  var audioPlayer = (0, import_react_use_audio_player2.useAudioPlayer)();
3101
3141
  var nextAudioPlayer = (0, import_react_use_audio_player2.useAudioPlayer)();
3102
3142
  var superinterfaceContext = useSuperinterfaceContext();
3103
- var _ref2 = _sliced_to_array((0, import_react40.useState)(false), 2), isPlaying = _ref2[0], setIsPlaying = _ref2[1];
3143
+ var _ref3 = _sliced_to_array((0, import_react41.useState)(false), 2), isPlaying = _ref3[0], setIsPlaying = _ref3[1];
3104
3144
  var latestMessageProps = useLatestMessage();
3105
- var unplayedMessageSentences = (0, import_react40.useMemo)(function() {
3145
+ var unplayedMessageSentences = (0, import_react41.useMemo)(function() {
3106
3146
  if (!latestMessageProps.latestMessage) return [];
3107
3147
  if (latestMessageProps.latestMessage.role !== "assistant") return [];
3148
+ if (stoppedMessageIds.includes(latestMessageProps.latestMessage.id)) return [];
3108
3149
  var input2 = input({
3109
3150
  message: latestMessageProps.latestMessage
3110
3151
  });
@@ -3122,7 +3163,7 @@ var useMessageAudio = function(param) {
3122
3163
  latestMessageProps,
3123
3164
  playedMessageSentences
3124
3165
  ]);
3125
- (0, import_react40.useEffect)(function() {
3166
+ (0, import_react41.useEffect)(function() {
3126
3167
  if (isPlaying) return;
3127
3168
  if (audioPlayer.playing) return;
3128
3169
  if (!latestMessageProps.latestMessage) return;
@@ -3151,6 +3192,14 @@ var useMessageAudio = function(param) {
3151
3192
  onplay: function() {
3152
3193
  setIsAudioPlayed(true);
3153
3194
  },
3195
+ onstop: function() {
3196
+ setStoppedMessageIds(function(prev) {
3197
+ return _to_consumable_array(prev).concat([
3198
+ firstUnplayedMessageSentence.messageId
3199
+ ]);
3200
+ });
3201
+ setIsPlaying(false);
3202
+ },
3154
3203
  onload: function() {
3155
3204
  var nextUnplayedMessageSentence = unplayedMessageSentences[1];
3156
3205
  if (!nextUnplayedMessageSentence) return;
@@ -3182,7 +3231,7 @@ var useMessageAudio = function(param) {
3182
3231
  playedMessageSentences,
3183
3232
  onEnd
3184
3233
  ]);
3185
- (0, import_react40.useEffect)(function() {
3234
+ (0, import_react41.useEffect)(function() {
3186
3235
  if (isHtmlAudioSupported) {
3187
3236
  var _import_howler_Howler__howls___sounds_, _import_howler_Howler__howls_, _import_howler_Howler;
3188
3237
  if (!((_import_howler_Howler = import_howler.Howler) === null || _import_howler_Howler === void 0 ? void 0 : (_import_howler_Howler__howls_ = _import_howler_Howler._howls[0]) === null || _import_howler_Howler__howls_ === void 0 ? void 0 : (_import_howler_Howler__howls___sounds_ = _import_howler_Howler__howls_._sounds[0]) === null || _import_howler_Howler__howls___sounds_ === void 0 ? void 0 : _import_howler_Howler__howls___sounds_._node)) return;
@@ -3191,9 +3240,9 @@ var useMessageAudio = function(param) {
3191
3240
  }, [
3192
3241
  audioPlayer
3193
3242
  ]);
3194
- var _ref3 = _sliced_to_array((0, import_react40.useState)(null), 2), audioEngine = _ref3[0], setAudioEngine = _ref3[1];
3195
- var isAudioEngineInited = (0, import_react40.useRef)(false);
3196
- (0, import_react40.useEffect)(function() {
3243
+ var _ref4 = _sliced_to_array((0, import_react41.useState)(null), 2), audioEngine = _ref4[0], setAudioEngine = _ref4[1];
3244
+ var isAudioEngineInited = (0, import_react41.useRef)(false);
3245
+ (0, import_react41.useEffect)(function() {
3197
3246
  if (!audioPlayer.playing) return;
3198
3247
  if (isAudioEngineInited.current) return;
3199
3248
  isAudioEngineInited.current = true;
@@ -3214,7 +3263,7 @@ var useMessageAudio = function(param) {
3214
3263
  audioPlayer,
3215
3264
  isAudioEngineInited
3216
3265
  ]);
3217
- var visualizationAnalyser = (0, import_react40.useMemo)(function() {
3266
+ var visualizationAnalyser = (0, import_react41.useMemo)(function() {
3218
3267
  if (!audioEngine) return null;
3219
3268
  var result = audioEngine.audioContext.createAnalyser();
3220
3269
  audioEngine.source.connect(audioEngine.audioContext.destination);
@@ -3223,7 +3272,7 @@ var useMessageAudio = function(param) {
3223
3272
  }, [
3224
3273
  audioEngine
3225
3274
  ]);
3226
- var isPending = (0, import_react40.useMemo)(function() {
3275
+ var isPending = (0, import_react41.useMemo)(function() {
3227
3276
  return isPlaying || unplayedMessageSentences.length > 0;
3228
3277
  }, [
3229
3278
  isPlaying,
@@ -3312,21 +3361,21 @@ var Root8 = function(param) {
3312
3361
  // src/components/threads/AudioThread/Visualization/index.tsx
3313
3362
  var import_themes43 = require("@radix-ui/themes");
3314
3363
  // src/hooks/threads/useAudioThreadContext/index.ts
3315
- var import_react41 = require("react");
3364
+ var import_react42 = require("react");
3316
3365
  var useAudioThreadContext = function() {
3317
- return (0, import_react41.useContext)(AudioThreadContext);
3366
+ return (0, import_react42.useContext)(AudioThreadContext);
3318
3367
  };
3319
3368
  // src/components/threads/AudioThread/BarsVisualizer/index.tsx
3320
3369
  var import_lodash8 = __toESM(require("lodash"), 1);
3321
3370
  var import_themes42 = require("@radix-ui/themes");
3322
- var import_react42 = require("react");
3371
+ var import_react43 = require("react");
3323
3372
  var import_radash12 = require("radash");
3324
3373
  var import_jsx_runtime56 = require("react/jsx-runtime");
3325
3374
  var barCount = 4;
3326
3375
  var BarsVisualizer = function(param) {
3327
3376
  var visualizationAnalyser = param.visualizationAnalyser, backgroundColor = param.backgroundColor, height = param.height, barWidth = param.barWidth;
3328
- var _ref = _sliced_to_array((0, import_react42.useState)([]), 2), barHeights = _ref[0], setBarHeights = _ref[1];
3329
- var draw = (0, import_react42.useCallback)(function(param) {
3377
+ var _ref = _sliced_to_array((0, import_react43.useState)([]), 2), barHeights = _ref[0], setBarHeights = _ref[1];
3378
+ var draw = (0, import_react43.useCallback)(function(param) {
3330
3379
  var visualizationAnalyser2 = param.visualizationAnalyser;
3331
3380
  if (!visualizationAnalyser2) {
3332
3381
  setBarHeights(Array(barCount).fill(0));
@@ -3344,7 +3393,7 @@ var BarsVisualizer = function(param) {
3344
3393
  });
3345
3394
  });
3346
3395
  }, []);
3347
- (0, import_react42.useEffect)(function() {
3396
+ (0, import_react43.useEffect)(function() {
3348
3397
  draw({
3349
3398
  visualizationAnalyser: visualizationAnalyser
3350
3399
  });
@@ -3417,6 +3466,7 @@ var import_react_icons9 = require("@radix-ui/react-icons");
3417
3466
  var import_jsx_runtime58 = require("react/jsx-runtime");
3418
3467
  var ActionButton = function() {
3419
3468
  var audioThreadContext = useAudioThreadContext();
3469
+ var superinterfaceContext = useSuperinterfaceContext();
3420
3470
  if (audioThreadContext.status === "recording") {
3421
3471
  return /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)(import_themes44.Flex, {
3422
3472
  align: "center",
@@ -3475,7 +3525,10 @@ var ActionButton = function() {
3475
3525
  if (audioThreadContext.status === "playing") {
3476
3526
  return /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(import_themes44.IconButton, {
3477
3527
  onClick: function() {
3478
- return audioThreadContext.messageAudioProps.pause();
3528
+ var _superinterfaceContext_createMessageAbortControllerRef_current;
3529
+ audioThreadContext.messageAudioProps.stop();
3530
+ (_superinterfaceContext_createMessageAbortControllerRef_current = superinterfaceContext.createMessageAbortControllerRef.current) === null || _superinterfaceContext_createMessageAbortControllerRef_current === void 0 ? void 0 : _superinterfaceContext_createMessageAbortControllerRef_current.abort();
3531
+ audioThreadContext.recorderProps.start();
3479
3532
  },
3480
3533
  size: "4",
3481
3534
  color: "gray",
@@ -3484,7 +3537,7 @@ var ActionButton = function() {
3484
3537
  style: {
3485
3538
  border: "2px solid var(--gray-8)"
3486
3539
  },
3487
- children: /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(import_react_icons9.PauseIcon, {})
3540
+ children: /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(import_react_icons9.StopIcon, {})
3488
3541
  });
3489
3542
  }
3490
3543
  if (audioThreadContext.status === "playerPaused") {
@@ -3584,9 +3637,9 @@ AudioThreadDialog.Trigger = Trigger;
3584
3637
  AudioThreadDialog.Button = Button2;
3585
3638
  AudioThreadDialog.Content = Content4;
3586
3639
  // src/components/suggestions/Suggestions/index.tsx
3587
- var import_react44 = require("react");
3640
+ var import_react45 = require("react");
3588
3641
  // src/components/suggestions/Suggestions/Content.tsx
3589
- var import_react43 = require("react");
3642
+ var import_react44 = require("react");
3590
3643
  var import_radash13 = require("radash");
3591
3644
  var import_react_children_utilities = require("react-children-utilities");
3592
3645
  var import_themes47 = require("@radix-ui/themes");
@@ -3643,7 +3696,7 @@ var import_jsx_runtime63 = require("react/jsx-runtime");
3643
3696
  var Content6 = function(param) {
3644
3697
  var children = param.children;
3645
3698
  var isMutatingMessage = useIsMutatingMessage();
3646
- var suggestions = (0, import_react43.useMemo)(function() {
3699
+ var suggestions = (0, import_react44.useMemo)(function() {
3647
3700
  return (0, import_react_children_utilities.onlyText)(children).split(/\r?\n/).filter(function(c) {
3648
3701
  return !(0, import_radash13.isEmpty)(c);
3649
3702
  }).map(function(c) {
@@ -3670,7 +3723,7 @@ var import_jsx_runtime64 = require("react/jsx-runtime");
3670
3723
  var Suggestions = function(param) {
3671
3724
  var children = param.children;
3672
3725
  var latestMessageProps = useLatestMessage();
3673
- var isDisabled = (0, import_react44.useMemo)(function() {
3726
+ var isDisabled = (0, import_react45.useMemo)(function() {
3674
3727
  var // @ts-ignore-next-line
3675
3728
  _latestMessageProps_latestMessage_metadata, _latestMessageProps_latestMessage;
3676
3729
  return (_latestMessageProps_latestMessage = latestMessageProps.latestMessage) === null || _latestMessageProps_latestMessage === void 0 ? void 0 : (_latestMessageProps_latestMessage_metadata = _latestMessageProps_latestMessage.metadata) === null || _latestMessageProps_latestMessage_metadata === void 0 ? void 0 : _latestMessageProps_latestMessage_metadata.isBlocking;
@@ -3685,14 +3738,14 @@ var Suggestions = function(param) {
3685
3738
  };
3686
3739
  Suggestions.Item = Item;
3687
3740
  // src/components/markdown/MarkdownProvider/index.tsx
3688
- var import_react45 = require("react");
3741
+ var import_react46 = require("react");
3689
3742
  var import_jsx_runtime65 = require("react/jsx-runtime");
3690
3743
  var MarkdownProvider = function(_param) {
3691
3744
  var children = _param.children, rest = _object_without_properties(_param, [
3692
3745
  "children"
3693
3746
  ]);
3694
3747
  var prevMarkdownContext = useMarkdownContext();
3695
- var value = (0, import_react45.useMemo)(function() {
3748
+ var value = (0, import_react46.useMemo)(function() {
3696
3749
  return merge(prevMarkdownContext, rest);
3697
3750
  }, [
3698
3751
  rest,