@actioneer/ads 0.1.0
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/LICENSE +21 -0
- package/bin/ads-init.mjs +314 -0
- package/components/accordion.d.ts +13 -0
- package/components/accordion.js +91 -0
- package/components/agents-ui/agent-audio-visualizer-aura.d.ts +11 -0
- package/components/agents-ui/agent-audio-visualizer-aura.js +277 -0
- package/components/agents-ui/agent-audio-visualizer-wave.d.ts +12 -0
- package/components/agents-ui/agent-audio-visualizer-wave.js +203 -0
- package/components/agents-ui/react-shader-toy.d.ts +87 -0
- package/components/agents-ui/react-shader-toy.js +531 -0
- package/components/ai-elements/chain-of-thought.d.ts +30 -0
- package/components/ai-elements/chain-of-thought.js +182 -0
- package/components/ai-elements/index.d.ts +11 -0
- package/components/ai-elements/inline-citation.d.ts +44 -0
- package/components/ai-elements/inline-citation.js +314 -0
- package/components/ai-elements/message.d.ts +96 -0
- package/components/ai-elements/message.js +308 -0
- package/components/ai-elements/queue.d.ts +60 -0
- package/components/ai-elements/queue.js +193 -0
- package/components/ai-elements/reasoning.d.ts +26 -0
- package/components/ai-elements/reasoning.js +131 -0
- package/components/ai-elements/shimmer.d.ts +25 -0
- package/components/ai-elements/shimmer.js +44 -0
- package/components/ai-elements/speech-input.d.ts +16 -0
- package/components/ai-elements/speech-input.js +151 -0
- package/components/ai-elements/task-progress.d.ts +41 -0
- package/components/ai-elements/task-progress.js +211 -0
- package/components/ai-elements/task.d.ts +35 -0
- package/components/ai-elements/task.js +73 -0
- package/components/ai-elements/tool.d.ts +53 -0
- package/components/ai-elements/tool.js +116 -0
- package/components/ai-elements/voice.d.ts +74 -0
- package/components/ai-elements/voice.js +875 -0
- package/components/alert.d.ts +21 -0
- package/components/alert.js +76 -0
- package/components/answer.d.ts +984 -0
- package/components/answer.js +543 -0
- package/components/assistant-ui/action-bar.d.ts +3 -0
- package/components/assistant-ui/action-bar.js +57 -0
- package/components/assistant-ui/answer-tool-ui.d.ts +5 -0
- package/components/assistant-ui/answer-tool-ui.js +42 -0
- package/components/assistant-ui/attachment.d.ts +50 -0
- package/components/assistant-ui/attachment.js +353 -0
- package/components/assistant-ui/badge.d.ts +11 -0
- package/components/assistant-ui/badge.js +54 -0
- package/components/assistant-ui/branch-picker.d.ts +3 -0
- package/components/assistant-ui/branch-picker.js +36 -0
- package/components/assistant-ui/chain-of-thought.d.ts +46 -0
- package/components/assistant-ui/composer-add-context.d.ts +50 -0
- package/components/assistant-ui/composer-add-context.js +209 -0
- package/components/assistant-ui/composer-deep-research.d.ts +16 -0
- package/components/assistant-ui/composer-deep-research.js +38 -0
- package/components/assistant-ui/composer-harness.d.ts +18 -0
- package/components/assistant-ui/composer-harness.js +186 -0
- package/components/assistant-ui/composer-trigger-popover.d.ts +47 -0
- package/components/assistant-ui/composer-trigger-popover.js +147 -0
- package/components/assistant-ui/composer.d.ts +8 -0
- package/components/assistant-ui/composer.js +276 -0
- package/components/assistant-ui/directive-text.d.ts +16 -0
- package/components/assistant-ui/directive-text.js +40 -0
- package/components/assistant-ui/error.d.ts +6 -0
- package/components/assistant-ui/error.js +39 -0
- package/components/assistant-ui/file.d.ts +37 -0
- package/components/assistant-ui/file.js +159 -0
- package/components/assistant-ui/follow-up-suggestions.d.ts +7 -0
- package/components/assistant-ui/follow-up-suggestions.js +44 -0
- package/components/assistant-ui/image.d.ts +46 -0
- package/components/assistant-ui/image.js +351 -0
- package/components/assistant-ui/index.d.ts +28 -0
- package/components/assistant-ui/markdown-text.d.ts +1 -0
- package/components/assistant-ui/markdown-text.js +242 -0
- package/components/assistant-ui/message-timing.d.ts +25 -0
- package/components/assistant-ui/message-timing.js +56 -0
- package/components/assistant-ui/message.d.ts +4 -0
- package/components/assistant-ui/message.js +159 -0
- package/components/assistant-ui/primitives.d.ts +2 -0
- package/components/assistant-ui/quote.d.ts +37 -0
- package/components/assistant-ui/quote.js +150 -0
- package/components/assistant-ui/reasoning.d.ts +44 -0
- package/components/assistant-ui/reasoning.js +261 -0
- package/components/assistant-ui/selection-toolbar.d.ts +29 -0
- package/components/assistant-ui/selection-toolbar.js +91 -0
- package/components/assistant-ui/smart-message-text.d.ts +15 -0
- package/components/assistant-ui/smart-message-text.js +29 -0
- package/components/assistant-ui/sources.d.ts +17 -0
- package/components/assistant-ui/sources.js +121 -0
- package/components/assistant-ui/suggestions.d.ts +7 -0
- package/components/assistant-ui/suggestions.js +19 -0
- package/components/assistant-ui/thread-context.d.ts +37 -0
- package/components/assistant-ui/thread-context.js +8 -0
- package/components/assistant-ui/thread.d.ts +5 -0
- package/components/assistant-ui/thread.js +77 -0
- package/components/assistant-ui/tool-fallback.d.ts +36 -0
- package/components/assistant-ui/tool-fallback.js +428 -0
- package/components/assistant-ui/tool-group.d.ts +33 -0
- package/components/assistant-ui/tool-group.js +173 -0
- package/components/assistant-ui/tooltip-icon-button.d.ts +7 -0
- package/components/assistant-ui/tooltip-icon-button.js +31 -0
- package/components/assistant-ui/voice.d.ts +18 -0
- package/components/autocomplete.d.ts +18 -0
- package/components/autocomplete.js +162 -0
- package/components/avatar.d.ts +26 -0
- package/components/avatar.js +92 -0
- package/components/badge.d.ts +10 -0
- package/components/badge.js +83 -0
- package/components/brand-loader.d.ts +16 -0
- package/components/brand-loader.js +64 -0
- package/components/breadcrumbs.d.ts +8 -0
- package/components/breadcrumbs.js +58 -0
- package/components/button.d.ts +13 -0
- package/components/button.js +100 -0
- package/components/card.d.ts +19 -0
- package/components/card.js +82 -0
- package/components/carousel.d.ts +31 -0
- package/components/carousel.js +351 -0
- package/components/chart.d.ts +165 -0
- package/components/chart.js +841 -0
- package/components/checkbox.d.ts +13 -0
- package/components/checkbox.js +84 -0
- package/components/chip.d.ts +13 -0
- package/components/chip.js +112 -0
- package/components/collapsible.d.ts +5 -0
- package/components/collapsible.js +31 -0
- package/components/connector-card.d.ts +62 -0
- package/components/connector-card.js +154 -0
- package/components/divider.d.ts +23 -0
- package/components/divider.js +69 -0
- package/components/drawer.d.ts +45 -0
- package/components/drawer.js +234 -0
- package/components/dropdown.d.ts +33 -0
- package/components/dropdown.js +198 -0
- package/components/empty-state.d.ts +8 -0
- package/components/empty-state.js +30 -0
- package/components/field.d.ts +20 -0
- package/components/field.js +74 -0
- package/components/index.d.ts +56 -0
- package/components/index.js +444 -0
- package/components/input-field.d.ts +22 -0
- package/components/input-field.js +91 -0
- package/components/input.d.ts +8 -0
- package/components/input.js +61 -0
- package/components/kbd.d.ts +6 -0
- package/components/kbd.js +26 -0
- package/components/link.d.ts +14 -0
- package/components/link.js +72 -0
- package/components/modal.d.ts +18 -0
- package/components/modal.js +156 -0
- package/components/navbar.d.ts +15 -0
- package/components/navbar.js +68 -0
- package/components/number-field.d.ts +11 -0
- package/components/number-field.js +89 -0
- package/components/pagination.d.ts +28 -0
- package/components/pagination.js +179 -0
- package/components/panel.d.ts +14 -0
- package/components/panel.js +71 -0
- package/components/pixel-blast-svg.d.ts +22 -0
- package/components/pixel-blast-svg.js +154 -0
- package/components/popover.d.ts +20 -0
- package/components/popover.js +101 -0
- package/components/progress-circle.d.ts +11 -0
- package/components/progress-circle.js +75 -0
- package/components/progress.d.ts +22 -0
- package/components/progress.js +66 -0
- package/components/radio.d.ts +16 -0
- package/components/radio.js +101 -0
- package/components/segmented.d.ts +16 -0
- package/components/segmented.js +103 -0
- package/components/select.d.ts +28 -0
- package/components/select.js +180 -0
- package/components/selection-action-bar.d.ts +11 -0
- package/components/selection-action-bar.js +59 -0
- package/components/sidebar.d.ts +118 -0
- package/components/sidebar.js +375 -0
- package/components/skeleton.d.ts +6 -0
- package/components/skeleton.js +26 -0
- package/components/slider.d.ts +11 -0
- package/components/slider.js +62 -0
- package/components/spinner.d.ts +11 -0
- package/components/spinner.js +62 -0
- package/components/switch.d.ts +7 -0
- package/components/switch.js +61 -0
- package/components/table.d.ts +59 -0
- package/components/table.js +254 -0
- package/components/tabs.d.ts +29 -0
- package/components/tabs.js +371 -0
- package/components/textarea.d.ts +5 -0
- package/components/textarea.js +24 -0
- package/components/timeline.d.ts +7 -0
- package/components/timeline.js +47 -0
- package/components/toast.d.ts +74 -0
- package/components/toast.js +211 -0
- package/components/tooltip.d.ts +11 -0
- package/components/tooltip.js +143 -0
- package/components/tree.d.ts +42 -0
- package/components/tree.js +86 -0
- package/components/typography.d.ts +33 -0
- package/components/typography.js +65 -0
- package/components/ui/avatar.d.ts +11 -0
- package/components/ui/avatar.js +56 -0
- package/components/ui/button.d.ts +10 -0
- package/components/ui/button.js +57 -0
- package/components/ui/collapsible.d.ts +5 -0
- package/components/ui/collapsible.js +35 -0
- package/components/ui/dialog.d.ts +17 -0
- package/components/ui/dialog.js +93 -0
- package/components/ui/tabs.d.ts +22 -0
- package/components/ui/tooltip.d.ts +7 -0
- package/components/ui/tooltip.js +56 -0
- package/fonts/aribau-grotesk-400.otf +0 -0
- package/fonts/aribau-grotesk-700.otf +0 -0
- package/fonts.css +21 -0
- package/hooks/agents-ui/use-agent-audio-visualizer-aura.d.ts +8 -0
- package/hooks/agents-ui/use-agent-audio-visualizer-aura.js +62 -0
- package/hooks/agents-ui/use-agent-audio-visualizer-wave.d.ts +7 -0
- package/hooks/agents-ui/use-agent-audio-visualizer-wave.js +60 -0
- package/hooks/agents-ui/voice-visualizer-types.d.ts +9 -0
- package/lib/cn.d.ts +3 -0
- package/lib/cn.js +9 -0
- package/lib/icons.d.ts +378 -0
- package/lib/icons.js +119 -0
- package/lib/interactive.d.ts +24 -0
- package/lib/interactive.js +36 -0
- package/lib/motion.d.ts +58 -0
- package/lib/motion.js +70 -0
- package/lib/router.d.ts +3 -0
- package/lib/utils.d.ts +6 -0
- package/llms.txt +537 -0
- package/manifest.json +5085 -0
- package/package.json +60 -0
- package/styles.css +653 -0
- package/theme.css +273 -0
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as o, jsxs as d } from "react/jsx-runtime";
|
|
3
|
+
import { createContext as _, memo as w, useRef as m, useState as E, useLayoutEffect as M, useCallback as G, useContext as T, useEffect as j } from "react";
|
|
4
|
+
import { cva as D } from "class-variance-authority";
|
|
5
|
+
import { Brain as F, ChevronDown as L } from "../../lib/icons.js";
|
|
6
|
+
import { useScrollLock as U, useAuiState as V } from "@assistant-ui/react";
|
|
7
|
+
import { MarkdownText as B } from "./markdown-text.js";
|
|
8
|
+
import { Collapsible as H, CollapsibleTrigger as $, CollapsibleContent as q } from "../ui/collapsible.js";
|
|
9
|
+
import { cn as u } from "../../lib/cn.js";
|
|
10
|
+
const J = 200, h = _(!1), K = D("aui-reasoning-root mb-4 w-full", {
|
|
11
|
+
variants: {
|
|
12
|
+
variant: {
|
|
13
|
+
outline: "rounded-lg border px-3 py-2",
|
|
14
|
+
ghost: "",
|
|
15
|
+
muted: "bg-muted/50 rounded-lg px-3 py-2"
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
defaultVariants: {
|
|
19
|
+
variant: "outline"
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
function C({
|
|
23
|
+
className: r,
|
|
24
|
+
variant: t,
|
|
25
|
+
open: a,
|
|
26
|
+
onOpenChange: e,
|
|
27
|
+
defaultOpen: i = !1,
|
|
28
|
+
streaming: n,
|
|
29
|
+
children: c,
|
|
30
|
+
...l
|
|
31
|
+
}) {
|
|
32
|
+
const s = m(null), f = m(i), [b, I] = E(null), v = U(s, J), g = a !== void 0, R = g ? a : b ?? n ?? f.current, S = n === !0 && R && (g || b === null), y = m(n);
|
|
33
|
+
M(() => {
|
|
34
|
+
y.current !== n && (y.current = n, !g && b === null && v());
|
|
35
|
+
}, [n, g, b, v]);
|
|
36
|
+
const P = G(
|
|
37
|
+
(N) => {
|
|
38
|
+
v(), g || I(N), e == null || e(N);
|
|
39
|
+
},
|
|
40
|
+
[v, g, e]
|
|
41
|
+
);
|
|
42
|
+
return /* @__PURE__ */ o(
|
|
43
|
+
H,
|
|
44
|
+
{
|
|
45
|
+
ref: s,
|
|
46
|
+
"data-slot": "reasoning-root",
|
|
47
|
+
"data-variant": t,
|
|
48
|
+
open: R,
|
|
49
|
+
onOpenChange: P,
|
|
50
|
+
className: u(
|
|
51
|
+
"group/reasoning-root",
|
|
52
|
+
K({ variant: t, className: r })
|
|
53
|
+
),
|
|
54
|
+
...l,
|
|
55
|
+
children: /* @__PURE__ */ o(h.Provider, { value: S, children: c })
|
|
56
|
+
}
|
|
57
|
+
);
|
|
58
|
+
}
|
|
59
|
+
function x({
|
|
60
|
+
side: r = "bottom",
|
|
61
|
+
className: t,
|
|
62
|
+
...a
|
|
63
|
+
}) {
|
|
64
|
+
return r === "top" ? /* @__PURE__ */ o(
|
|
65
|
+
"div",
|
|
66
|
+
{
|
|
67
|
+
"data-slot": "reasoning-fade",
|
|
68
|
+
className: u(
|
|
69
|
+
"aui-reasoning-fade pointer-events-none absolute inset-x-0 top-0 z-10 h-8",
|
|
70
|
+
"bg-[linear-gradient(to_bottom,var(--color-background),transparent)]",
|
|
71
|
+
"group-data-[variant=muted]/reasoning-root:bg-[linear-gradient(to_bottom,hsl(var(--muted)/0.5),transparent)]",
|
|
72
|
+
"fade-in-0 animate-in",
|
|
73
|
+
"duration-(--duration-normal)",
|
|
74
|
+
t
|
|
75
|
+
),
|
|
76
|
+
...a
|
|
77
|
+
}
|
|
78
|
+
) : /* @__PURE__ */ o(
|
|
79
|
+
"div",
|
|
80
|
+
{
|
|
81
|
+
"data-slot": "reasoning-fade",
|
|
82
|
+
className: u(
|
|
83
|
+
"aui-reasoning-fade pointer-events-none absolute inset-x-0 bottom-0 z-10 h-8",
|
|
84
|
+
"bg-[linear-gradient(to_top,var(--color-background),transparent)]",
|
|
85
|
+
"group-data-[variant=muted]/reasoning-root:bg-[linear-gradient(to_top,hsl(var(--muted)/0.5),transparent)]",
|
|
86
|
+
"fade-in-0 animate-in",
|
|
87
|
+
"duration-(--duration-normal)",
|
|
88
|
+
t
|
|
89
|
+
),
|
|
90
|
+
...a
|
|
91
|
+
}
|
|
92
|
+
);
|
|
93
|
+
}
|
|
94
|
+
function k({
|
|
95
|
+
active: r,
|
|
96
|
+
duration: t,
|
|
97
|
+
className: a,
|
|
98
|
+
...e
|
|
99
|
+
}) {
|
|
100
|
+
const i = t ? ` (${t}s)` : "";
|
|
101
|
+
return /* @__PURE__ */ d(
|
|
102
|
+
$,
|
|
103
|
+
{
|
|
104
|
+
"data-slot": "reasoning-trigger",
|
|
105
|
+
className: u(
|
|
106
|
+
"aui-reasoning-trigger group/trigger text-muted-foreground hover:text-foreground flex max-w-[75%] origin-left items-center gap-2 py-1.5 text-xs transition-[color,scale] active:scale-[0.98]",
|
|
107
|
+
a
|
|
108
|
+
),
|
|
109
|
+
...e,
|
|
110
|
+
children: [
|
|
111
|
+
/* @__PURE__ */ o(
|
|
112
|
+
F,
|
|
113
|
+
{
|
|
114
|
+
"data-slot": "reasoning-trigger-icon",
|
|
115
|
+
className: "aui-reasoning-trigger-icon size-4 shrink-0"
|
|
116
|
+
}
|
|
117
|
+
),
|
|
118
|
+
/* @__PURE__ */ d(
|
|
119
|
+
"span",
|
|
120
|
+
{
|
|
121
|
+
"data-slot": "reasoning-trigger-label",
|
|
122
|
+
className: "aui-reasoning-trigger-label-wrapper relative inline-block leading-none tabular-nums",
|
|
123
|
+
children: [
|
|
124
|
+
/* @__PURE__ */ d("span", { children: [
|
|
125
|
+
"Reasoning",
|
|
126
|
+
i
|
|
127
|
+
] }),
|
|
128
|
+
r ? /* @__PURE__ */ d(
|
|
129
|
+
"span",
|
|
130
|
+
{
|
|
131
|
+
"aria-hidden": !0,
|
|
132
|
+
"data-slot": "reasoning-trigger-shimmer",
|
|
133
|
+
className: "aui-reasoning-trigger-shimmer shimmer pointer-events-none absolute inset-0 motion-reduce:animate-none",
|
|
134
|
+
children: [
|
|
135
|
+
"Reasoning",
|
|
136
|
+
i
|
|
137
|
+
]
|
|
138
|
+
}
|
|
139
|
+
) : null
|
|
140
|
+
]
|
|
141
|
+
}
|
|
142
|
+
),
|
|
143
|
+
/* @__PURE__ */ o(
|
|
144
|
+
L,
|
|
145
|
+
{
|
|
146
|
+
"data-slot": "reasoning-trigger-chevron",
|
|
147
|
+
className: u(
|
|
148
|
+
"aui-reasoning-trigger-chevron mt-0.5 size-4 shrink-0",
|
|
149
|
+
"transition-transform duration-(--duration-normal) ease-out motion-reduce:transition-none",
|
|
150
|
+
"group-data-[state=closed]/trigger:-rotate-90",
|
|
151
|
+
"group-data-[state=open]/trigger:rotate-0"
|
|
152
|
+
)
|
|
153
|
+
}
|
|
154
|
+
)
|
|
155
|
+
]
|
|
156
|
+
}
|
|
157
|
+
);
|
|
158
|
+
}
|
|
159
|
+
function z({
|
|
160
|
+
className: r,
|
|
161
|
+
children: t,
|
|
162
|
+
...a
|
|
163
|
+
}) {
|
|
164
|
+
const e = T(h);
|
|
165
|
+
return /* @__PURE__ */ d(
|
|
166
|
+
q,
|
|
167
|
+
{
|
|
168
|
+
"data-slot": "reasoning-content",
|
|
169
|
+
className: u(
|
|
170
|
+
"aui-reasoning-content text-muted-foreground relative overflow-hidden text-xs outline-none",
|
|
171
|
+
"group/collapsible-content",
|
|
172
|
+
"data-[state=closed]:pointer-events-none",
|
|
173
|
+
r
|
|
174
|
+
),
|
|
175
|
+
...a,
|
|
176
|
+
children: [
|
|
177
|
+
/* @__PURE__ */ o(x, { side: "top" }),
|
|
178
|
+
t,
|
|
179
|
+
e ? /* @__PURE__ */ o(x, {}) : null
|
|
180
|
+
]
|
|
181
|
+
}
|
|
182
|
+
);
|
|
183
|
+
}
|
|
184
|
+
function A({
|
|
185
|
+
className: r,
|
|
186
|
+
children: t,
|
|
187
|
+
...a
|
|
188
|
+
}) {
|
|
189
|
+
const e = T(h), i = m(null), n = m(null);
|
|
190
|
+
return j(() => {
|
|
191
|
+
if (!e) return;
|
|
192
|
+
const c = i.current, l = n.current;
|
|
193
|
+
if (!c || !l) return;
|
|
194
|
+
const s = () => {
|
|
195
|
+
c.scrollTop = c.scrollHeight;
|
|
196
|
+
};
|
|
197
|
+
s();
|
|
198
|
+
const f = new ResizeObserver(s);
|
|
199
|
+
return f.observe(l), () => f.disconnect();
|
|
200
|
+
}, [e]), /* @__PURE__ */ o(
|
|
201
|
+
"div",
|
|
202
|
+
{
|
|
203
|
+
ref: i,
|
|
204
|
+
"data-slot": "reasoning-text",
|
|
205
|
+
className: u(
|
|
206
|
+
"aui-reasoning-text relative z-0 max-h-64 overflow-y-auto ps-6 pt-2 pb-2 leading-relaxed text-pretty",
|
|
207
|
+
"transform-gpu transition-[transform,opacity] ease-out",
|
|
208
|
+
"motion-reduce:animate-none",
|
|
209
|
+
"group-data-[state=open]/collapsible-content:animate-in",
|
|
210
|
+
"group-data-[state=closed]/collapsible-content:animate-out",
|
|
211
|
+
"group-data-[state=open]/collapsible-content:fade-in-0",
|
|
212
|
+
"group-data-[state=closed]/collapsible-content:fade-out-0",
|
|
213
|
+
"group-data-[state=open]/collapsible-content:slide-in-from-top-4",
|
|
214
|
+
"group-data-[state=closed]/collapsible-content:slide-out-to-top-4",
|
|
215
|
+
"group-data-[state=open]/collapsible-content:blur-in-[2px]",
|
|
216
|
+
"group-data-[state=closed]/collapsible-content:blur-out-[2px]",
|
|
217
|
+
"group-data-[state=open]/collapsible-content:duration-(--duration-normal)",
|
|
218
|
+
"group-data-[state=closed]/collapsible-content:duration-(--duration-normal)",
|
|
219
|
+
r
|
|
220
|
+
),
|
|
221
|
+
...a,
|
|
222
|
+
children: /* @__PURE__ */ o("div", { ref: n, className: "aui-reasoning-text-content space-y-4", children: t })
|
|
223
|
+
}
|
|
224
|
+
);
|
|
225
|
+
}
|
|
226
|
+
const Q = () => /* @__PURE__ */ o(B, {}), W = ({
|
|
227
|
+
children: r,
|
|
228
|
+
startIndex: t,
|
|
229
|
+
endIndex: a
|
|
230
|
+
}) => {
|
|
231
|
+
const e = V((i) => {
|
|
232
|
+
var l, s;
|
|
233
|
+
if (((l = i.message.status) == null ? void 0 : l.type) !== "running") return !1;
|
|
234
|
+
const n = i.message.parts.length - 1;
|
|
235
|
+
return n < 0 || ((s = i.message.parts[n]) == null ? void 0 : s.type) !== "reasoning" ? !1 : n >= t && n <= a;
|
|
236
|
+
});
|
|
237
|
+
return /* @__PURE__ */ d(C, { streaming: e, children: [
|
|
238
|
+
/* @__PURE__ */ o(k, { active: e }),
|
|
239
|
+
/* @__PURE__ */ o(z, { "aria-busy": e, children: /* @__PURE__ */ o(A, { children: r }) })
|
|
240
|
+
] });
|
|
241
|
+
}, p = w(
|
|
242
|
+
Q
|
|
243
|
+
);
|
|
244
|
+
p.displayName = "Reasoning";
|
|
245
|
+
p.Root = C;
|
|
246
|
+
p.Trigger = k;
|
|
247
|
+
p.Content = z;
|
|
248
|
+
p.Text = A;
|
|
249
|
+
p.Fade = x;
|
|
250
|
+
const X = w(W);
|
|
251
|
+
X.displayName = "ReasoningGroup";
|
|
252
|
+
export {
|
|
253
|
+
p as Reasoning,
|
|
254
|
+
z as ReasoningContent,
|
|
255
|
+
x as ReasoningFade,
|
|
256
|
+
X as ReasoningGroup,
|
|
257
|
+
C as ReasoningRoot,
|
|
258
|
+
A as ReasoningText,
|
|
259
|
+
k as ReasoningTrigger,
|
|
260
|
+
K as reasoningVariants
|
|
261
|
+
};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { ComponentProps, FC } from 'react';
|
|
2
|
+
import { SelectionToolbarPrimitive } from '@assistant-ui/react';
|
|
3
|
+
declare function SelectionToolbarRoot({ className, ...props }: ComponentProps<typeof SelectionToolbarPrimitive.Root>): import("react").JSX.Element;
|
|
4
|
+
declare function SelectionToolbarQuote({ className, children, ...props }: ComponentProps<typeof SelectionToolbarPrimitive.Quote>): import("react").JSX.Element;
|
|
5
|
+
/**
|
|
6
|
+
* Copies the current selection — the docs' "multiple actions" pattern: a
|
|
7
|
+
* plain button sibling of `Quote` inside the toolbar root.
|
|
8
|
+
*/
|
|
9
|
+
declare function SelectionToolbarCopy({ className, children, onClick, ...props }: ComponentProps<"button">): import("react").JSX.Element;
|
|
10
|
+
/**
|
|
11
|
+
* Floating toolbar that appears when text is selected in a message.
|
|
12
|
+
*
|
|
13
|
+
* Render anywhere inside `ThreadPrimitive.Root` (or any `AssistantRuntimeProvider` scope).
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```tsx
|
|
17
|
+
* <ThreadPrimitive.Root>
|
|
18
|
+
* <ThreadPrimitive.Viewport>...</ThreadPrimitive.Viewport>
|
|
19
|
+
* <SelectionToolbar />
|
|
20
|
+
* </ThreadPrimitive.Root>
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
declare const SelectionToolbarImpl: FC<ComponentProps<typeof SelectionToolbarRoot>>;
|
|
24
|
+
declare const SelectionToolbar: typeof SelectionToolbarImpl & {
|
|
25
|
+
Root: typeof SelectionToolbarRoot;
|
|
26
|
+
Quote: typeof SelectionToolbarQuote;
|
|
27
|
+
Copy: typeof SelectionToolbarCopy;
|
|
28
|
+
};
|
|
29
|
+
export { SelectionToolbar, SelectionToolbarRoot, SelectionToolbarQuote, SelectionToolbarCopy, };
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsxs as l, jsx as t, Fragment as m } from "react/jsx-runtime";
|
|
3
|
+
import { memo as f } from "react";
|
|
4
|
+
import { SelectionToolbarPrimitive as p } from "@assistant-ui/react";
|
|
5
|
+
import { Quote as y, Copy as S } from "../../lib/icons.js";
|
|
6
|
+
import { cn as i } from "../../lib/cn.js";
|
|
7
|
+
function d({
|
|
8
|
+
className: o,
|
|
9
|
+
...e
|
|
10
|
+
}) {
|
|
11
|
+
return /* @__PURE__ */ t(
|
|
12
|
+
p.Root,
|
|
13
|
+
{
|
|
14
|
+
"data-slot": "selection-toolbar",
|
|
15
|
+
className: i(
|
|
16
|
+
"bg-popover flex items-center gap-1 rounded-lg border px-1 py-1 shadow-md",
|
|
17
|
+
o
|
|
18
|
+
),
|
|
19
|
+
...e
|
|
20
|
+
}
|
|
21
|
+
);
|
|
22
|
+
}
|
|
23
|
+
function u({
|
|
24
|
+
className: o,
|
|
25
|
+
children: e,
|
|
26
|
+
...r
|
|
27
|
+
}) {
|
|
28
|
+
return /* @__PURE__ */ t(
|
|
29
|
+
p.Quote,
|
|
30
|
+
{
|
|
31
|
+
"data-slot": "selection-toolbar-quote",
|
|
32
|
+
className: i(
|
|
33
|
+
"text-popover-foreground hover:bg-accent flex items-center gap-1.5 rounded-md px-2.5 py-1 text-sm transition-colors",
|
|
34
|
+
o
|
|
35
|
+
),
|
|
36
|
+
...r,
|
|
37
|
+
children: e ?? /* @__PURE__ */ l(m, { children: [
|
|
38
|
+
/* @__PURE__ */ t(y, { className: "size-3.5" }),
|
|
39
|
+
"Quote"
|
|
40
|
+
] })
|
|
41
|
+
}
|
|
42
|
+
);
|
|
43
|
+
}
|
|
44
|
+
function b({
|
|
45
|
+
className: o,
|
|
46
|
+
children: e,
|
|
47
|
+
onClick: r,
|
|
48
|
+
...g
|
|
49
|
+
}) {
|
|
50
|
+
return /* @__PURE__ */ t(
|
|
51
|
+
"button",
|
|
52
|
+
{
|
|
53
|
+
type: "button",
|
|
54
|
+
"data-slot": "selection-toolbar-copy",
|
|
55
|
+
className: i(
|
|
56
|
+
"text-popover-foreground hover:bg-accent flex items-center gap-1.5 rounded-md px-2.5 py-1 text-sm transition-colors",
|
|
57
|
+
o
|
|
58
|
+
),
|
|
59
|
+
onClick: (x) => {
|
|
60
|
+
var a, c, s;
|
|
61
|
+
(c = navigator.clipboard) == null || c.writeText(
|
|
62
|
+
((a = window.getSelection()) == null ? void 0 : a.toString()) ?? ""
|
|
63
|
+
), (s = window.getSelection()) == null || s.removeAllRanges(), r == null || r(x);
|
|
64
|
+
},
|
|
65
|
+
...g,
|
|
66
|
+
children: e ?? /* @__PURE__ */ l(m, { children: [
|
|
67
|
+
/* @__PURE__ */ t(S, { className: "size-3.5" }),
|
|
68
|
+
"Copy"
|
|
69
|
+
] })
|
|
70
|
+
}
|
|
71
|
+
);
|
|
72
|
+
}
|
|
73
|
+
const v = ({
|
|
74
|
+
className: o,
|
|
75
|
+
...e
|
|
76
|
+
}) => /* @__PURE__ */ l(d, { className: o, ...e, children: [
|
|
77
|
+
/* @__PURE__ */ t(u, {}),
|
|
78
|
+
/* @__PURE__ */ t(b, {})
|
|
79
|
+
] }), n = f(
|
|
80
|
+
v
|
|
81
|
+
);
|
|
82
|
+
n.displayName = "SelectionToolbar";
|
|
83
|
+
n.Root = d;
|
|
84
|
+
n.Quote = u;
|
|
85
|
+
n.Copy = b;
|
|
86
|
+
export {
|
|
87
|
+
n as SelectionToolbar,
|
|
88
|
+
b as SelectionToolbarCopy,
|
|
89
|
+
u as SelectionToolbarQuote,
|
|
90
|
+
d as SelectionToolbarRoot
|
|
91
|
+
};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { ComponentProps, ReactNode } from 'react';
|
|
2
|
+
import { Renderer } from '@openuidev/react-lang';
|
|
3
|
+
/**
|
|
4
|
+
* The OpenUI Lang library used to render fenced `openui-lang` answers. ADS
|
|
5
|
+
* ships no default library — the host injects its own component registry via
|
|
6
|
+
* {@link OpenUiLibraryProvider}. Absent a provider, structured answers fall
|
|
7
|
+
* back to Markdown (see {@link SmartMessageText}).
|
|
8
|
+
*/
|
|
9
|
+
type OpenUiLibrary = ComponentProps<typeof Renderer>["library"];
|
|
10
|
+
export declare function OpenUiLibraryProvider({ library, children, }: {
|
|
11
|
+
library: OpenUiLibrary;
|
|
12
|
+
children: ReactNode;
|
|
13
|
+
}): import("react").JSX.Element;
|
|
14
|
+
export declare const SmartMessageText: import('react').MemoExoticComponent<() => import("react").JSX.Element>;
|
|
15
|
+
export {};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as t } from "react/jsx-runtime";
|
|
3
|
+
import { createContext as c, memo as p, useContext as m } from "react";
|
|
4
|
+
import { useMessagePartText as u } from "@assistant-ui/react";
|
|
5
|
+
import { Renderer as d } from "@openuidev/react-lang";
|
|
6
|
+
import { MarkdownText as l } from "./markdown-text.js";
|
|
7
|
+
const i = c(null);
|
|
8
|
+
function M({
|
|
9
|
+
library: e,
|
|
10
|
+
children: r
|
|
11
|
+
}) {
|
|
12
|
+
return /* @__PURE__ */ t(i.Provider, { value: e, children: r });
|
|
13
|
+
}
|
|
14
|
+
const x = /```openui-lang\r?\n([\s\S]*?)(?:\r?\n```|$)/;
|
|
15
|
+
function f(e) {
|
|
16
|
+
const r = e.match(x);
|
|
17
|
+
return r ? r[1].replace(/```$/, "").trimEnd() : null;
|
|
18
|
+
}
|
|
19
|
+
const g = () => {
|
|
20
|
+
var o;
|
|
21
|
+
const e = u(), r = m(i), s = e.type === "text" ? e.text : "", n = f(s), a = e.status.type === "running";
|
|
22
|
+
return n && r ? /* @__PURE__ */ t("div", { className: "ads-openui my-1", children: /* @__PURE__ */ t(d, { response: n, library: r, isStreaming: a }) }) : (n && typeof process < "u" && ((o = process.env) == null ? void 0 : o.NODE_ENV) !== "production" && console.warn(
|
|
23
|
+
"[ADS] SmartMessageText got an openui-lang answer but no OpenUiLibraryProvider is present; falling back to Markdown. Wrap the Thread in <OpenUiLibraryProvider library={…}>."
|
|
24
|
+
), /* @__PURE__ */ t(l, {}));
|
|
25
|
+
}, P = p(g);
|
|
26
|
+
export {
|
|
27
|
+
M as OpenUiLibraryProvider,
|
|
28
|
+
P as SmartMessageText
|
|
29
|
+
};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { ComponentProps } from 'react';
|
|
2
|
+
import { VariantProps } from 'class-variance-authority';
|
|
3
|
+
import { SourceMessagePartComponent } from '@assistant-ui/react';
|
|
4
|
+
import { badgeVariants } from './badge';
|
|
5
|
+
declare function SourceIcon({ url, className, faviconUrl, ...props }: ComponentProps<"span"> & {
|
|
6
|
+
url: string;
|
|
7
|
+
faviconUrl?: (domain: string) => string;
|
|
8
|
+
}): import("react").JSX.Element;
|
|
9
|
+
declare function SourceTitle({ className, ...props }: ComponentProps<"span">): import("react").JSX.Element;
|
|
10
|
+
export type SourceProps = ComponentProps<"a"> & VariantProps<typeof badgeVariants>;
|
|
11
|
+
declare function Source({ className, variant, size, target, rel, ...props }: SourceProps): import("react").JSX.Element;
|
|
12
|
+
declare const Sources: SourceMessagePartComponent & {
|
|
13
|
+
Root: typeof Source;
|
|
14
|
+
Icon: typeof SourceIcon;
|
|
15
|
+
Title: typeof SourceTitle;
|
|
16
|
+
};
|
|
17
|
+
export { Sources, Source, SourceIcon, SourceTitle, badgeVariants as sourceVariants, };
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsxs as l, jsx as r } from "react/jsx-runtime";
|
|
3
|
+
import { memo as g, useState as x } from "react";
|
|
4
|
+
import { FileText as b } from "../../lib/icons.js";
|
|
5
|
+
import { cn as t } from "../../lib/cn.js";
|
|
6
|
+
import { Badge as S, badgeVariants as v } from "./badge.js";
|
|
7
|
+
const m = (e) => {
|
|
8
|
+
try {
|
|
9
|
+
return new URL(e).hostname.replace(/^www\./, "");
|
|
10
|
+
} catch {
|
|
11
|
+
return e;
|
|
12
|
+
}
|
|
13
|
+
}, y = (e) => `https://icons.duckduckgo.com/ip3/${e}.ico`;
|
|
14
|
+
function d({
|
|
15
|
+
url: e,
|
|
16
|
+
className: o,
|
|
17
|
+
faviconUrl: n = y,
|
|
18
|
+
...c
|
|
19
|
+
}) {
|
|
20
|
+
const i = m(e), s = n(i), [h, p] = x(void 0);
|
|
21
|
+
return h === s ? /* @__PURE__ */ r(
|
|
22
|
+
"span",
|
|
23
|
+
{
|
|
24
|
+
"data-slot": "source-icon-fallback",
|
|
25
|
+
className: t(
|
|
26
|
+
"bg-muted flex size-3 shrink-0 items-center justify-center rounded-sm text-[10px] font-medium",
|
|
27
|
+
o
|
|
28
|
+
),
|
|
29
|
+
...c,
|
|
30
|
+
children: i.charAt(0).toUpperCase() || "?"
|
|
31
|
+
}
|
|
32
|
+
) : /* @__PURE__ */ r(
|
|
33
|
+
"img",
|
|
34
|
+
{
|
|
35
|
+
"data-slot": "source-icon",
|
|
36
|
+
src: s,
|
|
37
|
+
alt: "",
|
|
38
|
+
className: t("size-3 shrink-0 rounded-sm", o),
|
|
39
|
+
onError: () => p(s),
|
|
40
|
+
...c
|
|
41
|
+
}
|
|
42
|
+
);
|
|
43
|
+
}
|
|
44
|
+
function a({ className: e, ...o }) {
|
|
45
|
+
return /* @__PURE__ */ r(
|
|
46
|
+
"span",
|
|
47
|
+
{
|
|
48
|
+
"data-slot": "source-title",
|
|
49
|
+
className: t("max-w-37.5 truncate", e),
|
|
50
|
+
...o
|
|
51
|
+
}
|
|
52
|
+
);
|
|
53
|
+
}
|
|
54
|
+
function N({ className: e, ...o }) {
|
|
55
|
+
return /* @__PURE__ */ r(
|
|
56
|
+
"span",
|
|
57
|
+
{
|
|
58
|
+
"data-slot": "source-document-icon",
|
|
59
|
+
className: t(
|
|
60
|
+
"text-muted-foreground flex size-3 shrink-0 items-center justify-center",
|
|
61
|
+
e
|
|
62
|
+
),
|
|
63
|
+
...o,
|
|
64
|
+
children: /* @__PURE__ */ r(b, { className: "size-3" })
|
|
65
|
+
}
|
|
66
|
+
);
|
|
67
|
+
}
|
|
68
|
+
function f({
|
|
69
|
+
className: e,
|
|
70
|
+
variant: o,
|
|
71
|
+
size: n,
|
|
72
|
+
target: c = "_blank",
|
|
73
|
+
rel: i = "noopener noreferrer",
|
|
74
|
+
...s
|
|
75
|
+
}) {
|
|
76
|
+
return /* @__PURE__ */ r(
|
|
77
|
+
"a",
|
|
78
|
+
{
|
|
79
|
+
"data-slot": "source",
|
|
80
|
+
className: t(
|
|
81
|
+
v({ variant: o, size: n }),
|
|
82
|
+
"focus-visible:border-ring focus-visible:ring-ring/50 cursor-pointer outline-none focus-visible:ring-[3px]",
|
|
83
|
+
e
|
|
84
|
+
),
|
|
85
|
+
target: c,
|
|
86
|
+
rel: i,
|
|
87
|
+
...s
|
|
88
|
+
}
|
|
89
|
+
);
|
|
90
|
+
}
|
|
91
|
+
const k = (e) => {
|
|
92
|
+
if (e.sourceType === "url" && e.url) {
|
|
93
|
+
const o = m(e.url), n = e.title || o;
|
|
94
|
+
return /* @__PURE__ */ l(f, { href: e.url, children: [
|
|
95
|
+
/* @__PURE__ */ r(d, { url: e.url }),
|
|
96
|
+
/* @__PURE__ */ r(a, { children: n })
|
|
97
|
+
] });
|
|
98
|
+
}
|
|
99
|
+
return e.sourceType === "document" ? /* @__PURE__ */ r(
|
|
100
|
+
S,
|
|
101
|
+
{
|
|
102
|
+
variant: "secondary",
|
|
103
|
+
className: "focus-visible:border-ring focus-visible:ring-ring/50 outline-none focus-visible:ring-[3px]",
|
|
104
|
+
children: /* @__PURE__ */ l("span", { "data-slot": "source", className: "inline-flex items-center gap-1.5", children: [
|
|
105
|
+
/* @__PURE__ */ r(N, {}),
|
|
106
|
+
/* @__PURE__ */ r(a, { children: e.title })
|
|
107
|
+
] })
|
|
108
|
+
}
|
|
109
|
+
) : null;
|
|
110
|
+
}, u = g(k);
|
|
111
|
+
u.displayName = "Sources";
|
|
112
|
+
u.Root = f;
|
|
113
|
+
u.Icon = d;
|
|
114
|
+
u.Title = a;
|
|
115
|
+
export {
|
|
116
|
+
f as Source,
|
|
117
|
+
d as SourceIcon,
|
|
118
|
+
a as SourceTitle,
|
|
119
|
+
u as Sources,
|
|
120
|
+
v as sourceVariants
|
|
121
|
+
};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { FC } from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* Welcome-screen suggestion chips. Renders the thread's configured
|
|
4
|
+
* suggestions (`ThreadPrimitive.Suggestions`); each chip sends on click.
|
|
5
|
+
*/
|
|
6
|
+
export declare const ThreadSuggestions: FC;
|
|
7
|
+
export declare const ThreadSuggestionItem: FC;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as e, jsxs as r } from "react/jsx-runtime";
|
|
3
|
+
import { Button as i } from "../ui/button.js";
|
|
4
|
+
import { SuggestionPrimitive as t, ThreadPrimitive as o } from "@assistant-ui/react";
|
|
5
|
+
const l = () => /* @__PURE__ */ e("div", { className: "aui-thread-welcome-suggestions flex w-full flex-wrap items-center justify-center gap-2 px-4", children: /* @__PURE__ */ e(o.Suggestions, { children: () => /* @__PURE__ */ e(s, {}) }) }), s = () => /* @__PURE__ */ e("div", { className: "aui-thread-welcome-suggestion-display fade-in slide-in-from-bottom-2 animate-in fill-mode-both duration-(--duration-normal)", children: /* @__PURE__ */ e(t.Trigger, { send: !0, asChild: !0, children: /* @__PURE__ */ r(
|
|
6
|
+
i,
|
|
7
|
+
{
|
|
8
|
+
variant: "ghost",
|
|
9
|
+
className: "aui-thread-welcome-suggestion text-foreground hover:bg-muted border-border/60 h-auto gap-1.5 rounded-full border px-3.5 py-1.5 text-xs font-normal whitespace-nowrap transition-colors",
|
|
10
|
+
children: [
|
|
11
|
+
/* @__PURE__ */ e(t.Title, { className: "aui-thread-welcome-suggestion-text-1" }),
|
|
12
|
+
/* @__PURE__ */ e(t.Description, { className: "aui-thread-welcome-suggestion-text-2 empty:hidden" })
|
|
13
|
+
]
|
|
14
|
+
}
|
|
15
|
+
) }) });
|
|
16
|
+
export {
|
|
17
|
+
s as ThreadSuggestionItem,
|
|
18
|
+
l as ThreadSuggestions
|
|
19
|
+
};
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { ComponentType, PropsWithChildren } from 'react';
|
|
2
|
+
import { AssistantState, MessagePrimitive, ToolCallMessagePartComponent } from '@assistant-ui/react';
|
|
3
|
+
export type ThreadGroupPart = MessagePrimitive.GroupedParts.GroupPart;
|
|
4
|
+
/**
|
|
5
|
+
* Optional component overrides for the thread. `AssistantMessage` and
|
|
6
|
+
* `Welcome` replace whole sections; the remaining slots override how the
|
|
7
|
+
* assistant message renders tool calls and part groups. Tool UIs registered
|
|
8
|
+
* by name (toolkit `render`, `useAssistantDataUI`) take precedence over
|
|
9
|
+
* `ToolFallback`.
|
|
10
|
+
*/
|
|
11
|
+
export type ThreadComponents = {
|
|
12
|
+
AssistantMessage?: ComponentType | undefined;
|
|
13
|
+
/** Optional identity shown beside every assistant turn. */
|
|
14
|
+
AssistantAvatar?: ComponentType | undefined;
|
|
15
|
+
Welcome?: ComponentType | undefined;
|
|
16
|
+
/** Replaces the left-side composer controls (context, upload, harness). */
|
|
17
|
+
ComposerAccessories?: ComponentType | undefined;
|
|
18
|
+
ToolFallback?: ToolCallMessagePartComponent | undefined;
|
|
19
|
+
ToolGroup?: ComponentType<PropsWithChildren<{
|
|
20
|
+
group: ThreadGroupPart;
|
|
21
|
+
}>> | undefined;
|
|
22
|
+
ReasoningGroup?: ComponentType<PropsWithChildren<{
|
|
23
|
+
group: ThreadGroupPart;
|
|
24
|
+
}>> | undefined;
|
|
25
|
+
/** Wraps the whole chain-of-thought group (reasoning + tool groups). */
|
|
26
|
+
ChainOfThoughtGroup?: ComponentType<PropsWithChildren<{
|
|
27
|
+
group: ThreadGroupPart;
|
|
28
|
+
}>> | undefined;
|
|
29
|
+
};
|
|
30
|
+
export type ThreadProps = {
|
|
31
|
+
components?: ThreadComponents | undefined;
|
|
32
|
+
/** Registers ADS's typed `render_answer` Tool UI. Enabled by default. */
|
|
33
|
+
isAnswerToolEnabled?: boolean | undefined;
|
|
34
|
+
};
|
|
35
|
+
export declare const EMPTY_COMPONENTS: ThreadComponents;
|
|
36
|
+
export declare const ThreadComponentsContext: import('react').Context<ThreadComponents>;
|
|
37
|
+
export declare const isNewChatView: (s: AssistantState) => boolean;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { createContext as t } from "react";
|
|
3
|
+
const o = {}, s = t(o), a = (e) => e.thread.messages.length === 0 && (!e.thread.isLoading || e.threads.isLoading);
|
|
4
|
+
export {
|
|
5
|
+
o as EMPTY_COMPONENTS,
|
|
6
|
+
s as ThreadComponentsContext,
|
|
7
|
+
a as isNewChatView
|
|
8
|
+
};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { ThreadProps } from './thread-context';
|
|
2
|
+
import { FC } from 'react';
|
|
3
|
+
export { ComposerPlaceholdersProvider } from './composer';
|
|
4
|
+
export type { ThreadComponents, ThreadGroupPart, ThreadProps, } from './thread-context';
|
|
5
|
+
export declare const Thread: FC<ThreadProps>;
|