@dust-tt/sparkle 0.5.0 → 0.5.1

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 (108) hide show
  1. package/dist/cjs/index.js +9 -9
  2. package/dist/cjs/index.js.map +3 -3
  3. package/dist/esm/components/Avatar.d.ts +2 -1
  4. package/dist/esm/components/Avatar.d.ts.map +1 -1
  5. package/dist/esm/components/Avatar.js +34 -10
  6. package/dist/esm/components/Avatar.js.map +1 -1
  7. package/dist/esm/components/Button.d.ts.map +1 -1
  8. package/dist/esm/components/Button.js.map +1 -1
  9. package/dist/esm/components/ButtonGroup.d.ts.map +1 -1
  10. package/dist/esm/components/ButtonGroup.js.map +1 -1
  11. package/dist/esm/components/ButtonsSwitch.d.ts.map +1 -1
  12. package/dist/esm/components/ButtonsSwitch.js.map +1 -1
  13. package/dist/esm/components/Card.d.ts.map +1 -1
  14. package/dist/esm/components/Card.js.map +1 -1
  15. package/dist/esm/components/Checkbox.d.ts.map +1 -1
  16. package/dist/esm/components/Checkbox.js.map +1 -1
  17. package/dist/esm/components/Citation.d.ts.map +1 -1
  18. package/dist/esm/components/Citation.js.map +1 -1
  19. package/dist/esm/components/Collapsible.d.ts.map +1 -1
  20. package/dist/esm/components/Collapsible.js.map +1 -1
  21. package/dist/esm/components/ConversationMessage.d.ts.map +1 -1
  22. package/dist/esm/components/ConversationMessage.js.map +1 -1
  23. package/dist/esm/components/Counter.d.ts.map +1 -1
  24. package/dist/esm/components/Counter.js.map +1 -1
  25. package/dist/esm/components/DataTable.d.ts.map +1 -1
  26. package/dist/esm/components/DataTable.js.map +1 -1
  27. package/dist/esm/components/Dialog.d.ts.map +1 -1
  28. package/dist/esm/components/Dialog.js.map +1 -1
  29. package/dist/esm/components/Dropdown.d.ts.map +1 -1
  30. package/dist/esm/components/Dropdown.js.map +1 -1
  31. package/dist/esm/components/Hoverable.d.ts.map +1 -1
  32. package/dist/esm/components/Hoverable.js.map +1 -1
  33. package/dist/esm/components/IconButton.d.ts.map +1 -1
  34. package/dist/esm/components/IconButton.js.map +1 -1
  35. package/dist/esm/components/Input.d.ts.map +1 -1
  36. package/dist/esm/components/Input.js.map +1 -1
  37. package/dist/esm/components/Label.d.ts.map +1 -1
  38. package/dist/esm/components/Label.js.map +1 -1
  39. package/dist/esm/components/MultiPageDialog.d.ts.map +1 -1
  40. package/dist/esm/components/MultiPageDialog.js.map +1 -1
  41. package/dist/esm/components/MultiPageSheet.d.ts.map +1 -1
  42. package/dist/esm/components/MultiPageSheet.js.map +1 -1
  43. package/dist/esm/components/NavigationList.d.ts +18 -1
  44. package/dist/esm/components/NavigationList.d.ts.map +1 -1
  45. package/dist/esm/components/NavigationList.js +34 -5
  46. package/dist/esm/components/NavigationList.js.map +1 -1
  47. package/dist/esm/components/Popover.d.ts.map +1 -1
  48. package/dist/esm/components/Popover.js.map +1 -1
  49. package/dist/esm/components/RadioGroup.d.ts.map +1 -1
  50. package/dist/esm/components/RadioGroup.js.map +1 -1
  51. package/dist/esm/components/ScrollArea.d.ts.map +1 -1
  52. package/dist/esm/components/ScrollArea.js.map +1 -1
  53. package/dist/esm/components/Sheet.d.ts.map +1 -1
  54. package/dist/esm/components/Sheet.js.map +1 -1
  55. package/dist/esm/components/TextArea.d.ts.map +1 -1
  56. package/dist/esm/components/TextArea.js.map +1 -1
  57. package/dist/esm/components/Timeline.d.ts.map +1 -1
  58. package/dist/esm/components/Timeline.js.map +1 -1
  59. package/dist/esm/components/Tooltip.d.ts.map +1 -1
  60. package/dist/esm/components/Tooltip.js.map +1 -1
  61. package/dist/esm/lottie/dragArea.d.ts +23 -23
  62. package/dist/esm/lottie/spinnerColor.d.ts +64 -64
  63. package/dist/esm/lottie/spinnerColorXS.d.ts +11 -11
  64. package/dist/esm/lottie/spinnerDark.d.ts +14 -14
  65. package/dist/esm/lottie/spinnerDarkLG.d.ts +122 -122
  66. package/dist/esm/lottie/spinnerLight.d.ts +74 -74
  67. package/dist/esm/lottie/spinnerLightLG.d.ts +13 -13
  68. package/dist/esm/lottie/spinnerLightXS.d.ts +25 -25
  69. package/dist/esm/stories/Avatar.stories.d.ts.map +1 -1
  70. package/dist/esm/stories/Avatar.stories.js +56 -0
  71. package/dist/esm/stories/Avatar.stories.js.map +1 -1
  72. package/dist/esm/stories/NavigationList.stories.d.ts +1 -0
  73. package/dist/esm/stories/NavigationList.stories.d.ts.map +1 -1
  74. package/dist/esm/stories/NavigationList.stories.js +70 -1
  75. package/dist/esm/stories/NavigationList.stories.js.map +1 -1
  76. package/dist/esm/styles/global.css +2 -1
  77. package/dist/sparkle.css +33 -0
  78. package/package.json +17 -15
  79. package/src/components/Avatar.tsx +45 -9
  80. package/src/components/Button.tsx +2 -1
  81. package/src/components/ButtonGroup.tsx +2 -1
  82. package/src/components/ButtonsSwitch.tsx +6 -3
  83. package/src/components/Card.tsx +3 -6
  84. package/src/components/Checkbox.tsx +2 -1
  85. package/src/components/Citation.tsx +2 -4
  86. package/src/components/Collapsible.tsx +4 -2
  87. package/src/components/ConversationMessage.tsx +4 -5
  88. package/src/components/Counter.tsx +2 -1
  89. package/src/components/DataTable.tsx +4 -4
  90. package/src/components/Dialog.tsx +3 -2
  91. package/src/components/Dropdown.tsx +7 -4
  92. package/src/components/Hoverable.tsx +2 -4
  93. package/src/components/IconButton.tsx +4 -5
  94. package/src/components/Input.tsx +4 -2
  95. package/src/components/Label.tsx +2 -1
  96. package/src/components/MultiPageDialog.tsx +1 -2
  97. package/src/components/MultiPageSheet.tsx +1 -2
  98. package/src/components/NavigationList.tsx +151 -15
  99. package/src/components/Popover.tsx +3 -2
  100. package/src/components/RadioGroup.tsx +4 -2
  101. package/src/components/ScrollArea.tsx +6 -6
  102. package/src/components/Sheet.tsx +6 -4
  103. package/src/components/TextArea.tsx +1 -2
  104. package/src/components/Timeline.tsx +2 -1
  105. package/src/components/Tooltip.tsx +3 -2
  106. package/src/stories/Avatar.stories.tsx +79 -0
  107. package/src/stories/NavigationList.stories.tsx +148 -0
  108. package/src/styles/global.css +2 -1
