@assistant-ui/react 0.5.19 → 0.5.21

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.
Files changed (40) hide show
  1. package/dist/AssistantTypes-D93BmqD5.d.mts +160 -0
  2. package/dist/AssistantTypes-D93BmqD5.d.ts +160 -0
  3. package/dist/Thread-BbLf1cc4.d.mts +156 -0
  4. package/dist/Thread-jfAlPLli.d.ts +156 -0
  5. package/dist/chunk-2RKUKZSZ.mjs +761 -0
  6. package/dist/chunk-2RKUKZSZ.mjs.map +1 -0
  7. package/dist/chunk-BJPOCE4O.mjs +11 -0
  8. package/dist/chunk-BJPOCE4O.mjs.map +1 -0
  9. package/dist/chunk-QBS6JLLN.mjs +63 -0
  10. package/dist/chunk-QBS6JLLN.mjs.map +1 -0
  11. package/dist/chunk-V66MVXBH.mjs +608 -0
  12. package/dist/chunk-V66MVXBH.mjs.map +1 -0
  13. package/dist/edge.d.mts +5 -90
  14. package/dist/edge.d.ts +5 -90
  15. package/dist/edge.js +1 -0
  16. package/dist/edge.js.map +1 -1
  17. package/dist/edge.mjs +49 -799
  18. package/dist/edge.mjs.map +1 -1
  19. package/dist/index.d.mts +17 -293
  20. package/dist/index.d.ts +17 -293
  21. package/dist/index.js +341 -283
  22. package/dist/index.js.map +1 -1
  23. package/dist/index.mjs +313 -1601
  24. package/dist/index.mjs.map +1 -1
  25. package/dist/internal.d.mts +9 -0
  26. package/dist/internal.d.ts +9 -0
  27. package/dist/internal.js +620 -0
  28. package/dist/internal.js.map +1 -0
  29. package/dist/internal.mjs +24 -0
  30. package/dist/internal.mjs.map +1 -0
  31. package/dist/styles/index.css +3 -3
  32. package/dist/styles/index.css.map +1 -1
  33. package/dist/styles/tailwindcss/thread.css +1 -1
  34. package/dist/tailwindcss/index.js +1 -0
  35. package/dist/tailwindcss/index.js.map +1 -1
  36. package/dist/tailwindcss/index.mjs +3 -0
  37. package/dist/tailwindcss/index.mjs.map +1 -1
  38. package/internal/README.md +1 -0
  39. package/internal/package.json +5 -0
  40. package/package.json +12 -1
