@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,131 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as n, jsxs as b, Fragment as y } from "react/jsx-runtime";
|
|
3
|
+
import { Collapsible as D, CollapsibleTrigger as A, CollapsibleContent as E } from "../collapsible.js";
|
|
4
|
+
import { Brain as O, ChevronDown as _ } from "../../lib/icons.js";
|
|
5
|
+
import { cn as p } from "../../lib/cn.js";
|
|
6
|
+
import { createContext as k, memo as g, useState as f, useEffect as N, useRef as M, useCallback as P, useContext as S } from "react";
|
|
7
|
+
function T({
|
|
8
|
+
prop: t,
|
|
9
|
+
defaultProp: e,
|
|
10
|
+
onChange: o
|
|
11
|
+
}) {
|
|
12
|
+
const [s, c] = f(e), a = t !== void 0, u = a ? t : s, i = M(o);
|
|
13
|
+
i.current = o;
|
|
14
|
+
const l = P(
|
|
15
|
+
(r) => {
|
|
16
|
+
var d;
|
|
17
|
+
a || c(r), (d = i.current) == null || d.call(i, r);
|
|
18
|
+
},
|
|
19
|
+
[a]
|
|
20
|
+
);
|
|
21
|
+
return [u, l];
|
|
22
|
+
}
|
|
23
|
+
const w = k(null), j = () => {
|
|
24
|
+
const t = S(w);
|
|
25
|
+
if (!t)
|
|
26
|
+
throw new Error("Reasoning components must be used within Reasoning");
|
|
27
|
+
return t;
|
|
28
|
+
}, z = 1e3, I = 1e3, L = g(
|
|
29
|
+
({
|
|
30
|
+
className: t,
|
|
31
|
+
isStreaming: e = !1,
|
|
32
|
+
open: o,
|
|
33
|
+
defaultOpen: s = !0,
|
|
34
|
+
onOpenChange: c,
|
|
35
|
+
duration: a,
|
|
36
|
+
children: u,
|
|
37
|
+
...i
|
|
38
|
+
}) => {
|
|
39
|
+
const [l, r] = T({
|
|
40
|
+
prop: o,
|
|
41
|
+
defaultProp: s,
|
|
42
|
+
onChange: c
|
|
43
|
+
}), [d, h] = T({
|
|
44
|
+
prop: a,
|
|
45
|
+
defaultProp: void 0
|
|
46
|
+
}), [C, R] = f(!1), [m, x] = f(null);
|
|
47
|
+
return N(() => {
|
|
48
|
+
e ? m === null && x(Date.now()) : m !== null && (h(Math.ceil((Date.now() - m) / I)), x(null));
|
|
49
|
+
}, [e, m, h]), N(() => {
|
|
50
|
+
if (s && !e && l && !C) {
|
|
51
|
+
const v = setTimeout(() => {
|
|
52
|
+
r(!1), R(!0);
|
|
53
|
+
}, z);
|
|
54
|
+
return () => clearTimeout(v);
|
|
55
|
+
}
|
|
56
|
+
}, [e, l, s, r, C]), /* @__PURE__ */ n(
|
|
57
|
+
w.Provider,
|
|
58
|
+
{
|
|
59
|
+
value: { isStreaming: e, isOpen: l, setIsOpen: r, duration: d },
|
|
60
|
+
children: /* @__PURE__ */ n(
|
|
61
|
+
D,
|
|
62
|
+
{
|
|
63
|
+
className: p("mb-4", t),
|
|
64
|
+
onOpenChange: r,
|
|
65
|
+
open: l,
|
|
66
|
+
...i,
|
|
67
|
+
children: u
|
|
68
|
+
}
|
|
69
|
+
)
|
|
70
|
+
}
|
|
71
|
+
);
|
|
72
|
+
}
|
|
73
|
+
), U = (t, e) => t || e === 0 ? /* @__PURE__ */ n("span", { className: "shimmer text-foreground/40", children: "Thinking…" }) : e === void 0 ? /* @__PURE__ */ n("span", { children: "Thought for a few seconds" }) : /* @__PURE__ */ b("span", { children: [
|
|
74
|
+
"Thought for ",
|
|
75
|
+
/* @__PURE__ */ n("span", { className: "tabular-nums", children: e }),
|
|
76
|
+
" seconds"
|
|
77
|
+
] }), B = g(
|
|
78
|
+
({
|
|
79
|
+
className: t,
|
|
80
|
+
children: e,
|
|
81
|
+
getThinkingMessage: o = U,
|
|
82
|
+
...s
|
|
83
|
+
}) => {
|
|
84
|
+
const { isStreaming: c, isOpen: a, duration: u } = j();
|
|
85
|
+
return /* @__PURE__ */ n(
|
|
86
|
+
A,
|
|
87
|
+
{
|
|
88
|
+
className: p(
|
|
89
|
+
"flex w-full items-center gap-2 text-base text-secondary transition-colors hover:text-foreground",
|
|
90
|
+
t
|
|
91
|
+
),
|
|
92
|
+
...s,
|
|
93
|
+
children: e ?? /* @__PURE__ */ b(y, { children: [
|
|
94
|
+
/* @__PURE__ */ n(O, { className: "size-4" }),
|
|
95
|
+
o(c, u),
|
|
96
|
+
/* @__PURE__ */ n(
|
|
97
|
+
_,
|
|
98
|
+
{
|
|
99
|
+
className: p(
|
|
100
|
+
"size-4 transition-transform duration-(--duration-fast) ease-out motion-reduce:transition-none",
|
|
101
|
+
a ? "rotate-180" : "rotate-0"
|
|
102
|
+
)
|
|
103
|
+
}
|
|
104
|
+
)
|
|
105
|
+
] })
|
|
106
|
+
}
|
|
107
|
+
);
|
|
108
|
+
}
|
|
109
|
+
), F = g(
|
|
110
|
+
({ className: t, children: e, ...o }) => /* @__PURE__ */ n(
|
|
111
|
+
E,
|
|
112
|
+
{
|
|
113
|
+
className: p(
|
|
114
|
+
"mt-4 text-base text-secondary outline-none",
|
|
115
|
+
"data-[state=closed]:fade-out-0 data-[state=closed]:slide-out-to-top-2 data-[state=open]:slide-in-from-top-2 data-[state=closed]:animate-out data-[state=open]:animate-in motion-reduce:animate-none",
|
|
116
|
+
t
|
|
117
|
+
),
|
|
118
|
+
...o,
|
|
119
|
+
children: /* @__PURE__ */ n("div", { className: "leading-relaxed whitespace-pre-wrap", children: e })
|
|
120
|
+
}
|
|
121
|
+
)
|
|
122
|
+
);
|
|
123
|
+
L.displayName = "Reasoning";
|
|
124
|
+
B.displayName = "ReasoningTrigger";
|
|
125
|
+
F.displayName = "ReasoningContent";
|
|
126
|
+
export {
|
|
127
|
+
L as Reasoning,
|
|
128
|
+
F as ReasoningContent,
|
|
129
|
+
B as ReasoningTrigger,
|
|
130
|
+
j as useReasoning
|
|
131
|
+
};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { ElementType, JSX } from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* Shimmer — an animated sweep across a line of text, for loading / "thinking"
|
|
4
|
+
* states. Ported from Vercel AI Elements (`elements.ai-sdk.dev`) onto ADS
|
|
5
|
+
* tokens.
|
|
6
|
+
*
|
|
7
|
+
* The effect is a `bg-clip-text` gradient: the resting text paints in
|
|
8
|
+
* `--text-secondary`, and a moving band of `--background` (the page white)
|
|
9
|
+
* sweeps across, momentarily lifting the ink toward the surface color. Upstream
|
|
10
|
+
* referenced the shadcn `--color-*` aliases, which ADS keeps in `@theme inline`
|
|
11
|
+
* (compiled away, not emitted at runtime) — so this port reads the raw `:root`
|
|
12
|
+
* tokens instead.
|
|
13
|
+
*
|
|
14
|
+
* It is a continuous ambient loop (like `Spinner` / `--duration-pulse`), so the
|
|
15
|
+
* `linear` timing is intentional and exempt from the <300ms UI-motion rule.
|
|
16
|
+
* Reduced-motion viewers get the static muted text with no sweep.
|
|
17
|
+
*/
|
|
18
|
+
export type TextShimmerProps = {
|
|
19
|
+
children: string;
|
|
20
|
+
as?: ElementType;
|
|
21
|
+
className?: string;
|
|
22
|
+
duration?: number;
|
|
23
|
+
spread?: number;
|
|
24
|
+
};
|
|
25
|
+
export declare const Shimmer: import('react').MemoExoticComponent<({ children, as: Component, className, duration, spread, }: TextShimmerProps) => JSX.Element>;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as m } from "react/jsx-runtime";
|
|
3
|
+
import { memo as c, useMemo as p } from "react";
|
|
4
|
+
import { useReducedMotion as d, motion as g } from "motion/react";
|
|
5
|
+
import { cn as u } from "../../lib/cn.js";
|
|
6
|
+
const b = ({
|
|
7
|
+
children: e,
|
|
8
|
+
as: o = "p",
|
|
9
|
+
className: r,
|
|
10
|
+
duration: n = 2,
|
|
11
|
+
spread: t = 2
|
|
12
|
+
}) => {
|
|
13
|
+
const a = d(), i = g.create(
|
|
14
|
+
o
|
|
15
|
+
), s = p(
|
|
16
|
+
() => ((e == null ? void 0 : e.length) ?? 0) * t,
|
|
17
|
+
[e, t]
|
|
18
|
+
);
|
|
19
|
+
return /* @__PURE__ */ m(
|
|
20
|
+
i,
|
|
21
|
+
{
|
|
22
|
+
animate: a ? void 0 : { backgroundPosition: "0% center" },
|
|
23
|
+
className: u(
|
|
24
|
+
"relative inline-block bg-[length:250%_100%,auto] bg-clip-text text-transparent",
|
|
25
|
+
"[--bg:linear-gradient(90deg,transparent_calc(50%_-_var(--spread)),var(--background),transparent_calc(50%_+_var(--spread)))] [background-repeat:no-repeat,padding-box]",
|
|
26
|
+
r
|
|
27
|
+
),
|
|
28
|
+
initial: { backgroundPosition: "100% center" },
|
|
29
|
+
style: {
|
|
30
|
+
"--spread": `${s}px`,
|
|
31
|
+
backgroundImage: "var(--bg), linear-gradient(var(--text-secondary), var(--text-secondary))"
|
|
32
|
+
},
|
|
33
|
+
transition: a ? void 0 : {
|
|
34
|
+
repeat: Number.POSITIVE_INFINITY,
|
|
35
|
+
duration: n,
|
|
36
|
+
ease: "linear"
|
|
37
|
+
},
|
|
38
|
+
children: e
|
|
39
|
+
}
|
|
40
|
+
);
|
|
41
|
+
}, k = c(b);
|
|
42
|
+
export {
|
|
43
|
+
k as Shimmer
|
|
44
|
+
};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { ComponentProps } from 'react';
|
|
2
|
+
import { Button } from '../button';
|
|
3
|
+
export type SpeechInputProps = Omit<ComponentProps<typeof Button>, "children" | "onError"> & {
|
|
4
|
+
/** Fires with each finalized phrase (interim results are ignored). */
|
|
5
|
+
onTranscriptionChange?: (text: string) => void;
|
|
6
|
+
/**
|
|
7
|
+
* Fallback for browsers without the Web Speech API (Firefox / Safari).
|
|
8
|
+
* Receives the recorded audio blob and should resolve to the transcribed
|
|
9
|
+
* text, which is then passed to `onTranscriptionChange`.
|
|
10
|
+
*/
|
|
11
|
+
onAudioRecorded?: (audioBlob: Blob) => Promise<string>;
|
|
12
|
+
/** Fires on permission / recognition failures (e.g. `"not-allowed"`). */
|
|
13
|
+
onError?: (error: string) => void;
|
|
14
|
+
lang?: string;
|
|
15
|
+
};
|
|
16
|
+
export declare const SpeechInput: ({ className, onTranscriptionChange, onAudioRecorded, onError, lang, disabled, ...props }: SpeechInputProps) => import("react").JSX.Element;
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsxs as J, jsx as f } from "react/jsx-runtime";
|
|
3
|
+
import { useState as b, useRef as l, useEffect as Y, useCallback as I } from "react";
|
|
4
|
+
import { Button as K } from "../button.js";
|
|
5
|
+
import { Spinner as Q } from "../spinner.js";
|
|
6
|
+
import { Stop as V, MicOff as W, Mic as X } from "../../lib/icons.js";
|
|
7
|
+
import { cn as _ } from "../../lib/cn.js";
|
|
8
|
+
const Z = () => window.SpeechRecognition ?? window.webkitSpeechRecognition, $ = () => typeof window > "u" ? "none" : "SpeechRecognition" in window || "webkitSpeechRecognition" in window ? "speech-recognition" : "MediaRecorder" in window && "mediaDevices" in navigator ? "media-recorder" : "none", ce = ({
|
|
9
|
+
className: C,
|
|
10
|
+
onTranscriptionChange: M,
|
|
11
|
+
onAudioRecorded: R,
|
|
12
|
+
onError: x,
|
|
13
|
+
lang: D = "en-US",
|
|
14
|
+
disabled: F,
|
|
15
|
+
...O
|
|
16
|
+
}) => {
|
|
17
|
+
const [s, d] = b(!1), [L, z] = b(!1), [o] = b($), [T, N] = b(!1), p = l(null), g = l(null), m = l(null), y = l([]), u = l(M), h = l(R), n = l(x);
|
|
18
|
+
u.current = M, h.current = R, n.current = x, Y(() => {
|
|
19
|
+
if (o !== "speech-recognition")
|
|
20
|
+
return;
|
|
21
|
+
const t = Z();
|
|
22
|
+
if (!t)
|
|
23
|
+
return;
|
|
24
|
+
const e = new t();
|
|
25
|
+
e.continuous = !0, e.interimResults = !0, e.lang = D;
|
|
26
|
+
const c = () => d(!0), v = () => d(!1), w = (r) => {
|
|
27
|
+
var A, G;
|
|
28
|
+
const i = r;
|
|
29
|
+
let a = "";
|
|
30
|
+
for (let k = i.resultIndex; k < i.results.length; k += 1) {
|
|
31
|
+
const P = i.results[k];
|
|
32
|
+
P.isFinal && (a += ((A = P[0]) == null ? void 0 : A.transcript) ?? "");
|
|
33
|
+
}
|
|
34
|
+
a && ((G = u.current) == null || G.call(u, a));
|
|
35
|
+
}, S = (r) => {
|
|
36
|
+
var i;
|
|
37
|
+
d(!1), (i = n.current) == null || i.call(n, r.error);
|
|
38
|
+
};
|
|
39
|
+
return e.addEventListener("start", c), e.addEventListener("end", v), e.addEventListener("result", w), e.addEventListener("error", S), p.current = e, N(!0), () => {
|
|
40
|
+
e.removeEventListener("start", c), e.removeEventListener("end", v), e.removeEventListener("result", w), e.removeEventListener("error", S), e.stop(), p.current = null, N(!1);
|
|
41
|
+
};
|
|
42
|
+
}, [o, D]), Y(
|
|
43
|
+
() => () => {
|
|
44
|
+
var t;
|
|
45
|
+
if (((t = g.current) == null ? void 0 : t.state) === "recording" && g.current.stop(), m.current)
|
|
46
|
+
for (const e of m.current.getTracks())
|
|
47
|
+
e.stop();
|
|
48
|
+
},
|
|
49
|
+
[]
|
|
50
|
+
);
|
|
51
|
+
const j = I(async () => {
|
|
52
|
+
var t;
|
|
53
|
+
if (h.current)
|
|
54
|
+
try {
|
|
55
|
+
const e = await navigator.mediaDevices.getUserMedia({ audio: !0 });
|
|
56
|
+
m.current = e;
|
|
57
|
+
const c = new MediaRecorder(e);
|
|
58
|
+
y.current = [];
|
|
59
|
+
const v = (r) => {
|
|
60
|
+
r.data.size > 0 && y.current.push(r.data);
|
|
61
|
+
}, w = async () => {
|
|
62
|
+
var i;
|
|
63
|
+
for (const a of e.getTracks())
|
|
64
|
+
a.stop();
|
|
65
|
+
m.current = null;
|
|
66
|
+
const r = new Blob(y.current, {
|
|
67
|
+
type: "audio/webm"
|
|
68
|
+
});
|
|
69
|
+
if (r.size > 0 && h.current) {
|
|
70
|
+
z(!0);
|
|
71
|
+
try {
|
|
72
|
+
const a = await h.current(r);
|
|
73
|
+
a && ((i = u.current) == null || i.call(u, a));
|
|
74
|
+
} catch {
|
|
75
|
+
} finally {
|
|
76
|
+
z(!1);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}, S = () => {
|
|
80
|
+
d(!1);
|
|
81
|
+
for (const r of e.getTracks())
|
|
82
|
+
r.stop();
|
|
83
|
+
m.current = null;
|
|
84
|
+
};
|
|
85
|
+
c.addEventListener("dataavailable", v), c.addEventListener("stop", w), c.addEventListener("error", S), g.current = c, c.start(), d(!0);
|
|
86
|
+
} catch (e) {
|
|
87
|
+
d(!1), (t = n.current) == null || t.call(
|
|
88
|
+
n,
|
|
89
|
+
e instanceof Error ? e.name : "not-allowed"
|
|
90
|
+
);
|
|
91
|
+
}
|
|
92
|
+
}, []), B = I(() => {
|
|
93
|
+
var t;
|
|
94
|
+
((t = g.current) == null ? void 0 : t.state) === "recording" && g.current.stop(), d(!1);
|
|
95
|
+
}, []), q = I(() => {
|
|
96
|
+
var t;
|
|
97
|
+
if (o === "speech-recognition" && p.current)
|
|
98
|
+
if (s)
|
|
99
|
+
p.current.stop();
|
|
100
|
+
else
|
|
101
|
+
try {
|
|
102
|
+
p.current.start();
|
|
103
|
+
} catch (e) {
|
|
104
|
+
(t = n.current) == null || t.call(
|
|
105
|
+
n,
|
|
106
|
+
e instanceof Error ? e.name : "not-allowed"
|
|
107
|
+
);
|
|
108
|
+
}
|
|
109
|
+
else o === "media-recorder" && (s ? B() : j());
|
|
110
|
+
}, [o, s, j, B]), E = o === "none" || o === "media-recorder" && !R, H = F || E || o === "speech-recognition" && !T || L, U = L ? "Transcribing" : s ? "Stop recording" : E ? "Speech input not supported" : "Start recording";
|
|
111
|
+
return /* @__PURE__ */ J("div", { className: "relative inline-flex items-center justify-center", children: [
|
|
112
|
+
s && [
|
|
113
|
+
"",
|
|
114
|
+
"[animation-delay:var(--stagger-1)]",
|
|
115
|
+
"[animation-delay:var(--stagger-2)]"
|
|
116
|
+
].map((t, e) => /* @__PURE__ */ f(
|
|
117
|
+
"span",
|
|
118
|
+
{
|
|
119
|
+
"aria-hidden": !0,
|
|
120
|
+
className: _(
|
|
121
|
+
"absolute inset-0 animate-ping rounded-full bg-danger/20",
|
|
122
|
+
"[animation-duration:var(--duration-pulse)] motion-reduce:hidden",
|
|
123
|
+
t
|
|
124
|
+
)
|
|
125
|
+
},
|
|
126
|
+
e
|
|
127
|
+
)),
|
|
128
|
+
/* @__PURE__ */ f(
|
|
129
|
+
K,
|
|
130
|
+
{
|
|
131
|
+
"aria-label": U,
|
|
132
|
+
"aria-pressed": s,
|
|
133
|
+
className: _(
|
|
134
|
+
"relative z-10 rounded-full",
|
|
135
|
+
s && "bg-danger text-danger-foreground shadow-none hover:bg-danger/90 focus-visible:ring-danger/40",
|
|
136
|
+
C
|
|
137
|
+
),
|
|
138
|
+
disabled: H,
|
|
139
|
+
size: "icon",
|
|
140
|
+
title: U,
|
|
141
|
+
variant: "secondary",
|
|
142
|
+
...O,
|
|
143
|
+
onClick: q,
|
|
144
|
+
children: L ? /* @__PURE__ */ f(Q, { size: "sm" }) : s ? /* @__PURE__ */ f(V, {}) : E ? /* @__PURE__ */ f(W, {}) : /* @__PURE__ */ f(X, {})
|
|
145
|
+
}
|
|
146
|
+
)
|
|
147
|
+
] });
|
|
148
|
+
};
|
|
149
|
+
export {
|
|
150
|
+
ce as SpeechInput
|
|
151
|
+
};
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { VariantProps } from 'class-variance-authority';
|
|
2
|
+
import * as React from "react";
|
|
3
|
+
export type TaskProgressStatus = "complete" | "active" | "pending";
|
|
4
|
+
export interface TaskProgressStep {
|
|
5
|
+
id: React.Key;
|
|
6
|
+
label: React.ReactNode;
|
|
7
|
+
/** Plain-text label used in live screen-reader announcements. */
|
|
8
|
+
accessibilityLabel?: string;
|
|
9
|
+
status: TaskProgressStatus;
|
|
10
|
+
/** Consumer-formatted elapsed time for the active step, e.g. `0:36`. */
|
|
11
|
+
elapsed?: string;
|
|
12
|
+
}
|
|
13
|
+
declare const taskProgressVariants: (props?: ({
|
|
14
|
+
isSticky?: boolean | null | undefined;
|
|
15
|
+
} & import('class-variance-authority/types').ClassProp) | undefined) => string;
|
|
16
|
+
declare const taskProgressDockVariants: (props?: ({
|
|
17
|
+
isSticky?: boolean | null | undefined;
|
|
18
|
+
} & import('class-variance-authority/types').ClassProp) | undefined) => string;
|
|
19
|
+
export interface TaskProgressDockProps extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof taskProgressDockVariants> {
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Pins TaskProgress directly above an existing chat composer and removes the
|
|
23
|
+
* seam between the two surfaces. Pass the real ADS Composer as the next child.
|
|
24
|
+
*/
|
|
25
|
+
export declare const TaskProgressDock: React.ForwardRefExoticComponent<TaskProgressDockProps & React.RefAttributes<HTMLDivElement>>;
|
|
26
|
+
export interface TaskProgressProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "children">, VariantProps<typeof taskProgressVariants> {
|
|
27
|
+
steps: readonly TaskProgressStep[];
|
|
28
|
+
/** Controlled expanded state. */
|
|
29
|
+
open?: boolean;
|
|
30
|
+
/** Initial expanded state when uncontrolled. */
|
|
31
|
+
defaultOpen?: boolean;
|
|
32
|
+
onOpenChange?: (open: boolean) => void;
|
|
33
|
+
/** Expanded header label. */
|
|
34
|
+
title?: string;
|
|
35
|
+
/** Optional collapsed-label override. Defaults to the active/latest step. */
|
|
36
|
+
summary?: React.ReactNode;
|
|
37
|
+
/** Collapsed label when no steps exist. */
|
|
38
|
+
emptyLabel?: React.ReactNode;
|
|
39
|
+
}
|
|
40
|
+
export declare const TaskProgress: React.ForwardRefExoticComponent<TaskProgressProps & React.RefAttributes<HTMLDivElement>>;
|
|
41
|
+
export {};
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as a, jsxs as n, Fragment as q } from "react/jsx-runtime";
|
|
3
|
+
import * as l from "react";
|
|
4
|
+
import { cva as C } from "class-variance-authority";
|
|
5
|
+
import { Collapsible as B, CollapsibleTrigger as G, CollapsibleContent as H } from "../collapsible.js";
|
|
6
|
+
import { Spinner as J } from "../spinner.js";
|
|
7
|
+
import { ChevronDown as K, Check as M, Clock as Q } from "../../lib/icons.js";
|
|
8
|
+
import { cn as o } from "../../lib/cn.js";
|
|
9
|
+
const U = C(
|
|
10
|
+
"w-full overflow-hidden rounded-2xl bg-card text-foreground",
|
|
11
|
+
{
|
|
12
|
+
variants: {
|
|
13
|
+
isSticky: {
|
|
14
|
+
true: "sticky top-0 z-20",
|
|
15
|
+
false: "relative"
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
defaultVariants: {
|
|
19
|
+
isSticky: !0
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
), X = C(
|
|
23
|
+
"flex w-full flex-col rounded-2xl bg-transparent [&_.aui-composer-root]:relative [&_.aui-composer-root]:z-10 [&_.aui-composer-root]:-mt-px",
|
|
24
|
+
{
|
|
25
|
+
variants: {
|
|
26
|
+
isSticky: {
|
|
27
|
+
true: "sticky bottom-0 z-20",
|
|
28
|
+
false: "relative"
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
defaultVariants: {
|
|
32
|
+
isSticky: !0
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
), w = l.createContext(!1), Y = l.forwardRef(({ className: t, isSticky: s, ...d }, f) => /* @__PURE__ */ a(w.Provider, { value: !0, children: /* @__PURE__ */ a(
|
|
36
|
+
"div",
|
|
37
|
+
{
|
|
38
|
+
ref: f,
|
|
39
|
+
"data-slot": "task-progress-dock",
|
|
40
|
+
className: o(X({ isSticky: s }), t),
|
|
41
|
+
...d
|
|
42
|
+
}
|
|
43
|
+
) }));
|
|
44
|
+
Y.displayName = "TaskProgressDock";
|
|
45
|
+
function y({ status: t }) {
|
|
46
|
+
return /* @__PURE__ */ n(
|
|
47
|
+
"span",
|
|
48
|
+
{
|
|
49
|
+
"aria-hidden": !0,
|
|
50
|
+
className: o(
|
|
51
|
+
"flex size-5 shrink-0 items-center justify-center",
|
|
52
|
+
t === "complete" && "text-success",
|
|
53
|
+
t === "active" && "text-info",
|
|
54
|
+
t === "pending" && "text-tertiary"
|
|
55
|
+
),
|
|
56
|
+
children: [
|
|
57
|
+
t === "complete" && /* @__PURE__ */ a(M, { className: "size-4", strokeWidth: 2 }),
|
|
58
|
+
t === "active" && /* @__PURE__ */ a(J, { size: "sm", color: "current", role: "presentation", "aria-hidden": !0 }),
|
|
59
|
+
t === "pending" && /* @__PURE__ */ a(Q, { className: "size-4" })
|
|
60
|
+
]
|
|
61
|
+
}
|
|
62
|
+
);
|
|
63
|
+
}
|
|
64
|
+
const Z = {
|
|
65
|
+
complete: "Complete",
|
|
66
|
+
active: "In progress",
|
|
67
|
+
pending: "Pending"
|
|
68
|
+
};
|
|
69
|
+
function N({ elapsed: t }) {
|
|
70
|
+
return t ? /* @__PURE__ */ n("span", { className: "flex shrink-0 items-center gap-3 text-xs text-tertiary tabular-nums", children: [
|
|
71
|
+
/* @__PURE__ */ a("span", { "aria-hidden": !0, className: "h-4 w-px bg-border" }),
|
|
72
|
+
/* @__PURE__ */ a("span", { "aria-label": `Elapsed ${t}`, children: t })
|
|
73
|
+
] }) : null;
|
|
74
|
+
}
|
|
75
|
+
const O = l.forwardRef(
|
|
76
|
+
({
|
|
77
|
+
className: t,
|
|
78
|
+
steps: s,
|
|
79
|
+
open: d,
|
|
80
|
+
defaultOpen: f = !1,
|
|
81
|
+
onOpenChange: u,
|
|
82
|
+
title: c = "Task progress",
|
|
83
|
+
summary: P,
|
|
84
|
+
emptyLabel: I = "No task steps",
|
|
85
|
+
isSticky: T,
|
|
86
|
+
role: $,
|
|
87
|
+
"aria-label": z,
|
|
88
|
+
"aria-busy": D,
|
|
89
|
+
...S
|
|
90
|
+
}, V) => {
|
|
91
|
+
const b = l.useContext(w), x = d !== void 0, [j, E] = l.useState(f), m = x ? d : j, i = s.findIndex((e) => e.status === "active"), p = s.reduce(
|
|
92
|
+
(e, F, W) => F.status === "complete" ? W : e,
|
|
93
|
+
-1
|
|
94
|
+
), R = s.findIndex(
|
|
95
|
+
(e) => e.status === "pending"
|
|
96
|
+
), h = i >= 0 ? i : p >= 0 ? p : R, r = h >= 0 ? s[h] : void 0, g = i >= 0 ? i + 1 : p >= 0 ? p + 1 : 0, _ = s.filter(
|
|
97
|
+
(e) => e.status === "pending"
|
|
98
|
+
).length, k = s.length > 0 && s.every((e) => e.status === "complete"), A = i >= 0 ? "active" : k ? "complete" : "pending", v = r ? r.accessibilityLabel ?? (typeof r.label == "string" ? r.label : "") : "", L = l.useCallback(
|
|
99
|
+
(e) => {
|
|
100
|
+
x || E(e), u == null || u(e);
|
|
101
|
+
},
|
|
102
|
+
[x, u]
|
|
103
|
+
);
|
|
104
|
+
return /* @__PURE__ */ n(
|
|
105
|
+
B,
|
|
106
|
+
{
|
|
107
|
+
ref: V,
|
|
108
|
+
open: m,
|
|
109
|
+
onOpenChange: L,
|
|
110
|
+
role: $ ?? "region",
|
|
111
|
+
"aria-label": z ?? c,
|
|
112
|
+
"aria-busy": D ?? (i >= 0 || void 0),
|
|
113
|
+
...S,
|
|
114
|
+
"data-slot": "task-progress",
|
|
115
|
+
"data-status": A,
|
|
116
|
+
className: o(
|
|
117
|
+
U({ isSticky: b ? !1 : T }),
|
|
118
|
+
b && "rounded-b-none",
|
|
119
|
+
t
|
|
120
|
+
),
|
|
121
|
+
children: [
|
|
122
|
+
/* @__PURE__ */ a(
|
|
123
|
+
"span",
|
|
124
|
+
{
|
|
125
|
+
className: "sr-only",
|
|
126
|
+
role: "progressbar",
|
|
127
|
+
"aria-label": c,
|
|
128
|
+
"aria-valuemin": 0,
|
|
129
|
+
"aria-valuemax": s.length,
|
|
130
|
+
"aria-valuenow": g
|
|
131
|
+
}
|
|
132
|
+
),
|
|
133
|
+
/* @__PURE__ */ a("span", { className: "sr-only", "aria-live": "polite", "aria-atomic": "true", children: k ? `All ${s.length} steps complete` : `Step ${g} of ${s.length}${v ? `: ${v}` : ""}. ${_} pending.` }),
|
|
134
|
+
/* @__PURE__ */ a(G, { asChild: !0, children: /* @__PURE__ */ n(
|
|
135
|
+
"button",
|
|
136
|
+
{
|
|
137
|
+
type: "button",
|
|
138
|
+
"aria-label": m ? `Collapse ${c}` : `Expand ${c}`,
|
|
139
|
+
className: o(
|
|
140
|
+
"flex min-h-(--panel-header-height) w-full items-center gap-3 px-4 text-left sm:px-5",
|
|
141
|
+
"rounded-t-2xl rounded-b-sm outline-none focus-visible:ring-3 focus-visible:ring-inset focus-visible:ring-ring",
|
|
142
|
+
"transition-[color,transform] duration-(--duration-fast) ease-out active:scale-(--scale-press) motion-reduce:transition-none"
|
|
143
|
+
),
|
|
144
|
+
children: [
|
|
145
|
+
m ? /* @__PURE__ */ a("span", { className: "min-w-0 flex-1 truncate text-base font-bold text-secondary", children: c }) : /* @__PURE__ */ n(q, { children: [
|
|
146
|
+
/* @__PURE__ */ a(y, { status: (r == null ? void 0 : r.status) ?? "pending" }),
|
|
147
|
+
/* @__PURE__ */ a("span", { className: "min-w-0 flex-1 truncate text-base text-primary", children: P ?? (r == null ? void 0 : r.label) ?? I }),
|
|
148
|
+
(r == null ? void 0 : r.status) === "active" && /* @__PURE__ */ a(N, { elapsed: r.elapsed })
|
|
149
|
+
] }),
|
|
150
|
+
/* @__PURE__ */ n(
|
|
151
|
+
"span",
|
|
152
|
+
{
|
|
153
|
+
"aria-hidden": !0,
|
|
154
|
+
className: "shrink-0 text-xs font-bold text-tertiary tabular-nums",
|
|
155
|
+
children: [
|
|
156
|
+
g,
|
|
157
|
+
" / ",
|
|
158
|
+
s.length
|
|
159
|
+
]
|
|
160
|
+
}
|
|
161
|
+
),
|
|
162
|
+
/* @__PURE__ */ a(
|
|
163
|
+
K,
|
|
164
|
+
{
|
|
165
|
+
"aria-hidden": !0,
|
|
166
|
+
className: o(
|
|
167
|
+
"size-4 shrink-0 text-tertiary",
|
|
168
|
+
m && "rotate-180"
|
|
169
|
+
)
|
|
170
|
+
}
|
|
171
|
+
)
|
|
172
|
+
]
|
|
173
|
+
}
|
|
174
|
+
) }),
|
|
175
|
+
/* @__PURE__ */ a(H, { className: "outline-none", children: /* @__PURE__ */ a(
|
|
176
|
+
"ol",
|
|
177
|
+
{
|
|
178
|
+
"aria-label": "Task steps",
|
|
179
|
+
className: "max-h-64 space-y-1 overflow-y-auto px-4 pb-4 sm:px-5",
|
|
180
|
+
children: s.map((e) => /* @__PURE__ */ n(
|
|
181
|
+
"li",
|
|
182
|
+
{
|
|
183
|
+
"data-status": e.status,
|
|
184
|
+
className: o(
|
|
185
|
+
"flex min-h-8 items-center gap-3 text-base",
|
|
186
|
+
e.status === "pending" ? "text-tertiary" : "text-primary"
|
|
187
|
+
),
|
|
188
|
+
children: [
|
|
189
|
+
/* @__PURE__ */ n("span", { className: "sr-only", children: [
|
|
190
|
+
Z[e.status],
|
|
191
|
+
": "
|
|
192
|
+
] }),
|
|
193
|
+
/* @__PURE__ */ a(y, { status: e.status }),
|
|
194
|
+
/* @__PURE__ */ a("span", { className: "min-w-0 flex-1 truncate", children: e.label }),
|
|
195
|
+
e.status === "active" && /* @__PURE__ */ a(N, { elapsed: e.elapsed })
|
|
196
|
+
]
|
|
197
|
+
},
|
|
198
|
+
e.id
|
|
199
|
+
))
|
|
200
|
+
}
|
|
201
|
+
) })
|
|
202
|
+
]
|
|
203
|
+
}
|
|
204
|
+
);
|
|
205
|
+
}
|
|
206
|
+
);
|
|
207
|
+
O.displayName = "TaskProgress";
|
|
208
|
+
export {
|
|
209
|
+
O as TaskProgress,
|
|
210
|
+
Y as TaskProgressDock
|
|
211
|
+
};
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { ComponentProps } from 'react';
|
|
2
|
+
import { Collapsible, CollapsibleContent, CollapsibleTrigger } from '../collapsible';
|
|
3
|
+
/**
|
|
4
|
+
* Task — a collapsible list of the steps an agent took to accomplish a goal
|
|
5
|
+
* (files searched, files read, scans run). An ADS-native port of the Vercel AI
|
|
6
|
+
* Elements `Task` component; the public API mirrors upstream 1:1.
|
|
7
|
+
*/
|
|
8
|
+
export type TaskItemFileProps = ComponentProps<"div">;
|
|
9
|
+
/** An inline file/artifact pill inside a {@link TaskItem}. */
|
|
10
|
+
export declare const TaskItemFile: {
|
|
11
|
+
({ children, className, ...props }: TaskItemFileProps): import("react").JSX.Element;
|
|
12
|
+
displayName: string;
|
|
13
|
+
};
|
|
14
|
+
export type TaskItemProps = ComponentProps<"div">;
|
|
15
|
+
export declare const TaskItem: {
|
|
16
|
+
({ children, className, ...props }: TaskItemProps): import("react").JSX.Element;
|
|
17
|
+
displayName: string;
|
|
18
|
+
};
|
|
19
|
+
export type TaskProps = ComponentProps<typeof Collapsible>;
|
|
20
|
+
export declare const Task: {
|
|
21
|
+
({ defaultOpen, className, ...props }: TaskProps): import("react").JSX.Element;
|
|
22
|
+
displayName: string;
|
|
23
|
+
};
|
|
24
|
+
export type TaskTriggerProps = ComponentProps<typeof CollapsibleTrigger> & {
|
|
25
|
+
title: string;
|
|
26
|
+
};
|
|
27
|
+
export declare const TaskTrigger: {
|
|
28
|
+
({ children, className, title, ...props }: TaskTriggerProps): import("react").JSX.Element;
|
|
29
|
+
displayName: string;
|
|
30
|
+
};
|
|
31
|
+
export type TaskContentProps = ComponentProps<typeof CollapsibleContent>;
|
|
32
|
+
export declare const TaskContent: {
|
|
33
|
+
({ children, className, ...props }: TaskContentProps): import("react").JSX.Element;
|
|
34
|
+
displayName: string;
|
|
35
|
+
};
|