@dust-tt/sparkle 0.2.474 → 0.2.476
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/Dropdown.d.ts +2 -0
- package/dist/esm/components/Dropdown.d.ts.map +1 -1
- package/dist/esm/components/Dropdown.js +19 -18
- package/dist/esm/components/Dropdown.js.map +1 -1
- package/dist/esm/components/SearchDropdownMenu.d.ts.map +1 -1
- package/dist/esm/components/SearchDropdownMenu.js +4 -0
- package/dist/esm/components/SearchDropdownMenu.js.map +1 -1
- package/dist/esm/components/Tree.d.ts.map +1 -1
- package/dist/esm/components/Tree.js +1 -2
- package/dist/esm/components/Tree.js.map +1 -1
- package/dist/esm/stories/Dropdown.stories.d.ts +1 -0
- package/dist/esm/stories/Dropdown.stories.d.ts.map +1 -1
- package/dist/esm/stories/Dropdown.stories.js +34 -22
- package/dist/esm/stories/Dropdown.stories.js.map +1 -1
- package/dist/esm/stories/Tree.stories.d.ts.map +1 -1
- package/dist/esm/stories/Tree.stories.js +8 -3
- package/dist/esm/stories/Tree.stories.js.map +1 -1
- package/dist/sparkle.css +12 -4
- package/package.json +1 -1
- package/src/components/Dropdown.tsx +79 -41
- package/src/components/SearchDropdownMenu.tsx +4 -0
- package/src/components/Tree.tsx +1 -2
- package/src/stories/Dropdown.stories.tsx +134 -92
- package/src/stories/Tree.stories.tsx +18 -1
|
@@ -12,6 +12,7 @@ import {
|
|
|
12
12
|
DropdownMenuPortal,
|
|
13
13
|
DropdownMenuRadioGroup,
|
|
14
14
|
DropdownMenuRadioItem,
|
|
15
|
+
DropdownMenuSearchbar,
|
|
15
16
|
DropdownMenuSeparator,
|
|
16
17
|
DropdownMenuStaticItem,
|
|
17
18
|
DropdownMenuSub,
|
|
@@ -55,8 +56,7 @@ import {
|
|
|
55
56
|
MagnifyingGlassIcon,
|
|
56
57
|
PlusIcon,
|
|
57
58
|
RobotIcon,
|
|
58
|
-
|
|
59
|
-
SearchInput,
|
|
59
|
+
SearchDropdownMenu,
|
|
60
60
|
SuitcaseIcon,
|
|
61
61
|
UserGroupIcon,
|
|
62
62
|
UserIcon,
|
|
@@ -87,6 +87,38 @@ export const PickerExamples = () => (
|
|
|
87
87
|
</div>
|
|
88
88
|
);
|
|
89
89
|
|
|
90
|
+
export const SearchDropdownMenuExamples = () => {
|
|
91
|
+
const [searchInputValue, setSearchInputValue] = React.useState("");
|
|
92
|
+
|
|
93
|
+
const items = ["Profile", "Billing", "Team", "Subscription"];
|
|
94
|
+
|
|
95
|
+
const filteredItems = items.filter((item) =>
|
|
96
|
+
item.toLowerCase().includes(searchInputValue.toLowerCase())
|
|
97
|
+
);
|
|
98
|
+
|
|
99
|
+
return (
|
|
100
|
+
<div className="s-flex s-h-80 s-w-full s-flex-col s-items-center s-justify-center s-gap-4 s-text-foreground dark:s-text-foreground-night">
|
|
101
|
+
<div>
|
|
102
|
+
<SearchDropdownMenu
|
|
103
|
+
searchInputValue={searchInputValue}
|
|
104
|
+
setSearchInputValue={setSearchInputValue}
|
|
105
|
+
>
|
|
106
|
+
{filteredItems.map((item) => (
|
|
107
|
+
<DropdownMenuItem
|
|
108
|
+
key={item}
|
|
109
|
+
label={item}
|
|
110
|
+
onClick={() => {
|
|
111
|
+
setSearchInputValue("");
|
|
112
|
+
window.alert(item);
|
|
113
|
+
}}
|
|
114
|
+
/>
|
|
115
|
+
))}
|
|
116
|
+
</SearchDropdownMenu>
|
|
117
|
+
</div>
|
|
118
|
+
</div>
|
|
119
|
+
);
|
|
120
|
+
};
|
|
121
|
+
|
|
90
122
|
function SimpleDropdownDemo() {
|
|
91
123
|
return (
|
|
92
124
|
<DropdownMenu>
|
|
@@ -135,7 +167,11 @@ function ComplexDropdownDemo() {
|
|
|
135
167
|
<DropdownMenuContent className="s-w-56">
|
|
136
168
|
<DropdownMenuLabel label="My Account" />
|
|
137
169
|
<DropdownMenuGroup>
|
|
138
|
-
<DropdownMenuItem
|
|
170
|
+
<DropdownMenuItem
|
|
171
|
+
icon={UserIcon}
|
|
172
|
+
label="Profile"
|
|
173
|
+
endComponent={<Button icon={ArrowUpOnSquareIcon} variant="ghost" />}
|
|
174
|
+
/>
|
|
139
175
|
<DropdownMenuItem icon={ArrowDownCircleIcon} label="Billing" />
|
|
140
176
|
<DropdownMenuItem icon={Cog6ToothIcon} label="Settings" />
|
|
141
177
|
<DropdownMenuItem icon={UserIcon} label="Keyboard shortcuts" />
|
|
@@ -155,6 +191,14 @@ function ComplexDropdownDemo() {
|
|
|
155
191
|
/>
|
|
156
192
|
<DropdownMenuSeparator />
|
|
157
193
|
<DropdownMenuItem icon={UserIcon} label="More..." />
|
|
194
|
+
<DropdownMenuItem icon={UserIcon} label="More.." />
|
|
195
|
+
<DropdownMenuItem icon={UserIcon} label="More..." />
|
|
196
|
+
<DropdownMenuItem icon={UserIcon} label="More.." />
|
|
197
|
+
<DropdownMenuItem icon={UserIcon} label="More" />
|
|
198
|
+
<DropdownMenuItem icon={UserIcon} label="More....." />
|
|
199
|
+
<DropdownMenuItem icon={UserIcon} label="More.." />
|
|
200
|
+
<DropdownMenuItem icon={UserIcon} label="More" />
|
|
201
|
+
<DropdownMenuItem icon={UserIcon} label="More...." />
|
|
158
202
|
</DropdownMenuSubContent>
|
|
159
203
|
</DropdownMenuPortal>
|
|
160
204
|
</DropdownMenuSub>
|
|
@@ -505,92 +549,90 @@ function AttachFileDemo() {
|
|
|
505
549
|
size="sm"
|
|
506
550
|
/>
|
|
507
551
|
</DropdownMenuTrigger>
|
|
508
|
-
<DropdownMenuContent
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
552
|
+
<DropdownMenuContent
|
|
553
|
+
className="s-w-[380px]"
|
|
554
|
+
dropdownHeaders={
|
|
555
|
+
<DropdownMenuSearchbar
|
|
556
|
+
value={searchText}
|
|
513
557
|
onChange={setSearchText}
|
|
514
|
-
|
|
558
|
+
name="search"
|
|
515
559
|
placeholder="Search in Dust"
|
|
516
|
-
|
|
560
|
+
button={<Button icon={ArrowUpOnSquareIcon} label="Upload File" />}
|
|
517
561
|
/>
|
|
518
|
-
|
|
519
|
-
|
|
562
|
+
}
|
|
563
|
+
>
|
|
520
564
|
<DropdownMenuSeparator />
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
<div className="s-flex s-
|
|
545
|
-
<
|
|
546
|
-
|
|
547
|
-
Search in Dust
|
|
548
|
-
</div>
|
|
565
|
+
{searchText ? (
|
|
566
|
+
filteredItems.map((item) => {
|
|
567
|
+
const randomMainIcon =
|
|
568
|
+
mainIcons[Math.floor(Math.random() * mainIcons.length)];
|
|
569
|
+
const randomExtraIcon =
|
|
570
|
+
extraIcons[Math.floor(Math.random() * extraIcons.length)];
|
|
571
|
+
return (
|
|
572
|
+
<DropdownMenuItem
|
|
573
|
+
key={item}
|
|
574
|
+
label={item}
|
|
575
|
+
description="Company Space/Notion"
|
|
576
|
+
icon={randomMainIcon}
|
|
577
|
+
extraIcon={randomExtraIcon}
|
|
578
|
+
onClick={() => {
|
|
579
|
+
setSelectedItem(item);
|
|
580
|
+
setSearchText("");
|
|
581
|
+
}}
|
|
582
|
+
truncateText
|
|
583
|
+
/>
|
|
584
|
+
);
|
|
585
|
+
})
|
|
586
|
+
) : (
|
|
587
|
+
<div className="s-flex s-h-full s-w-full s-items-center s-justify-center s-py-8">
|
|
588
|
+
<div className="s-flex s-flex-col s-items-center s-justify-center s-gap-0 s-text-center s-text-base s-font-semibold s-text-primary-400">
|
|
589
|
+
<Icon visual={MagnifyingGlassIcon} size="sm" />
|
|
590
|
+
Search in Dust
|
|
549
591
|
</div>
|
|
550
|
-
|
|
551
|
-
|
|
592
|
+
</div>
|
|
593
|
+
)}
|
|
552
594
|
</DropdownMenuContent>
|
|
553
595
|
</DropdownMenu>
|
|
554
596
|
<DropdownMenu open={openAgents} onOpenChange={setOpenAgents}>
|
|
555
597
|
<DropdownMenuTrigger asChild>
|
|
556
598
|
<Button icon={RobotIcon} variant="outline" size="sm" isSelect />
|
|
557
599
|
</DropdownMenuTrigger>
|
|
558
|
-
<DropdownMenuContent
|
|
559
|
-
|
|
560
|
-
|
|
600
|
+
<DropdownMenuContent
|
|
601
|
+
className="s-h-96 s-w-[380px]"
|
|
602
|
+
dropdownHeaders={
|
|
603
|
+
<DropdownMenuSearchbar
|
|
561
604
|
ref={agentsSearchInputRef}
|
|
562
605
|
name="search"
|
|
563
606
|
onChange={() => {}}
|
|
564
607
|
onKeyDown={() => {}}
|
|
565
608
|
placeholder="Search Agents"
|
|
566
609
|
value=""
|
|
610
|
+
button={<Button icon={PlusIcon} label="Create" />}
|
|
567
611
|
/>
|
|
568
|
-
|
|
569
|
-
|
|
612
|
+
}
|
|
613
|
+
>
|
|
570
614
|
<DropdownMenuSeparator />
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
})}
|
|
593
|
-
</ScrollArea>
|
|
615
|
+
{filteredAgents.map((agent) => {
|
|
616
|
+
return (
|
|
617
|
+
<DropdownMenuItem
|
|
618
|
+
key={agent.name}
|
|
619
|
+
label={agent.name}
|
|
620
|
+
description={agent.description}
|
|
621
|
+
icon={() => (
|
|
622
|
+
<Avatar
|
|
623
|
+
size="sm"
|
|
624
|
+
emoji={agent.emoji}
|
|
625
|
+
backgroundColor={agent.backgroundColor}
|
|
626
|
+
/>
|
|
627
|
+
)}
|
|
628
|
+
onClick={() => {
|
|
629
|
+
setSelectedItem(agent.name);
|
|
630
|
+
setSearchText("");
|
|
631
|
+
}}
|
|
632
|
+
truncateText
|
|
633
|
+
/>
|
|
634
|
+
);
|
|
635
|
+
})}
|
|
594
636
|
</DropdownMenuContent>
|
|
595
637
|
</DropdownMenu>
|
|
596
638
|
<DropdownMenu open={openToolsets} onOpenChange={setOpenToolsets}>
|
|
@@ -602,36 +644,36 @@ function AttachFileDemo() {
|
|
|
602
644
|
size="sm"
|
|
603
645
|
/>
|
|
604
646
|
</DropdownMenuTrigger>
|
|
605
|
-
<DropdownMenuContent
|
|
606
|
-
|
|
607
|
-
|
|
647
|
+
<DropdownMenuContent
|
|
648
|
+
className="s-h-96 s-w-[380px]"
|
|
649
|
+
dropdownHeaders={
|
|
650
|
+
<DropdownMenuSearchbar
|
|
608
651
|
ref={toolsetsSearchInputRef}
|
|
609
652
|
name="search"
|
|
610
653
|
onChange={() => {}}
|
|
611
654
|
onKeyDown={() => {}}
|
|
612
655
|
placeholder="Search Tools"
|
|
613
656
|
value=""
|
|
657
|
+
button={<Button icon={PlusIcon} label="Add MCP Server" />}
|
|
614
658
|
/>
|
|
615
|
-
|
|
616
|
-
|
|
659
|
+
}
|
|
660
|
+
>
|
|
617
661
|
<DropdownMenuSeparator />
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
})}
|
|
634
|
-
</ScrollArea>
|
|
662
|
+
{filteredToolsetList.map((toolset) => {
|
|
663
|
+
return (
|
|
664
|
+
<DropdownMenuItem
|
|
665
|
+
key={toolset.name}
|
|
666
|
+
label={toolset.name}
|
|
667
|
+
description={toolset.description}
|
|
668
|
+
icon={() => <Avatar size="sm" icon={toolset.icon} />}
|
|
669
|
+
onClick={() => {
|
|
670
|
+
setSelectedItem(toolset.name);
|
|
671
|
+
setSearchText("");
|
|
672
|
+
}}
|
|
673
|
+
truncateText
|
|
674
|
+
/>
|
|
675
|
+
);
|
|
676
|
+
})}
|
|
635
677
|
</DropdownMenuContent>
|
|
636
678
|
</DropdownMenu>
|
|
637
679
|
</div>
|
|
@@ -17,6 +17,8 @@ import {
|
|
|
17
17
|
DustIcon,
|
|
18
18
|
EyeIcon,
|
|
19
19
|
FolderIcon,
|
|
20
|
+
HistoryIcon,
|
|
21
|
+
Icon,
|
|
20
22
|
IconButton,
|
|
21
23
|
PlusCircleIcon,
|
|
22
24
|
Tree,
|
|
@@ -41,7 +43,7 @@ export const TreeExample = () => {
|
|
|
41
43
|
return (
|
|
42
44
|
<div className="s-flex s-flex-col s-gap-10">
|
|
43
45
|
<div className="s-flex s-gap-10">
|
|
44
|
-
<div className="s-flex s-
|
|
46
|
+
<div className="s-flex s-flex-col s-gap-3">
|
|
45
47
|
<div className="s-text-xl">Tree</div>
|
|
46
48
|
<div>
|
|
47
49
|
<Tree>
|
|
@@ -131,6 +133,21 @@ export const TreeExample = () => {
|
|
|
131
133
|
</>
|
|
132
134
|
}
|
|
133
135
|
/>
|
|
136
|
+
|
|
137
|
+
<Tree.Item
|
|
138
|
+
label="t"
|
|
139
|
+
visual={DocumentIcon}
|
|
140
|
+
type="leaf"
|
|
141
|
+
actions={
|
|
142
|
+
<div className="s-flex s-grow s-flex-row s-items-center s-justify-between">
|
|
143
|
+
<Button size="mini" variant="outline" icon={EyeIcon} />
|
|
144
|
+
<div className="s-flex s-flex-row s-items-center s-gap-1 s-text-sm s-text-muted-foreground">
|
|
145
|
+
<Icon visual={HistoryIcon} size="xs" />
|
|
146
|
+
1y
|
|
147
|
+
</div>
|
|
148
|
+
</div>
|
|
149
|
+
}
|
|
150
|
+
/>
|
|
134
151
|
</Tree>
|
|
135
152
|
</Tree.Item>
|
|
136
153
|
<Tree.Item
|