@@ -9,9 +9,12 @@ import {
9
9
  NavigationList,
10
10
  NavigationListItem,
11
11
  NavigationListItemAction,
12
+ NavigationListCollapsibleSection,
12
13
  NavigationListLabel,
14
+ NavigationListLabelButton,
13
15
  PencilSquareIcon,
14
16
  TrashIcon,
17
+ MoreIcon,
15
18
  } from "../index_with_tw_base";
16
19
 
17
20
  const meta = {
@@ -155,6 +158,151 @@ export const Demo = () => {
155
158
  );
156
159
  };
157
160
 
161
+ export const CollapsibleSection = () => {
162
+ const [selectedIndex, setSelectedIndex] = useState<number | null>(null);
163
+ const [conversationTitles, setConversationTitles] = useState<
164
+ { label: string; items: string[] }[]
165
+ >([]);
166
+
167
+ useEffect(() => {
168
+ setConversationTitles([
169
+ { label: "Today", items: getRandomTitles(5) },
170
+ { label: "Yesterday", items: getRandomTitles(10) },
171
+ { label: "Last Week", items: getRandomTitles(8) },
172
+ ]);
173
+ }, []);
174
+
175
+ const allItems = conversationTitles.flatMap((section) => section.items);
176
+
177
+ const getMoreMenu = (title: string) => (
178
+ <DropdownMenu>
179
+ <DropdownMenuTrigger asChild>
180
+ <NavigationListItemAction />
181
+ </DropdownMenuTrigger>
182
+ <DropdownMenuContent>
183
+ <DropdownMenuItem
184
+ label={`Rename ${title}`}
185
+ icon={PencilSquareIcon}
186
+ onClick={(e) => {
187
+ e.preventDefault();
188
+ e.stopPropagation();
189
+ }}
190
+ />
191
+ <DropdownMenuItem
192
+ label="Delete"
193
+ icon={TrashIcon}
194
+ variant="warning"
195
+ onClick={(e) => {
196
+ e.preventDefault();
197
+ e.stopPropagation();
198
+ }}
199
+ />
200
+ </DropdownMenuContent>
201
+ </DropdownMenu>
202
+ );
203
+
204
+ return (
205
+ <div className="s-flex s-h-[500px] s-w-full s-flex-row s-gap-12 s-bg-muted">
206
+ <div className="s-h-[500px] s-w-[240px]">
207
+ <NavigationList className="s-relative s-h-full s-w-full s-px-3 dark:s-bg-muted-background-night">
208
+ {conversationTitles.map((section, sectionIndex) => (
209
+ <>
210
+ <NavigationListLabel label="Hello" key={0} />
211
+ <NavigationListCollapsibleSection
212
+ key={sectionIndex}
213
+ label={section.label}
214
+ defaultOpen={sectionIndex === 0}
215
+ >
216
+ {section.items.map((title, index) => {
217
+ const itemIndex = allItems.indexOf(title);
218
+ const getStatus = (idx: number) => {
219
+ if (idx % 5 === 0) {
220
+ return "unread";
221
+ }
222
+ if (idx % 3 === 0) {
223
+ return "blocked";
224
+ }
225
+ return "idle";
226
+ };
227
+ return (
228
+ <NavigationListItem
229
+ key={index}
230
+ href={index % 2 === 0 ? "#" : undefined}
231
+ selected={itemIndex === selectedIndex}
232
+ onClick={(e) => {
233
+ if (!e.defaultPrevented) {
234
+ e.preventDefault();
235
+ setSelectedIndex(itemIndex);
236
+ }
237
+ }}
238
+ label={title}
239
+ className="s-w-full"
240
+ moreMenu={getMoreMenu(title)}
241
+ status={getStatus(index)}
242
+ />
243
+ );
244
+ })}
245
+ </NavigationListCollapsibleSection>
246
+ </>
247
+ ))}
248
+ </NavigationList>
249
+ </div>
250
+ <div className="s-h-[500px] s-w-[240px]">
251
+ <NavigationList className="s-relative s-h-full s-w-full s-px-3 dark:s-bg-muted-background-night">
252
+ {conversationTitles.map((section, sectionIndex) => (
253
+ <NavigationListCollapsibleSection
254
+ key={sectionIndex}
255
+ label={section.label}
256
+ defaultOpen={sectionIndex === 0}
257
+ action={
258
+ <NavigationListLabelButton
259
+ icon={MoreIcon}
260
+ aria-label="Add new item"
261
+ onClick={(e) => {
262
+ e.preventDefault();
263
+ e.stopPropagation();
264
+ // Add action logic here
265
+ }}
266
+ />
267
+ }
268
+ >
269
+ {section.items.map((title, index) => {
270
+ const itemIndex = allItems.indexOf(title);
271
+ const getStatus = (idx: number) => {
272
+ if (idx % 5 === 0) {
273
+ return "unread";
274
+ }
275
+ if (idx % 3 === 0) {
276
+ return "blocked";
277
+ }
278
+ return "idle";
279
+ };
280
+ return (
281
+ <NavigationListItem
282
+ key={index}
283
+ href={index % 2 === 0 ? "#" : undefined}
284
+ selected={itemIndex === selectedIndex}
285
+ onClick={(e) => {
286
+ if (!e.defaultPrevented) {
287
+ e.preventDefault();
288
+ setSelectedIndex(itemIndex);
289
+ }
290
+ }}
291
+ label={title}
292
+ className="s-w-full"
293
+ moreMenu={getMoreMenu(title)}
294
+ status={getStatus(index)}
295
+ />
296
+ );
297
+ })}
298
+ </NavigationListCollapsibleSection>
299
+ ))}
300
+ </NavigationList>
301
+ </div>
302
+ </div>
303
+ );
304
+ };
305
+
158
306
  const fakeTitles = [
159
307
  "Project Kickoff Meeting",
160
308
  "Budget Review Discussion",
@@ -24,7 +24,8 @@
24
24
 
25
25
  @layer utilities {
26
26
  .s-checkerboard {
27
- background-image: linear-gradient(
27
+ background-image:
28
+ linear-gradient(
28
29
  45deg,
29
30
  var(--tw-checker-color) 25%,
30
31
  transparent 25%,