@assistant-ui/react 0.5.59 → 0.5.60

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -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,