@assistant-ui/react 0.5.58 → 0.5.60

Sign up to get free protection for your applications and to get access to all the features.
package/dist/index.mjs CHANGED
@@ -10,7 +10,7 @@ import {
10
10
  toLanguageModelMessages,
11
11
  toLanguageModelTools,
12
12
  toolResultStream
13
- } from "./chunk-33TPUWEZ.mjs";
13
+ } from "./chunk-DC342I2Q.mjs";
14
14
  import {
15
15
  __export
16
16
  } from "./chunk-BJPOCE4O.mjs";
@@ -244,7 +244,9 @@ var makeThreadActionStore = (runtimeStore) => {
244
244
  append: (message) => runtimeStore.getState().append(message),
245
245
  cancelRun: () => runtimeStore.getState().cancelRun(),
246
246
  addToolResult: (options) => runtimeStore.getState().addToolResult(options),
247
- speak: (messageId) => runtimeStore.getState().speak(messageId)
247
+ speak: (messageId) => runtimeStore.getState().speak(messageId),
248
+ submitFeedback: ({ messageId, type }) => runtimeStore.getState().submitFeedback({ messageId, type }),
249
+ getModelConfig: () => runtimeStore.getState().getModelConfig()
248
250
  })
249
251
  );
250
252
  };
@@ -774,7 +776,10 @@ var useSmooth = (state, smooth = false) => {
774
776
  const {
775
777
  part: { text }
776
778
  } = state;
777
- const id = useMessage((m) => m.message.id);
779
+ const id = useMessage({
780
+ optional: true,
781
+ selector: (m) => m.message.id
782
+ });
778
783
  const idRef = useRef(id);
779
784
  const [displayedText, setDisplayedText] = useState2(text);
780
785
  const smoothStatusStore = useSmoothStatusStore({ optional: true });
@@ -1255,7 +1260,8 @@ var LocalThreadRuntime = class {
1255
1260
  cancel: true,
1256
1261
  unstable_copy: true,
1257
1262
  speak: false,
1258
- attachments: false
1263
+ attachments: false,
1264
+ feedback: false
1259
1265
  };
1260
1266
  threadId;
1261
1267
  isDisabled = false;
@@ -1266,6 +1272,9 @@ var LocalThreadRuntime = class {
1266
1272
  this,
1267
1273
  this.notifySubscribers.bind(this)
1268
1274
  );
1275
+ getModelConfig() {
1276
+ return this.configProvider.getModelConfig();
1277
+ }
1269
1278
  _options;
1270
1279
  get options() {
1271
1280
  return this._options;
@@ -1284,6 +1293,11 @@ var LocalThreadRuntime = class {
1284
1293
  this.capabilities.attachments = canAttach;
1285
1294
  hasUpdates = true;
1286
1295
  }
1296
+ const canFeedback = options.adapters?.feedback !== void 0;
1297
+ if (this.capabilities.feedback !== canFeedback) {
1298
+ this.capabilities.feedback = canFeedback;
1299
+ hasUpdates = true;
1300
+ }
1287
1301
  if (hasUpdates) this.notifySubscribers();
1288
1302
  }
1289
1303
  getBranches(messageId) {
@@ -1472,6 +1486,12 @@ var LocalThreadRuntime = class {
1472
1486
  this._utterance = utterance;
1473
1487
  return this._utterance;
1474
1488
  }
1489
+ submitFeedback({ messageId, type }) {
1490
+ const adapter = this.options.adapters?.feedback;
1491
+ if (!adapter) throw new Error("Feedback adapter not configured");
1492
+ const { message } = this.repository.getMessage(messageId);
1493
+ adapter.submit({ message, type });
1494
+ }
1475
1495
  export() {
1476
1496
  return this.repository.export();
1477
1497
  }
@@ -1652,6 +1672,10 @@ var hasUpcomingMessage = (isRunning, messages) => {
1652
1672
  return isRunning && messages[messages.length - 1]?.role !== "assistant";
1653
1673
  };
1654
1674
  var ExternalStoreThreadRuntime = class {
1675
+ constructor(configProvider, store) {
1676
+ this.configProvider = configProvider;
1677
+ this.store = store;
1678
+ }
1655
1679
  _subscriptions = /* @__PURE__ */ new Set();
1656
1680
  repository = new MessageRepository();
1657
1681
  assistantOptimisticId = null;
@@ -1662,7 +1686,8 @@ var ExternalStoreThreadRuntime = class {
1662
1686
  cancel: false,
1663
1687
  unstable_copy: false,
1664
1688
  speak: false,
1665
- attachments: false
1689
+ attachments: false,
1690
+ feedback: false
1666
1691
  };
1667
1692
  get capabilities() {
1668
1693
  return this._capabilities;
@@ -1676,9 +1701,6 @@ var ExternalStoreThreadRuntime = class {
1676
1701
  this,
1677
1702
  this.notifySubscribers.bind(this)
1678
1703
  );
1679
- constructor(store) {
1680
- this.store = store;
1681
- }
1682
1704
  get store() {
1683
1705
  return this._store;
1684
1706
  }
@@ -1697,7 +1719,8 @@ var ExternalStoreThreadRuntime = class {
1697
1719
  speak: this._store.onSpeak !== void 0,
1698
1720
  unstable_copy: this._store.unstable_capabilities?.copy !== false,
1699
1721
  // default true
1700
- attachments: !!this.store.adapters?.attachments
1722
+ attachments: !!this.store.adapters?.attachments,
1723
+ feedback: !!this.store.adapters?.feedback
1701
1724
  };
1702
1725
  this.composer.setAttachmentAdapter(this._store.adapters?.attachments);
1703
1726
  if (oldStore) {
@@ -1746,6 +1769,9 @@ var ExternalStoreThreadRuntime = class {
1746
1769
  this.messages = this.repository.getMessages();
1747
1770
  this.notifySubscribers();
1748
1771
  }
1772
+ getModelConfig() {
1773
+ return this.configProvider.getModelConfig();
1774
+ }
1749
1775
  notifySubscribers() {
1750
1776
  for (const callback of this._subscriptions) callback();
1751
1777
  }
@@ -1806,6 +1832,12 @@ var ExternalStoreThreadRuntime = class {
1806
1832
  const { message } = this.repository.getMessage(messageId);
1807
1833
  return this._store.onSpeak(message);
1808
1834
  }
1835
+ submitFeedback({ messageId, type }) {
1836
+ const adapter = this._store.adapters?.feedback;
1837
+ if (!adapter) throw new Error("Feedback adapter not configured");
1838
+ const { message } = this.repository.getMessage(messageId);
1839
+ adapter.submit({ message, type });
1840
+ }
1809
1841
  subscribe(callback) {
1810
1842
  this._subscriptions.add(callback);
1811
1843
  return () => this._subscriptions.delete(callback);
@@ -1819,9 +1851,11 @@ var ExternalStoreThreadRuntime = class {
1819
1851
 
1820
1852
  // src/runtimes/external-store/ExternalStoreRuntime.tsx
1821
1853
  var ExternalStoreRuntime = class extends BaseAssistantRuntime {
1822
- _proxyConfigProvider = new ProxyConfigProvider();
1854
+ _proxyConfigProvider;
1823
1855
  constructor(store) {
1824
- super(new ExternalStoreThreadRuntime(store));
1856
+ const provider = new ProxyConfigProvider();
1857
+ super(new ExternalStoreThreadRuntime(provider, store));
1858
+ this._proxyConfigProvider = provider;
1825
1859
  }
1826
1860
  get store() {
1827
1861
  return this.thread.store;
@@ -1838,7 +1872,7 @@ var ExternalStoreRuntime = class extends BaseAssistantRuntime {
1838
1872
  async switchToNewThread() {
1839
1873
  if (!this.store.onSwitchToNewThread)
1840
1874
  throw new Error("Runtime does not support switching to new threads.");
1841
- this.thread = new ExternalStoreThreadRuntime({
1875
+ this.thread = new ExternalStoreThreadRuntime(this._proxyConfigProvider, {
1842
1876
  ...this.store,
1843
1877
  messages: []
1844
1878
  });
@@ -1848,7 +1882,7 @@ var ExternalStoreRuntime = class extends BaseAssistantRuntime {
1848
1882
  if (threadId !== null) {
1849
1883
  if (!this.store.onSwitchToThread)
1850
1884
  throw new Error("Runtime does not support switching threads.");
1851
- this.thread = new ExternalStoreThreadRuntime({
1885
+ this.thread = new ExternalStoreThreadRuntime(this._proxyConfigProvider, {
1852
1886
  ...this.store,
1853
1887
  messages: []
1854
1888
  // ignore messages until rerender
@@ -2668,6 +2702,38 @@ var useActionBarStopSpeaking = () => {
2668
2702
  return callback;
2669
2703
  };
2670
2704
 
2705
+ // src/primitive-hooks/actionBar/useActionBarFeedbackPositive.tsx
2706
+ import { useCallback as useCallback8 } from "react";
2707
+ var useActionBarFeedbackPositive = () => {
2708
+ const threadActions = useThreadActions();
2709
+ const messageStore = useMessageStore();
2710
+ const messageUtilsStore = useMessageUtilsStore();
2711
+ const callback = useCallback8(() => {
2712
+ threadActions.submitFeedback({
2713
+ messageId: messageStore.getState().message.id,
2714
+ type: "positive"
2715
+ });
2716
+ messageUtilsStore.getState().setSubmittedFeedback("positive");
2717
+ }, [messageStore, messageUtilsStore, threadActions]);
2718
+ return callback;
2719
+ };
2720
+
2721
+ // src/primitive-hooks/actionBar/useActionBarFeedbackNegative.tsx
2722
+ import { useCallback as useCallback9 } from "react";
2723
+ var useActionBarFeedbackNegative = () => {
2724
+ const threadActions = useThreadActions();
2725
+ const messageStore = useMessageStore();
2726
+ const messageUtilsStore = useMessageUtilsStore();
2727
+ const callback = useCallback9(() => {
2728
+ threadActions.submitFeedback({
2729
+ messageId: messageStore.getState().message.id,
2730
+ type: "negative"
2731
+ });
2732
+ messageUtilsStore.getState().setSubmittedFeedback("negative");
2733
+ }, [messageStore, messageUtilsStore, threadActions]);
2734
+ return callback;
2735
+ };
2736
+
2671
2737
  // src/primitive-hooks/branchPicker/useBranchPickerCount.tsx
2672
2738
  var useBranchPickerCount = () => {
2673
2739
  const branchCount = useMessage((s) => s.branches.length);
@@ -2675,7 +2741,7 @@ var useBranchPickerCount = () => {
2675
2741
  };
2676
2742
 
2677
2743
  // src/primitive-hooks/branchPicker/useBranchPickerNext.tsx
2678
- import { useCallback as useCallback8 } from "react";
2744
+ import { useCallback as useCallback10 } from "react";
2679
2745
  var useBranchPickerNext = () => {
2680
2746
  const messageStore = useMessageStore();
2681
2747
  const editComposerStore = useEditComposerStore();
@@ -2684,7 +2750,7 @@ var useBranchPickerNext = () => {
2684
2750
  [messageStore, editComposerStore],
2685
2751
  (m, c) => c.isEditing || m.branches.indexOf(m.message.id) + 1 >= m.branches.length
2686
2752
  );
2687
- const callback = useCallback8(() => {
2753
+ const callback = useCallback10(() => {
2688
2754
  const { message, branches } = messageStore.getState();
2689
2755
  threadActionsStore.getState().switchToBranch(branches[branches.indexOf(message.id) + 1]);
2690
2756
  }, [threadActionsStore, messageStore]);
@@ -2699,7 +2765,7 @@ var useBranchPickerNumber = () => {
2699
2765
  };
2700
2766
 
2701
2767
  // src/primitive-hooks/branchPicker/useBranchPickerPrevious.tsx
2702
- import { useCallback as useCallback9 } from "react";
2768
+ import { useCallback as useCallback11 } from "react";
2703
2769
  var useBranchPickerPrevious = () => {
2704
2770
  const messageStore = useMessageStore();
2705
2771
  const editComposerStore = useEditComposerStore();
@@ -2708,7 +2774,7 @@ var useBranchPickerPrevious = () => {
2708
2774
  [messageStore, editComposerStore],
2709
2775
  (m, c) => c.isEditing || m.branches.indexOf(m.message.id) <= 0
2710
2776
  );
2711
- const callback = useCallback9(() => {
2777
+ const callback = useCallback11(() => {
2712
2778
  const { message, branches } = messageStore.getState();
2713
2779
  threadActionsStore.getState().switchToBranch(branches[branches.indexOf(message.id) - 1]);
2714
2780
  }, [threadActionsStore, messageStore]);
@@ -2717,11 +2783,11 @@ var useBranchPickerPrevious = () => {
2717
2783
  };
2718
2784
 
2719
2785
  // src/primitive-hooks/composer/useComposerCancel.tsx
2720
- import { useCallback as useCallback10 } from "react";
2786
+ import { useCallback as useCallback12 } from "react";
2721
2787
  var useComposerCancel = () => {
2722
2788
  const composerStore = useComposerStore();
2723
2789
  const disabled = useComposer((c) => !c.canCancel);
2724
- const callback = useCallback10(() => {
2790
+ const callback = useCallback12(() => {
2725
2791
  const { cancel } = composerStore.getState();
2726
2792
  cancel();
2727
2793
  }, [composerStore]);
@@ -2739,7 +2805,7 @@ var useComposerIf = (props) => {
2739
2805
  };
2740
2806
 
2741
2807
  // src/primitive-hooks/composer/useComposerSend.tsx
2742
- import { useCallback as useCallback11 } from "react";
2808
+ import { useCallback as useCallback13 } from "react";
2743
2809
  var useComposerSend = () => {
2744
2810
  const threadStore = useThreadStore();
2745
2811
  const threadViewportStore = useThreadViewportStore();
@@ -2749,7 +2815,7 @@ var useComposerSend = () => {
2749
2815
  [threadStore, composerStore],
2750
2816
  (t, c) => t.isRunning || !c.isEditing || c.isEmpty
2751
2817
  );
2752
- const callback = useCallback11(() => {
2818
+ const callback = useCallback13(() => {
2753
2819
  const composerState = composerStore.getState();
2754
2820
  if (!composerState.isEditing) return;
2755
2821
  composerState.send();
@@ -2761,12 +2827,12 @@ var useComposerSend = () => {
2761
2827
  };
2762
2828
 
2763
2829
  // src/primitive-hooks/composer/useComposerAddAttachment.tsx
2764
- import { useCallback as useCallback12 } from "react";
2830
+ import { useCallback as useCallback14 } from "react";
2765
2831
  var useComposerAddAttachment = () => {
2766
2832
  const disabled = useComposer((c) => !c.isEditing);
2767
2833
  const threadComposerStore = useThreadComposerStore();
2768
2834
  const threadRuntimeStore = useThreadComposerStore();
2769
- const callback = useCallback12(() => {
2835
+ const callback = useCallback14(() => {
2770
2836
  const { addAttachment } = threadComposerStore.getState();
2771
2837
  const { attachmentAccept } = threadRuntimeStore.getState();
2772
2838
  const input = document.createElement("input");
@@ -2827,7 +2893,7 @@ var useMessageIf = (props) => {
2827
2893
  const messageUtilsStore = useMessageUtilsStore();
2828
2894
  return useCombinedStore(
2829
2895
  [messageStore, messageUtilsStore],
2830
- ({ message, branches, isLast }, { isCopied, isHovering, isSpeaking }) => {
2896
+ ({ message, branches, isLast }, { isCopied, isHovering, isSpeaking, submittedFeedback }) => {
2831
2897
  if (props.hasBranches === true && branches.length < 2) return false;
2832
2898
  if (props.user && message.role !== "user") return false;
2833
2899
  if (props.assistant && message.role !== "assistant") return false;
@@ -2841,6 +2907,8 @@ var useMessageIf = (props) => {
2841
2907
  return false;
2842
2908
  if (props.hasAttachments === false && message.role === "user" && !!message.attachments.length)
2843
2909
  return false;
2910
+ if (props.submittedFeedback !== void 0 && submittedFeedback !== props.submittedFeedback)
2911
+ return false;
2844
2912
  return true;
2845
2913
  }
2846
2914
  );
@@ -2870,12 +2938,12 @@ var useThreadEmpty = () => {
2870
2938
  };
2871
2939
 
2872
2940
  // src/primitive-hooks/thread/useThreadScrollToBottom.tsx
2873
- import { useCallback as useCallback13 } from "react";
2941
+ import { useCallback as useCallback15 } from "react";
2874
2942
  var useThreadScrollToBottom = () => {
2875
2943
  const isAtBottom = useThreadViewport((s) => s.isAtBottom);
2876
2944
  const threadViewportStore = useThreadViewportStore();
2877
2945
  const threadComposerStore = useThreadComposerStore();
2878
- const handleScrollToBottom = useCallback13(() => {
2946
+ const handleScrollToBottom = useCallback15(() => {
2879
2947
  threadViewportStore.getState().scrollToBottom();
2880
2948
  threadComposerStore.getState().focus();
2881
2949
  }, [threadViewportStore, threadComposerStore]);
@@ -2884,7 +2952,7 @@ var useThreadScrollToBottom = () => {
2884
2952
  };
2885
2953
 
2886
2954
  // src/primitive-hooks/thread/useThreadSuggestion.tsx
2887
- import { useCallback as useCallback14 } from "react";
2955
+ import { useCallback as useCallback16 } from "react";
2888
2956
  var useThreadSuggestion = ({
2889
2957
  prompt,
2890
2958
  autoSend
@@ -2893,7 +2961,7 @@ var useThreadSuggestion = ({
2893
2961
  const composerStore = useThreadComposerStore();
2894
2962
  const append = useAppendMessage();
2895
2963
  const disabled = useThread((t) => t.isDisabled);
2896
- const callback = useCallback14(() => {
2964
+ const callback = useCallback16(() => {
2897
2965
  const thread = threadStore.getState();
2898
2966
  const composer = composerStore.getState();
2899
2967
  if (autoSend && !thread.isRunning) {
@@ -2912,6 +2980,8 @@ var actionBar_exports = {};
2912
2980
  __export(actionBar_exports, {
2913
2981
  Copy: () => ActionBarPrimitiveCopy,
2914
2982
  Edit: () => ActionBarPrimitiveEdit,
2983
+ FeedbackNegative: () => ActionBarPrimitiveFeedbackNegative,
2984
+ FeedbackPositive: () => ActionBarPrimitiveFeedbackPositive,
2915
2985
  Reload: () => ActionBarPrimitiveReload,
2916
2986
  Root: () => ActionBarPrimitiveRoot,
2917
2987
  Speak: () => ActionBarPrimitiveSpeak,
@@ -2965,13 +3035,37 @@ var ActionBarPrimitiveRoot = forwardRef5(({ hideWhenRunning, autohide, autohideF
2965
3035
  });
2966
3036
  ActionBarPrimitiveRoot.displayName = "ActionBarPrimitive.Root";
2967
3037
 
2968
- // src/utils/createActionButton.tsx
3038
+ // src/primitives/actionBar/ActionBarCopy.tsx
2969
3039
  import { forwardRef as forwardRef6 } from "react";
2970
- import { Primitive as Primitive3 } from "@radix-ui/react-primitive";
2971
3040
  import { composeEventHandlers } from "@radix-ui/primitive";
3041
+ import { Primitive as Primitive3 } from "@radix-ui/react-primitive";
2972
3042
  import { jsx as jsx11 } from "react/jsx-runtime";
3043
+ var ActionBarPrimitiveCopy = forwardRef6(({ copiedDuration, onClick, disabled, ...props }, forwardedRef) => {
3044
+ const isCopied = useMessageUtils((u) => u.isCopied);
3045
+ const callback = useActionBarCopy({ copiedDuration });
3046
+ return /* @__PURE__ */ jsx11(
3047
+ Primitive3.button,
3048
+ {
3049
+ type: "button",
3050
+ ...isCopied ? { "data-copied": "true" } : {},
3051
+ ...props,
3052
+ ref: forwardedRef,
3053
+ disabled: disabled || !callback,
3054
+ onClick: composeEventHandlers(onClick, () => {
3055
+ callback?.();
3056
+ })
3057
+ }
3058
+ );
3059
+ });
3060
+ ActionBarPrimitiveCopy.displayName = "ActionBarPrimitive.Copy";
3061
+
3062
+ // src/utils/createActionButton.tsx
3063
+ import { forwardRef as forwardRef7 } from "react";
3064
+ import { Primitive as Primitive4 } from "@radix-ui/react-primitive";
3065
+ import { composeEventHandlers as composeEventHandlers2 } from "@radix-ui/primitive";
3066
+ import { jsx as jsx12 } from "react/jsx-runtime";
2973
3067
  var createActionButton = (displayName, useActionButton, forwardProps = []) => {
2974
- const ActionButton = forwardRef6((props, forwardedRef) => {
3068
+ const ActionButton = forwardRef7((props, forwardedRef) => {
2975
3069
  const forwardedProps = {};
2976
3070
  const primitiveProps = {};
2977
3071
  Object.keys(props).forEach((key) => {
@@ -2982,14 +3076,14 @@ var createActionButton = (displayName, useActionButton, forwardProps = []) => {
2982
3076
  }
2983
3077
  });
2984
3078
  const callback = useActionButton(forwardedProps);
2985
- return /* @__PURE__ */ jsx11(
2986
- Primitive3.button,
3079
+ return /* @__PURE__ */ jsx12(
3080
+ Primitive4.button,
2987
3081
  {
2988
3082
  type: "button",
2989
3083
  ...primitiveProps,
2990
3084
  ref: forwardedRef,
2991
3085
  disabled: primitiveProps.disabled || !callback,
2992
- onClick: composeEventHandlers(primitiveProps.onClick, () => {
3086
+ onClick: composeEventHandlers2(primitiveProps.onClick, () => {
2993
3087
  callback?.();
2994
3088
  })
2995
3089
  }
@@ -2999,13 +3093,6 @@ var createActionButton = (displayName, useActionButton, forwardProps = []) => {
2999
3093
  return ActionButton;
3000
3094
  };
3001
3095
 
3002
- // src/primitives/actionBar/ActionBarCopy.tsx
3003
- var ActionBarPrimitiveCopy = createActionButton(
3004
- "ActionBarPrimitive.Copy",
3005
- useActionBarCopy,
3006
- ["copiedDuration"]
3007
- );
3008
-
3009
3096
  // src/primitives/actionBar/ActionBarReload.tsx
3010
3097
  var ActionBarPrimitiveReload = createActionButton(
3011
3098
  "ActionBarPrimitive.Reload",
@@ -3025,12 +3112,12 @@ var ActionBarPrimitiveSpeak = createActionButton(
3025
3112
  );
3026
3113
 
3027
3114
  // src/primitives/actionBar/ActionBarStopSpeaking.tsx
3028
- import { forwardRef as forwardRef7 } from "react";
3115
+ import { forwardRef as forwardRef8 } from "react";
3029
3116
  import { useEscapeKeydown } from "@radix-ui/react-use-escape-keydown";
3030
- import { Primitive as Primitive4 } from "@radix-ui/react-primitive";
3031
- import { composeEventHandlers as composeEventHandlers2 } from "@radix-ui/primitive";
3032
- import { jsx as jsx12 } from "react/jsx-runtime";
3033
- var ActionBarPrimitiveStopSpeaking = forwardRef7((props, ref) => {
3117
+ import { Primitive as Primitive5 } from "@radix-ui/react-primitive";
3118
+ import { composeEventHandlers as composeEventHandlers3 } from "@radix-ui/primitive";
3119
+ import { jsx as jsx13 } from "react/jsx-runtime";
3120
+ var ActionBarPrimitiveStopSpeaking = forwardRef8((props, ref) => {
3034
3121
  const callback = useActionBarStopSpeaking();
3035
3122
  useEscapeKeydown((e) => {
3036
3123
  if (callback) {
@@ -3038,14 +3125,14 @@ var ActionBarPrimitiveStopSpeaking = forwardRef7((props, ref) => {
3038
3125
  callback();
3039
3126
  }
3040
3127
  });
3041
- return /* @__PURE__ */ jsx12(
3042
- Primitive4.button,
3128
+ return /* @__PURE__ */ jsx13(
3129
+ Primitive5.button,
3043
3130
  {
3044
3131
  type: "button",
3045
3132
  disabled: !callback,
3046
3133
  ...props,
3047
3134
  ref,
3048
- onClick: composeEventHandlers2(props.onClick, () => {
3135
+ onClick: composeEventHandlers3(props.onClick, () => {
3049
3136
  callback?.();
3050
3137
  })
3051
3138
  }
@@ -3053,6 +3140,58 @@ var ActionBarPrimitiveStopSpeaking = forwardRef7((props, ref) => {
3053
3140
  });
3054
3141
  ActionBarPrimitiveStopSpeaking.displayName = "ActionBarPrimitive.StopSpeaking";
3055
3142
 
3143
+ // src/primitives/actionBar/ActionBarFeedbackPositive.tsx
3144
+ import { forwardRef as forwardRef9 } from "react";
3145
+ import { composeEventHandlers as composeEventHandlers4 } from "@radix-ui/primitive";
3146
+ import { Primitive as Primitive6 } from "@radix-ui/react-primitive";
3147
+ import { jsx as jsx14 } from "react/jsx-runtime";
3148
+ var ActionBarPrimitiveFeedbackPositive = forwardRef9(({ onClick, disabled, ...props }, forwardedRef) => {
3149
+ const isSubmitted = useMessageUtils(
3150
+ (u) => u.submittedFeedback === "positive"
3151
+ );
3152
+ const callback = useActionBarFeedbackPositive();
3153
+ return /* @__PURE__ */ jsx14(
3154
+ Primitive6.button,
3155
+ {
3156
+ type: "button",
3157
+ ...isSubmitted ? { "data-submitted": "true" } : {},
3158
+ ...props,
3159
+ ref: forwardedRef,
3160
+ disabled: disabled || !callback,
3161
+ onClick: composeEventHandlers4(onClick, () => {
3162
+ callback?.();
3163
+ })
3164
+ }
3165
+ );
3166
+ });
3167
+ ActionBarPrimitiveFeedbackPositive.displayName = "ActionBarPrimitive.FeedbackPositive";
3168
+
3169
+ // src/primitives/actionBar/ActionBarFeedbackNegative.tsx
3170
+ import { forwardRef as forwardRef10 } from "react";
3171
+ import { composeEventHandlers as composeEventHandlers5 } from "@radix-ui/primitive";
3172
+ import { Primitive as Primitive7 } from "@radix-ui/react-primitive";
3173
+ import { jsx as jsx15 } from "react/jsx-runtime";
3174
+ var ActionBarPrimitiveFeedbackNegative = forwardRef10(({ onClick, disabled, ...props }, forwardedRef) => {
3175
+ const isSubmitted = useMessageUtils(
3176
+ (u) => u.submittedFeedback === "negative"
3177
+ );
3178
+ const callback = useActionBarFeedbackNegative();
3179
+ return /* @__PURE__ */ jsx15(
3180
+ Primitive7.button,
3181
+ {
3182
+ type: "button",
3183
+ ...isSubmitted ? { "data-submitted": "true" } : {},
3184
+ ...props,
3185
+ ref: forwardedRef,
3186
+ disabled: disabled || !callback,
3187
+ onClick: composeEventHandlers5(onClick, () => {
3188
+ callback?.();
3189
+ })
3190
+ }
3191
+ );
3192
+ });
3193
+ ActionBarPrimitiveFeedbackNegative.displayName = "ActionBarPrimitive.FeedbackNegative";
3194
+
3056
3195
  // src/primitives/assistantModal/index.ts
3057
3196
  var assistantModal_exports = {};
3058
3197
  __export(assistantModal_exports, {
@@ -3065,7 +3204,7 @@ __export(assistantModal_exports, {
3065
3204
  // src/primitives/assistantModal/AssistantModalRoot.tsx
3066
3205
  import { useState as useState10 } from "react";
3067
3206
  import * as PopoverPrimitive2 from "@radix-ui/react-popover";
3068
- import { composeEventHandlers as composeEventHandlers3 } from "@radix-ui/primitive";
3207
+ import { composeEventHandlers as composeEventHandlers6 } from "@radix-ui/primitive";
3069
3208
 
3070
3209
  // src/utils/hooks/useOnComposerFocus.tsx
3071
3210
  import { useCallbackRef as useCallbackRef2 } from "@radix-ui/react-use-callback-ref";
@@ -3085,7 +3224,7 @@ import * as PopoverPrimitive from "@radix-ui/react-popover";
3085
3224
  var usePopoverScope = PopoverPrimitive.createPopoverScope();
3086
3225
 
3087
3226
  // src/primitives/assistantModal/AssistantModalRoot.tsx
3088
- import { jsx as jsx13 } from "react/jsx-runtime";
3227
+ import { jsx as jsx16 } from "react/jsx-runtime";
3089
3228
  var useAssistantModalOpenState = (defaultOpen = false) => {
3090
3229
  const state = useState10(defaultOpen);
3091
3230
  const [, setOpen] = state;
@@ -3103,12 +3242,12 @@ var AssistantModalPrimitiveRoot = ({
3103
3242
  }) => {
3104
3243
  const scope = usePopoverScope(__scopeAssistantModal);
3105
3244
  const [modalOpen, setOpen] = useAssistantModalOpenState(defaultOpen);
3106
- return /* @__PURE__ */ jsx13(
3245
+ return /* @__PURE__ */ jsx16(
3107
3246
  PopoverPrimitive2.Root,
3108
3247
  {
3109
3248
  ...scope,
3110
3249
  open: open === void 0 ? modalOpen : open,
3111
- onOpenChange: composeEventHandlers3(onOpenChange, setOpen),
3250
+ onOpenChange: composeEventHandlers6(onOpenChange, setOpen),
3112
3251
  ...rest
3113
3252
  }
3114
3253
  );
@@ -3116,26 +3255,26 @@ var AssistantModalPrimitiveRoot = ({
3116
3255
  AssistantModalPrimitiveRoot.displayName = "AssistantModalPrimitive.Root";
3117
3256
 
3118
3257
  // src/primitives/assistantModal/AssistantModalTrigger.tsx
3119
- import { forwardRef as forwardRef8 } from "react";
3258
+ import { forwardRef as forwardRef11 } from "react";
3120
3259
  import * as PopoverPrimitive3 from "@radix-ui/react-popover";
3121
- import { jsx as jsx14 } from "react/jsx-runtime";
3122
- var AssistantModalPrimitiveTrigger = forwardRef8(
3260
+ import { jsx as jsx17 } from "react/jsx-runtime";
3261
+ var AssistantModalPrimitiveTrigger = forwardRef11(
3123
3262
  ({
3124
3263
  __scopeAssistantModal,
3125
3264
  ...rest
3126
3265
  }, ref) => {
3127
3266
  const scope = usePopoverScope(__scopeAssistantModal);
3128
- return /* @__PURE__ */ jsx14(PopoverPrimitive3.Trigger, { ...scope, ...rest, ref });
3267
+ return /* @__PURE__ */ jsx17(PopoverPrimitive3.Trigger, { ...scope, ...rest, ref });
3129
3268
  }
3130
3269
  );
3131
3270
  AssistantModalPrimitiveTrigger.displayName = "AssistantModalPrimitive.Trigger";
3132
3271
 
3133
3272
  // src/primitives/assistantModal/AssistantModalContent.tsx
3134
- import { forwardRef as forwardRef9 } from "react";
3273
+ import { forwardRef as forwardRef12 } from "react";
3135
3274
  import * as PopoverPrimitive4 from "@radix-ui/react-popover";
3136
- import { composeEventHandlers as composeEventHandlers4 } from "@radix-ui/primitive";
3137
- import { jsx as jsx15 } from "react/jsx-runtime";
3138
- var AssistantModalPrimitiveContent = forwardRef9(
3275
+ import { composeEventHandlers as composeEventHandlers7 } from "@radix-ui/primitive";
3276
+ import { jsx as jsx18 } from "react/jsx-runtime";
3277
+ var AssistantModalPrimitiveContent = forwardRef12(
3139
3278
  ({
3140
3279
  __scopeAssistantModal,
3141
3280
  side,
@@ -3145,7 +3284,7 @@ var AssistantModalPrimitiveContent = forwardRef9(
3145
3284
  ...props
3146
3285
  }, forwardedRef) => {
3147
3286
  const scope = usePopoverScope(__scopeAssistantModal);
3148
- return /* @__PURE__ */ jsx15(PopoverPrimitive4.Portal, { ...scope, children: /* @__PURE__ */ jsx15(
3287
+ return /* @__PURE__ */ jsx18(PopoverPrimitive4.Portal, { ...scope, children: /* @__PURE__ */ jsx18(
3149
3288
  PopoverPrimitive4.Content,
3150
3289
  {
3151
3290
  ...scope,
@@ -3153,7 +3292,7 @@ var AssistantModalPrimitiveContent = forwardRef9(
3153
3292
  ref: forwardedRef,
3154
3293
  side: side ?? "top",
3155
3294
  align: align ?? "end",
3156
- onInteractOutside: composeEventHandlers4(
3295
+ onInteractOutside: composeEventHandlers7(
3157
3296
  onInteractOutside,
3158
3297
  dissmissOnInteractOutside ? void 0 : (e) => e.preventDefault()
3159
3298
  )
@@ -3164,16 +3303,16 @@ var AssistantModalPrimitiveContent = forwardRef9(
3164
3303
  AssistantModalPrimitiveContent.displayName = "AssistantModalPrimitive.Content";
3165
3304
 
3166
3305
  // src/primitives/assistantModal/AssistantModalAnchor.tsx
3167
- import { forwardRef as forwardRef10 } from "react";
3306
+ import { forwardRef as forwardRef13 } from "react";
3168
3307
  import * as PopoverPrimitive5 from "@radix-ui/react-popover";
3169
- import { jsx as jsx16 } from "react/jsx-runtime";
3170
- var AssistantModalPrimitiveAnchor = forwardRef10(
3308
+ import { jsx as jsx19 } from "react/jsx-runtime";
3309
+ var AssistantModalPrimitiveAnchor = forwardRef13(
3171
3310
  ({
3172
3311
  __scopeAssistantModal,
3173
3312
  ...rest
3174
3313
  }, ref) => {
3175
3314
  const scope = usePopoverScope(__scopeAssistantModal);
3176
- return /* @__PURE__ */ jsx16(PopoverPrimitive5.Anchor, { ...scope, ...rest, ref });
3315
+ return /* @__PURE__ */ jsx19(PopoverPrimitive5.Anchor, { ...scope, ...rest, ref });
3177
3316
  }
3178
3317
  );
3179
3318
  AssistantModalPrimitiveAnchor.displayName = "AssistantModalPrimitive.Anchor";
@@ -3201,24 +3340,24 @@ var BranchPickerPrevious = createActionButton(
3201
3340
  );
3202
3341
 
3203
3342
  // src/primitives/branchPicker/BranchPickerCount.tsx
3204
- import { Fragment, jsx as jsx17 } from "react/jsx-runtime";
3343
+ import { Fragment, jsx as jsx20 } from "react/jsx-runtime";
3205
3344
  var BranchPickerPrimitiveCount = () => {
3206
3345
  const branchCount = useBranchPickerCount();
3207
- return /* @__PURE__ */ jsx17(Fragment, { children: branchCount });
3346
+ return /* @__PURE__ */ jsx20(Fragment, { children: branchCount });
3208
3347
  };
3209
3348
  BranchPickerPrimitiveCount.displayName = "BranchPickerPrimitive.Count";
3210
3349
 
3211
3350
  // src/primitives/branchPicker/BranchPickerNumber.tsx
3212
- import { Fragment as Fragment2, jsx as jsx18 } from "react/jsx-runtime";
3351
+ import { Fragment as Fragment2, jsx as jsx21 } from "react/jsx-runtime";
3213
3352
  var BranchPickerPrimitiveNumber = () => {
3214
3353
  const branchNumber = useBranchPickerNumber();
3215
- return /* @__PURE__ */ jsx18(Fragment2, { children: branchNumber });
3354
+ return /* @__PURE__ */ jsx21(Fragment2, { children: branchNumber });
3216
3355
  };
3217
3356
  BranchPickerPrimitiveNumber.displayName = "BranchPickerPrimitive.Number";
3218
3357
 
3219
3358
  // src/primitives/branchPicker/BranchPickerRoot.tsx
3220
- import { Primitive as Primitive7 } from "@radix-ui/react-primitive";
3221
- import { forwardRef as forwardRef14 } from "react";
3359
+ import { Primitive as Primitive10 } from "@radix-ui/react-primitive";
3360
+ import { forwardRef as forwardRef17 } from "react";
3222
3361
 
3223
3362
  // src/primitives/message/index.ts
3224
3363
  var message_exports = {};
@@ -3231,17 +3370,17 @@ __export(message_exports, {
3231
3370
  });
3232
3371
 
3233
3372
  // src/primitives/message/MessageRoot.tsx
3234
- import { Primitive as Primitive5 } from "@radix-ui/react-primitive";
3373
+ import { Primitive as Primitive8 } from "@radix-ui/react-primitive";
3235
3374
  import {
3236
- forwardRef as forwardRef11,
3237
- useCallback as useCallback16
3375
+ forwardRef as forwardRef14,
3376
+ useCallback as useCallback18
3238
3377
  } from "react";
3239
3378
 
3240
3379
  // src/utils/hooks/useManagedRef.ts
3241
- import { useCallback as useCallback15, useRef as useRef3 } from "react";
3380
+ import { useCallback as useCallback17, useRef as useRef3 } from "react";
3242
3381
  var useManagedRef = (callback) => {
3243
3382
  const cleanupRef = useRef3();
3244
- const ref = useCallback15(
3383
+ const ref = useCallback17(
3245
3384
  (el) => {
3246
3385
  if (cleanupRef.current) {
3247
3386
  cleanupRef.current();
@@ -3257,10 +3396,10 @@ var useManagedRef = (callback) => {
3257
3396
 
3258
3397
  // src/primitives/message/MessageRoot.tsx
3259
3398
  import { useComposedRefs } from "@radix-ui/react-compose-refs";
3260
- import { jsx as jsx19 } from "react/jsx-runtime";
3399
+ import { jsx as jsx22 } from "react/jsx-runtime";
3261
3400
  var useIsHoveringRef = () => {
3262
3401
  const messageUtilsStore = useMessageUtilsStore();
3263
- const callbackRef = useCallback16(
3402
+ const callbackRef = useCallback18(
3264
3403
  (el) => {
3265
3404
  const setIsHovering = messageUtilsStore.getState().setIsHovering;
3266
3405
  const handleMouseEnter = () => {
@@ -3281,10 +3420,10 @@ var useIsHoveringRef = () => {
3281
3420
  );
3282
3421
  return useManagedRef(callbackRef);
3283
3422
  };
3284
- var MessagePrimitiveRoot = forwardRef11((props, forwardRef30) => {
3423
+ var MessagePrimitiveRoot = forwardRef14((props, forwardRef33) => {
3285
3424
  const isHoveringRef = useIsHoveringRef();
3286
- const ref = useComposedRefs(forwardRef30, isHoveringRef);
3287
- return /* @__PURE__ */ jsx19(Primitive5.div, { ...props, ref });
3425
+ const ref = useComposedRefs(forwardRef33, isHoveringRef);
3426
+ return /* @__PURE__ */ jsx22(Primitive8.div, { ...props, ref });
3288
3427
  });
3289
3428
  MessagePrimitiveRoot.displayName = "MessagePrimitive.Root";
3290
3429
 
@@ -3304,7 +3443,7 @@ import { memo as memo2 } from "react";
3304
3443
  // src/context/providers/ContentPartProvider.tsx
3305
3444
  import { useEffect as useEffect10, useState as useState11 } from "react";
3306
3445
  import { create as create12 } from "zustand";
3307
- import { jsx as jsx20 } from "react/jsx-runtime";
3446
+ import { jsx as jsx23 } from "react/jsx-runtime";
3308
3447
  var COMPLETE_STATUS2 = {
3309
3448
  type: "complete"
3310
3449
  };
@@ -3369,32 +3508,32 @@ var ContentPartProvider = ({
3369
3508
  children
3370
3509
  }) => {
3371
3510
  const context = useContentPartContext2(partIndex);
3372
- return /* @__PURE__ */ jsx20(ContentPartContext.Provider, { value: context, children });
3511
+ return /* @__PURE__ */ jsx23(ContentPartContext.Provider, { value: context, children });
3373
3512
  };
3374
3513
 
3375
3514
  // src/primitives/contentPart/ContentPartText.tsx
3376
3515
  import {
3377
- forwardRef as forwardRef12
3516
+ forwardRef as forwardRef15
3378
3517
  } from "react";
3379
- import { jsx as jsx21 } from "react/jsx-runtime";
3380
- var ContentPartPrimitiveText = forwardRef12(({ smooth = true, component: Component = "span", ...rest }, forwardedRef) => {
3518
+ import { jsx as jsx24 } from "react/jsx-runtime";
3519
+ var ContentPartPrimitiveText = forwardRef15(({ smooth = true, component: Component = "span", ...rest }, forwardedRef) => {
3381
3520
  const {
3382
3521
  part: { text },
3383
3522
  status
3384
3523
  } = useSmooth(useContentPartText(), smooth);
3385
- return /* @__PURE__ */ jsx21(Component, { "data-status": status.type, ...rest, ref: forwardedRef, children: text });
3524
+ return /* @__PURE__ */ jsx24(Component, { "data-status": status.type, ...rest, ref: forwardedRef, children: text });
3386
3525
  });
3387
3526
  ContentPartPrimitiveText.displayName = "ContentPartPrimitive.Text";
3388
3527
 
3389
3528
  // src/primitives/contentPart/ContentPartImage.tsx
3390
- import { Primitive as Primitive6 } from "@radix-ui/react-primitive";
3391
- import { forwardRef as forwardRef13 } from "react";
3392
- import { jsx as jsx22 } from "react/jsx-runtime";
3393
- var ContentPartPrimitiveImage = forwardRef13((props, forwardedRef) => {
3529
+ import { Primitive as Primitive9 } from "@radix-ui/react-primitive";
3530
+ import { forwardRef as forwardRef16 } from "react";
3531
+ import { jsx as jsx25 } from "react/jsx-runtime";
3532
+ var ContentPartPrimitiveImage = forwardRef16((props, forwardedRef) => {
3394
3533
  const {
3395
3534
  part: { image }
3396
3535
  } = useContentPartImage();
3397
- return /* @__PURE__ */ jsx22(Primitive6.img, { src: image, ...props, ref: forwardedRef });
3536
+ return /* @__PURE__ */ jsx25(Primitive9.img, { src: image, ...props, ref: forwardedRef });
3398
3537
  });
3399
3538
  ContentPartPrimitiveImage.displayName = "ContentPartPrimitive.Image";
3400
3539
 
@@ -3415,22 +3554,22 @@ var ContentPartPrimitiveInProgress = ({ children }) => {
3415
3554
  ContentPartPrimitiveInProgress.displayName = "ContentPartPrimitive.InProgress";
3416
3555
 
3417
3556
  // src/primitives/message/MessageContent.tsx
3418
- import { jsx as jsx23, jsxs as jsxs3 } from "react/jsx-runtime";
3557
+ import { jsx as jsx26, jsxs as jsxs3 } from "react/jsx-runtime";
3419
3558
  var ToolUIDisplay = ({
3420
3559
  UI,
3421
3560
  ...props
3422
3561
  }) => {
3423
3562
  const Render = useToolUIs((s) => s.getToolUI(props.part.toolName)) ?? UI;
3424
3563
  if (!Render) return null;
3425
- return /* @__PURE__ */ jsx23(Render, { ...props });
3564
+ return /* @__PURE__ */ jsx26(Render, { ...props });
3426
3565
  };
3427
3566
  var defaultComponents = {
3428
3567
  Text: () => /* @__PURE__ */ jsxs3("p", { style: { whiteSpace: "pre-line" }, children: [
3429
- /* @__PURE__ */ jsx23(ContentPartPrimitiveText, {}),
3430
- /* @__PURE__ */ jsx23(ContentPartPrimitiveInProgress, { children: /* @__PURE__ */ jsx23("span", { style: { fontFamily: "revert" }, children: " \u25CF" }) })
3568
+ /* @__PURE__ */ jsx26(ContentPartPrimitiveText, {}),
3569
+ /* @__PURE__ */ jsx26(ContentPartPrimitiveInProgress, { children: /* @__PURE__ */ jsx26("span", { style: { fontFamily: "revert" }, children: " \u25CF" }) })
3431
3570
  ] }),
3432
- Image: () => /* @__PURE__ */ jsx23(ContentPartPrimitiveImage, {}),
3433
- UI: () => /* @__PURE__ */ jsx23(ContentPartPrimitiveDisplay, {})
3571
+ Image: () => /* @__PURE__ */ jsx26(ContentPartPrimitiveImage, {}),
3572
+ UI: () => /* @__PURE__ */ jsx26(ContentPartPrimitiveDisplay, {})
3434
3573
  };
3435
3574
  var MessageContentPartComponent = ({
3436
3575
  components: {
@@ -3450,17 +3589,17 @@ var MessageContentPartComponent = ({
3450
3589
  if (status.type === "requires-action")
3451
3590
  throw new Error("Encountered unexpected requires-action status");
3452
3591
  if (part === EMPTY_CONTENT && !!Empty) {
3453
- return /* @__PURE__ */ jsx23(Empty, { status });
3592
+ return /* @__PURE__ */ jsx26(Empty, { status });
3454
3593
  }
3455
- return /* @__PURE__ */ jsx23(Text2, { part, status });
3594
+ return /* @__PURE__ */ jsx26(Text2, { part, status });
3456
3595
  case "image":
3457
3596
  if (status.type === "requires-action")
3458
3597
  throw new Error("Encountered unexpected requires-action status");
3459
- return /* @__PURE__ */ jsx23(Image2, { part, status });
3598
+ return /* @__PURE__ */ jsx26(Image2, { part, status });
3460
3599
  case "ui":
3461
3600
  if (status.type === "requires-action")
3462
3601
  throw new Error("Encountered unexpected requires-action status");
3463
- return /* @__PURE__ */ jsx23(UI, { part, status });
3602
+ return /* @__PURE__ */ jsx26(UI, { part, status });
3464
3603
  case "tool-call": {
3465
3604
  const Tool = by_name[part.toolName] || Fallback2;
3466
3605
  const addResult = (result) => threadActionsStore.getState().addToolResult({
@@ -3469,7 +3608,7 @@ var MessageContentPartComponent = ({
3469
3608
  toolCallId: part.toolCallId,
3470
3609
  result
3471
3610
  });
3472
- return /* @__PURE__ */ jsx23(
3611
+ return /* @__PURE__ */ jsx26(
3473
3612
  ToolUIDisplay,
3474
3613
  {
3475
3614
  UI: Tool,
@@ -3488,7 +3627,7 @@ var MessageContentPartImpl = ({
3488
3627
  partIndex,
3489
3628
  components
3490
3629
  }) => {
3491
- return /* @__PURE__ */ jsx23(ContentPartProvider, { partIndex, children: /* @__PURE__ */ jsx23(MessageContentPartComponent, { components }) });
3630
+ return /* @__PURE__ */ jsx26(ContentPartProvider, { partIndex, children: /* @__PURE__ */ jsx26(MessageContentPartComponent, { components }) });
3492
3631
  };
3493
3632
  var MessageContentPart = memo2(
3494
3633
  MessageContentPartImpl,
@@ -3498,7 +3637,7 @@ var MessagePrimitiveContent = ({
3498
3637
  components
3499
3638
  }) => {
3500
3639
  const contentLength = useMessage((s) => s.message.content.length) || 1;
3501
- return Array.from({ length: contentLength }, (_, index) => /* @__PURE__ */ jsx23(MessageContentPart, { partIndex: index, components }, index));
3640
+ return Array.from({ length: contentLength }, (_, index) => /* @__PURE__ */ jsx26(MessageContentPart, { partIndex: index, components }, index));
3502
3641
  };
3503
3642
  MessagePrimitiveContent.displayName = "MessagePrimitive.Content";
3504
3643
 
@@ -3558,7 +3697,7 @@ var {
3558
3697
  // src/context/providers/MessageAttachmentProvider.tsx
3559
3698
  import { useEffect as useEffect11, useState as useState12 } from "react";
3560
3699
  import { create as create13 } from "zustand";
3561
- import { jsx as jsx24 } from "react/jsx-runtime";
3700
+ import { jsx as jsx27 } from "react/jsx-runtime";
3562
3701
  var getAttachment = ({ message }, useAttachment2, partIndex) => {
3563
3702
  if (message.role !== "user") return null;
3564
3703
  const attachments = message.attachments;
@@ -3598,11 +3737,11 @@ var MessageAttachmentProvider = ({
3598
3737
  children
3599
3738
  }) => {
3600
3739
  const context = useMessageAttachmentContext2(partIndex);
3601
- return /* @__PURE__ */ jsx24(AttachmentContext.Provider, { value: context, children });
3740
+ return /* @__PURE__ */ jsx27(AttachmentContext.Provider, { value: context, children });
3602
3741
  };
3603
3742
 
3604
3743
  // src/primitives/message/MessageAttachments.tsx
3605
- import { jsx as jsx25 } from "react/jsx-runtime";
3744
+ import { jsx as jsx28 } from "react/jsx-runtime";
3606
3745
  var getComponent = (components, attachment) => {
3607
3746
  const type = attachment.type;
3608
3747
  switch (type) {
@@ -3622,10 +3761,10 @@ var AttachmentComponent = ({ components }) => {
3622
3761
  (a) => getComponent(components, a.attachment)
3623
3762
  );
3624
3763
  if (!Component) return null;
3625
- return /* @__PURE__ */ jsx25(Component, {});
3764
+ return /* @__PURE__ */ jsx28(Component, {});
3626
3765
  };
3627
3766
  var MessageAttachmentImpl = ({ components, attachmentIndex }) => {
3628
- return /* @__PURE__ */ jsx25(MessageAttachmentProvider, { attachmentIndex, children: /* @__PURE__ */ jsx25(AttachmentComponent, { components }) });
3767
+ return /* @__PURE__ */ jsx28(MessageAttachmentProvider, { attachmentIndex, children: /* @__PURE__ */ jsx28(AttachmentComponent, { components }) });
3629
3768
  };
3630
3769
  var MessageAttachment = memo3(
3631
3770
  MessageAttachmentImpl,
@@ -3636,7 +3775,7 @@ var MessagePrimitiveAttachments = ({ components }) => {
3636
3775
  if (message.role !== "user") return 0;
3637
3776
  return message.attachments.length;
3638
3777
  });
3639
- return Array.from({ length: attachmentsCount }, (_, index) => /* @__PURE__ */ jsx25(
3778
+ return Array.from({ length: attachmentsCount }, (_, index) => /* @__PURE__ */ jsx28(
3640
3779
  MessageAttachment,
3641
3780
  {
3642
3781
  attachmentIndex: index,
@@ -3648,9 +3787,9 @@ var MessagePrimitiveAttachments = ({ components }) => {
3648
3787
  MessagePrimitiveAttachments.displayName = "MessagePrimitive.Attachments";
3649
3788
 
3650
3789
  // src/primitives/branchPicker/BranchPickerRoot.tsx
3651
- import { jsx as jsx26 } from "react/jsx-runtime";
3652
- var BranchPickerPrimitiveRoot = forwardRef14(({ hideWhenSingleBranch, ...rest }, ref) => {
3653
- return /* @__PURE__ */ jsx26(MessagePrimitiveIf, { hasBranches: hideWhenSingleBranch ? true : void 0, children: /* @__PURE__ */ jsx26(Primitive7.div, { ...rest, ref }) });
3790
+ import { jsx as jsx29 } from "react/jsx-runtime";
3791
+ var BranchPickerPrimitiveRoot = forwardRef17(({ hideWhenSingleBranch, ...rest }, ref) => {
3792
+ return /* @__PURE__ */ jsx29(MessagePrimitiveIf, { hasBranches: hideWhenSingleBranch ? true : void 0, children: /* @__PURE__ */ jsx29(Primitive10.div, { ...rest, ref }) });
3654
3793
  });
3655
3794
  BranchPickerPrimitiveRoot.displayName = "BranchPickerPrimitive.Root";
3656
3795
 
@@ -3667,44 +3806,44 @@ __export(composer_exports, {
3667
3806
  });
3668
3807
 
3669
3808
  // src/primitives/composer/ComposerRoot.tsx
3670
- import { composeEventHandlers as composeEventHandlers5 } from "@radix-ui/primitive";
3671
- import { Primitive as Primitive8 } from "@radix-ui/react-primitive";
3809
+ import { composeEventHandlers as composeEventHandlers8 } from "@radix-ui/primitive";
3810
+ import { Primitive as Primitive11 } from "@radix-ui/react-primitive";
3672
3811
  import {
3673
- forwardRef as forwardRef15
3812
+ forwardRef as forwardRef18
3674
3813
  } from "react";
3675
- import { jsx as jsx27 } from "react/jsx-runtime";
3676
- var ComposerPrimitiveRoot = forwardRef15(({ onSubmit, ...rest }, forwardedRef) => {
3814
+ import { jsx as jsx30 } from "react/jsx-runtime";
3815
+ var ComposerPrimitiveRoot = forwardRef18(({ onSubmit, ...rest }, forwardedRef) => {
3677
3816
  const send = useComposerSend();
3678
3817
  const handleSubmit = (e) => {
3679
3818
  e.preventDefault();
3680
3819
  if (!send) return;
3681
3820
  send();
3682
3821
  };
3683
- return /* @__PURE__ */ jsx27(
3684
- Primitive8.form,
3822
+ return /* @__PURE__ */ jsx30(
3823
+ Primitive11.form,
3685
3824
  {
3686
3825
  ...rest,
3687
3826
  ref: forwardedRef,
3688
- onSubmit: composeEventHandlers5(onSubmit, handleSubmit)
3827
+ onSubmit: composeEventHandlers8(onSubmit, handleSubmit)
3689
3828
  }
3690
3829
  );
3691
3830
  });
3692
3831
  ComposerPrimitiveRoot.displayName = "ComposerPrimitive.Root";
3693
3832
 
3694
3833
  // src/primitives/composer/ComposerInput.tsx
3695
- import { composeEventHandlers as composeEventHandlers6 } from "@radix-ui/primitive";
3834
+ import { composeEventHandlers as composeEventHandlers9 } from "@radix-ui/primitive";
3696
3835
  import { useComposedRefs as useComposedRefs2 } from "@radix-ui/react-compose-refs";
3697
3836
  import { Slot } from "@radix-ui/react-slot";
3698
3837
  import {
3699
- forwardRef as forwardRef16,
3700
- useCallback as useCallback17,
3838
+ forwardRef as forwardRef19,
3839
+ useCallback as useCallback19,
3701
3840
  useEffect as useEffect12,
3702
3841
  useRef as useRef4
3703
3842
  } from "react";
3704
3843
  import TextareaAutosize from "react-textarea-autosize";
3705
3844
  import { useEscapeKeydown as useEscapeKeydown2 } from "@radix-ui/react-use-escape-keydown";
3706
- import { jsx as jsx28 } from "react/jsx-runtime";
3707
- var ComposerPrimitiveInput = forwardRef16(
3845
+ import { jsx as jsx31 } from "react/jsx-runtime";
3846
+ var ComposerPrimitiveInput = forwardRef19(
3708
3847
  ({
3709
3848
  autoFocus = false,
3710
3849
  asChild,
@@ -3742,7 +3881,7 @@ var ComposerPrimitiveInput = forwardRef16(
3742
3881
  }
3743
3882
  };
3744
3883
  const autoFocusEnabled = autoFocus && !isDisabled;
3745
- const focus = useCallback17(() => {
3884
+ const focus = useCallback19(() => {
3746
3885
  const textarea = textareaRef.current;
3747
3886
  if (!textarea || !autoFocusEnabled) return;
3748
3887
  textarea.focus({ preventScroll: true });
@@ -3757,7 +3896,7 @@ var ComposerPrimitiveInput = forwardRef16(
3757
3896
  focus();
3758
3897
  }
3759
3898
  });
3760
- return /* @__PURE__ */ jsx28(
3899
+ return /* @__PURE__ */ jsx31(
3761
3900
  Component,
3762
3901
  {
3763
3902
  name: "input",
@@ -3765,12 +3904,12 @@ var ComposerPrimitiveInput = forwardRef16(
3765
3904
  ...rest,
3766
3905
  ref,
3767
3906
  disabled: isDisabled,
3768
- onChange: composeEventHandlers6(onChange, (e) => {
3907
+ onChange: composeEventHandlers9(onChange, (e) => {
3769
3908
  const composerState = composerStore.getState();
3770
3909
  if (!composerState.isEditing) return;
3771
3910
  return composerState.setText(e.target.value);
3772
3911
  }),
3773
- onKeyDown: composeEventHandlers6(onKeyDown, handleKeyPress)
3912
+ onKeyDown: composeEventHandlers9(onKeyDown, handleKeyPress)
3774
3913
  }
3775
3914
  );
3776
3915
  }
@@ -3801,7 +3940,7 @@ import { memo as memo4 } from "react";
3801
3940
  // src/context/providers/ComposerAttachmentProvider.tsx
3802
3941
  import { useEffect as useEffect13, useState as useState13 } from "react";
3803
3942
  import { create as create14 } from "zustand";
3804
- import { jsx as jsx29 } from "react/jsx-runtime";
3943
+ import { jsx as jsx32 } from "react/jsx-runtime";
3805
3944
  var getAttachment2 = ({ attachments }, useAttachment2, partIndex) => {
3806
3945
  const attachment = attachments[partIndex];
3807
3946
  if (!attachment) return null;
@@ -3836,11 +3975,11 @@ var useComposerAttachmentContext2 = (partIndex) => {
3836
3975
  };
3837
3976
  var ComposerAttachmentProvider = ({ attachmentIndex: partIndex, children }) => {
3838
3977
  const context = useComposerAttachmentContext2(partIndex);
3839
- return /* @__PURE__ */ jsx29(AttachmentContext.Provider, { value: context, children });
3978
+ return /* @__PURE__ */ jsx32(AttachmentContext.Provider, { value: context, children });
3840
3979
  };
3841
3980
 
3842
3981
  // src/primitives/composer/ComposerAttachments.tsx
3843
- import { jsx as jsx30 } from "react/jsx-runtime";
3982
+ import { jsx as jsx33 } from "react/jsx-runtime";
3844
3983
  var getComponent2 = (components, attachment) => {
3845
3984
  const type = attachment.type;
3846
3985
  switch (type) {
@@ -3860,10 +3999,10 @@ var AttachmentComponent2 = ({ components }) => {
3860
3999
  (a) => getComponent2(components, a.attachment)
3861
4000
  );
3862
4001
  if (!Component) return null;
3863
- return /* @__PURE__ */ jsx30(Component, {});
4002
+ return /* @__PURE__ */ jsx33(Component, {});
3864
4003
  };
3865
4004
  var ComposerAttachmentImpl = ({ components, attachmentIndex }) => {
3866
- return /* @__PURE__ */ jsx30(ComposerAttachmentProvider, { attachmentIndex, children: /* @__PURE__ */ jsx30(AttachmentComponent2, { components }) });
4005
+ return /* @__PURE__ */ jsx33(ComposerAttachmentProvider, { attachmentIndex, children: /* @__PURE__ */ jsx33(AttachmentComponent2, { components }) });
3867
4006
  };
3868
4007
  var ComposerAttachment = memo4(
3869
4008
  ComposerAttachmentImpl,
@@ -3871,7 +4010,7 @@ var ComposerAttachment = memo4(
3871
4010
  );
3872
4011
  var ComposerPrimitiveAttachments = ({ components }) => {
3873
4012
  const attachmentsCount = useThreadComposer((s) => s.attachments.length);
3874
- return Array.from({ length: attachmentsCount }, (_, index) => /* @__PURE__ */ jsx30(
4013
+ return Array.from({ length: attachmentsCount }, (_, index) => /* @__PURE__ */ jsx33(
3875
4014
  ComposerAttachment,
3876
4015
  {
3877
4016
  attachmentIndex: index,
@@ -3914,11 +4053,11 @@ __export(thread_exports, {
3914
4053
  });
3915
4054
 
3916
4055
  // src/primitives/thread/ThreadRoot.tsx
3917
- import { Primitive as Primitive9 } from "@radix-ui/react-primitive";
3918
- import { forwardRef as forwardRef17 } from "react";
3919
- import { jsx as jsx31 } from "react/jsx-runtime";
3920
- var ThreadPrimitiveRoot = forwardRef17((props, ref) => {
3921
- return /* @__PURE__ */ jsx31(Primitive9.div, { ...props, ref });
4056
+ import { Primitive as Primitive12 } from "@radix-ui/react-primitive";
4057
+ import { forwardRef as forwardRef20 } from "react";
4058
+ import { jsx as jsx34 } from "react/jsx-runtime";
4059
+ var ThreadPrimitiveRoot = forwardRef20((props, ref) => {
4060
+ return /* @__PURE__ */ jsx34(Primitive12.div, { ...props, ref });
3922
4061
  });
3923
4062
  ThreadPrimitiveRoot.displayName = "ThreadPrimitive.Root";
3924
4063
 
@@ -3943,8 +4082,8 @@ ThreadPrimitiveIf.displayName = "ThreadPrimitive.If";
3943
4082
 
3944
4083
  // src/primitives/thread/ThreadViewport.tsx
3945
4084
  import { useComposedRefs as useComposedRefs4 } from "@radix-ui/react-compose-refs";
3946
- import { Primitive as Primitive10 } from "@radix-ui/react-primitive";
3947
- import { forwardRef as forwardRef18 } from "react";
4085
+ import { Primitive as Primitive13 } from "@radix-ui/react-primitive";
4086
+ import { forwardRef as forwardRef21 } from "react";
3948
4087
 
3949
4088
  // src/primitive-hooks/thread/useThreadViewportAutoScroll.tsx
3950
4089
  import { useComposedRefs as useComposedRefs3 } from "@radix-ui/react-compose-refs";
@@ -3952,10 +4091,10 @@ import { useRef as useRef5 } from "react";
3952
4091
 
3953
4092
  // src/utils/hooks/useOnResizeContent.tsx
3954
4093
  import { useCallbackRef as useCallbackRef3 } from "@radix-ui/react-use-callback-ref";
3955
- import { useCallback as useCallback18 } from "react";
4094
+ import { useCallback as useCallback20 } from "react";
3956
4095
  var useOnResizeContent = (callback) => {
3957
4096
  const callbackRef = useCallbackRef3(callback);
3958
- const refCallback = useCallback18(
4097
+ const refCallback = useCallback20(
3959
4098
  (el) => {
3960
4099
  const resizeObserver = new ResizeObserver(() => {
3961
4100
  callbackRef();
@@ -4055,13 +4194,13 @@ var useThreadViewportAutoScroll = ({
4055
4194
  };
4056
4195
 
4057
4196
  // src/primitives/thread/ThreadViewport.tsx
4058
- import { jsx as jsx32 } from "react/jsx-runtime";
4059
- var ThreadPrimitiveViewport = forwardRef18(({ autoScroll, children, ...rest }, forwardedRef) => {
4197
+ import { jsx as jsx35 } from "react/jsx-runtime";
4198
+ var ThreadPrimitiveViewport = forwardRef21(({ autoScroll, children, ...rest }, forwardedRef) => {
4060
4199
  const autoScrollRef = useThreadViewportAutoScroll({
4061
4200
  autoScroll
4062
4201
  });
4063
4202
  const ref = useComposedRefs4(forwardedRef, autoScrollRef);
4064
- return /* @__PURE__ */ jsx32(Primitive10.div, { ...rest, ref, children });
4203
+ return /* @__PURE__ */ jsx35(Primitive13.div, { ...rest, ref, children });
4065
4204
  });
4066
4205
  ThreadPrimitiveViewport.displayName = "ThreadPrimitive.Viewport";
4067
4206
 
@@ -4134,12 +4273,16 @@ var makeMessageUtilsStore = () => create16((set) => {
4134
4273
  utt.onEnd(() => {
4135
4274
  set({ isSpeaking: false });
4136
4275
  });
4276
+ },
4277
+ submittedFeedback: null,
4278
+ setSubmittedFeedback: (feedback) => {
4279
+ set({ submittedFeedback: feedback });
4137
4280
  }
4138
4281
  };
4139
4282
  });
4140
4283
 
4141
4284
  // src/context/providers/MessageProvider.tsx
4142
- import { jsx as jsx33 } from "react/jsx-runtime";
4285
+ import { jsx as jsx36 } from "react/jsx-runtime";
4143
4286
  var getIsLast = (messages, message) => {
4144
4287
  return messages[messages.length - 1]?.id === message.id;
4145
4288
  };
@@ -4216,11 +4359,11 @@ var MessageProvider = ({
4216
4359
  children
4217
4360
  }) => {
4218
4361
  const context = useMessageContext2(messageIndex);
4219
- return /* @__PURE__ */ jsx33(MessageContext.Provider, { value: context, children });
4362
+ return /* @__PURE__ */ jsx36(MessageContext.Provider, { value: context, children });
4220
4363
  };
4221
4364
 
4222
4365
  // src/primitives/thread/ThreadMessages.tsx
4223
- import { jsx as jsx34 } from "react/jsx-runtime";
4366
+ import { jsx as jsx37 } from "react/jsx-runtime";
4224
4367
  var isComponentsSame = (prev, next) => {
4225
4368
  return prev.Message === next.Message && prev.EditComposer === next.EditComposer && prev.UserEditComposer === next.UserEditComposer && prev.AssistantEditComposer === next.AssistantEditComposer && prev.SystemEditComposer === next.SystemEditComposer && prev.UserMessage === next.UserMessage && prev.AssistantMessage === next.AssistantMessage && prev.SystemMessage === next.SystemMessage;
4226
4369
  };
@@ -4256,13 +4399,13 @@ var ThreadMessageComponent = ({
4256
4399
  const role = useMessage((m) => m.message.role);
4257
4400
  const isEditing = useEditComposer((c) => c.isEditing);
4258
4401
  const Component = getComponent3(components, role, isEditing);
4259
- return /* @__PURE__ */ jsx34(Component, {});
4402
+ return /* @__PURE__ */ jsx37(Component, {});
4260
4403
  };
4261
4404
  var ThreadMessageImpl = ({
4262
4405
  messageIndex,
4263
4406
  components
4264
4407
  }) => {
4265
- return /* @__PURE__ */ jsx34(MessageProvider, { messageIndex, children: /* @__PURE__ */ jsx34(ThreadMessageComponent, { components }) });
4408
+ return /* @__PURE__ */ jsx37(MessageProvider, { messageIndex, children: /* @__PURE__ */ jsx37(ThreadMessageComponent, { components }) });
4266
4409
  };
4267
4410
  var ThreadMessage = memo5(
4268
4411
  ThreadMessageImpl,
@@ -4273,7 +4416,7 @@ var ThreadPrimitiveMessagesImpl = ({
4273
4416
  }) => {
4274
4417
  const messagesLength = useThreadMessages((t) => t.length);
4275
4418
  if (messagesLength === 0) return null;
4276
- return Array.from({ length: messagesLength }, (_, index) => /* @__PURE__ */ jsx34(ThreadMessage, { messageIndex: index, components }, index));
4419
+ return Array.from({ length: messagesLength }, (_, index) => /* @__PURE__ */ jsx37(ThreadMessage, { messageIndex: index, components }, index));
4277
4420
  };
4278
4421
  ThreadPrimitiveMessagesImpl.displayName = "ThreadPrimitive.Messages";
4279
4422
  var ThreadPrimitiveMessages = memo5(
@@ -4299,7 +4442,7 @@ import {
4299
4442
  createContext as createContext7,
4300
4443
  useContext as useContext4
4301
4444
  } from "react";
4302
- import { Fragment as Fragment3, jsx as jsx35 } from "react/jsx-runtime";
4445
+ import { Fragment as Fragment3, jsx as jsx38 } from "react/jsx-runtime";
4303
4446
  var ThreadConfigContext = createContext7({});
4304
4447
  var useThreadConfig = () => {
4305
4448
  return useContext4(ThreadConfigContext);
@@ -4309,27 +4452,29 @@ var ThreadConfigProvider = ({
4309
4452
  config
4310
4453
  }) => {
4311
4454
  const hasAssistant = !!useAssistantRuntimeStore({ optional: true });
4312
- const configProvider = config && Object.keys(config ?? {}).length > 0 ? /* @__PURE__ */ jsx35(ThreadConfigContext.Provider, { value: config, children }) : /* @__PURE__ */ jsx35(Fragment3, { children });
4455
+ const configProvider = config && Object.keys(config ?? {}).length > 0 ? /* @__PURE__ */ jsx38(ThreadConfigContext.Provider, { value: config, children }) : /* @__PURE__ */ jsx38(Fragment3, { children });
4313
4456
  if (!config?.runtime) return configProvider;
4314
4457
  if (hasAssistant) {
4315
4458
  throw new Error(
4316
4459
  "You provided a runtime to <Thread> while simulataneously using <AssistantRuntimeProvider>. This is not allowed."
4317
4460
  );
4318
4461
  }
4319
- return /* @__PURE__ */ jsx35(AssistantRuntimeProvider, { runtime: config.runtime, children: configProvider });
4462
+ return /* @__PURE__ */ jsx38(AssistantRuntimeProvider, { runtime: config.runtime, children: configProvider });
4320
4463
  };
4321
4464
  ThreadConfigProvider.displayName = "ThreadConfigProvider";
4322
4465
 
4323
4466
  // src/ui/assistant-action-bar.tsx
4324
- import { forwardRef as forwardRef19 } from "react";
4467
+ import { forwardRef as forwardRef22 } from "react";
4325
4468
  import {
4326
4469
  AudioLinesIcon,
4327
4470
  CheckIcon,
4328
4471
  CopyIcon,
4329
4472
  RefreshCwIcon,
4330
- StopCircleIcon
4473
+ StopCircleIcon,
4474
+ ThumbsDownIcon,
4475
+ ThumbsUpIcon
4331
4476
  } from "lucide-react";
4332
- import { Fragment as Fragment4, jsx as jsx36, jsxs as jsxs4 } from "react/jsx-runtime";
4477
+ import { Fragment as Fragment4, jsx as jsx39, jsxs as jsxs4 } from "react/jsx-runtime";
4333
4478
  var useAllowCopy = (ensureCapability = false) => {
4334
4479
  const { assistantMessage: { allowCopy = true } = {} } = useThreadConfig();
4335
4480
  const copySupported = useThread((t) => t.capabilities.unstable_copy);
@@ -4345,11 +4490,24 @@ var useAllowReload = (ensureCapability = false) => {
4345
4490
  const reloadSupported = useThread((t) => t.capabilities.reload);
4346
4491
  return allowReload && (!ensureCapability || reloadSupported);
4347
4492
  };
4493
+ var useAllowFeedbackPositive = (ensureCapability = false) => {
4494
+ const { assistantMessage: { allowFeedbackPositive = true } = {} } = useThreadConfig();
4495
+ const feedbackSupported = useThread((t) => t.capabilities.feedback);
4496
+ return allowFeedbackPositive && (!ensureCapability || feedbackSupported);
4497
+ };
4498
+ var useAllowFeedbackNegative = (ensureCapability = false) => {
4499
+ const { assistantMessage: { allowFeedbackNegative = true } = {} } = useThreadConfig();
4500
+ const feedbackSupported = useThread((t) => t.capabilities.feedback);
4501
+ return allowFeedbackNegative && (!ensureCapability || feedbackSupported);
4502
+ };
4348
4503
  var AssistantActionBar = () => {
4349
4504
  const allowCopy = useAllowCopy(true);
4350
4505
  const allowReload = useAllowReload(true);
4351
4506
  const allowSpeak = useAllowSpeak(true);
4352
- if (!allowCopy && !allowReload && !allowSpeak) return null;
4507
+ const allowFeedbackPositive = useAllowFeedbackPositive(true);
4508
+ const allowFeedbackNegative = useAllowFeedbackNegative(true);
4509
+ if (!allowCopy && !allowReload && !allowSpeak && !allowFeedbackPositive && !allowFeedbackNegative)
4510
+ return null;
4353
4511
  return /* @__PURE__ */ jsxs4(
4354
4512
  AssistantActionBarRoot,
4355
4513
  {
@@ -4357,9 +4515,11 @@ var AssistantActionBar = () => {
4357
4515
  autohide: "not-last",
4358
4516
  autohideFloat: "single-branch",
4359
4517
  children: [
4360
- allowSpeak && /* @__PURE__ */ jsx36(AssistantActionBarSpeechControl, {}),
4361
- allowCopy && /* @__PURE__ */ jsx36(AssistantActionBarCopy, {}),
4362
- allowReload && /* @__PURE__ */ jsx36(AssistantActionBarReload, {})
4518
+ allowSpeak && /* @__PURE__ */ jsx39(AssistantActionBarSpeechControl, {}),
4519
+ allowCopy && /* @__PURE__ */ jsx39(AssistantActionBarCopy, {}),
4520
+ allowReload && /* @__PURE__ */ jsx39(AssistantActionBarReload, {}),
4521
+ allowFeedbackPositive && /* @__PURE__ */ jsx39(AssistantActionBarFeedbackPositive, {}),
4522
+ allowFeedbackNegative && /* @__PURE__ */ jsx39(AssistantActionBarFeedbackNegative, {})
4363
4523
  ]
4364
4524
  }
4365
4525
  );
@@ -4369,35 +4529,35 @@ var AssistantActionBarRoot = withDefaults(actionBar_exports.Root, {
4369
4529
  className: "aui-assistant-action-bar-root"
4370
4530
  });
4371
4531
  AssistantActionBarRoot.displayName = "AssistantActionBarRoot";
4372
- var AssistantActionBarCopy = forwardRef19((props, ref) => {
4532
+ var AssistantActionBarCopy = forwardRef22((props, ref) => {
4373
4533
  const {
4374
4534
  strings: {
4375
4535
  assistantMessage: { copy: { tooltip = "Copy" } = {} } = {}
4376
4536
  } = {}
4377
4537
  } = useThreadConfig();
4378
- return /* @__PURE__ */ jsx36(actionBar_exports.Copy, { asChild: true, children: /* @__PURE__ */ jsx36(TooltipIconButton, { tooltip, ...props, ref, children: props.children ?? /* @__PURE__ */ jsxs4(Fragment4, { children: [
4379
- /* @__PURE__ */ jsx36(message_exports.If, { copied: true, children: /* @__PURE__ */ jsx36(CheckIcon, {}) }),
4380
- /* @__PURE__ */ jsx36(message_exports.If, { copied: false, children: /* @__PURE__ */ jsx36(CopyIcon, {}) })
4538
+ return /* @__PURE__ */ jsx39(actionBar_exports.Copy, { asChild: true, children: /* @__PURE__ */ jsx39(TooltipIconButton, { tooltip, ...props, ref, children: props.children ?? /* @__PURE__ */ jsxs4(Fragment4, { children: [
4539
+ /* @__PURE__ */ jsx39(message_exports.If, { copied: true, children: /* @__PURE__ */ jsx39(CheckIcon, {}) }),
4540
+ /* @__PURE__ */ jsx39(message_exports.If, { copied: false, children: /* @__PURE__ */ jsx39(CopyIcon, {}) })
4381
4541
  ] }) }) });
4382
4542
  });
4383
4543
  AssistantActionBarCopy.displayName = "AssistantActionBarCopy";
4384
4544
  var AssistantActionBarSpeechControl = () => {
4385
4545
  return /* @__PURE__ */ jsxs4(Fragment4, { children: [
4386
- /* @__PURE__ */ jsx36(message_exports.If, { speaking: false, children: /* @__PURE__ */ jsx36(AssistantActionBarSpeak, {}) }),
4387
- /* @__PURE__ */ jsx36(message_exports.If, { speaking: true, children: /* @__PURE__ */ jsx36(AssistantActionBarStopSpeaking, {}) })
4546
+ /* @__PURE__ */ jsx39(message_exports.If, { speaking: false, children: /* @__PURE__ */ jsx39(AssistantActionBarSpeak, {}) }),
4547
+ /* @__PURE__ */ jsx39(message_exports.If, { speaking: true, children: /* @__PURE__ */ jsx39(AssistantActionBarStopSpeaking, {}) })
4388
4548
  ] });
4389
4549
  };
4390
- var AssistantActionBarSpeak = forwardRef19((props, ref) => {
4550
+ var AssistantActionBarSpeak = forwardRef22((props, ref) => {
4391
4551
  const {
4392
4552
  strings: {
4393
4553
  assistantMessage: { speak: { tooltip = "Read aloud" } = {} } = {}
4394
4554
  } = {}
4395
4555
  } = useThreadConfig();
4396
4556
  const allowSpeak = useAllowSpeak();
4397
- return /* @__PURE__ */ jsx36(actionBar_exports.Speak, { disabled: !allowSpeak, asChild: true, children: /* @__PURE__ */ jsx36(TooltipIconButton, { tooltip, ...props, ref, children: props.children ?? /* @__PURE__ */ jsx36(AudioLinesIcon, {}) }) });
4557
+ return /* @__PURE__ */ jsx39(actionBar_exports.Speak, { disabled: !allowSpeak, asChild: true, children: /* @__PURE__ */ jsx39(TooltipIconButton, { tooltip, ...props, ref, children: props.children ?? /* @__PURE__ */ jsx39(AudioLinesIcon, {}) }) });
4398
4558
  });
4399
4559
  AssistantActionBarSpeak.displayName = "AssistantActionBarSpeak";
4400
- var AssistantActionBarStopSpeaking = forwardRef19((props, ref) => {
4560
+ var AssistantActionBarStopSpeaking = forwardRef22((props, ref) => {
4401
4561
  const {
4402
4562
  strings: {
4403
4563
  assistantMessage: {
@@ -4406,26 +4566,68 @@ var AssistantActionBarStopSpeaking = forwardRef19((props, ref) => {
4406
4566
  } = {}
4407
4567
  } = useThreadConfig();
4408
4568
  const allowSpeak = useAllowSpeak();
4409
- return /* @__PURE__ */ jsx36(actionBar_exports.StopSpeaking, { disabled: !allowSpeak, asChild: true, children: /* @__PURE__ */ jsx36(TooltipIconButton, { tooltip: stopTooltip, ...props, ref, children: props.children ?? /* @__PURE__ */ jsx36(StopCircleIcon, {}) }) });
4569
+ return /* @__PURE__ */ jsx39(actionBar_exports.StopSpeaking, { disabled: !allowSpeak, asChild: true, children: /* @__PURE__ */ jsx39(TooltipIconButton, { tooltip: stopTooltip, ...props, ref, children: props.children ?? /* @__PURE__ */ jsx39(StopCircleIcon, {}) }) });
4410
4570
  });
4411
4571
  AssistantActionBarStopSpeaking.displayName = "AssistantActionBarStopSpeaking";
4412
- var AssistantActionBarReload = forwardRef19((props, ref) => {
4572
+ var AssistantActionBarReload = forwardRef22((props, ref) => {
4413
4573
  const {
4414
4574
  strings: {
4415
4575
  assistantMessage: { reload: { tooltip = "Refresh" } = {} } = {}
4416
4576
  } = {}
4417
4577
  } = useThreadConfig();
4418
4578
  const allowReload = useAllowReload();
4419
- return /* @__PURE__ */ jsx36(actionBar_exports.Reload, { disabled: !allowReload, asChild: true, children: /* @__PURE__ */ jsx36(TooltipIconButton, { tooltip, ...props, ref, children: /* @__PURE__ */ jsx36(RefreshCwIcon, {}) }) });
4579
+ return /* @__PURE__ */ jsx39(actionBar_exports.Reload, { disabled: !allowReload, asChild: true, children: /* @__PURE__ */ jsx39(TooltipIconButton, { tooltip, ...props, ref, children: props.children ?? /* @__PURE__ */ jsx39(RefreshCwIcon, {}) }) });
4420
4580
  });
4421
4581
  AssistantActionBarReload.displayName = "AssistantActionBarReload";
4582
+ var AssistantActionBarFeedbackPositive = forwardRef22((props, ref) => {
4583
+ const {
4584
+ strings: {
4585
+ assistantMessage: {
4586
+ feedback: { positive: { tooltip = "Good response" } = {} } = {}
4587
+ } = {}
4588
+ } = {}
4589
+ } = useThreadConfig();
4590
+ const allowFeedbackPositive = useAllowFeedbackPositive();
4591
+ return /* @__PURE__ */ jsx39(
4592
+ actionBar_exports.FeedbackPositive,
4593
+ {
4594
+ disabled: !allowFeedbackPositive,
4595
+ className: "aui-assistant-action-bar-feedback-positive",
4596
+ asChild: true,
4597
+ children: /* @__PURE__ */ jsx39(TooltipIconButton, { tooltip, ...props, ref, children: props.children ?? /* @__PURE__ */ jsx39(ThumbsUpIcon, {}) })
4598
+ }
4599
+ );
4600
+ });
4601
+ AssistantActionBarFeedbackPositive.displayName = "AssistantActionBarFeedbackPositive";
4602
+ var AssistantActionBarFeedbackNegative = forwardRef22((props, ref) => {
4603
+ const {
4604
+ strings: {
4605
+ assistantMessage: {
4606
+ feedback: { negative: { tooltip = "Bad response" } = {} } = {}
4607
+ } = {}
4608
+ } = {}
4609
+ } = useThreadConfig();
4610
+ const allowFeedbackNegative = useAllowFeedbackNegative();
4611
+ return /* @__PURE__ */ jsx39(
4612
+ actionBar_exports.FeedbackNegative,
4613
+ {
4614
+ disabled: !allowFeedbackNegative,
4615
+ className: "aui-assistant-action-bar-feedback-negative",
4616
+ asChild: true,
4617
+ children: /* @__PURE__ */ jsx39(TooltipIconButton, { tooltip, ...props, ref, children: props.children ?? /* @__PURE__ */ jsx39(ThumbsDownIcon, {}) })
4618
+ }
4619
+ );
4620
+ });
4621
+ AssistantActionBarFeedbackNegative.displayName = "AssistantActionBarFeedbackNegative";
4422
4622
  var exports = {
4423
4623
  Root: AssistantActionBarRoot,
4424
4624
  Reload: AssistantActionBarReload,
4425
4625
  Copy: AssistantActionBarCopy,
4426
4626
  Speak: AssistantActionBarSpeak,
4427
4627
  StopSpeaking: AssistantActionBarStopSpeaking,
4428
- SpeechControl: AssistantActionBarSpeechControl
4628
+ SpeechControl: AssistantActionBarSpeechControl,
4629
+ FeedbackPositive: AssistantActionBarFeedbackPositive,
4630
+ FeedbackNegative: AssistantActionBarFeedbackNegative
4429
4631
  };
4430
4632
  var assistant_action_bar_default = Object.assign(
4431
4633
  AssistantActionBar,
@@ -4433,12 +4635,12 @@ var assistant_action_bar_default = Object.assign(
4433
4635
  );
4434
4636
 
4435
4637
  // src/ui/assistant-message.tsx
4436
- import { forwardRef as forwardRef21, useMemo as useMemo5 } from "react";
4638
+ import { forwardRef as forwardRef24, useMemo as useMemo5 } from "react";
4437
4639
 
4438
4640
  // src/ui/branch-picker.tsx
4439
- import { forwardRef as forwardRef20 } from "react";
4641
+ import { forwardRef as forwardRef23 } from "react";
4440
4642
  import { ChevronLeftIcon, ChevronRightIcon } from "lucide-react";
4441
- import { jsx as jsx37, jsxs as jsxs5 } from "react/jsx-runtime";
4643
+ import { jsx as jsx40, jsxs as jsxs5 } from "react/jsx-runtime";
4442
4644
  var useAllowBranchPicker = (ensureCapability = false) => {
4443
4645
  const { branchPicker: { allowBranchPicker = true } = {} } = useThreadConfig();
4444
4646
  const branchPickerSupported = useThread((t) => t.capabilities.edit);
@@ -4448,9 +4650,9 @@ var BranchPicker = () => {
4448
4650
  const allowBranchPicker = useAllowBranchPicker();
4449
4651
  if (!allowBranchPicker) return null;
4450
4652
  return /* @__PURE__ */ jsxs5(BranchPickerRoot, { hideWhenSingleBranch: true, children: [
4451
- /* @__PURE__ */ jsx37(BranchPickerPrevious2, {}),
4452
- /* @__PURE__ */ jsx37(BranchPickerState, {}),
4453
- /* @__PURE__ */ jsx37(BranchPickerNext, {})
4653
+ /* @__PURE__ */ jsx40(BranchPickerPrevious2, {}),
4654
+ /* @__PURE__ */ jsx40(BranchPickerState, {}),
4655
+ /* @__PURE__ */ jsx40(BranchPickerNext, {})
4454
4656
  ] });
4455
4657
  };
4456
4658
  BranchPicker.displayName = "BranchPicker";
@@ -4458,33 +4660,33 @@ var BranchPickerRoot = withDefaults(branchPicker_exports.Root, {
4458
4660
  className: "aui-branch-picker-root"
4459
4661
  });
4460
4662
  BranchPickerRoot.displayName = "BranchPickerRoot";
4461
- var BranchPickerPrevious2 = forwardRef20((props, ref) => {
4663
+ var BranchPickerPrevious2 = forwardRef23((props, ref) => {
4462
4664
  const {
4463
4665
  strings: {
4464
4666
  branchPicker: { previous: { tooltip = "Previous" } = {} } = {}
4465
4667
  } = {}
4466
4668
  } = useThreadConfig();
4467
4669
  const allowBranchPicker = useAllowBranchPicker();
4468
- return /* @__PURE__ */ jsx37(branchPicker_exports.Previous, { disabled: !allowBranchPicker, asChild: true, children: /* @__PURE__ */ jsx37(TooltipIconButton, { tooltip, ...props, ref, children: props.children ?? /* @__PURE__ */ jsx37(ChevronLeftIcon, {}) }) });
4670
+ return /* @__PURE__ */ jsx40(branchPicker_exports.Previous, { disabled: !allowBranchPicker, asChild: true, children: /* @__PURE__ */ jsx40(TooltipIconButton, { tooltip, ...props, ref, children: props.children ?? /* @__PURE__ */ jsx40(ChevronLeftIcon, {}) }) });
4469
4671
  });
4470
4672
  BranchPickerPrevious2.displayName = "BranchPickerPrevious";
4471
4673
  var BranchPickerStateWrapper = withDefaults("span", {
4472
4674
  className: "aui-branch-picker-state"
4473
4675
  });
4474
- var BranchPickerState = forwardRef20((props, ref) => {
4676
+ var BranchPickerState = forwardRef23((props, ref) => {
4475
4677
  return /* @__PURE__ */ jsxs5(BranchPickerStateWrapper, { ...props, ref, children: [
4476
- /* @__PURE__ */ jsx37(branchPicker_exports.Number, {}),
4678
+ /* @__PURE__ */ jsx40(branchPicker_exports.Number, {}),
4477
4679
  " / ",
4478
- /* @__PURE__ */ jsx37(branchPicker_exports.Count, {})
4680
+ /* @__PURE__ */ jsx40(branchPicker_exports.Count, {})
4479
4681
  ] });
4480
4682
  });
4481
4683
  BranchPickerState.displayName = "BranchPickerState";
4482
- var BranchPickerNext = forwardRef20((props, ref) => {
4684
+ var BranchPickerNext = forwardRef23((props, ref) => {
4483
4685
  const {
4484
4686
  strings: { branchPicker: { next: { tooltip = "Next" } = {} } = {} } = {}
4485
4687
  } = useThreadConfig();
4486
4688
  const allowBranchPicker = useAllowBranchPicker();
4487
- return /* @__PURE__ */ jsx37(branchPicker_exports.Next, { disabled: !allowBranchPicker, asChild: true, children: /* @__PURE__ */ jsx37(TooltipIconButton, { tooltip, ...props, ref, children: props.children ?? /* @__PURE__ */ jsx37(ChevronRightIcon, {}) }) });
4689
+ return /* @__PURE__ */ jsx40(branchPicker_exports.Next, { disabled: !allowBranchPicker, asChild: true, children: /* @__PURE__ */ jsx40(TooltipIconButton, { tooltip, ...props, ref, children: props.children ?? /* @__PURE__ */ jsx40(ChevronRightIcon, {}) }) });
4488
4690
  });
4489
4691
  BranchPickerNext.displayName = "BranchPickerNext";
4490
4692
  var exports2 = {
@@ -4496,12 +4698,12 @@ var branch_picker_default = Object.assign(BranchPicker, exports2);
4496
4698
 
4497
4699
  // src/ui/base/avatar.tsx
4498
4700
  import * as AvatarPrimitive from "@radix-ui/react-avatar";
4499
- import { jsx as jsx38, jsxs as jsxs6 } from "react/jsx-runtime";
4701
+ import { jsx as jsx41, jsxs as jsxs6 } from "react/jsx-runtime";
4500
4702
  var Avatar = ({ src, alt, fallback }) => {
4501
4703
  if (src == null && fallback == null) return null;
4502
4704
  return /* @__PURE__ */ jsxs6(AvatarRoot, { children: [
4503
- src != null && /* @__PURE__ */ jsx38(AvatarImage, { src, alt }),
4504
- fallback != null && /* @__PURE__ */ jsx38(AvatarFallback, { children: fallback })
4705
+ src != null && /* @__PURE__ */ jsx41(AvatarImage, { src, alt }),
4706
+ fallback != null && /* @__PURE__ */ jsx41(AvatarFallback, { children: fallback })
4505
4707
  ] });
4506
4708
  };
4507
4709
  Avatar.displayName = "Avatar";
@@ -4520,10 +4722,10 @@ AvatarFallback.displayName = "AvatarFallback";
4520
4722
 
4521
4723
  // src/ui/content-part.tsx
4522
4724
  import classNames2 from "classnames";
4523
- import { jsx as jsx39 } from "react/jsx-runtime";
4725
+ import { jsx as jsx42 } from "react/jsx-runtime";
4524
4726
  var Text = () => {
4525
4727
  const status = useSmoothStatus();
4526
- return /* @__PURE__ */ jsx39(
4728
+ return /* @__PURE__ */ jsx42(
4527
4729
  contentPart_exports.Text,
4528
4730
  {
4529
4731
  className: classNames2(
@@ -4538,19 +4740,19 @@ var exports3 = { Text: withSmoothContextProvider(Text) };
4538
4740
  var content_part_default = exports3;
4539
4741
 
4540
4742
  // src/ui/assistant-message.tsx
4541
- import { jsx as jsx40, jsxs as jsxs7 } from "react/jsx-runtime";
4743
+ import { jsx as jsx43, jsxs as jsxs7 } from "react/jsx-runtime";
4542
4744
  var AssistantMessage = () => {
4543
4745
  return /* @__PURE__ */ jsxs7(AssistantMessageRoot, { children: [
4544
- /* @__PURE__ */ jsx40(AssistantMessageAvatar, {}),
4545
- /* @__PURE__ */ jsx40(AssistantMessageContent, {}),
4546
- /* @__PURE__ */ jsx40(branch_picker_default, {}),
4547
- /* @__PURE__ */ jsx40(assistant_action_bar_default, {})
4746
+ /* @__PURE__ */ jsx43(AssistantMessageAvatar, {}),
4747
+ /* @__PURE__ */ jsx43(AssistantMessageContent, {}),
4748
+ /* @__PURE__ */ jsx43(branch_picker_default, {}),
4749
+ /* @__PURE__ */ jsx43(assistant_action_bar_default, {})
4548
4750
  ] });
4549
4751
  };
4550
4752
  AssistantMessage.displayName = "AssistantMessage";
4551
4753
  var AssistantMessageAvatar = () => {
4552
4754
  const { assistantAvatar: avatar = { fallback: "A" } } = useThreadConfig();
4553
- return /* @__PURE__ */ jsx40(Avatar, { ...avatar });
4755
+ return /* @__PURE__ */ jsx43(Avatar, { ...avatar });
4554
4756
  };
4555
4757
  var AssistantMessageRoot = withDefaults(message_exports.Root, {
4556
4758
  className: "aui-assistant-message-root"
@@ -4559,7 +4761,7 @@ AssistantMessageRoot.displayName = "AssistantMessageRoot";
4559
4761
  var AssistantMessageContentWrapper = withDefaults("div", {
4560
4762
  className: "aui-assistant-message-content"
4561
4763
  });
4562
- var AssistantMessageContent = forwardRef21(({ components: componentsProp, ...rest }, ref) => {
4764
+ var AssistantMessageContent = forwardRef24(({ components: componentsProp, ...rest }, ref) => {
4563
4765
  const { tools, assistantMessage: { components = {} } = {} } = useThreadConfig();
4564
4766
  const toolsComponents = useMemo5(
4565
4767
  () => ({
@@ -4574,7 +4776,7 @@ var AssistantMessageContent = forwardRef21(({ components: componentsProp, ...res
4574
4776
  // eslint-disable-next-line react-hooks/exhaustive-deps
4575
4777
  [...tools ?? [], components.ToolFallback]
4576
4778
  );
4577
- return /* @__PURE__ */ jsx40(AssistantMessageContentWrapper, { ...rest, ref, children: /* @__PURE__ */ jsx40(
4779
+ return /* @__PURE__ */ jsx43(AssistantMessageContentWrapper, { ...rest, ref, children: /* @__PURE__ */ jsx43(
4578
4780
  message_exports.Content,
4579
4781
  {
4580
4782
  components: {
@@ -4597,21 +4799,21 @@ var assistant_message_default = Object.assign(
4597
4799
  );
4598
4800
 
4599
4801
  // src/ui/assistant-modal.tsx
4600
- import { forwardRef as forwardRef29 } from "react";
4802
+ import { forwardRef as forwardRef32 } from "react";
4601
4803
  import { BotIcon, ChevronDownIcon } from "lucide-react";
4602
4804
 
4603
4805
  // src/ui/thread.tsx
4604
- import { forwardRef as forwardRef28 } from "react";
4806
+ import { forwardRef as forwardRef31 } from "react";
4605
4807
  import { ArrowDownIcon } from "lucide-react";
4606
4808
 
4607
4809
  // src/ui/composer.tsx
4608
- import { forwardRef as forwardRef23 } from "react";
4810
+ import { forwardRef as forwardRef26 } from "react";
4609
4811
  import { PaperclipIcon, SendHorizontalIcon } from "lucide-react";
4610
4812
 
4611
4813
  // src/ui/base/CircleStopIcon.tsx
4612
- import { jsx as jsx41 } from "react/jsx-runtime";
4814
+ import { jsx as jsx44 } from "react/jsx-runtime";
4613
4815
  var CircleStopIcon = () => {
4614
- return /* @__PURE__ */ jsx41(
4816
+ return /* @__PURE__ */ jsx44(
4615
4817
  "svg",
4616
4818
  {
4617
4819
  xmlns: "http://www.w3.org/2000/svg",
@@ -4619,16 +4821,16 @@ var CircleStopIcon = () => {
4619
4821
  fill: "currentColor",
4620
4822
  width: "16",
4621
4823
  height: "16",
4622
- children: /* @__PURE__ */ jsx41("rect", { width: "10", height: "10", x: "3", y: "3", rx: "2" })
4824
+ children: /* @__PURE__ */ jsx44("rect", { width: "10", height: "10", x: "3", y: "3", rx: "2" })
4623
4825
  }
4624
4826
  );
4625
4827
  };
4626
4828
  CircleStopIcon.displayName = "CircleStopIcon";
4627
4829
 
4628
4830
  // src/ui/composer-attachment.tsx
4629
- import { forwardRef as forwardRef22 } from "react";
4831
+ import { forwardRef as forwardRef25 } from "react";
4630
4832
  import { CircleXIcon } from "lucide-react";
4631
- import { jsx as jsx42, jsxs as jsxs8 } from "react/jsx-runtime";
4833
+ import { jsx as jsx45, jsxs as jsxs8 } from "react/jsx-runtime";
4632
4834
  var ComposerAttachmentRoot = withDefaults("div", {
4633
4835
  className: "aui-composer-attachment-root"
4634
4836
  });
@@ -4638,11 +4840,11 @@ var ComposerAttachment2 = () => {
4638
4840
  return /* @__PURE__ */ jsxs8(ComposerAttachmentRoot, { children: [
4639
4841
  ".",
4640
4842
  attachment.name.split(".").pop(),
4641
- /* @__PURE__ */ jsx42(ComposerAttachmentRemove, {})
4843
+ /* @__PURE__ */ jsx45(ComposerAttachmentRemove, {})
4642
4844
  ] });
4643
4845
  };
4644
4846
  ComposerAttachment2.displayName = "ComposerAttachment";
4645
- var ComposerAttachmentRemove = forwardRef22((props, ref) => {
4847
+ var ComposerAttachmentRemove = forwardRef25((props, ref) => {
4646
4848
  const {
4647
4849
  strings: {
4648
4850
  composer: { removeAttachment: { tooltip = "Remove file" } = {} } = {}
@@ -4653,7 +4855,7 @@ var ComposerAttachmentRemove = forwardRef22((props, ref) => {
4653
4855
  const handleRemoveAttachment = () => {
4654
4856
  composerStore.getState().removeAttachment(attachmentStore.getState().attachment.id);
4655
4857
  };
4656
- return /* @__PURE__ */ jsx42(
4858
+ return /* @__PURE__ */ jsx45(
4657
4859
  TooltipIconButton,
4658
4860
  {
4659
4861
  tooltip,
@@ -4662,7 +4864,7 @@ var ComposerAttachmentRemove = forwardRef22((props, ref) => {
4662
4864
  ...props,
4663
4865
  onClick: handleRemoveAttachment,
4664
4866
  ref,
4665
- children: props.children ?? /* @__PURE__ */ jsx42(CircleXIcon, {})
4867
+ children: props.children ?? /* @__PURE__ */ jsx45(CircleXIcon, {})
4666
4868
  }
4667
4869
  );
4668
4870
  });
@@ -4677,7 +4879,7 @@ var composer_attachment_default = Object.assign(
4677
4879
  );
4678
4880
 
4679
4881
  // src/ui/composer.tsx
4680
- import { Fragment as Fragment5, jsx as jsx43, jsxs as jsxs9 } from "react/jsx-runtime";
4882
+ import { Fragment as Fragment5, jsx as jsx46, jsxs as jsxs9 } from "react/jsx-runtime";
4681
4883
  var useAllowAttachments = (ensureCapability = false) => {
4682
4884
  const { composer: { allowAttachments = true } = {} } = useThreadConfig();
4683
4885
  const attachmentsSupported = useThread((t) => t.capabilities.attachments);
@@ -4686,10 +4888,10 @@ var useAllowAttachments = (ensureCapability = false) => {
4686
4888
  var Composer = () => {
4687
4889
  const allowAttachments = useAllowAttachments(true);
4688
4890
  return /* @__PURE__ */ jsxs9(ComposerRoot, { children: [
4689
- allowAttachments && /* @__PURE__ */ jsx43(ComposerAttachments, {}),
4690
- allowAttachments && /* @__PURE__ */ jsx43(ComposerAddAttachment, {}),
4691
- /* @__PURE__ */ jsx43(ComposerInput, { autoFocus: true }),
4692
- /* @__PURE__ */ jsx43(ComposerAction, {})
4891
+ allowAttachments && /* @__PURE__ */ jsx46(ComposerAttachments, {}),
4892
+ allowAttachments && /* @__PURE__ */ jsx46(ComposerAddAttachment, {}),
4893
+ /* @__PURE__ */ jsx46(ComposerInput, { autoFocus: true }),
4894
+ /* @__PURE__ */ jsx46(ComposerAction, {})
4693
4895
  ] });
4694
4896
  };
4695
4897
  Composer.displayName = "Composer";
@@ -4702,14 +4904,14 @@ var ComposerInputStyled = withDefaults(composer_exports.Input, {
4702
4904
  autoFocus: true,
4703
4905
  className: "aui-composer-input"
4704
4906
  });
4705
- var ComposerInput = forwardRef23(
4907
+ var ComposerInput = forwardRef26(
4706
4908
  (props, ref) => {
4707
4909
  const {
4708
4910
  strings: {
4709
4911
  composer: { input: { placeholder = "Write a message..." } = {} } = {}
4710
4912
  } = {}
4711
4913
  } = useThreadConfig();
4712
- return /* @__PURE__ */ jsx43(ComposerInputStyled, { placeholder, ...props, ref });
4914
+ return /* @__PURE__ */ jsx46(ComposerInputStyled, { placeholder, ...props, ref });
4713
4915
  }
4714
4916
  );
4715
4917
  ComposerInput.displayName = "ComposerInput";
@@ -4717,7 +4919,7 @@ var ComposerAttachmentsContainer = withDefaults("div", {
4717
4919
  className: "aui-composer-attachments"
4718
4920
  });
4719
4921
  var ComposerAttachments = ({ components }) => {
4720
- return /* @__PURE__ */ jsx43(ComposerAttachmentsContainer, { children: /* @__PURE__ */ jsx43(
4922
+ return /* @__PURE__ */ jsx46(ComposerAttachmentsContainer, { children: /* @__PURE__ */ jsx46(
4721
4923
  composer_exports.Attachments,
4722
4924
  {
4723
4925
  components: {
@@ -4731,21 +4933,21 @@ var ComposerAttachButton = withDefaults(TooltipIconButton, {
4731
4933
  variant: "default",
4732
4934
  className: "aui-composer-attach"
4733
4935
  });
4734
- var ComposerAddAttachment = forwardRef23((props, ref) => {
4936
+ var ComposerAddAttachment = forwardRef26((props, ref) => {
4735
4937
  const {
4736
4938
  strings: {
4737
4939
  composer: { addAttachment: { tooltip = "Attach file" } = {} } = {}
4738
4940
  } = {}
4739
4941
  } = useThreadConfig();
4740
4942
  const allowAttachments = useAllowAttachments();
4741
- return /* @__PURE__ */ jsx43(composer_exports.AddAttachment, { disabled: !allowAttachments, asChild: true, children: /* @__PURE__ */ jsx43(
4943
+ return /* @__PURE__ */ jsx46(composer_exports.AddAttachment, { disabled: !allowAttachments, asChild: true, children: /* @__PURE__ */ jsx46(
4742
4944
  ComposerAttachButton,
4743
4945
  {
4744
4946
  tooltip,
4745
4947
  variant: "ghost",
4746
4948
  ...props,
4747
4949
  ref,
4748
- children: props.children ?? /* @__PURE__ */ jsx43(PaperclipIcon, {})
4950
+ children: props.children ?? /* @__PURE__ */ jsx46(PaperclipIcon, {})
4749
4951
  }
4750
4952
  ) });
4751
4953
  });
@@ -4756,10 +4958,10 @@ var useAllowCancel = () => {
4756
4958
  };
4757
4959
  var ComposerAction = () => {
4758
4960
  const allowCancel = useAllowCancel();
4759
- if (!allowCancel) return /* @__PURE__ */ jsx43(ComposerSend, {});
4961
+ if (!allowCancel) return /* @__PURE__ */ jsx46(ComposerSend, {});
4760
4962
  return /* @__PURE__ */ jsxs9(Fragment5, { children: [
4761
- /* @__PURE__ */ jsx43(thread_exports.If, { running: false, children: /* @__PURE__ */ jsx43(ComposerSend, {}) }),
4762
- /* @__PURE__ */ jsx43(thread_exports.If, { running: true, children: /* @__PURE__ */ jsx43(ComposerCancel, {}) })
4963
+ /* @__PURE__ */ jsx46(thread_exports.If, { running: false, children: /* @__PURE__ */ jsx46(ComposerSend, {}) }),
4964
+ /* @__PURE__ */ jsx46(thread_exports.If, { running: true, children: /* @__PURE__ */ jsx46(ComposerCancel, {}) })
4763
4965
  ] });
4764
4966
  };
4765
4967
  ComposerAction.displayName = "ComposerAction";
@@ -4767,22 +4969,22 @@ var ComposerSendButton = withDefaults(TooltipIconButton, {
4767
4969
  variant: "default",
4768
4970
  className: "aui-composer-send"
4769
4971
  });
4770
- var ComposerSend = forwardRef23((props, ref) => {
4972
+ var ComposerSend = forwardRef26((props, ref) => {
4771
4973
  const {
4772
4974
  strings: { composer: { send: { tooltip = "Send" } = {} } = {} } = {}
4773
4975
  } = useThreadConfig();
4774
- return /* @__PURE__ */ jsx43(composer_exports.Send, { asChild: true, children: /* @__PURE__ */ jsx43(ComposerSendButton, { tooltip, ...props, ref, children: props.children ?? /* @__PURE__ */ jsx43(SendHorizontalIcon, {}) }) });
4976
+ return /* @__PURE__ */ jsx46(composer_exports.Send, { asChild: true, children: /* @__PURE__ */ jsx46(ComposerSendButton, { tooltip, ...props, ref, children: props.children ?? /* @__PURE__ */ jsx46(SendHorizontalIcon, {}) }) });
4775
4977
  });
4776
4978
  ComposerSend.displayName = "ComposerSend";
4777
4979
  var ComposerCancelButton = withDefaults(TooltipIconButton, {
4778
4980
  variant: "default",
4779
4981
  className: "aui-composer-cancel"
4780
4982
  });
4781
- var ComposerCancel = forwardRef23((props, ref) => {
4983
+ var ComposerCancel = forwardRef26((props, ref) => {
4782
4984
  const {
4783
4985
  strings: { composer: { cancel: { tooltip = "Cancel" } = {} } = {} } = {}
4784
4986
  } = useThreadConfig();
4785
- return /* @__PURE__ */ jsx43(composer_exports.Cancel, { asChild: true, children: /* @__PURE__ */ jsx43(ComposerCancelButton, { tooltip, ...props, ref, children: props.children ?? /* @__PURE__ */ jsx43(CircleStopIcon, {}) }) });
4987
+ return /* @__PURE__ */ jsx46(composer_exports.Cancel, { asChild: true, children: /* @__PURE__ */ jsx46(ComposerCancelButton, { tooltip, ...props, ref, children: props.children ?? /* @__PURE__ */ jsx46(CircleStopIcon, {}) }) });
4786
4988
  });
4787
4989
  ComposerCancel.displayName = "ComposerCancel";
4788
4990
  var exports6 = {
@@ -4797,15 +4999,15 @@ var exports6 = {
4797
4999
  var composer_default = Object.assign(Composer, exports6);
4798
5000
 
4799
5001
  // src/ui/thread-welcome.tsx
4800
- import { forwardRef as forwardRef24 } from "react";
4801
- import { jsx as jsx44, jsxs as jsxs10 } from "react/jsx-runtime";
5002
+ import { forwardRef as forwardRef27 } from "react";
5003
+ import { jsx as jsx47, jsxs as jsxs10 } from "react/jsx-runtime";
4802
5004
  var ThreadWelcome = () => {
4803
5005
  return /* @__PURE__ */ jsxs10(ThreadWelcomeRoot, { children: [
4804
5006
  /* @__PURE__ */ jsxs10(ThreadWelcomeCenter, { children: [
4805
- /* @__PURE__ */ jsx44(ThreadWelcomeAvatar, {}),
4806
- /* @__PURE__ */ jsx44(ThreadWelcomeMessage, {})
5007
+ /* @__PURE__ */ jsx47(ThreadWelcomeAvatar, {}),
5008
+ /* @__PURE__ */ jsx47(ThreadWelcomeMessage, {})
4807
5009
  ] }),
4808
- /* @__PURE__ */ jsx44(ThreadWelcomeSuggestions, {})
5010
+ /* @__PURE__ */ jsx47(ThreadWelcomeSuggestions, {})
4809
5011
  ] });
4810
5012
  };
4811
5013
  ThreadWelcome.displayName = "ThreadWelcome";
@@ -4815,22 +5017,22 @@ var ThreadWelcomeRootStyled = withDefaults("div", {
4815
5017
  var ThreadWelcomeCenter = withDefaults("div", {
4816
5018
  className: "aui-thread-welcome-center"
4817
5019
  });
4818
- var ThreadWelcomeRoot = forwardRef24(
5020
+ var ThreadWelcomeRoot = forwardRef27(
4819
5021
  (props, ref) => {
4820
- return /* @__PURE__ */ jsx44(thread_exports.Empty, { children: /* @__PURE__ */ jsx44(ThreadWelcomeRootStyled, { ...props, ref }) });
5022
+ return /* @__PURE__ */ jsx47(thread_exports.Empty, { children: /* @__PURE__ */ jsx47(ThreadWelcomeRootStyled, { ...props, ref }) });
4821
5023
  }
4822
5024
  );
4823
5025
  ThreadWelcomeRoot.displayName = "ThreadWelcomeRoot";
4824
5026
  var ThreadWelcomeAvatar = () => {
4825
5027
  const { assistantAvatar: avatar = { fallback: "A" } } = useThreadConfig();
4826
- return /* @__PURE__ */ jsx44(Avatar, { ...avatar });
5028
+ return /* @__PURE__ */ jsx47(Avatar, { ...avatar });
4827
5029
  };
4828
5030
  var ThreadWelcomeMessageStyled = withDefaults("p", {
4829
5031
  className: "aui-thread-welcome-message"
4830
5032
  });
4831
- var ThreadWelcomeMessage = forwardRef24(({ message: messageProp, ...rest }, ref) => {
5033
+ var ThreadWelcomeMessage = forwardRef27(({ message: messageProp, ...rest }, ref) => {
4832
5034
  const { welcome: { message = "How can I help you today?" } = {} } = useThreadConfig();
4833
- return /* @__PURE__ */ jsx44(ThreadWelcomeMessageStyled, { ...rest, ref, children: messageProp ?? message });
5035
+ return /* @__PURE__ */ jsx47(ThreadWelcomeMessageStyled, { ...rest, ref, children: messageProp ?? message });
4834
5036
  });
4835
5037
  ThreadWelcomeMessage.displayName = "ThreadWelcomeMessage";
4836
5038
  var ThreadWelcomeSuggestionContainer = withDefaults("div", {
@@ -4842,21 +5044,21 @@ var ThreadWelcomeSuggestionStyled = withDefaults(thread_exports.Suggestion, {
4842
5044
  var ThreadWelcomeSuggestion = ({
4843
5045
  suggestion: { text, prompt }
4844
5046
  }) => {
4845
- return /* @__PURE__ */ jsx44(
5047
+ return /* @__PURE__ */ jsx47(
4846
5048
  ThreadWelcomeSuggestionStyled,
4847
5049
  {
4848
5050
  prompt,
4849
5051
  method: "replace",
4850
5052
  autoSend: true,
4851
- children: /* @__PURE__ */ jsx44("span", { className: "aui-thread-welcome-suggestion-text", children: text ?? prompt })
5053
+ children: /* @__PURE__ */ jsx47("span", { className: "aui-thread-welcome-suggestion-text", children: text ?? prompt })
4852
5054
  }
4853
5055
  );
4854
5056
  };
4855
5057
  var ThreadWelcomeSuggestions = () => {
4856
5058
  const { welcome: { suggestions } = {} } = useThreadConfig();
4857
- return /* @__PURE__ */ jsx44(ThreadWelcomeSuggestionContainer, { children: suggestions?.map((suggestion, idx) => {
5059
+ return /* @__PURE__ */ jsx47(ThreadWelcomeSuggestionContainer, { children: suggestions?.map((suggestion, idx) => {
4858
5060
  const key = `${suggestion.prompt}-${idx}`;
4859
- return /* @__PURE__ */ jsx44(ThreadWelcomeSuggestion, { suggestion }, key);
5061
+ return /* @__PURE__ */ jsx47(ThreadWelcomeSuggestion, { suggestion }, key);
4860
5062
  }) });
4861
5063
  };
4862
5064
  ThreadWelcomeSuggestions.displayName = "ThreadWelcomeSuggestions";
@@ -4871,12 +5073,12 @@ var exports7 = {
4871
5073
  var thread_welcome_default = Object.assign(ThreadWelcome, exports7);
4872
5074
 
4873
5075
  // src/ui/user-message.tsx
4874
- import { forwardRef as forwardRef26 } from "react";
5076
+ import { forwardRef as forwardRef29 } from "react";
4875
5077
 
4876
5078
  // src/ui/user-action-bar.tsx
4877
- import { forwardRef as forwardRef25 } from "react";
5079
+ import { forwardRef as forwardRef28 } from "react";
4878
5080
  import { PencilIcon } from "lucide-react";
4879
- import { jsx as jsx45 } from "react/jsx-runtime";
5081
+ import { jsx as jsx48 } from "react/jsx-runtime";
4880
5082
  var useAllowEdit = (ensureCapability = false) => {
4881
5083
  const { userMessage: { allowEdit = true } = {} } = useThreadConfig();
4882
5084
  const editSupported = useThread((t) => t.capabilities.edit);
@@ -4885,19 +5087,19 @@ var useAllowEdit = (ensureCapability = false) => {
4885
5087
  var UserActionBar = () => {
4886
5088
  const allowEdit = useAllowEdit(true);
4887
5089
  if (!allowEdit) return null;
4888
- return /* @__PURE__ */ jsx45(UserActionBarRoot, { hideWhenRunning: true, autohide: "not-last", children: /* @__PURE__ */ jsx45(UserActionBarEdit, {}) });
5090
+ return /* @__PURE__ */ jsx48(UserActionBarRoot, { hideWhenRunning: true, autohide: "not-last", children: /* @__PURE__ */ jsx48(UserActionBarEdit, {}) });
4889
5091
  };
4890
5092
  UserActionBar.displayName = "UserActionBar";
4891
5093
  var UserActionBarRoot = withDefaults(actionBar_exports.Root, {
4892
5094
  className: "aui-user-action-bar-root"
4893
5095
  });
4894
5096
  UserActionBarRoot.displayName = "UserActionBarRoot";
4895
- var UserActionBarEdit = forwardRef25((props, ref) => {
5097
+ var UserActionBarEdit = forwardRef28((props, ref) => {
4896
5098
  const {
4897
5099
  strings: { userMessage: { edit: { tooltip = "Edit" } = {} } = {} } = {}
4898
5100
  } = useThreadConfig();
4899
5101
  const allowEdit = useAllowEdit();
4900
- return /* @__PURE__ */ jsx45(actionBar_exports.Edit, { disabled: !allowEdit, asChild: true, children: /* @__PURE__ */ jsx45(TooltipIconButton, { tooltip, ...props, ref, children: props.children ?? /* @__PURE__ */ jsx45(PencilIcon, {}) }) });
5102
+ return /* @__PURE__ */ jsx48(actionBar_exports.Edit, { disabled: !allowEdit, asChild: true, children: /* @__PURE__ */ jsx48(TooltipIconButton, { tooltip, ...props, ref, children: props.children ?? /* @__PURE__ */ jsx48(PencilIcon, {}) }) });
4901
5103
  });
4902
5104
  UserActionBarEdit.displayName = "UserActionBarEdit";
4903
5105
  var exports8 = {
@@ -4929,13 +5131,13 @@ var user_message_attachment_default = Object.assign(
4929
5131
  );
4930
5132
 
4931
5133
  // src/ui/user-message.tsx
4932
- import { jsx as jsx46, jsxs as jsxs12 } from "react/jsx-runtime";
5134
+ import { jsx as jsx49, jsxs as jsxs12 } from "react/jsx-runtime";
4933
5135
  var UserMessage = () => {
4934
5136
  return /* @__PURE__ */ jsxs12(UserMessageRoot, { children: [
4935
- /* @__PURE__ */ jsx46(UserMessageAttachments, {}),
4936
- /* @__PURE__ */ jsx46(user_action_bar_default, {}),
4937
- /* @__PURE__ */ jsx46(UserMessageContent, {}),
4938
- /* @__PURE__ */ jsx46(branch_picker_default, {})
5137
+ /* @__PURE__ */ jsx49(UserMessageAttachments, {}),
5138
+ /* @__PURE__ */ jsx49(user_action_bar_default, {}),
5139
+ /* @__PURE__ */ jsx49(UserMessageContent, {}),
5140
+ /* @__PURE__ */ jsx49(branch_picker_default, {})
4939
5141
  ] });
4940
5142
  };
4941
5143
  UserMessage.displayName = "UserMessage";
@@ -4946,9 +5148,9 @@ UserMessageRoot.displayName = "UserMessageRoot";
4946
5148
  var UserMessageContentWrapper = withDefaults("div", {
4947
5149
  className: "aui-user-message-content"
4948
5150
  });
4949
- var UserMessageContent = forwardRef26(
5151
+ var UserMessageContent = forwardRef29(
4950
5152
  ({ components, ...props }, ref) => {
4951
- return /* @__PURE__ */ jsx46(UserMessageContentWrapper, { ...props, ref, children: /* @__PURE__ */ jsx46(
5153
+ return /* @__PURE__ */ jsx49(UserMessageContentWrapper, { ...props, ref, children: /* @__PURE__ */ jsx49(
4952
5154
  message_exports.Content,
4953
5155
  {
4954
5156
  components: {
@@ -4966,7 +5168,7 @@ var UserMessageAttachmentsContainer = withDefaults("div", {
4966
5168
  var UserMessageAttachments = ({
4967
5169
  components
4968
5170
  }) => {
4969
- return /* @__PURE__ */ jsx46(message_exports.If, { hasAttachments: true, children: /* @__PURE__ */ jsx46(UserMessageAttachmentsContainer, { children: /* @__PURE__ */ jsx46(
5171
+ return /* @__PURE__ */ jsx49(message_exports.If, { hasAttachments: true, children: /* @__PURE__ */ jsx49(UserMessageAttachmentsContainer, { children: /* @__PURE__ */ jsx49(
4970
5172
  message_exports.Attachments,
4971
5173
  {
4972
5174
  components: {
@@ -4984,14 +5186,14 @@ var exports10 = {
4984
5186
  var user_message_default = Object.assign(UserMessage, exports10);
4985
5187
 
4986
5188
  // src/ui/edit-composer.tsx
4987
- import { forwardRef as forwardRef27 } from "react";
4988
- import { jsx as jsx47, jsxs as jsxs13 } from "react/jsx-runtime";
5189
+ import { forwardRef as forwardRef30 } from "react";
5190
+ import { jsx as jsx50, jsxs as jsxs13 } from "react/jsx-runtime";
4989
5191
  var EditComposer = () => {
4990
5192
  return /* @__PURE__ */ jsxs13(EditComposerRoot, { children: [
4991
- /* @__PURE__ */ jsx47(EditComposerInput, {}),
5193
+ /* @__PURE__ */ jsx50(EditComposerInput, {}),
4992
5194
  /* @__PURE__ */ jsxs13(EditComposerFooter, { children: [
4993
- /* @__PURE__ */ jsx47(EditComposerCancel, {}),
4994
- /* @__PURE__ */ jsx47(EditComposerSend, {})
5195
+ /* @__PURE__ */ jsx50(EditComposerCancel, {}),
5196
+ /* @__PURE__ */ jsx50(EditComposerSend, {})
4995
5197
  ] })
4996
5198
  ] });
4997
5199
  };
@@ -5008,23 +5210,23 @@ var EditComposerFooter = withDefaults("div", {
5008
5210
  className: "aui-edit-composer-footer"
5009
5211
  });
5010
5212
  EditComposerFooter.displayName = "EditComposerFooter";
5011
- var EditComposerCancel = forwardRef27(
5213
+ var EditComposerCancel = forwardRef30(
5012
5214
  (props, ref) => {
5013
5215
  const {
5014
5216
  strings: {
5015
5217
  editComposer: { cancel: { label = "Cancel" } = {} } = {}
5016
5218
  } = {}
5017
5219
  } = useThreadConfig();
5018
- return /* @__PURE__ */ jsx47(composer_exports.Cancel, { asChild: true, children: /* @__PURE__ */ jsx47(Button, { variant: "ghost", ...props, ref, children: props.children ?? label }) });
5220
+ return /* @__PURE__ */ jsx50(composer_exports.Cancel, { asChild: true, children: /* @__PURE__ */ jsx50(Button, { variant: "ghost", ...props, ref, children: props.children ?? label }) });
5019
5221
  }
5020
5222
  );
5021
5223
  EditComposerCancel.displayName = "EditComposerCancel";
5022
- var EditComposerSend = forwardRef27(
5224
+ var EditComposerSend = forwardRef30(
5023
5225
  (props, ref) => {
5024
5226
  const {
5025
5227
  strings: { editComposer: { send: { label = "Send" } = {} } = {} } = {}
5026
5228
  } = useThreadConfig();
5027
- return /* @__PURE__ */ jsx47(composer_exports.Send, { asChild: true, children: /* @__PURE__ */ jsx47(Button, { ...props, ref, children: props.children ?? label }) });
5229
+ return /* @__PURE__ */ jsx50(composer_exports.Send, { asChild: true, children: /* @__PURE__ */ jsx50(Button, { ...props, ref, children: props.children ?? label }) });
5028
5230
  }
5029
5231
  );
5030
5232
  EditComposerSend.displayName = "EditComposerSend";
@@ -5038,23 +5240,23 @@ var exports11 = {
5038
5240
  var edit_composer_default = Object.assign(EditComposer, exports11);
5039
5241
 
5040
5242
  // src/ui/thread.tsx
5041
- import { jsx as jsx48, jsxs as jsxs14 } from "react/jsx-runtime";
5243
+ import { jsx as jsx51, jsxs as jsxs14 } from "react/jsx-runtime";
5042
5244
  var Thread = (config) => {
5043
- return /* @__PURE__ */ jsx48(ThreadRoot, { config, children: /* @__PURE__ */ jsxs14(ThreadViewport, { children: [
5044
- /* @__PURE__ */ jsx48(thread_welcome_default, {}),
5045
- /* @__PURE__ */ jsx48(ThreadMessages, {}),
5245
+ return /* @__PURE__ */ jsx51(ThreadRoot, { config, children: /* @__PURE__ */ jsxs14(ThreadViewport, { children: [
5246
+ /* @__PURE__ */ jsx51(thread_welcome_default, {}),
5247
+ /* @__PURE__ */ jsx51(ThreadMessages, {}),
5046
5248
  /* @__PURE__ */ jsxs14(ThreadViewportFooter, { children: [
5047
- /* @__PURE__ */ jsx48(ThreadScrollToBottom, {}),
5048
- /* @__PURE__ */ jsx48(composer_default, {})
5249
+ /* @__PURE__ */ jsx51(ThreadScrollToBottom, {}),
5250
+ /* @__PURE__ */ jsx51(composer_default, {})
5049
5251
  ] })
5050
5252
  ] }) });
5051
5253
  };
5052
5254
  var ThreadRootStyled = withDefaults(thread_exports.Root, {
5053
5255
  className: "aui-root aui-thread-root"
5054
5256
  });
5055
- var ThreadRoot = forwardRef28(
5257
+ var ThreadRoot = forwardRef31(
5056
5258
  ({ config, ...props }, ref) => {
5057
- return /* @__PURE__ */ jsx48(ThreadConfigProvider, { config, children: /* @__PURE__ */ jsx48(ThreadRootStyled, { ...props, ref }) });
5259
+ return /* @__PURE__ */ jsx51(ThreadConfigProvider, { config, children: /* @__PURE__ */ jsx51(ThreadRootStyled, { ...props, ref }) });
5058
5260
  }
5059
5261
  );
5060
5262
  ThreadRoot.displayName = "ThreadRoot";
@@ -5068,7 +5270,7 @@ var ThreadViewportFooter = withDefaults("div", {
5068
5270
  ThreadViewportFooter.displayName = "ThreadViewportFooter";
5069
5271
  var SystemMessage = () => null;
5070
5272
  var ThreadMessages = ({ components, ...rest }) => {
5071
- return /* @__PURE__ */ jsx48(
5273
+ return /* @__PURE__ */ jsx51(
5072
5274
  thread_exports.Messages,
5073
5275
  {
5074
5276
  components: {
@@ -5086,13 +5288,13 @@ var ThreadScrollToBottomIconButton = withDefaults(TooltipIconButton, {
5086
5288
  variant: "outline",
5087
5289
  className: "aui-thread-scroll-to-bottom"
5088
5290
  });
5089
- var ThreadScrollToBottom = forwardRef28((props, ref) => {
5291
+ var ThreadScrollToBottom = forwardRef31((props, ref) => {
5090
5292
  const {
5091
5293
  strings: {
5092
5294
  thread: { scrollToBottom: { tooltip = "Scroll to bottom" } = {} } = {}
5093
5295
  } = {}
5094
5296
  } = useThreadConfig();
5095
- return /* @__PURE__ */ jsx48(thread_exports.ScrollToBottom, { asChild: true, children: /* @__PURE__ */ jsx48(ThreadScrollToBottomIconButton, { tooltip, ...props, ref, children: props.children ?? /* @__PURE__ */ jsx48(ArrowDownIcon, {}) }) });
5297
+ return /* @__PURE__ */ jsx51(thread_exports.ScrollToBottom, { asChild: true, children: /* @__PURE__ */ jsx51(ThreadScrollToBottomIconButton, { tooltip, ...props, ref, children: props.children ?? /* @__PURE__ */ jsx51(ArrowDownIcon, {}) }) });
5096
5298
  });
5097
5299
  ThreadScrollToBottom.displayName = "ThreadScrollToBottom";
5098
5300
  var exports12 = {
@@ -5105,20 +5307,20 @@ var exports12 = {
5105
5307
  var thread_default = Object.assign(Thread, exports12);
5106
5308
 
5107
5309
  // src/ui/assistant-modal.tsx
5108
- import { Fragment as Fragment6, jsx as jsx49, jsxs as jsxs15 } from "react/jsx-runtime";
5310
+ import { Fragment as Fragment6, jsx as jsx52, jsxs as jsxs15 } from "react/jsx-runtime";
5109
5311
  var AssistantModal = (config) => {
5110
5312
  return /* @__PURE__ */ jsxs15(AssistantModalRoot, { config, children: [
5111
- /* @__PURE__ */ jsx49(AssistantModalTrigger, {}),
5112
- /* @__PURE__ */ jsx49(AssistantModalContent, { children: /* @__PURE__ */ jsx49(thread_default, {}) })
5313
+ /* @__PURE__ */ jsx52(AssistantModalTrigger, {}),
5314
+ /* @__PURE__ */ jsx52(AssistantModalContent, { children: /* @__PURE__ */ jsx52(thread_default, {}) })
5113
5315
  ] });
5114
5316
  };
5115
5317
  AssistantModal.displayName = "AssistantModal";
5116
5318
  var AssistantModalRoot = ({ config, ...props }) => {
5117
- return /* @__PURE__ */ jsx49(ThreadConfigProvider, { config, children: /* @__PURE__ */ jsx49(assistantModal_exports.Root, { ...props }) });
5319
+ return /* @__PURE__ */ jsx52(ThreadConfigProvider, { config, children: /* @__PURE__ */ jsx52(assistantModal_exports.Root, { ...props }) });
5118
5320
  };
5119
5321
  AssistantModalRoot.displayName = "AssistantModalRoot";
5120
- var AssistantModalTrigger = forwardRef29((props, ref) => {
5121
- return /* @__PURE__ */ jsx49(AssistantModalAnchor, { children: /* @__PURE__ */ jsx49(assistantModal_exports.Trigger, { asChild: true, children: /* @__PURE__ */ jsx49(AssistantModalButton, { ...props, ref }) }) });
5322
+ var AssistantModalTrigger = forwardRef32((props, ref) => {
5323
+ return /* @__PURE__ */ jsx52(AssistantModalAnchor, { children: /* @__PURE__ */ jsx52(assistantModal_exports.Trigger, { asChild: true, children: /* @__PURE__ */ jsx52(AssistantModalButton, { ...props, ref }) }) });
5122
5324
  });
5123
5325
  AssistantModalTrigger.displayName = "AssistantModalTrigger";
5124
5326
  var AssistantModalAnchor = withDefaults(assistantModal_exports.Anchor, {
@@ -5129,7 +5331,7 @@ var ModalButtonStyled = withDefaults(TooltipIconButton, {
5129
5331
  variant: "default",
5130
5332
  className: "aui-modal-button"
5131
5333
  });
5132
- var AssistantModalButton = forwardRef29(({ "data-state": state, ...rest }, ref) => {
5334
+ var AssistantModalButton = forwardRef32(({ "data-state": state, ...rest }, ref) => {
5133
5335
  const {
5134
5336
  strings: {
5135
5337
  assistantModal: {
@@ -5143,7 +5345,7 @@ var AssistantModalButton = forwardRef29(({ "data-state": state, ...rest }, ref)
5143
5345
  } = {}
5144
5346
  } = useThreadConfig();
5145
5347
  const tooltip = state === "open" ? openTooltip : closedTooltip;
5146
- return /* @__PURE__ */ jsx49(
5348
+ return /* @__PURE__ */ jsx52(
5147
5349
  ModalButtonStyled,
5148
5350
  {
5149
5351
  side: "left",
@@ -5152,14 +5354,14 @@ var AssistantModalButton = forwardRef29(({ "data-state": state, ...rest }, ref)
5152
5354
  ...rest,
5153
5355
  ref,
5154
5356
  children: rest.children ?? /* @__PURE__ */ jsxs15(Fragment6, { children: [
5155
- /* @__PURE__ */ jsx49(
5357
+ /* @__PURE__ */ jsx52(
5156
5358
  BotIcon,
5157
5359
  {
5158
5360
  "data-state": state,
5159
5361
  className: "aui-modal-button-closed-icon"
5160
5362
  }
5161
5363
  ),
5162
- /* @__PURE__ */ jsx49(
5364
+ /* @__PURE__ */ jsx52(
5163
5365
  ChevronDownIcon,
5164
5366
  {
5165
5367
  "data-state": state,
@@ -5230,6 +5432,8 @@ export {
5230
5432
  toLanguageModelTools,
5231
5433
  useActionBarCopy,
5232
5434
  useActionBarEdit,
5435
+ useActionBarFeedbackNegative,
5436
+ useActionBarFeedbackPositive,
5233
5437
  useActionBarReload,
5234
5438
  useActionBarSpeak,
5235
5439
  useActionBarStopSpeaking,