@assistant-ui/react 0.3.0 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -148,11 +148,14 @@ var makeBaseComposer = (set) => ({
148
148
  });
149
149
 
150
150
  // src/context/stores/Composer.ts
151
- var makeComposerStore = (useThread, useThreadMessages, useThreadActions) => {
151
+ var makeComposerStore = (useThreadMessages, useThreadActions) => {
152
152
  const focusListeners = /* @__PURE__ */ new Set();
153
153
  return create3()((set, get, store) => {
154
154
  return {
155
155
  ...makeBaseComposer(set, get, store),
156
+ get canCancel() {
157
+ return useThreadActions.getState().capabilities.cancel;
158
+ },
156
159
  isEditing: true,
157
160
  send: () => {
158
161
  const { setValue, value } = get();
@@ -164,10 +167,7 @@ var makeComposerStore = (useThread, useThreadMessages, useThreadActions) => {
164
167
  });
165
168
  },
166
169
  cancel: () => {
167
- const thread = useThread.getState();
168
- if (!thread.isRunning) return false;
169
170
  useThreadActions.getState().cancelRun();
170
- return true;
171
171
  },
172
172
  focus: () => {
173
173
  for (const listener of focusListeners) {
@@ -217,6 +217,9 @@ import { create as create6 } from "zustand";
217
217
  var makeThreadActionStore = (runtimeRef) => {
218
218
  return create6(
219
219
  () => Object.freeze({
220
+ get capabilities() {
221
+ return runtimeRef.current.capabilities;
222
+ },
220
223
  getBranches: (messageId) => runtimeRef.current.getBranches(messageId),
221
224
  switchToBranch: (branchId) => runtimeRef.current.switchToBranch(branchId),
222
225
  startRun: (parentId) => runtimeRef.current.startRun(parentId),
@@ -248,11 +251,7 @@ var ThreadProvider = ({
248
251
  const useThreadMessages = makeThreadMessagesStore(runtimeRef);
249
252
  const useThreadActions = makeThreadActionStore(runtimeRef);
250
253
  const useViewport = makeThreadViewportStore();
251
- const useComposer = makeComposerStore(
252
- useThread,
253
- useThreadMessages,
254
- useThreadActions
255
- );
254
+ const useComposer = makeComposerStore(useThreadMessages, useThreadActions);
256
255
  return {
257
256
  useThread,
258
257
  useThreadMessages,
@@ -625,7 +624,7 @@ var useBranchPickerPrevious = () => {
625
624
  import { useCallback as useCallback9 } from "react";
626
625
  var useComposerCancel = () => {
627
626
  const { useComposer } = useComposerContext();
628
- const disabled = useComposer((c) => !c.isEditing);
627
+ const disabled = useComposer((c) => !c.canCancel);
629
628
  const callback = useCallback9(() => {
630
629
  const { cancel } = useComposer.getState();
631
630
  cancel();
@@ -757,15 +756,18 @@ var useThreadSuggestion = ({
757
756
  autoSend
758
757
  }) => {
759
758
  const { useThread, useComposer } = useThreadContext();
759
+ const append = useAppendMessage();
760
760
  const disabled = useThread((t) => t.isRunning);
761
761
  const callback = useCallback12(() => {
762
762
  const thread = useThread.getState();
763
763
  const composer = useComposer.getState();
764
- composer.setValue(prompt);
765
764
  if (autoSend && !thread.isRunning) {
766
- composer.send();
765
+ append(prompt);
766
+ composer.setValue("");
767
+ } else {
768
+ composer.setValue(prompt);
767
769
  }
768
- }, [useThread, useComposer, prompt, autoSend]);
770
+ }, [useThread, useComposer, autoSend, append, prompt]);
769
771
  if (disabled) return null;
770
772
  return callback;
771
773
  };
@@ -1203,7 +1205,7 @@ import { jsx as jsx16, jsxs as jsxs2 } from "react/jsx-runtime";
1203
1205
  var defaultComponents = {
1204
1206
  Text: () => /* @__PURE__ */ jsxs2("p", { style: { whiteSpace: "pre-line" }, children: [
1205
1207
  /* @__PURE__ */ jsx16(ContentPartPrimitiveText, {}),
1206
- /* @__PURE__ */ jsx16(ContentPartPrimitiveInProgress, { children: " \u25CF" })
1208
+ /* @__PURE__ */ jsx16(ContentPartPrimitiveInProgress, { children: /* @__PURE__ */ jsx16("span", { style: { fontFamily: "revert" }, children: " \u25CF" }) })
1207
1209
  ] }),
1208
1210
  Image: () => /* @__PURE__ */ jsx16(ContentPartPrimitiveImage, {}),
1209
1211
  UI: () => /* @__PURE__ */ jsx16(ContentPartPrimitiveDisplay, {}),
@@ -1348,7 +1350,8 @@ var ComposerPrimitiveInput = forwardRef11(
1348
1350
  const ref = useComposedRefs2(forwardedRef, textareaRef);
1349
1351
  useEscapeKeydown((e) => {
1350
1352
  const composer = useComposer.getState();
1351
- if (composer.cancel()) {
1353
+ if (composer.canCancel) {
1354
+ composer.cancel();
1352
1355
  e.preventDefault();
1353
1356
  }
1354
1357
  });
@@ -1622,20 +1625,19 @@ var makeEditComposerStore = ({
1622
1625
  onSend
1623
1626
  }) => create10()((set, get, store) => ({
1624
1627
  ...makeBaseComposer(set, get, store),
1628
+ canCancel: false,
1625
1629
  isEditing: false,
1626
1630
  edit: () => {
1627
1631
  const value = onEdit();
1628
- set({ isEditing: true, value });
1632
+ set({ isEditing: true, canCancel: true, value });
1629
1633
  },
1630
1634
  send: () => {
1631
1635
  const value = get().value;
1632
- set({ isEditing: false });
1636
+ set({ isEditing: false, canCancel: false });
1633
1637
  onSend(value);
1634
1638
  },
1635
1639
  cancel: () => {
1636
- if (!get().isEditing) return false;
1637
- set({ isEditing: false });
1638
- return true;
1640
+ set({ isEditing: false, canCancel: false });
1639
1641
  }
1640
1642
  }));
1641
1643
 
@@ -1756,9 +1758,9 @@ var ThreadMessageImpl = ({
1756
1758
  };
1757
1759
  var ThreadMessage = memo3(
1758
1760
  ThreadMessageImpl,
1759
- (prev, next) => prev.messageIndex === next.messageIndex && prev.components.UserMessage === next.components.UserMessage && prev.components.EditComposer === next.components.EditComposer && prev.components.AssistantMessage === next.components.AssistantMessage
1761
+ (prev, next) => prev.messageIndex === next.messageIndex && prev.components.Message === next.components.Message && prev.components.UserMessage === next.components.UserMessage && prev.components.EditComposer === next.components.EditComposer && prev.components.AssistantMessage === next.components.AssistantMessage
1760
1762
  );
1761
- var ThreadPrimitiveMessages = ({
1763
+ var ThreadPrimitiveMessagesImpl = ({
1762
1764
  components
1763
1765
  }) => {
1764
1766
  const { useThreadMessages } = useThreadContext();
@@ -1776,7 +1778,11 @@ var ThreadPrimitiveMessages = ({
1776
1778
  );
1777
1779
  });
1778
1780
  };
1779
- ThreadPrimitiveMessages.displayName = "ThreadPrimitive.Messages";
1781
+ ThreadPrimitiveMessagesImpl.displayName = "ThreadPrimitive.Messages";
1782
+ var ThreadPrimitiveMessages = memo3(
1783
+ ThreadPrimitiveMessagesImpl,
1784
+ (prev, next) => prev.components?.Message === next.components?.Message && prev.components?.UserMessage === next.components?.UserMessage && prev.components?.EditComposer === next.components?.EditComposer && prev.components?.AssistantMessage === next.components?.AssistantMessage
1785
+ );
1780
1786
 
1781
1787
  // src/primitives/thread/ThreadScrollToBottom.tsx
1782
1788
  var ThreadPrimitiveScrollToBottom = createActionButton(
@@ -1960,6 +1966,9 @@ var BaseAssistantRuntime = class {
1960
1966
  this._thread = _thread;
1961
1967
  this._unsubscribe = this._thread.subscribe(this.subscriptionHandler);
1962
1968
  }
1969
+ get capabilities() {
1970
+ return this._thread.capabilities;
1971
+ }
1963
1972
  _unsubscribe;
1964
1973
  get thread() {
1965
1974
  return this._thread;
@@ -2032,6 +2041,12 @@ var LocalRuntime = class extends BaseAssistantRuntime {
2032
2041
  );
2033
2042
  }
2034
2043
  };
2044
+ var CAPABILITIES = Object.freeze({
2045
+ edit: true,
2046
+ reload: true,
2047
+ cancel: true,
2048
+ copy: true
2049
+ });
2035
2050
  var LocalThreadRuntime = class {
2036
2051
  constructor(_configProviders, adapter) {
2037
2052
  this._configProviders = _configProviders;
@@ -2040,6 +2055,7 @@ var LocalThreadRuntime = class {
2040
2055
  _subscriptions = /* @__PURE__ */ new Set();
2041
2056
  abortController = null;
2042
2057
  repository = new MessageRepository();
2058
+ capabilities = CAPABILITIES;
2043
2059
  get messages() {
2044
2060
  return this.repository.getMessages();
2045
2061
  }