@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.
Files changed (96) hide show
  1. package/dist/cjs/index.js +1 -1
  2. package/dist/esm/components/Avatar.d.ts +1 -1
  3. package/dist/esm/components/Avatar.js +4 -4
  4. package/dist/esm/components/Avatar.js.map +1 -1
  5. package/dist/esm/components/Button.d.ts +3 -0
  6. package/dist/esm/components/Button.d.ts.map +1 -1
  7. package/dist/esm/components/Button.js +21 -10
  8. package/dist/esm/components/Button.js.map +1 -1
  9. package/dist/esm/components/Card.d.ts +1 -0
  10. package/dist/esm/components/Card.d.ts.map +1 -1
  11. package/dist/esm/components/ConversationMessage.d.ts +4 -0
  12. package/dist/esm/components/ConversationMessage.d.ts.map +1 -1
  13. package/dist/esm/components/ConversationMessage.js +9 -4
  14. package/dist/esm/components/ConversationMessage.js.map +1 -1
  15. package/dist/esm/components/DataTable.d.ts.map +1 -1
  16. package/dist/esm/components/DataTable.js +12 -50
  17. package/dist/esm/components/DataTable.js.map +1 -1
  18. package/dist/esm/components/NavigationList.d.ts +4 -1
  19. package/dist/esm/components/NavigationList.d.ts.map +1 -1
  20. package/dist/esm/components/NavigationList.js +2 -2
  21. package/dist/esm/components/NavigationList.js.map +1 -1
  22. package/dist/esm/components/ScrollArea.d.ts +1 -0
  23. package/dist/esm/components/ScrollArea.d.ts.map +1 -1
  24. package/dist/esm/components/ScrollArea.js +7 -4
  25. package/dist/esm/components/ScrollArea.js.map +1 -1
  26. package/dist/esm/components/Spinner.d.ts +1 -1
  27. package/dist/esm/components/Spinner.js +7 -7
  28. package/dist/esm/components/Spinner.js.map +1 -1
  29. package/dist/esm/components/ToolCard.d.ts +6 -0
  30. package/dist/esm/components/ToolCard.d.ts.map +1 -1
  31. package/dist/esm/components/ToolCard.js +18 -11
  32. package/dist/esm/components/ToolCard.js.map +1 -1
  33. package/dist/esm/components/Tooltip.d.ts.map +1 -1
  34. package/dist/esm/components/Tooltip.js.map +1 -1
  35. package/dist/esm/components/WindowUtility.d.ts +3 -2
  36. package/dist/esm/components/WindowUtility.d.ts.map +1 -1
  37. package/dist/esm/components/WindowUtility.js +25 -17
  38. package/dist/esm/components/WindowUtility.js.map +1 -1
  39. package/dist/esm/components/markdown/CodeBlock.d.ts +2 -1
  40. package/dist/esm/components/markdown/CodeBlock.d.ts.map +1 -1
  41. package/dist/esm/components/markdown/CodeBlock.js +9 -2
  42. package/dist/esm/components/markdown/CodeBlock.js.map +1 -1
  43. package/dist/esm/icons/app/Mic.d.ts +5 -0
  44. package/dist/esm/icons/app/Mic.d.ts.map +1 -0
  45. package/dist/esm/icons/app/Mic.js +6 -0
  46. package/dist/esm/icons/app/Mic.js.map +1 -0
  47. package/dist/esm/icons/app/index.d.ts +1 -0
  48. package/dist/esm/icons/app/index.d.ts.map +1 -1
  49. package/dist/esm/icons/app/index.js +1 -0
  50. package/dist/esm/icons/app/index.js.map +1 -1
  51. package/dist/esm/icons/src/app/mic.svg +3 -0
  52. package/dist/esm/index.d.ts +1 -0
  53. package/dist/esm/index.d.ts.map +1 -1
  54. package/dist/esm/index.js +1 -0
  55. package/dist/esm/index.js.map +1 -1
  56. package/dist/esm/stories/Avatar.stories.js +4 -4
  57. package/dist/esm/stories/CodeBlock.stories.d.ts +17 -0
  58. package/dist/esm/stories/CodeBlock.stories.d.ts.map +1 -0
  59. package/dist/esm/stories/CodeBlock.stories.js +125 -0
  60. package/dist/esm/stories/CodeBlock.stories.js.map +1 -0
  61. package/dist/esm/stories/ConversationMessage.stories.d.ts.map +1 -1
  62. package/dist/esm/stories/ConversationMessage.stories.js +3 -3
  63. package/dist/esm/stories/ConversationMessage.stories.js.map +1 -1
  64. package/dist/esm/stories/MultiPageDialog.stories.js +1 -1
  65. package/dist/esm/stories/MultiPageDialog.stories.js.map +1 -1
  66. package/dist/esm/stories/Playground.stories.d.ts.map +1 -1
  67. package/dist/esm/stories/Playground.stories.js +166 -29
  68. package/dist/esm/stories/Playground.stories.js.map +1 -1
  69. package/dist/esm/stories/Spinner.stories.js +3 -3
  70. package/dist/esm/stories/ToolCard.stories.d.ts.map +1 -1
  71. package/dist/esm/stories/ToolCard.stories.js +14 -6
  72. package/dist/esm/stories/ToolCard.stories.js.map +1 -1
  73. package/dist/sparkle.css +100 -0
  74. package/package.json +1 -1
  75. package/src/components/Avatar.tsx +4 -4
  76. package/src/components/Button.tsx +35 -7
  77. package/src/components/ConversationMessage.tsx +26 -7
  78. package/src/components/DataTable.tsx +7 -46
  79. package/src/components/NavigationList.tsx +7 -2
  80. package/src/components/ScrollArea.tsx +9 -3
  81. package/src/components/Spinner.tsx +7 -7
  82. package/src/components/ToolCard.tsx +60 -35
  83. package/src/components/Tooltip.tsx +49 -38
  84. package/src/components/WindowUtility.tsx +11 -18
  85. package/src/components/markdown/CodeBlock.tsx +10 -0
  86. package/src/icons/app/Mic.tsx +18 -0
  87. package/src/icons/app/index.ts +1 -0
  88. package/src/icons/src/app/mic.svg +3 -0
  89. package/src/index.ts +1 -0
  90. package/src/stories/Avatar.stories.tsx +4 -4
  91. package/src/stories/CodeBlock.stories.tsx +361 -0
  92. package/src/stories/ConversationMessage.stories.tsx +6 -0
  93. package/src/stories/MultiPageDialog.stories.tsx +1 -1
  94. package/src/stories/Playground.stories.tsx +311 -56
  95. package/src/stories/Spinner.stories.tsx +3 -3
  96. package/src/stories/ToolCard.stories.tsx +49 -35
