@dust-tt/sparkle 0.2.617-rc-1 → 0.2.617
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/cjs/index.js +1 -1
- package/dist/esm/components/Avatar.d.ts +1 -1
- package/dist/esm/components/Avatar.js +4 -4
- package/dist/esm/components/Avatar.js.map +1 -1
- package/dist/esm/components/Button.d.ts +3 -0
- package/dist/esm/components/Button.d.ts.map +1 -1
- package/dist/esm/components/Button.js +21 -10
- package/dist/esm/components/Button.js.map +1 -1
- package/dist/esm/components/Card.d.ts +1 -0
- package/dist/esm/components/Card.d.ts.map +1 -1
- package/dist/esm/components/ConversationMessage.d.ts +4 -0
- package/dist/esm/components/ConversationMessage.d.ts.map +1 -1
- package/dist/esm/components/ConversationMessage.js +9 -4
- package/dist/esm/components/ConversationMessage.js.map +1 -1
- package/dist/esm/components/DataTable.d.ts.map +1 -1
- package/dist/esm/components/DataTable.js +12 -50
- package/dist/esm/components/DataTable.js.map +1 -1
- package/dist/esm/components/NavigationList.d.ts +4 -1
- package/dist/esm/components/NavigationList.d.ts.map +1 -1
- package/dist/esm/components/NavigationList.js +2 -2
- package/dist/esm/components/NavigationList.js.map +1 -1
- package/dist/esm/components/ScrollArea.d.ts +1 -0
- package/dist/esm/components/ScrollArea.d.ts.map +1 -1
- package/dist/esm/components/ScrollArea.js +7 -4
- package/dist/esm/components/ScrollArea.js.map +1 -1
- package/dist/esm/components/Spinner.d.ts +1 -1
- package/dist/esm/components/Spinner.js +7 -7
- package/dist/esm/components/Spinner.js.map +1 -1
- package/dist/esm/components/ToolCard.d.ts +6 -0
- package/dist/esm/components/ToolCard.d.ts.map +1 -1
- package/dist/esm/components/ToolCard.js +18 -11
- package/dist/esm/components/ToolCard.js.map +1 -1
- package/dist/esm/components/Tooltip.d.ts.map +1 -1
- package/dist/esm/components/Tooltip.js.map +1 -1
- package/dist/esm/components/WindowUtility.d.ts +3 -2
- package/dist/esm/components/WindowUtility.d.ts.map +1 -1
- package/dist/esm/components/WindowUtility.js +25 -17
- package/dist/esm/components/WindowUtility.js.map +1 -1
- package/dist/esm/components/markdown/CodeBlock.d.ts +2 -1
- package/dist/esm/components/markdown/CodeBlock.d.ts.map +1 -1
- package/dist/esm/components/markdown/CodeBlock.js +9 -2
- package/dist/esm/components/markdown/CodeBlock.js.map +1 -1
- package/dist/esm/icons/app/Mic.d.ts +5 -0
- package/dist/esm/icons/app/Mic.d.ts.map +1 -0
- package/dist/esm/icons/app/Mic.js +6 -0
- package/dist/esm/icons/app/Mic.js.map +1 -0
- package/dist/esm/icons/app/index.d.ts +1 -0
- package/dist/esm/icons/app/index.d.ts.map +1 -1
- package/dist/esm/icons/app/index.js +1 -0
- package/dist/esm/icons/app/index.js.map +1 -1
- package/dist/esm/icons/src/app/mic.svg +3 -0
- package/dist/esm/index.d.ts +1 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +1 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/stories/Avatar.stories.js +4 -4
- package/dist/esm/stories/CodeBlock.stories.d.ts +17 -0
- package/dist/esm/stories/CodeBlock.stories.d.ts.map +1 -0
- package/dist/esm/stories/CodeBlock.stories.js +125 -0
- package/dist/esm/stories/CodeBlock.stories.js.map +1 -0
- package/dist/esm/stories/ConversationMessage.stories.d.ts.map +1 -1
- package/dist/esm/stories/ConversationMessage.stories.js +3 -3
- package/dist/esm/stories/ConversationMessage.stories.js.map +1 -1
- package/dist/esm/stories/MultiPageDialog.stories.js +1 -1
- package/dist/esm/stories/MultiPageDialog.stories.js.map +1 -1
- package/dist/esm/stories/Playground.stories.d.ts.map +1 -1
- package/dist/esm/stories/Playground.stories.js +166 -29
- package/dist/esm/stories/Playground.stories.js.map +1 -1
- package/dist/esm/stories/Spinner.stories.js +3 -3
- package/dist/esm/stories/ToolCard.stories.d.ts.map +1 -1
- package/dist/esm/stories/ToolCard.stories.js +14 -6
- package/dist/esm/stories/ToolCard.stories.js.map +1 -1
- package/dist/sparkle.css +100 -0
- package/package.json +1 -1
- package/src/components/Avatar.tsx +4 -4
- package/src/components/Button.tsx +35 -7
- package/src/components/ConversationMessage.tsx +26 -7
- package/src/components/DataTable.tsx +7 -46
- package/src/components/NavigationList.tsx +7 -2
- package/src/components/ScrollArea.tsx +9 -3
- package/src/components/Spinner.tsx +7 -7
- package/src/components/ToolCard.tsx +60 -35
- package/src/components/Tooltip.tsx +49 -38
- package/src/components/WindowUtility.tsx +11 -18
- package/src/components/markdown/CodeBlock.tsx +10 -0
- package/src/icons/app/Mic.tsx +18 -0
- package/src/icons/app/index.ts +1 -0
- package/src/icons/src/app/mic.svg +3 -0
- package/src/index.ts +1 -0
- package/src/stories/Avatar.stories.tsx +4 -4
- package/src/stories/CodeBlock.stories.tsx +361 -0
- package/src/stories/ConversationMessage.stories.tsx +6 -0
- package/src/stories/MultiPageDialog.stories.tsx +1 -1
- package/src/stories/Playground.stories.tsx +311 -56
- package/src/stories/Spinner.stories.tsx +3 -3
- package/src/stories/ToolCard.stories.tsx +49 -35
|
@@ -1,72 +1,327 @@
|
|
|
1
|
-
import {} from "
|
|
2
|
-
import React from "react";
|
|
1
|
+
import React, { useEffect, useRef, useState } from "react";
|
|
3
2
|
|
|
4
3
|
import {
|
|
4
|
+
ArrowUpIcon,
|
|
5
|
+
AttachmentIcon,
|
|
6
|
+
BoltIcon,
|
|
5
7
|
Button,
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
} from "@sparkle/components";
|
|
14
|
-
import { ActionMoonIcon, ActionSunIcon, LightModeIcon } from "@sparkle/icons";
|
|
8
|
+
cn,
|
|
9
|
+
MicIcon,
|
|
10
|
+
PlusIcon,
|
|
11
|
+
RainbowEffect,
|
|
12
|
+
RobotIcon,
|
|
13
|
+
SquareIcon,
|
|
14
|
+
} from "../index_with_tw_base";
|
|
15
15
|
|
|
16
16
|
export default {
|
|
17
|
-
title: "Playground/
|
|
17
|
+
title: "Playground/Playground",
|
|
18
18
|
};
|
|
19
19
|
|
|
20
20
|
export const Demo = () => {
|
|
21
|
+
const [isFocused, setIsFocused] = useState(false);
|
|
22
|
+
const [recordState, setRecordState] = useState<
|
|
23
|
+
"idle" | "pressAndHold" | "recording"
|
|
24
|
+
>("idle");
|
|
25
|
+
const [isPressAndHold, setIsPressAndHold] = useState(false);
|
|
26
|
+
const [elapsedSeconds, setElapsedSeconds] = useState(0);
|
|
27
|
+
const divRef = useRef<HTMLDivElement>(null);
|
|
28
|
+
const recordButtonRef = useRef<HTMLButtonElement>(null);
|
|
29
|
+
const mouseDownTimeRef = useRef<number>(0);
|
|
30
|
+
|
|
31
|
+
useEffect(() => {
|
|
32
|
+
const handleClickOutside = (event: MouseEvent) => {
|
|
33
|
+
if (divRef.current && !divRef.current.contains(event.target as Node)) {
|
|
34
|
+
setIsFocused(false);
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
document.addEventListener("click", handleClickOutside);
|
|
39
|
+
return () => {
|
|
40
|
+
document.removeEventListener("click", handleClickOutside);
|
|
41
|
+
};
|
|
42
|
+
}, []);
|
|
43
|
+
|
|
44
|
+
// Timer effect for recording and press and hold states
|
|
45
|
+
useEffect(() => {
|
|
46
|
+
let interval: NodeJS.Timeout | null = null;
|
|
47
|
+
|
|
48
|
+
if (recordState === "pressAndHold" || recordState === "recording") {
|
|
49
|
+
interval = setInterval(() => {
|
|
50
|
+
setElapsedSeconds((prev) => prev + 1);
|
|
51
|
+
}, 1000);
|
|
52
|
+
} else {
|
|
53
|
+
// Reset timer when not recording or press and hold
|
|
54
|
+
setElapsedSeconds(0);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
return () => {
|
|
58
|
+
if (interval) {
|
|
59
|
+
clearInterval(interval);
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
}, [recordState]);
|
|
63
|
+
|
|
64
|
+
const handleFocus = () => {
|
|
65
|
+
setIsFocused(true);
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
const formatTime = (seconds: number) => {
|
|
69
|
+
const mins = Math.floor(seconds / 60);
|
|
70
|
+
const secs = seconds % 60;
|
|
71
|
+
return `${mins}:${secs.toString().padStart(2, "0")}`;
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
const handleRecordMouseDown = () => {
|
|
75
|
+
console.log("MouseDown - recordState:", recordState);
|
|
76
|
+
mouseDownTimeRef.current = Date.now();
|
|
77
|
+
if (recordState === "idle") {
|
|
78
|
+
setRecordState("pressAndHold");
|
|
79
|
+
setIsPressAndHold(true);
|
|
80
|
+
console.log("Set to pressAndHold, isPressAndHold = true");
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
const handleRecordMouseUp = () => {
|
|
85
|
+
const holdDuration = Date.now() - mouseDownTimeRef.current;
|
|
86
|
+
console.log(
|
|
87
|
+
"MouseUp - recordState:",
|
|
88
|
+
recordState,
|
|
89
|
+
"holdDuration:",
|
|
90
|
+
holdDuration
|
|
91
|
+
);
|
|
92
|
+
if (recordState === "pressAndHold") {
|
|
93
|
+
setRecordState("idle");
|
|
94
|
+
console.log("Set to idle from pressAndHold");
|
|
95
|
+
// If held for more than 200ms, it was a press-and-hold, so ignore the upcoming click
|
|
96
|
+
if (holdDuration > 200) {
|
|
97
|
+
console.log("Was press-and-hold, keeping isPressAndHold = true");
|
|
98
|
+
// Keep isPressAndHold true to ignore the click
|
|
99
|
+
} else {
|
|
100
|
+
console.log("Was quick click, setting isPressAndHold = false");
|
|
101
|
+
setIsPressAndHold(false);
|
|
102
|
+
// For quick clicks, directly start recording
|
|
103
|
+
console.log("Starting recording from quick click");
|
|
104
|
+
setRecordState("recording");
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
const handleRecordClick = () => {
|
|
110
|
+
console.log(
|
|
111
|
+
"Click - recordState:",
|
|
112
|
+
recordState,
|
|
113
|
+
"isPressAndHold:",
|
|
114
|
+
isPressAndHold
|
|
115
|
+
);
|
|
116
|
+
|
|
117
|
+
// Handle stop recording
|
|
118
|
+
if (recordState === "recording") {
|
|
119
|
+
console.log("Setting to idle (stop recording)");
|
|
120
|
+
setRecordState("idle");
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
// Only handle click if we're not in a press-and-hold sequence
|
|
125
|
+
if (!isPressAndHold) {
|
|
126
|
+
if (recordState === "idle") {
|
|
127
|
+
console.log("Setting to recording");
|
|
128
|
+
setRecordState("recording");
|
|
129
|
+
}
|
|
130
|
+
} else {
|
|
131
|
+
console.log("Ignoring click - was press and hold");
|
|
132
|
+
// Reset the flag after ignoring the click
|
|
133
|
+
setIsPressAndHold(false);
|
|
134
|
+
}
|
|
135
|
+
};
|
|
136
|
+
|
|
137
|
+
const handleRecordMouseLeave = () => {
|
|
138
|
+
if (recordState === "pressAndHold") {
|
|
139
|
+
setRecordState("idle");
|
|
140
|
+
setIsPressAndHold(false);
|
|
141
|
+
}
|
|
142
|
+
};
|
|
143
|
+
|
|
21
144
|
return (
|
|
22
|
-
<div className="s-flex s-h-
|
|
23
|
-
<
|
|
24
|
-
<
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
<Page.Vertical sizing="grow" align="stretch" gap="xs">
|
|
44
|
-
<Label>Keyboard Shortcuts</Label>
|
|
45
|
-
<DropdownMenu>
|
|
46
|
-
<DropdownMenuTrigger asChild>
|
|
47
|
-
<div className="s-copy-sm s-flex s-items-center s-gap-2">
|
|
48
|
-
Send message
|
|
145
|
+
<div className="s-flex s-h-[600px] s-w-full s-items-end s-justify-center s-border s-border-warning/20 sm:s-p-0 md:s-p-6">
|
|
146
|
+
<div className="s-flex s-w-full s-max-w-[900px] s-flex-1 s-p-0">
|
|
147
|
+
<RainbowEffect
|
|
148
|
+
containerClassName="s-w-full"
|
|
149
|
+
className="s-w-full"
|
|
150
|
+
size={isFocused ? "large" : "medium"}
|
|
151
|
+
>
|
|
152
|
+
<div
|
|
153
|
+
ref={divRef}
|
|
154
|
+
onClick={handleFocus}
|
|
155
|
+
className={cn(
|
|
156
|
+
"s-relative s-flex s-w-full s-flex-row",
|
|
157
|
+
"s-border s-border-border/0 s-bg-primary-50 s-transition-all md:s-rounded-3xl",
|
|
158
|
+
isFocused
|
|
159
|
+
? "s-border-border md:s-ring-2 md:s-ring-highlight-300 md:s-ring-offset-2"
|
|
160
|
+
: ""
|
|
161
|
+
)}
|
|
162
|
+
>
|
|
163
|
+
<div className="s-flex s-w-full s-flex-col">
|
|
164
|
+
<div className="s-h-full s-w-full s-p-5">Ask a question</div>
|
|
165
|
+
<div className="s-flex s-w-full s-gap-2 s-p-4">
|
|
49
166
|
<Button
|
|
50
167
|
variant="outline"
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
168
|
+
icon={PlusIcon}
|
|
169
|
+
size="sm"
|
|
170
|
+
tooltip="Attach a document"
|
|
171
|
+
className="md:s-hidden"
|
|
54
172
|
/>
|
|
173
|
+
<div className="s-hidden s-gap-0 md:s-flex">
|
|
174
|
+
<Button
|
|
175
|
+
variant="ghost"
|
|
176
|
+
icon={AttachmentIcon}
|
|
177
|
+
size="xs"
|
|
178
|
+
tooltip="Attach a document"
|
|
179
|
+
/>
|
|
180
|
+
<Button
|
|
181
|
+
variant="ghost"
|
|
182
|
+
icon={BoltIcon}
|
|
183
|
+
size="xs"
|
|
184
|
+
tooltip="Add functionality"
|
|
185
|
+
/>
|
|
186
|
+
<Button
|
|
187
|
+
variant="ghost"
|
|
188
|
+
icon={RobotIcon}
|
|
189
|
+
size="xs"
|
|
190
|
+
tooltip="Mention an Agent"
|
|
191
|
+
/>
|
|
192
|
+
</div>
|
|
193
|
+
<div className="s-grow" />
|
|
194
|
+
<div className="s-flex s-items-center s-gap-2 md:s-gap-1">
|
|
195
|
+
<div
|
|
196
|
+
id="Recording"
|
|
197
|
+
className={cn(
|
|
198
|
+
"s-duration-600 s-flex s-items-center s-justify-end s-gap-2 s-overflow-hidden s-px-2 s-transition-all s-ease-in-out",
|
|
199
|
+
recordState === "pressAndHold" ||
|
|
200
|
+
recordState === "recording"
|
|
201
|
+
? "s-w-24 s-opacity-100"
|
|
202
|
+
: "s-w-6 s-opacity-0"
|
|
203
|
+
)}
|
|
204
|
+
>
|
|
205
|
+
<div className="s-heading-xs s-font-mono">
|
|
206
|
+
{formatTime(elapsedSeconds)}
|
|
207
|
+
</div>
|
|
208
|
+
<div className="s-flex s-h-5 s-items-center s-gap-0.5">
|
|
209
|
+
<div className="s-h-[22%] s-min-h-1 s-w-0.5 s-rounded-full s-bg-muted-foreground" />
|
|
210
|
+
<div className="s-h-[33%] s-min-h-1 s-w-0.5 s-rounded-full s-bg-muted-foreground" />
|
|
211
|
+
<div className="s-h-[18%] s-min-h-1 s-w-0.5 s-rounded-full s-bg-muted-foreground" />
|
|
212
|
+
<div className="s-h-[64%] s-min-h-1 s-w-0.5 s-rounded-full s-bg-muted-foreground" />
|
|
213
|
+
<div className="s-h-[98%] s-min-h-1 s-w-0.5 s-rounded-full s-bg-muted-foreground" />
|
|
214
|
+
<div className="s-h-[56%] s-min-h-1 s-w-0.5 s-rounded-full s-bg-muted-foreground" />
|
|
215
|
+
<div className="s-h-[6%] s-min-h-1 s-w-0.5 s-rounded-full s-bg-muted-foreground" />
|
|
216
|
+
<div className="s-h-[34%] s-min-h-1 s-w-0.5 s-rounded-full s-bg-muted-foreground" />
|
|
217
|
+
<div className="s-h-[76%] s-min-h-1 s-w-0.5 s-rounded-full s-bg-muted-foreground" />
|
|
218
|
+
<div className="s-h-[46%] s-min-h-1 s-w-0.5 s-rounded-full s-bg-muted-foreground" />
|
|
219
|
+
<div className="s-h-[12%] s-min-h-1 s-w-0.5 s-rounded-full s-bg-muted-foreground" />
|
|
220
|
+
<div className="s-h-[22%] s-min-h-1 s-w-0.5 s-rounded-full s-bg-muted-foreground" />
|
|
221
|
+
</div>
|
|
222
|
+
</div>
|
|
223
|
+
{/* Large */}
|
|
224
|
+
<Button
|
|
225
|
+
id={
|
|
226
|
+
recordState === "recording"
|
|
227
|
+
? "Stop Recording Button"
|
|
228
|
+
: "Record Button"
|
|
229
|
+
}
|
|
230
|
+
className="s-hidden md:s-flex"
|
|
231
|
+
ref={recordButtonRef}
|
|
232
|
+
variant={
|
|
233
|
+
recordState === "recording" ? "highlight" : "ghost"
|
|
234
|
+
}
|
|
235
|
+
icon={recordState === "recording" ? SquareIcon : MicIcon}
|
|
236
|
+
size="xs"
|
|
237
|
+
tooltip={
|
|
238
|
+
recordState === "recording"
|
|
239
|
+
? "Stop recording"
|
|
240
|
+
: recordState === "pressAndHold"
|
|
241
|
+
? ""
|
|
242
|
+
: "Click, or Press & Hold to record"
|
|
243
|
+
}
|
|
244
|
+
label={recordState === "recording" ? "Stop" : undefined}
|
|
245
|
+
onClick={handleRecordClick}
|
|
246
|
+
onMouseDown={
|
|
247
|
+
recordState === "recording"
|
|
248
|
+
? undefined
|
|
249
|
+
: handleRecordMouseDown
|
|
250
|
+
}
|
|
251
|
+
onMouseUp={
|
|
252
|
+
recordState === "recording"
|
|
253
|
+
? undefined
|
|
254
|
+
: handleRecordMouseUp
|
|
255
|
+
}
|
|
256
|
+
onMouseLeave={
|
|
257
|
+
recordState === "recording"
|
|
258
|
+
? undefined
|
|
259
|
+
: handleRecordMouseLeave
|
|
260
|
+
}
|
|
261
|
+
/>
|
|
262
|
+
<Button
|
|
263
|
+
variant="highlight"
|
|
264
|
+
icon={ArrowUpIcon}
|
|
265
|
+
size="mini"
|
|
266
|
+
tooltip="Send message"
|
|
267
|
+
isRounded
|
|
268
|
+
disabled={recordState === "recording"}
|
|
269
|
+
className="s-hidden md:s-flex"
|
|
270
|
+
/>
|
|
271
|
+
{/* Small */}
|
|
272
|
+
<Button
|
|
273
|
+
id={
|
|
274
|
+
recordState === "recording"
|
|
275
|
+
? "Stop Recording Button"
|
|
276
|
+
: "Record Button"
|
|
277
|
+
}
|
|
278
|
+
className="md:s-hidden"
|
|
279
|
+
ref={recordButtonRef}
|
|
280
|
+
variant={
|
|
281
|
+
recordState === "recording" ? "highlight" : "ghost"
|
|
282
|
+
}
|
|
283
|
+
icon={recordState === "recording" ? SquareIcon : MicIcon}
|
|
284
|
+
size="sm"
|
|
285
|
+
tooltip={
|
|
286
|
+
recordState === "recording"
|
|
287
|
+
? "Stop recording"
|
|
288
|
+
: recordState === "pressAndHold"
|
|
289
|
+
? ""
|
|
290
|
+
: "Click, or Press & Hold to record"
|
|
291
|
+
}
|
|
292
|
+
label={recordState === "recording" ? "Stop" : undefined}
|
|
293
|
+
onClick={handleRecordClick}
|
|
294
|
+
onMouseDown={
|
|
295
|
+
recordState === "recording"
|
|
296
|
+
? undefined
|
|
297
|
+
: handleRecordMouseDown
|
|
298
|
+
}
|
|
299
|
+
onMouseUp={
|
|
300
|
+
recordState === "recording"
|
|
301
|
+
? undefined
|
|
302
|
+
: handleRecordMouseUp
|
|
303
|
+
}
|
|
304
|
+
onMouseLeave={
|
|
305
|
+
recordState === "recording"
|
|
306
|
+
? undefined
|
|
307
|
+
: handleRecordMouseLeave
|
|
308
|
+
}
|
|
309
|
+
/>
|
|
310
|
+
<Button
|
|
311
|
+
variant="highlight"
|
|
312
|
+
icon={ArrowUpIcon}
|
|
313
|
+
size="sm"
|
|
314
|
+
tooltip="Send message"
|
|
315
|
+
isRounded
|
|
316
|
+
disabled={recordState === "recording"}
|
|
317
|
+
className="md:s-hidden"
|
|
318
|
+
/>
|
|
319
|
+
</div>
|
|
55
320
|
</div>
|
|
56
|
-
</
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
<DropdownMenuShortcut>↵</DropdownMenuShortcut>
|
|
61
|
-
</DropdownMenuItem>
|
|
62
|
-
<DropdownMenuItem>
|
|
63
|
-
Send message when pressing Cmd+Enter
|
|
64
|
-
<DropdownMenuShortcut>⌘ + ↵</DropdownMenuShortcut>
|
|
65
|
-
</DropdownMenuItem>
|
|
66
|
-
</DropdownMenuContent>
|
|
67
|
-
</DropdownMenu>
|
|
68
|
-
</Page.Vertical>
|
|
69
|
-
</Page.Layout>
|
|
321
|
+
</div>
|
|
322
|
+
</div>
|
|
323
|
+
</RainbowEffect>
|
|
324
|
+
</div>
|
|
70
325
|
</div>
|
|
71
326
|
);
|
|
72
327
|
};
|
|
@@ -89,13 +89,13 @@ export const SpinnerExample = () => {
|
|
|
89
89
|
</div>
|
|
90
90
|
<div className="s-flex s-gap-4">
|
|
91
91
|
<div className="s-p-20">
|
|
92
|
-
<Spinner variant="color" size="
|
|
92
|
+
<Spinner variant="color" size="2xl" />
|
|
93
93
|
</div>
|
|
94
94
|
<div className="s-p-20">
|
|
95
|
-
<Spinner variant="mono" size="
|
|
95
|
+
<Spinner variant="mono" size="2xl" />
|
|
96
96
|
</div>
|
|
97
97
|
<div className="s-p-20">
|
|
98
|
-
<Spinner variant="rose300" size="
|
|
98
|
+
<Spinner variant="rose300" size="2xl" />
|
|
99
99
|
</div>
|
|
100
100
|
</div>
|
|
101
101
|
</div>
|
|
@@ -13,41 +13,55 @@ const meta: Meta<typeof ToolCard> = {
|
|
|
13
13
|
export default meta;
|
|
14
14
|
|
|
15
15
|
export const Examples = () => (
|
|
16
|
-
<div className="s-
|
|
17
|
-
{/* Not added */}
|
|
18
|
-
<
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
16
|
+
<div className="s-flex s-gap-3">
|
|
17
|
+
{/* Not added - default md size */}
|
|
18
|
+
<div className="s-w-80">
|
|
19
|
+
<ToolCard
|
|
20
|
+
icon={BookOpenIcon}
|
|
21
|
+
cardContainerClassName="s-h-36"
|
|
22
|
+
label="Image Generation"
|
|
23
|
+
description="Agent can generate images (GPT Image 1)."
|
|
24
|
+
isSelected
|
|
25
|
+
canAdd
|
|
26
|
+
onClick={() => console.log("Add Image Generation")}
|
|
27
|
+
toolInfo={{
|
|
28
|
+
label: "Click here",
|
|
29
|
+
onClick: () => console.log("Click here"),
|
|
30
|
+
}}
|
|
31
|
+
/>
|
|
32
|
+
</div>
|
|
26
33
|
|
|
27
|
-
{/* Added */}
|
|
28
|
-
<
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
34
|
+
{/* Added - xl size */}
|
|
35
|
+
<div className="s-w-80">
|
|
36
|
+
<ToolCard
|
|
37
|
+
cardContainerClassName="s-h-36"
|
|
38
|
+
icon={CommandLineIcon}
|
|
39
|
+
label="Reasoning"
|
|
40
|
+
description={
|
|
41
|
+
<>
|
|
42
|
+
Agent can decide to trigger a reasoning model for complex tasks.
|
|
43
|
+
Agent can decide to trigger a reasoning model for complex tasks.
|
|
44
|
+
Agent can decide to trigger a reasoning model for complex tasks.
|
|
45
|
+
Agent can decide to trigger a reasoning model for complex tasks.
|
|
46
|
+
Agent can decide to trigger a reasoning model for complex tasks.
|
|
47
|
+
Agent can decide to trigger a reasoning model for complex tasks.{" "}
|
|
48
|
+
<Hoverable
|
|
49
|
+
href="https://example.com/help"
|
|
50
|
+
target="_blank"
|
|
51
|
+
rel="noopener noreferrer"
|
|
52
|
+
variant="primary"
|
|
53
|
+
>
|
|
54
|
+
the docs
|
|
55
|
+
</Hoverable>
|
|
56
|
+
</>
|
|
57
|
+
}
|
|
58
|
+
isSelected
|
|
59
|
+
canAdd={false}
|
|
60
|
+
toolInfo={{
|
|
61
|
+
label: "Click here",
|
|
62
|
+
onClick: () => console.log("Click here"),
|
|
63
|
+
}}
|
|
64
|
+
/>
|
|
65
|
+
</div>
|
|
52
66
|
</div>
|
|
53
67
|
);
|