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