@@ -1,72 +1,327 @@
1
- import {} from "@radix-ui/react-dropdown-menu";
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
- DropdownMenu,
7
- DropdownMenuContent,
8
- DropdownMenuItem,
9
- DropdownMenuShortcut,
10
- DropdownMenuTrigger,
11
- Label,
12
- Page,
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/Demo",
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-full s-w-full s-cursor-pointer s-flex-col s-gap-2">
23
- <Page.Layout direction="horizontal">
24
- <Page.Vertical sizing="grow" align="stretch" gap="xs">
25
- <Label>Theme</Label>
26
- <DropdownMenu>
27
- <DropdownMenuTrigger asChild>
28
- <Button
29
- variant="outline"
30
- icon={LightModeIcon}
31
- label="light"
32
- isSelect
33
- className="s-w-fit"
34
- />
35
- </DropdownMenuTrigger>
36
- <DropdownMenuContent>
37
- <DropdownMenuItem icon={ActionSunIcon} label="Light" />
38
- <DropdownMenuItem icon={ActionMoonIcon} label="Dark" />
39
- <DropdownMenuItem icon={LightModeIcon} label="System" />
40
- </DropdownMenuContent>
41
- </DropdownMenu>
42
- </Page.Vertical>
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
- label="Cmd+Enter (⌘+↵)"
52
- isSelect
53
- className="s-w-fit"
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
- </DropdownMenuTrigger>
57
- <DropdownMenuContent>
58
- <DropdownMenuItem>
59
- Send message when pressing Enter
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="xxl" />
92
+ <Spinner variant="color" size="2xl" />
93
93
  </div>
94
94
  <div className="s-p-20">
95
- <Spinner variant="mono" size="xxl" />
95
+ <Spinner variant="mono" size="2xl" />
96
96
  </div>
97
97
  <div className="s-p-20">
98
- <Spinner variant="rose300" size="xxl" />
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-grid s-grid-cols-2 s-gap-3">
17
- {/* Not added */}
18
- <ToolCard
19
- icon={BookOpenIcon}
20
- label="Image Generation"
21
- description="Agent can generate images (GPT Image 1)."
22
- isSelected={false}
23
- canAdd={true}
24
- onClick={() => console.log("Add Image Generation")}
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
- <ToolCard
29
- icon={CommandLineIcon}
30
- label="Reasoning"
31
- description={
32
- <>
33
- Agent can decide to trigger a reasoning model for complex tasks. Agent
34
- can decide to trigger a reasoning model for complex tasks. Agent can
35
- decide to trigger a reasoning model for complex tasks. Agent can
36
- decide to trigger a reasoning model for complex tasks. Agent can
37
- decide to trigger a reasoning model for complex tasks. Agent can
38
- decide to trigger a reasoning model for complex tasks.{" "}
39
- <Hoverable
40
- href="https://example.com/help"
41
- target="_blank"
42
- rel="noopener noreferrer"
43
- variant="primary"
44
- >
45
- the docs
46
- </Hoverable>
47
- </>
48
- }
49
- isSelected={true}
50
- canAdd={false}
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
  );