@assistant-ui/react 0.5.1 → 0.5.2
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.d.mts +31 -29
- package/dist/index.d.ts +31 -29
- package/dist/index.js +152 -141
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +154 -143
- package/dist/index.mjs.map +1 -1
- package/dist/styles/index.css.map +1 -1
- package/package.json +5 -5
package/dist/index.mjs
CHANGED
@@ -1178,7 +1178,7 @@ var COMPLETE_STATUS = {
|
|
1178
1178
|
};
|
1179
1179
|
var toContentPartStatus = (message, partIndex, part) => {
|
1180
1180
|
if (message.role !== "assistant") return COMPLETE_STATUS;
|
1181
|
-
const isLastPart = partIndex === message.content.length - 1;
|
1181
|
+
const isLastPart = partIndex === Math.max(0, message.content.length - 1);
|
1182
1182
|
if (part.type !== "tool-call") {
|
1183
1183
|
if ("reason" in message.status && message.status.reason === "tool-calls" && isLastPart)
|
1184
1184
|
throw new Error(
|
@@ -1191,9 +1191,16 @@ var toContentPartStatus = (message, partIndex, part) => {
|
|
1191
1191
|
}
|
1192
1192
|
return message.status;
|
1193
1193
|
};
|
1194
|
+
var EMPTY_CONTENT = Object.freeze({ type: "text", text: "" });
|
1194
1195
|
var syncContentPart = ({ message }, useContentPart, partIndex) => {
|
1195
|
-
|
1196
|
-
if (!part)
|
1196
|
+
let part = message.content[partIndex];
|
1197
|
+
if (!part) {
|
1198
|
+
if (message.content.length === 0 && partIndex === 0) {
|
1199
|
+
part = EMPTY_CONTENT;
|
1200
|
+
} else {
|
1201
|
+
return;
|
1202
|
+
}
|
1203
|
+
}
|
1197
1204
|
const status = toContentPartStatus(message, partIndex, part);
|
1198
1205
|
const currentState = useContentPart.getState();
|
1199
1206
|
if (currentState.part === part && currentState.status === status) return;
|
@@ -1319,7 +1326,7 @@ var ContentPartPrimitiveText = forwardRef7(({ smooth = true, ...rest }, forwarde
|
|
1319
1326
|
part: { text }
|
1320
1327
|
} = useContentPartText();
|
1321
1328
|
const smoothText = useSmooth(text, smooth);
|
1322
|
-
return /* @__PURE__ */ jsx14(Primitive4.span, { "data-status": status, ...rest, ref: forwardedRef, children: smoothText });
|
1329
|
+
return /* @__PURE__ */ jsx14(Primitive4.span, { "data-status": status.type, ...rest, ref: forwardedRef, children: smoothText });
|
1323
1330
|
});
|
1324
1331
|
ContentPartPrimitiveText.displayName = "ContentPartPrimitive.Text";
|
1325
1332
|
|
@@ -1425,7 +1432,7 @@ var MessagePrimitiveContent = ({
|
|
1425
1432
|
components
|
1426
1433
|
}) => {
|
1427
1434
|
const { useMessage } = useMessageContext();
|
1428
|
-
const contentLength = useMessage((s) => s.message.content.length);
|
1435
|
+
const contentLength = useMessage((s) => s.message.content.length) || 1;
|
1429
1436
|
return new Array(contentLength).fill(null).map((_, idx) => {
|
1430
1437
|
const partIndex = idx;
|
1431
1438
|
return /* @__PURE__ */ jsx16(
|
@@ -1729,7 +1736,7 @@ var useThreadViewportAutoScroll = ({
|
|
1729
1736
|
const div = divRef.current;
|
1730
1737
|
if (!div) return;
|
1731
1738
|
const isAtBottom = useViewport.getState().isAtBottom;
|
1732
|
-
const newIsAtBottom = div.scrollHeight - div.scrollTop <= div.clientHeight;
|
1739
|
+
const newIsAtBottom = div.scrollHeight - div.scrollTop <= div.clientHeight + 1;
|
1733
1740
|
if (!newIsAtBottom && lastScrollTop.current < div.scrollTop) {
|
1734
1741
|
} else {
|
1735
1742
|
if (newIsAtBottom) {
|
@@ -1965,26 +1972,6 @@ var ThreadPrimitiveSuggestion = createActionButton(
|
|
1965
1972
|
// src/runtimes/local/useLocalRuntime.tsx
|
1966
1973
|
import { useInsertionEffect as useInsertionEffect3, useState as useState8 } from "react";
|
1967
1974
|
|
1968
|
-
// src/utils/idUtils.tsx
|
1969
|
-
import { customAlphabet } from "nanoid/non-secure";
|
1970
|
-
var generateId = customAlphabet(
|
1971
|
-
"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",
|
1972
|
-
7
|
1973
|
-
);
|
1974
|
-
var optimisticPrefix = "__optimistic__";
|
1975
|
-
var generateOptimisticId = () => `${optimisticPrefix}${generateId()}`;
|
1976
|
-
|
1977
|
-
// src/internal.ts
|
1978
|
-
var internal_exports = {};
|
1979
|
-
__export(internal_exports, {
|
1980
|
-
BaseAssistantRuntime: () => BaseAssistantRuntime,
|
1981
|
-
MessageRepository: () => MessageRepository,
|
1982
|
-
ProxyConfigProvider: () => ProxyConfigProvider,
|
1983
|
-
TooltipIconButton: () => TooltipIconButton,
|
1984
|
-
generateId: () => generateId,
|
1985
|
-
useSmooth: () => useSmooth
|
1986
|
-
});
|
1987
|
-
|
1988
1975
|
// src/runtimes/core/BaseAssistantRuntime.tsx
|
1989
1976
|
var BaseAssistantRuntime = class {
|
1990
1977
|
constructor(_thread) {
|
@@ -2008,101 +1995,25 @@ var BaseAssistantRuntime = class {
|
|
2008
1995
|
};
|
2009
1996
|
};
|
2010
1997
|
|
2011
|
-
// src/
|
2012
|
-
|
2013
|
-
|
2014
|
-
|
2015
|
-
|
2016
|
-
|
2017
|
-
|
2018
|
-
|
2019
|
-
|
2020
|
-
} from "react";
|
2021
|
-
import classNames from "classnames";
|
2022
|
-
import { jsx as jsx25 } from "react/jsx-runtime";
|
2023
|
-
var withDefaultProps = ({
|
2024
|
-
className,
|
2025
|
-
...defaultProps
|
2026
|
-
}) => ({ className: classNameProp, ...props }) => {
|
2027
|
-
return {
|
2028
|
-
className: classNames(className, classNameProp),
|
2029
|
-
...defaultProps,
|
2030
|
-
...props
|
2031
|
-
};
|
2032
|
-
};
|
2033
|
-
var withDefaults = (Component, defaultProps) => {
|
2034
|
-
const getProps = withDefaultProps(defaultProps);
|
2035
|
-
const WithDefaults = forwardRef15(
|
2036
|
-
(props, ref) => {
|
2037
|
-
const ComponentAsAny = Component;
|
2038
|
-
return /* @__PURE__ */ jsx25(ComponentAsAny, { ...getProps(props), ref });
|
2039
|
-
}
|
2040
|
-
);
|
2041
|
-
WithDefaults.displayName = "withDefaults(" + (typeof Component === "string" ? Component : Component.displayName) + ")";
|
2042
|
-
return WithDefaults;
|
2043
|
-
};
|
2044
|
-
|
2045
|
-
// src/ui/base/tooltip.tsx
|
2046
|
-
import { jsx as jsx26 } from "react/jsx-runtime";
|
2047
|
-
var Tooltip = (props) => {
|
2048
|
-
return /* @__PURE__ */ jsx26(TooltipPrimitive.Provider, { children: /* @__PURE__ */ jsx26(TooltipPrimitive.Root, { ...props }) });
|
2049
|
-
};
|
2050
|
-
Tooltip.displayName = "Tooltip";
|
2051
|
-
var TooltipTrigger = TooltipPrimitive.Trigger;
|
2052
|
-
var TooltipContent = withDefaults(TooltipPrimitive.Content, {
|
2053
|
-
sideOffset: 4,
|
2054
|
-
className: "aui-tooltip-content"
|
1998
|
+
// src/internal.ts
|
1999
|
+
var internal_exports = {};
|
2000
|
+
__export(internal_exports, {
|
2001
|
+
BaseAssistantRuntime: () => BaseAssistantRuntime,
|
2002
|
+
MessageRepository: () => MessageRepository,
|
2003
|
+
ProxyConfigProvider: () => ProxyConfigProvider,
|
2004
|
+
TooltipIconButton: () => TooltipIconButton,
|
2005
|
+
generateId: () => generateId,
|
2006
|
+
useSmooth: () => useSmooth
|
2055
2007
|
});
|
2056
|
-
TooltipContent.displayName = "TooltipContent";
|
2057
2008
|
|
2058
|
-
// src/
|
2059
|
-
import {
|
2060
|
-
|
2061
|
-
|
2062
|
-
|
2063
|
-
var buttonVariants = cva("aui-button", {
|
2064
|
-
variants: {
|
2065
|
-
variant: {
|
2066
|
-
default: "aui-button-primary",
|
2067
|
-
outline: "aui-button-outline",
|
2068
|
-
ghost: "aui-button-ghost"
|
2069
|
-
},
|
2070
|
-
size: {
|
2071
|
-
default: "aui-button-medium",
|
2072
|
-
icon: "aui-button-icon"
|
2073
|
-
}
|
2074
|
-
},
|
2075
|
-
defaultVariants: {
|
2076
|
-
variant: "default",
|
2077
|
-
size: "default"
|
2078
|
-
}
|
2079
|
-
});
|
2080
|
-
var Button = forwardRef16(
|
2081
|
-
({ className, variant, size, ...props }, ref) => {
|
2082
|
-
return /* @__PURE__ */ jsx27(
|
2083
|
-
Primitive11.button,
|
2084
|
-
{
|
2085
|
-
className: buttonVariants({ variant, size, className }),
|
2086
|
-
...props,
|
2087
|
-
ref
|
2088
|
-
}
|
2089
|
-
);
|
2090
|
-
}
|
2009
|
+
// src/utils/idUtils.tsx
|
2010
|
+
import { customAlphabet } from "nanoid/non-secure";
|
2011
|
+
var generateId = customAlphabet(
|
2012
|
+
"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",
|
2013
|
+
7
|
2091
2014
|
);
|
2092
|
-
|
2093
|
-
|
2094
|
-
// src/ui/base/tooltip-icon-button.tsx
|
2095
|
-
import { jsx as jsx28, jsxs as jsxs4 } from "react/jsx-runtime";
|
2096
|
-
var TooltipIconButton = forwardRef17(({ children, tooltip, side = "bottom", ...rest }, ref) => {
|
2097
|
-
return /* @__PURE__ */ jsxs4(Tooltip, { children: [
|
2098
|
-
/* @__PURE__ */ jsx28(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsxs4(Button, { variant: "ghost", size: "icon", ...rest, ref, children: [
|
2099
|
-
children,
|
2100
|
-
/* @__PURE__ */ jsx28("span", { className: "aui-sr-only", children: tooltip })
|
2101
|
-
] }) }),
|
2102
|
-
/* @__PURE__ */ jsx28(TooltipContent, { side, children: tooltip })
|
2103
|
-
] });
|
2104
|
-
});
|
2105
|
-
TooltipIconButton.displayName = "TooltipIconButton";
|
2015
|
+
var optimisticPrefix = "__optimistic__";
|
2016
|
+
var generateOptimisticId = () => `${optimisticPrefix}${generateId()}`;
|
2106
2017
|
|
2107
2018
|
// src/runtimes/edge/converters/fromCoreMessage.ts
|
2108
2019
|
var fromCoreMessages = (message) => {
|
@@ -2315,6 +2226,102 @@ var MessageRepository = class {
|
|
2315
2226
|
}
|
2316
2227
|
};
|
2317
2228
|
|
2229
|
+
// src/ui/base/tooltip-icon-button.tsx
|
2230
|
+
import { forwardRef as forwardRef17 } from "react";
|
2231
|
+
|
2232
|
+
// src/ui/base/tooltip.tsx
|
2233
|
+
import * as TooltipPrimitive from "@radix-ui/react-tooltip";
|
2234
|
+
|
2235
|
+
// src/ui/utils/withDefaults.tsx
|
2236
|
+
import {
|
2237
|
+
forwardRef as forwardRef15
|
2238
|
+
} from "react";
|
2239
|
+
import classNames from "classnames";
|
2240
|
+
import { jsx as jsx25 } from "react/jsx-runtime";
|
2241
|
+
var withDefaultProps = ({
|
2242
|
+
className,
|
2243
|
+
...defaultProps
|
2244
|
+
}) => ({ className: classNameProp, ...props }) => {
|
2245
|
+
return {
|
2246
|
+
className: classNames(className, classNameProp),
|
2247
|
+
...defaultProps,
|
2248
|
+
...props
|
2249
|
+
};
|
2250
|
+
};
|
2251
|
+
var withDefaults = (Component, defaultProps) => {
|
2252
|
+
const getProps = withDefaultProps(defaultProps);
|
2253
|
+
const WithDefaults = forwardRef15(
|
2254
|
+
(props, ref) => {
|
2255
|
+
const ComponentAsAny = Component;
|
2256
|
+
return /* @__PURE__ */ jsx25(ComponentAsAny, { ...getProps(props), ref });
|
2257
|
+
}
|
2258
|
+
);
|
2259
|
+
WithDefaults.displayName = "withDefaults(" + (typeof Component === "string" ? Component : Component.displayName) + ")";
|
2260
|
+
return WithDefaults;
|
2261
|
+
};
|
2262
|
+
|
2263
|
+
// src/ui/base/tooltip.tsx
|
2264
|
+
import { jsx as jsx26 } from "react/jsx-runtime";
|
2265
|
+
var Tooltip = (props) => {
|
2266
|
+
return /* @__PURE__ */ jsx26(TooltipPrimitive.Provider, { children: /* @__PURE__ */ jsx26(TooltipPrimitive.Root, { ...props }) });
|
2267
|
+
};
|
2268
|
+
Tooltip.displayName = "Tooltip";
|
2269
|
+
var TooltipTrigger = TooltipPrimitive.Trigger;
|
2270
|
+
var TooltipContent = withDefaults(TooltipPrimitive.Content, {
|
2271
|
+
sideOffset: 4,
|
2272
|
+
className: "aui-tooltip-content"
|
2273
|
+
});
|
2274
|
+
TooltipContent.displayName = "TooltipContent";
|
2275
|
+
|
2276
|
+
// src/ui/base/button.tsx
|
2277
|
+
import { cva } from "class-variance-authority";
|
2278
|
+
import { Primitive as Primitive11 } from "@radix-ui/react-primitive";
|
2279
|
+
import { forwardRef as forwardRef16 } from "react";
|
2280
|
+
import { jsx as jsx27 } from "react/jsx-runtime";
|
2281
|
+
var buttonVariants = cva("aui-button", {
|
2282
|
+
variants: {
|
2283
|
+
variant: {
|
2284
|
+
default: "aui-button-primary",
|
2285
|
+
outline: "aui-button-outline",
|
2286
|
+
ghost: "aui-button-ghost"
|
2287
|
+
},
|
2288
|
+
size: {
|
2289
|
+
default: "aui-button-medium",
|
2290
|
+
icon: "aui-button-icon"
|
2291
|
+
}
|
2292
|
+
},
|
2293
|
+
defaultVariants: {
|
2294
|
+
variant: "default",
|
2295
|
+
size: "default"
|
2296
|
+
}
|
2297
|
+
});
|
2298
|
+
var Button = forwardRef16(
|
2299
|
+
({ className, variant, size, ...props }, ref) => {
|
2300
|
+
return /* @__PURE__ */ jsx27(
|
2301
|
+
Primitive11.button,
|
2302
|
+
{
|
2303
|
+
className: buttonVariants({ variant, size, className }),
|
2304
|
+
...props,
|
2305
|
+
ref
|
2306
|
+
}
|
2307
|
+
);
|
2308
|
+
}
|
2309
|
+
);
|
2310
|
+
Button.displayName = "Button";
|
2311
|
+
|
2312
|
+
// src/ui/base/tooltip-icon-button.tsx
|
2313
|
+
import { jsx as jsx28, jsxs as jsxs4 } from "react/jsx-runtime";
|
2314
|
+
var TooltipIconButton = forwardRef17(({ children, tooltip, side = "bottom", ...rest }, ref) => {
|
2315
|
+
return /* @__PURE__ */ jsxs4(Tooltip, { children: [
|
2316
|
+
/* @__PURE__ */ jsx28(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsxs4(Button, { variant: "ghost", size: "icon", ...rest, ref, children: [
|
2317
|
+
children,
|
2318
|
+
/* @__PURE__ */ jsx28("span", { className: "aui-sr-only", children: tooltip })
|
2319
|
+
] }) }),
|
2320
|
+
/* @__PURE__ */ jsx28(TooltipContent, { side, children: tooltip })
|
2321
|
+
] });
|
2322
|
+
});
|
2323
|
+
TooltipIconButton.displayName = "TooltipIconButton";
|
2324
|
+
|
2318
2325
|
// src/runtimes/edge/converters/toLanguageModelMessages.ts
|
2319
2326
|
var assistantMessageSplitter = () => {
|
2320
2327
|
const stash = [];
|
@@ -3347,31 +3354,10 @@ var useEdgeRuntime = ({
|
|
3347
3354
|
return useLocalRuntime(adapter, { initialMessages });
|
3348
3355
|
};
|
3349
3356
|
|
3350
|
-
// src/runtimes/local/
|
3357
|
+
// src/runtimes/local/shouldContinue.tsx
|
3351
3358
|
var shouldContinue = (result) => result.status?.type === "requires-action" && result.status.reason === "tool-calls" && result.content.every((c) => c.type !== "tool-call" || !!c.result);
|
3352
|
-
|
3353
|
-
|
3354
|
-
constructor(adapter, options) {
|
3355
|
-
const proxyConfigProvider = new ProxyConfigProvider();
|
3356
|
-
super(new LocalThreadRuntime(proxyConfigProvider, adapter, options));
|
3357
|
-
this._proxyConfigProvider = proxyConfigProvider;
|
3358
|
-
}
|
3359
|
-
set adapter(adapter) {
|
3360
|
-
this.thread.adapter = adapter;
|
3361
|
-
}
|
3362
|
-
registerModelConfigProvider(provider) {
|
3363
|
-
return this._proxyConfigProvider.registerModelConfigProvider(provider);
|
3364
|
-
}
|
3365
|
-
switchToThread(threadId) {
|
3366
|
-
if (threadId) {
|
3367
|
-
throw new Error("LocalRuntime does not yet support switching threads");
|
3368
|
-
}
|
3369
|
-
return this.thread = new LocalThreadRuntime(
|
3370
|
-
this._proxyConfigProvider,
|
3371
|
-
this.thread.adapter
|
3372
|
-
);
|
3373
|
-
}
|
3374
|
-
};
|
3359
|
+
|
3360
|
+
// src/runtimes/local/LocalThreadRuntime.tsx
|
3375
3361
|
var CAPABILITIES = Object.freeze({
|
3376
3362
|
edit: true,
|
3377
3363
|
reload: true,
|
@@ -3431,7 +3417,7 @@ var LocalThreadRuntime = class {
|
|
3431
3417
|
id,
|
3432
3418
|
role: "assistant",
|
3433
3419
|
status: { type: "running" },
|
3434
|
-
content: [
|
3420
|
+
content: [],
|
3435
3421
|
createdAt: /* @__PURE__ */ new Date()
|
3436
3422
|
};
|
3437
3423
|
do {
|
@@ -3543,6 +3529,31 @@ var LocalThreadRuntime = class {
|
|
3543
3529
|
}
|
3544
3530
|
};
|
3545
3531
|
|
3532
|
+
// src/runtimes/local/LocalRuntime.tsx
|
3533
|
+
var LocalRuntime = class extends BaseAssistantRuntime {
|
3534
|
+
_proxyConfigProvider;
|
3535
|
+
constructor(adapter, options) {
|
3536
|
+
const proxyConfigProvider = new ProxyConfigProvider();
|
3537
|
+
super(new LocalThreadRuntime(proxyConfigProvider, adapter, options));
|
3538
|
+
this._proxyConfigProvider = proxyConfigProvider;
|
3539
|
+
}
|
3540
|
+
set adapter(adapter) {
|
3541
|
+
this.thread.adapter = adapter;
|
3542
|
+
}
|
3543
|
+
registerModelConfigProvider(provider) {
|
3544
|
+
return this._proxyConfigProvider.registerModelConfigProvider(provider);
|
3545
|
+
}
|
3546
|
+
switchToThread(threadId) {
|
3547
|
+
if (threadId) {
|
3548
|
+
throw new Error("LocalRuntime does not yet support switching threads");
|
3549
|
+
}
|
3550
|
+
return this.thread = new LocalThreadRuntime(
|
3551
|
+
this._proxyConfigProvider,
|
3552
|
+
this.thread.adapter
|
3553
|
+
);
|
3554
|
+
}
|
3555
|
+
};
|
3556
|
+
|
3546
3557
|
// src/runtimes/local/useLocalRuntime.tsx
|
3547
3558
|
var useLocalRuntime = (adapter, options) => {
|
3548
3559
|
const [runtime] = useState8(() => new LocalRuntime(adapter, options));
|