@@ -0,0 +1,9 @@
1
+ export { B as BaseAssistantRuntime, M as MessageRepository, P as ProxyConfigProvider, f as TooltipIconButton, g as generateId, u as useSmooth, h as useSmoothStatus, w as withSmoothContextProvider } from './Thread-BbLf1cc4.mjs';
2
+ import './AssistantTypes-D93BmqD5.mjs';
3
+ import 'zod';
4
+ import 'json-schema';
5
+ import '@ai-sdk/provider';
6
+ import 'react';
7
+ import 'class-variance-authority';
8
+ import 'class-variance-authority/types';
9
+ import '@radix-ui/react-primitive';
@@ -0,0 +1,9 @@
1
+ export { B as BaseAssistantRuntime, M as MessageRepository, P as ProxyConfigProvider, f as TooltipIconButton, g as generateId, u as useSmooth, h as useSmoothStatus, w as withSmoothContextProvider } from './Thread-jfAlPLli.js';
2
+ import './AssistantTypes-D93BmqD5.js';
3
+ import 'zod';
4
+ import 'json-schema';
5
+ import '@ai-sdk/provider';
6
+ import 'react';
7
+ import 'class-variance-authority';
8
+ import 'class-variance-authority/types';
9
+ import '@radix-ui/react-primitive';
@@ -0,0 +1,620 @@
1
+ "use client";
2
+ "use strict";
3
+ var __create = Object.create;
4
+ var __defProp = Object.defineProperty;
5
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
6
+ var __getOwnPropNames = Object.getOwnPropertyNames;
7
+ var __getProtoOf = Object.getPrototypeOf;
8
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
9
+ var __export = (target, all) => {
10
+ for (var name in all)
11
+ __defProp(target, name, { get: all[name], enumerable: true });
12
+ };
13
+ var __copyProps = (to, from, except, desc) => {
14
+ if (from && typeof from === "object" || typeof from === "function") {
15
+ for (let key of __getOwnPropNames(from))
16
+ if (!__hasOwnProp.call(to, key) && key !== except)
17
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
18
+ }
19
+ return to;
20
+ };
21
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
22
+ // If the importer is in node compatibility mode or this is not an ESM
23
+ // file that has been converted to a CommonJS file using a Babel-
24
+ // compatible transform (i.e. "__esModule" has not been set), then set
25
+ // "default" to the CommonJS "module.exports" for node compatibility.
26
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
27
+ mod
28
+ ));
29
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
30
+
31
+ // src/internal.ts
32
+ var internal_exports = {};
33
+ __export(internal_exports, {
34
+ BaseAssistantRuntime: () => BaseAssistantRuntime,
35
+ MessageRepository: () => MessageRepository,
36
+ ProxyConfigProvider: () => ProxyConfigProvider,
37
+ TooltipIconButton: () => TooltipIconButton,
38
+ generateId: () => generateId,
39
+ useSmooth: () => useSmooth,
40
+ useSmoothStatus: () => useSmoothStatus,
41
+ withSmoothContextProvider: () => withSmoothContextProvider
42
+ });
43
+ module.exports = __toCommonJS(internal_exports);
44
+
45
+ // src/types/ModelConfigTypes.ts
46
+ var import_zod = require("zod");
47
+ var LanguageModelV1CallSettingsSchema = import_zod.z.object({
48
+ maxTokens: import_zod.z.number().int().positive().optional(),
49
+ temperature: import_zod.z.number().optional(),
50
+ topP: import_zod.z.number().optional(),
51
+ presencePenalty: import_zod.z.number().optional(),
52
+ frequencyPenalty: import_zod.z.number().optional(),
53
+ seed: import_zod.z.number().int().optional(),
54
+ headers: import_zod.z.record(import_zod.z.string().optional()).optional()
55
+ });
56
+ var LanguageModelConfigSchema = import_zod.z.object({
57
+ apiKey: import_zod.z.string().optional(),
58
+ baseUrl: import_zod.z.string().optional(),
59
+ modelName: import_zod.z.string().optional()
60
+ });
61
+ var mergeModelConfigs = (configSet) => {
62
+ const configs = Array.from(configSet).map((c) => c.getModelConfig()).sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0));
63
+ return configs.reduce((acc, config) => {
64
+ if (config.system) {
65
+ if (acc.system) {
66
+ acc.system += `
67
+
68
+ ${config.system}`;
69
+ } else {
70
+ acc.system = config.system;
71
+ }
72
+ }
73
+ if (config.tools) {
74
+ for (const [name, tool] of Object.entries(config.tools)) {
75
+ if (acc.tools?.[name]) {
76
+ throw new Error(
77
+ `You tried to define a tool with the name ${name}, but it already exists.`
78
+ );
79
+ }
80
+ if (!acc.tools) acc.tools = {};
81
+ acc.tools[name] = tool;
82
+ }
83
+ }
84
+ if (config.config) {
85
+ acc.config = {
86
+ ...acc.config,
87
+ ...config.config
88
+ };
89
+ }
90
+ if (config.callSettings) {
91
+ acc.callSettings = {
92
+ ...acc.callSettings,
93
+ ...config.callSettings
94
+ };
95
+ }
96
+ return acc;
97
+ }, {});
98
+ };
99
+
100
+ // src/utils/ProxyConfigProvider.ts
101
+ var ProxyConfigProvider = class {
102
+ _providers = /* @__PURE__ */ new Set();
103
+ getModelConfig() {
104
+ return mergeModelConfigs(this._providers);
105
+ }
106
+ registerModelConfigProvider(provider) {
107
+ this._providers.add(provider);
108
+ return () => {
109
+ this._providers.delete(provider);
110
+ };
111
+ }
112
+ };
113
+
114
+ // src/utils/idUtils.tsx
115
+ var import_non_secure = require("nanoid/non-secure");
116
+ var generateId = (0, import_non_secure.customAlphabet)(
117
+ "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",
118
+ 7
119
+ );
120
+ var optimisticPrefix = "__optimistic__";
121
+ var generateOptimisticId = () => `${optimisticPrefix}${generateId()}`;
122
+
123
+ // src/runtimes/edge/converters/fromCoreMessage.ts
124
+ var fromCoreMessage = (message, {
125
+ id = generateId(),
126
+ status = { type: "complete", reason: "unknown" }
127
+ } = {}) => {
128
+ const commonProps = {
129
+ id,
130
+ createdAt: /* @__PURE__ */ new Date()
131
+ };
132
+ const role = message.role;
133
+ switch (role) {
134
+ case "assistant":
135
+ return {
136
+ ...commonProps,
137
+ role,
138
+ content: message.content.map((part) => {
139
+ if (part.type === "tool-call") {
140
+ return {
141
+ ...part,
142
+ argsText: JSON.stringify(part.args)
143
+ };
144
+ }
145
+ return part;
146
+ }),
147
+ status
148
+ };
149
+ case "user":
150
+ return {
151
+ ...commonProps,
152
+ role,
153
+ content: message.content
154
+ };
155
+ case "system":
156
+ return {
157
+ ...commonProps,
158
+ role,
159
+ content: message.content
160
+ };
161
+ default: {
162
+ const unsupportedRole = role;
163
+ throw new Error(`Unknown message role: ${unsupportedRole}`);
164
+ }
165
+ }
166
+ };
167
+
168
+ // src/runtimes/utils/MessageRepository.tsx
169
+ var findHead = (message) => {
170
+ if (message.next) return findHead(message.next);
171
+ return message;
172
+ };
173
+ var MessageRepository = class {
174
+ messages = /* @__PURE__ */ new Map();
175
+ // message_id -> item
176
+ head = null;
177
+ root = {
178
+ children: []
179
+ };
180
+ performOp(newParent, child, operation) {
181
+ const parentOrRoot = child.prev ?? this.root;
182
+ const newParentOrRoot = newParent ?? this.root;
183
+ if (operation === "relink" && parentOrRoot === newParentOrRoot) return;
184
+ if (operation !== "link") {
185
+ parentOrRoot.children = parentOrRoot.children.filter(
186
+ (m) => m !== child.current.id
187
+ );
188
+ if (child.prev?.next === child) {
189
+ const fallbackId = child.prev.children.at(-1);
190
+ const fallback = fallbackId ? this.messages.get(fallbackId) : null;
191
+ if (fallback === void 0) {
192
+ throw new Error(
193
+ "MessageRepository(performOp/cut): Fallback sibling message not found. This is likely an internal bug in assistant-ui."
194
+ );
195
+ }
196
+ child.prev.next = fallback;
197
+ }
198
+ }
199
+ if (operation !== "cut") {
200
+ newParentOrRoot.children = [
201
+ ...newParentOrRoot.children,
202
+ child.current.id
203
+ ];
204
+ if (newParent && (findHead(child) === this.head || newParent.next === null)) {
205
+ newParent.next = child;
206
+ }
207
+ child.prev = newParent;
208
+ }
209
+ }
210
+ getMessages() {
211
+ const messages = new Array(this.head?.level ?? 0);
212
+ for (let current = this.head; current; current = current.prev) {
213
+ messages[current.level] = current.current;
214
+ }
215
+ return messages;
216
+ }
217
+ addOrUpdateMessage(parentId, message) {
218
+ const existingItem = this.messages.get(message.id);
219
+ const prev = parentId ? this.messages.get(parentId) : null;
220
+ if (prev === void 0)
221
+ throw new Error(
222
+ "MessageRepository(addOrUpdateMessage): Parent message not found. This is likely an internal bug in assistant-ui."
223
+ );
224
+ if (existingItem) {
225
+ existingItem.current = message;
226
+ this.performOp(prev, existingItem, "relink");
227
+ return;
228
+ }
229
+ const newItem = {
230
+ prev,
231
+ current: message,
232
+ next: null,
233
+ children: [],
234
+ level: prev ? prev.level + 1 : 0
235
+ };
236
+ this.messages.set(message.id, newItem);
237
+ this.performOp(prev, newItem, "link");
238
+ if (this.head === prev) {
239
+ this.head = newItem;
240
+ }
241
+ }
242
+ getMessage(messageId) {
243
+ const message = this.messages.get(messageId);
244
+ if (!message)
245
+ throw new Error(
246
+ "MessageRepository(updateMessage): Message not found. This is likely an internal bug in assistant-ui."
247
+ );
248
+ return {
249
+ parentId: message.prev?.current.id ?? null,
250
+ message: message.current
251
+ };
252
+ }
253
+ appendOptimisticMessage(parentId, message) {
254
+ let optimisticId;
255
+ do {
256
+ optimisticId = generateOptimisticId();
257
+ } while (this.messages.has(optimisticId));
258
+ this.addOrUpdateMessage(
259
+ parentId,
260
+ fromCoreMessage(message, {
261
+ id: optimisticId,
262
+ status: { type: "running" }
263
+ })
264
+ );
265
+ return optimisticId;
266
+ }
267
+ deleteMessage(messageId, replacementId) {
268
+ const message = this.messages.get(messageId);
269
+ if (!message)
270
+ throw new Error(
271
+ "MessageRepository(deleteMessage): Optimistic message not found. This is likely an internal bug in assistant-ui."
272
+ );
273
+ const replacement = replacementId === void 0 ? message.prev : replacementId === null ? null : this.messages.get(replacementId);
274
+ if (replacement === void 0)
275
+ throw new Error(
276
+ "MessageRepository(deleteMessage): Replacement not found. This is likely an internal bug in assistant-ui."
277
+ );
278
+ for (const child of message.children) {
279
+ const childMessage = this.messages.get(child);
280
+ if (!childMessage)
281
+ throw new Error(
282
+ "MessageRepository(deleteMessage): Child message not found. This is likely an internal bug in assistant-ui."
283
+ );
284
+ this.performOp(replacement, childMessage, "relink");
285
+ }
286
+ this.performOp(null, message, "cut");
287
+ this.messages.delete(messageId);
288
+ if (this.head === message) {
289
+ this.head = replacement ? findHead(replacement) : null;
290
+ }
291
+ }
292
+ getBranches(messageId) {
293
+ const message = this.messages.get(messageId);
294
+ if (!message)
295
+ throw new Error(
296
+ "MessageRepository(getBranches): Message not found. This is likely an internal bug in assistant-ui."
297
+ );
298
+ const { children } = message.prev ?? this.root;
299
+ return children;
300
+ }
301
+ switchToBranch(messageId) {
302
+ const message = this.messages.get(messageId);
303
+ if (!message)
304
+ throw new Error(
305
+ "MessageRepository(switchToBranch): Branch not found. This is likely an internal bug in assistant-ui."
306
+ );
307
+ if (message.prev) {
308
+ message.prev.next = message;
309
+ }
310
+ this.head = findHead(message);
311
+ }
312
+ resetHead(messageId) {
313
+ if (messageId === null) {
314
+ this.head = null;
315
+ return;
316
+ }
317
+ const message = this.messages.get(messageId);
318
+ if (!message)
319
+ throw new Error(
320
+ "MessageRepository(resetHead): Branch not found. This is likely an internal bug in assistant-ui."
321
+ );
322
+ this.head = message;
323
+ for (let current = message; current; current = current.prev) {
324
+ if (current.prev) {
325
+ current.prev.next = current;
326
+ }
327
+ }
328
+ }
329
+ };
330
+
331
+ // src/runtimes/core/BaseAssistantRuntime.tsx
332
+ var BaseAssistantRuntime = class {
333
+ constructor(_thread) {
334
+ this._thread = _thread;
335
+ this._thread = _thread;
336
+ }
337
+ get thread() {
338
+ return this._thread;
339
+ }
340
+ set thread(thread) {
341
+ this._thread = thread;
342
+ this.subscriptionHandler();
343
+ }
344
+ _subscriptions = /* @__PURE__ */ new Set();
345
+ subscribe(callback) {
346
+ this._subscriptions.add(callback);
347
+ return () => this._subscriptions.delete(callback);
348
+ }
349
+ subscriptionHandler = () => {
350
+ for (const callback of this._subscriptions) callback();
351
+ };
352
+ };
353
+
354
+ // src/utils/smooth/useSmooth.tsx
355
+ var import_react4 = require("react");
356
+
357
+ // src/context/react/MessageContext.ts
358
+ var import_react = require("react");
359
+ var MessageContext = (0, import_react.createContext)(null);
360
+ function useMessageContext(options) {
361
+ const context = (0, import_react.useContext)(MessageContext);
362
+ if (!options?.optional && !context)
363
+ throw new Error(
364
+ "This component can only be used inside a component passed to <ThreadPrimitive.Messages components={...} />."
365
+ );
366
+ return context;
367
+ }
368
+
369
+ // src/context/react/ContentPartContext.ts
370
+ var import_react2 = require("react");
371
+ var ContentPartContext = (0, import_react2.createContext)(
372
+ null
373
+ );
374
+ function useContentPartContext(options) {
375
+ const context = (0, import_react2.useContext)(ContentPartContext);
376
+ if (!options?.optional && !context)
377
+ throw new Error(
378
+ "This component can only be used inside a component passed to <MessagePrimitive.Content components={...} >."
379
+ );
380
+ return context;
381
+ }
382
+
383
+ // src/utils/smooth/SmoothContext.tsx
384
+ var import_react3 = require("react");
385
+ var import_zustand = require("zustand");
386
+ var import_jsx_runtime = require("react/jsx-runtime");
387
+ var SmoothContext = (0, import_react3.createContext)(null);
388
+ var makeSmoothContext = (initialState) => {
389
+ const useSmoothStatus2 = (0, import_zustand.create)(() => initialState);
390
+ return { useSmoothStatus: useSmoothStatus2 };
391
+ };
392
+ var SmoothContextProvider = ({ children }) => {
393
+ const outer = useSmoothContext({ optional: true });
394
+ const { useContentPart } = useContentPartContext();
395
+ const [context] = (0, import_react3.useState)(
396
+ () => makeSmoothContext(useContentPart.getState().status)
397
+ );
398
+ if (outer) return children;
399
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(SmoothContext.Provider, { value: context, children });
400
+ };
401
+ var withSmoothContextProvider = (Component) => {
402
+ const Wrapped = (0, import_react3.forwardRef)((props, ref) => {
403
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(SmoothContextProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Component, { ...props, ref }) });
404
+ });
405
+ Wrapped.displayName = Component.displayName;
406
+ return Wrapped;
407
+ };
408
+ function useSmoothContext(options) {
409
+ const context = (0, import_react3.useContext)(SmoothContext);
410
+ if (!options?.optional && !context)
411
+ throw new Error(
412
+ "This component must be used within a SmoothContextProvider."
413
+ );
414
+ return context;
415
+ }
416
+ var useSmoothStatus = () => {
417
+ const { useSmoothStatus: useSmoothStatus2 } = useSmoothContext();
418
+ return useSmoothStatus2();
419
+ };
420
+
421
+ // src/utils/smooth/useSmooth.tsx
422
+ var import_react_use_callback_ref = require("@radix-ui/react-use-callback-ref");
423
+ var TextStreamAnimator = class {
424
+ constructor(currentText, setText) {
425
+ this.currentText = currentText;
426
+ this.setText = setText;
427
+ }
428
+ animationFrameId = null;
429
+ lastUpdateTime = Date.now();
430
+ targetText = "";
431
+ start() {
432
+ if (this.animationFrameId !== null) return;
433
+ this.lastUpdateTime = Date.now();
434
+ this.animate();
435
+ }
436
+ stop() {
437
+ if (this.animationFrameId !== null) {
438
+ cancelAnimationFrame(this.animationFrameId);
439
+ this.animationFrameId = null;
440
+ }
441
+ }
442
+ animate = () => {
443
+ const currentTime = Date.now();
444
+ const deltaTime = currentTime - this.lastUpdateTime;
445
+ let timeToConsume = deltaTime;
446
+ const remainingChars = this.targetText.length - this.currentText.length;
447
+ const baseTimePerChar = Math.min(5, 250 / remainingChars);
448
+ let charsToAdd = 0;
449
+ while (timeToConsume >= baseTimePerChar && charsToAdd < remainingChars) {
450
+ charsToAdd++;
451
+ timeToConsume -= baseTimePerChar;
452
+ }
453
+ if (charsToAdd !== remainingChars) {
454
+ this.animationFrameId = requestAnimationFrame(this.animate);
455
+ } else {
456
+ this.animationFrameId = null;
457
+ }
458
+ if (charsToAdd === 0) return;
459
+ this.currentText = this.targetText.slice(
460
+ 0,
461
+ this.currentText.length + charsToAdd
462
+ );
463
+ this.lastUpdateTime = currentTime - timeToConsume;
464
+ this.setText(this.currentText);
465
+ };
466
+ };
467
+ var SMOOTH_STATUS = Object.freeze({
468
+ type: "running"
469
+ });
470
+ var useSmooth = (state, smooth = false) => {
471
+ const { useSmoothStatus: useSmoothStatus2 } = useSmoothContext({ optional: true }) ?? {};
472
+ const {
473
+ part: { text }
474
+ } = state;
475
+ const { useMessage } = useMessageContext();
476
+ const id = useMessage((m) => m.message.id);
477
+ const idRef = (0, import_react4.useRef)(id);
478
+ const [displayedText, setDisplayedText] = (0, import_react4.useState)(text);
479
+ const setText = (0, import_react_use_callback_ref.useCallbackRef)((text2) => {
480
+ setDisplayedText(text2);
481
+ useSmoothStatus2?.setState(text2 !== state.part.text ? SMOOTH_STATUS : state.status);
482
+ });
483
+ const [animatorRef] = (0, import_react4.useState)(
484
+ new TextStreamAnimator(text, setText)
485
+ );
486
+ (0, import_react4.useEffect)(() => {
487
+ if (!smooth) {
488
+ animatorRef.stop();
489
+ return;
490
+ }
491
+ if (idRef.current !== id || !text.startsWith(animatorRef.targetText)) {
492
+ idRef.current = id;
493
+ setText(text);
494
+ animatorRef.currentText = text;
495
+ animatorRef.targetText = text;
496
+ animatorRef.stop();
497
+ return;
498
+ }
499
+ animatorRef.targetText = text;
500
+ animatorRef.start();
501
+ }, [setText, animatorRef, id, smooth, text]);
502
+ (0, import_react4.useEffect)(() => {
503
+ return () => {
504
+ animatorRef.stop();
505
+ };
506
+ }, [animatorRef]);
507
+ return (0, import_react4.useMemo)(
508
+ () => smooth ? {
509
+ part: { type: "text", text: displayedText },
510
+ status: text === displayedText ? state.status : SMOOTH_STATUS
511
+ } : state,
512
+ [smooth, displayedText, state, text]
513
+ );
514
+ };
515
+
516
+ // src/ui/base/tooltip-icon-button.tsx
517
+ var import_react7 = require("react");
518
+
519
+ // src/ui/base/tooltip.tsx
520
+ var TooltipPrimitive = __toESM(require("@radix-ui/react-tooltip"));
521
+
522
+ // src/ui/utils/withDefaults.tsx
523
+ var import_react5 = require("react");
524
+ var import_classnames = __toESM(require("classnames"));
525
+ var import_jsx_runtime2 = require("react/jsx-runtime");
526
+ var withDefaultProps = ({
527
+ className,
528
+ ...defaultProps
529
+ }) => ({ className: classNameProp, ...props }) => {
530
+ return {
531
+ className: (0, import_classnames.default)(className, classNameProp),
532
+ ...defaultProps,
533
+ ...props
534
+ };
535
+ };
536
+ var withDefaults = (Component, defaultProps) => {
537
+ const getProps = withDefaultProps(defaultProps);
538
+ const WithDefaults = (0, import_react5.forwardRef)(
539
+ (props, ref) => {
540
+ const ComponentAsAny = Component;
541
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(ComponentAsAny, { ...getProps(props), ref });
542
+ }
543
+ );
544
+ WithDefaults.displayName = "withDefaults(" + (typeof Component === "string" ? Component : Component.displayName) + ")";
545
+ return WithDefaults;
546
+ };
547
+
548
+ // src/ui/base/tooltip.tsx
549
+ var import_jsx_runtime3 = require("react/jsx-runtime");
550
+ var Tooltip = (props) => {
551
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(TooltipPrimitive.Provider, { children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(TooltipPrimitive.Root, { ...props }) });
552
+ };
553
+ Tooltip.displayName = "Tooltip";
554
+ var TooltipTrigger = TooltipPrimitive.Trigger;
555
+ var TooltipContent = withDefaults(TooltipPrimitive.Content, {
556
+ sideOffset: 4,
557
+ className: "aui-tooltip-content"
558
+ });
559
+ TooltipContent.displayName = "TooltipContent";
560
+
561
+ // src/ui/base/button.tsx
562
+ var import_class_variance_authority = require("class-variance-authority");
563
+ var import_react_primitive = require("@radix-ui/react-primitive");
564
+ var import_react6 = require("react");
565
+ var import_jsx_runtime4 = require("react/jsx-runtime");
566
+ var buttonVariants = (0, import_class_variance_authority.cva)("aui-button", {
567
+ variants: {
568
+ variant: {
569
+ default: "aui-button-primary",
570
+ outline: "aui-button-outline",
571
+ ghost: "aui-button-ghost"
572
+ },
573
+ size: {
574
+ default: "aui-button-medium",
575
+ icon: "aui-button-icon"
576
+ }
577
+ },
578
+ defaultVariants: {
579
+ variant: "default",
580
+ size: "default"
581
+ }
582
+ });
583
+ var Button = (0, import_react6.forwardRef)(
584
+ ({ className, variant, size, ...props }, ref) => {
585
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
586
+ import_react_primitive.Primitive.button,
587
+ {
588
+ className: buttonVariants({ variant, size, className }),
589
+ ...props,
590
+ ref
591
+ }
592
+ );
593
+ }
594
+ );
595
+ Button.displayName = "Button";
596
+
597
+ // src/ui/base/tooltip-icon-button.tsx
598
+ var import_jsx_runtime5 = require("react/jsx-runtime");
599
+ var TooltipIconButton = (0, import_react7.forwardRef)(({ children, tooltip, side = "bottom", ...rest }, ref) => {
600
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(Tooltip, { children: [
601
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(Button, { variant: "ghost", size: "icon", ...rest, ref, children: [
602
+ children,
603
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "aui-sr-only", children: tooltip })
604
+ ] }) }),
605
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(TooltipContent, { side, children: tooltip })
606
+ ] });
607
+ });
608
+ TooltipIconButton.displayName = "TooltipIconButton";
609
+ // Annotate the CommonJS export names for ESM import in node:
610
+ 0 && (module.exports = {
611
+ BaseAssistantRuntime,
612
+ MessageRepository,
613
+ ProxyConfigProvider,
614
+ TooltipIconButton,
615
+ generateId,
616
+ useSmooth,
617
+ useSmoothStatus,
618
+ withSmoothContextProvider
619
+ });
620
+ //# sourceMappingURL=internal.js.map