@dust-tt/sparkle 0.3.22 → 0.3.23

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 (48) hide show
  1. package/dist/cjs/index.js +1 -1
  2. package/dist/esm/components/Button.d.ts.map +1 -1
  3. package/dist/esm/components/Button.js +3 -3
  4. package/dist/esm/components/Button.js.map +1 -1
  5. package/dist/esm/components/ButtonsSwitch.d.ts +23 -0
  6. package/dist/esm/components/ButtonsSwitch.d.ts.map +1 -0
  7. package/dist/esm/components/ButtonsSwitch.js +60 -0
  8. package/dist/esm/components/ButtonsSwitch.js.map +1 -0
  9. package/dist/esm/components/Spinner.d.ts.map +1 -1
  10. package/dist/esm/components/Spinner.js +10 -0
  11. package/dist/esm/components/Spinner.js.map +1 -1
  12. package/dist/esm/components/SplitButton.d.ts +2 -29
  13. package/dist/esm/components/SplitButton.d.ts.map +1 -1
  14. package/dist/esm/components/SplitButton.js +10 -33
  15. package/dist/esm/components/SplitButton.js.map +1 -1
  16. package/dist/esm/components/index.d.ts +2 -1
  17. package/dist/esm/components/index.d.ts.map +1 -1
  18. package/dist/esm/components/index.js +2 -1
  19. package/dist/esm/components/index.js.map +1 -1
  20. package/dist/esm/icons/src/actions/atom.svg +1 -1
  21. package/dist/esm/logo/platforms/Canva.d.ts +5 -0
  22. package/dist/esm/logo/platforms/Canva.d.ts.map +1 -0
  23. package/dist/esm/logo/platforms/Canva.js +14 -0
  24. package/dist/esm/logo/platforms/Canva.js.map +1 -0
  25. package/dist/esm/logo/platforms/index.d.ts +1 -0
  26. package/dist/esm/logo/platforms/index.d.ts.map +1 -1
  27. package/dist/esm/logo/platforms/index.js +1 -0
  28. package/dist/esm/logo/platforms/index.js.map +1 -1
  29. package/dist/esm/stories/ButtonsSwitch.stories.d.ts +12 -0
  30. package/dist/esm/stories/ButtonsSwitch.stories.d.ts.map +1 -0
  31. package/dist/esm/stories/ButtonsSwitch.stories.js +21 -0
  32. package/dist/esm/stories/ButtonsSwitch.stories.js.map +1 -0
  33. package/dist/esm/stories/SplitButton.stories.d.ts +3 -3
  34. package/dist/esm/stories/SplitButton.stories.d.ts.map +1 -1
  35. package/dist/esm/stories/SplitButton.stories.js +9 -54
  36. package/dist/esm/stories/SplitButton.stories.js.map +1 -1
  37. package/dist/sparkle.css +67 -18
  38. package/package.json +1 -1
  39. package/src/components/Button.tsx +12 -3
  40. package/src/components/ButtonsSwitch.tsx +165 -0
  41. package/src/components/Spinner.tsx +10 -0
  42. package/src/components/SplitButton.tsx +19 -122
  43. package/src/components/index.ts +2 -1
  44. package/src/icons/src/actions/atom.svg +1 -1
  45. package/src/logo/platforms/Canva.tsx +39 -0
  46. package/src/logo/platforms/index.ts +1 -0
  47. package/src/stories/ButtonsSwitch.stories.tsx +34 -0
  48. package/src/stories/SplitButton.stories.tsx +46 -63
@@ -0,0 +1,12 @@
1
+ import type { StoryObj } from "@storybook/react";
2
+ import React from "react";
3
+ declare const meta: {
4
+ title: string;
5
+ component: React.ForwardRefExoticComponent<import("../components/ButtonsSwitch").ButtonsSwitchListProps & React.RefAttributes<HTMLDivElement>>;
6
+ tags: string[];
7
+ };
8
+ export default meta;
9
+ type Story = StoryObj<typeof meta>;
10
+ export declare const Default: Story;
11
+ export declare const Controlled: Story;
12
+ //# sourceMappingURL=ButtonsSwitch.stories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ButtonsSwitch.stories.d.ts","sourceRoot":"","sources":["../../../src/stories/ButtonsSwitch.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,QAAA,MAAM,IAAI;;;;CAIgC,CAAC;AAE3C,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,OAAO,EAAE,KASrB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,KAQxB,CAAC"}
@@ -0,0 +1,21 @@
1
+ import React from "react";
2
+ import { ButtonsSwitch, ButtonsSwitchList } from "../index_with_tw_base";
3
+ var meta = {
4
+ title: "Components/ButtonsSwitch",
5
+ component: ButtonsSwitchList,
6
+ tags: ["autodocs"],
7
+ };
8
+ export default meta;
9
+ export var Default = {
10
+ render: function () { return (React.createElement("div", { className: "s-w-[360px] s-p-4" },
11
+ React.createElement(ButtonsSwitchList, { defaultValue: "time", className: "s-w-fit" },
12
+ React.createElement(ButtonsSwitch, { value: "time", label: "Time range" }),
13
+ React.createElement(ButtonsSwitch, { value: "version", label: "Version" })))); },
14
+ };
15
+ export var Controlled = {
16
+ render: function () { return (React.createElement(ButtonsSwitchList, { defaultValue: "time" },
17
+ React.createElement(ButtonsSwitch, { value: "time", label: "Time range" }),
18
+ React.createElement(ButtonsSwitch, { value: "version", label: "Version" }),
19
+ React.createElement(ButtonsSwitch, { value: "other", label: "Other" }))); },
20
+ };
21
+ //# sourceMappingURL=ButtonsSwitch.stories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ButtonsSwitch.stories.js","sourceRoot":"","sources":["../../../src/stories/ButtonsSwitch.stories.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAEzE,IAAM,IAAI,GAAG;IACX,KAAK,EAAE,0BAA0B;IACjC,SAAS,EAAE,iBAAiB;IAC5B,IAAI,EAAE,CAAC,UAAU,CAAC;CACsB,CAAC;AAE3C,eAAe,IAAI,CAAC;AAGpB,MAAM,CAAC,IAAM,OAAO,GAAU;IAC5B,MAAM,EAAE,cAAM,OAAA,CACZ,6BAAK,SAAS,EAAC,mBAAmB;QAChC,oBAAC,iBAAiB,IAAC,YAAY,EAAC,MAAM,EAAC,SAAS,EAAC,SAAS;YACxD,oBAAC,aAAa,IAAC,KAAK,EAAC,MAAM,EAAC,KAAK,EAAC,YAAY,GAAG;YACjD,oBAAC,aAAa,IAAC,KAAK,EAAC,SAAS,EAAC,KAAK,EAAC,SAAS,GAAG,CAC/B,CAChB,CACP,EAPa,CAOb;CACF,CAAC;AAEF,MAAM,CAAC,IAAM,UAAU,GAAU;IAC/B,MAAM,EAAE,cAAM,OAAA,CACZ,oBAAC,iBAAiB,IAAC,YAAY,EAAC,MAAM;QACpC,oBAAC,aAAa,IAAC,KAAK,EAAC,MAAM,EAAC,KAAK,EAAC,YAAY,GAAG;QACjD,oBAAC,aAAa,IAAC,KAAK,EAAC,SAAS,EAAC,KAAK,EAAC,SAAS,GAAG;QACjD,oBAAC,aAAa,IAAC,KAAK,EAAC,OAAO,EAAC,KAAK,EAAC,OAAO,GAAG,CAC3B,CACrB,EANa,CAMb;CACF,CAAC"}
@@ -1,9 +1,9 @@
1
1
  import type { Meta, StoryObj } from "@storybook/react";
2
2
  import React from "react";
3
- import { SplitButton } from "../index_with_tw_base";
4
- declare const meta: Meta<React.ComponentProps<typeof SplitButton>>;
3
+ import { FlexSplitButton } from "../index_with_tw_base";
4
+ declare const meta: Meta<React.ComponentProps<typeof FlexSplitButton>>;
5
5
  export default meta;
6
6
  type Story = StoryObj<typeof meta>;
7
- export declare const ExampleButton: Story;
8
7
  export declare const FlexSplitButtonVariants: Story;
8
+ export declare const FlexSplitButtonLoading: Story;
9
9
  //# sourceMappingURL=SplitButton.stories.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SplitButton.stories.d.ts","sourceRoot":"","sources":["../../../src/stories/SplitButton.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,KAAK,MAAM,OAAO,CAAC;AAK1B,OAAO,EAML,WAAW,EACZ,MAAM,uBAAuB,CAAC;AAE/B,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,WAAW,CAAC,CAexD,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,aAAa,EAAE,KAsC3B,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE,KAqCrC,CAAC"}
1
+ {"version":3,"file":"SplitButton.stories.d.ts","sourceRoot":"","sources":["../../../src/stories/SplitButton.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,OAAO,EAAU,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAEhE,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,CAG5D,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,uBAAuB,EAAE,KAqCrC,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,KAyCpC,CAAC"}
@@ -1,63 +1,11 @@
1
1
  import React from "react";
2
- import { BUTTON_SIZES, BUTTON_VARIANTS } from "../components/Button";
3
2
  import { ArrowUpIcon, ChevronDownIcon } from "../icons/app";
4
- import { Button, CameraIcon, FlexSplitButton, PlusIcon, RobotIcon, SplitButton, } from "../index_with_tw_base";
3
+ import { Button, FlexSplitButton } from "../index_with_tw_base";
5
4
  var meta = {
6
5
  title: "Primitives/SplitButton",
7
- component: SplitButton,
8
- argTypes: {
9
- variant: {
10
- description: "The visual style variant of the button",
11
- options: BUTTON_VARIANTS,
12
- control: { type: "select" },
13
- },
14
- size: {
15
- description: "The size of the button",
16
- options: BUTTON_SIZES,
17
- control: { type: "select" },
18
- },
19
- },
6
+ component: FlexSplitButton,
20
7
  };
21
8
  export default meta;
22
- export var ExampleButton = {
23
- args: {
24
- variant: "outline",
25
- size: "md",
26
- defaultAction: {
27
- label: "First",
28
- icon: PlusIcon,
29
- tooltip: "First tooltip",
30
- },
31
- actions: [
32
- {
33
- label: "First",
34
- icon: PlusIcon,
35
- tooltip: "First tooltip",
36
- },
37
- {
38
- label: "Second",
39
- icon: RobotIcon,
40
- tooltip: "Disabled tooltip",
41
- disabled: true,
42
- },
43
- {
44
- label: "Photo",
45
- icon: CameraIcon,
46
- tooltip: "Disabled photo",
47
- disabled: true,
48
- },
49
- {
50
- label: "Third",
51
- tooltip: "Third tooltip",
52
- },
53
- {
54
- label: "Fourth",
55
- tooltip: "Loading tooltip",
56
- isLoading: true,
57
- },
58
- ],
59
- },
60
- };
61
9
  export var FlexSplitButtonVariants = {
62
10
  render: function () { return (React.createElement("div", { className: "s-flex s-gap-3" },
63
11
  React.createElement(FlexSplitButton, { label: "Send", variant: "highlight", icon: ArrowUpIcon, splitAction: React.createElement(Button, { size: "mini", variant: "highlight", icon: ChevronDownIcon }) }),
@@ -65,4 +13,11 @@ export var FlexSplitButtonVariants = {
65
13
  React.createElement(FlexSplitButton, { label: "Send", variant: "outline", icon: ArrowUpIcon, splitAction: React.createElement(Button, { size: "mini", variant: "outline", icon: ChevronDownIcon }) }),
66
14
  React.createElement(FlexSplitButton, { label: "Send", variant: "ghost", icon: ArrowUpIcon, splitAction: React.createElement(Button, { size: "mini", variant: "ghost", icon: ChevronDownIcon }) }))); },
67
15
  };
16
+ export var FlexSplitButtonLoading = {
17
+ render: function () { return (React.createElement("div", { className: "s-flex s-gap-3" },
18
+ React.createElement(FlexSplitButton, { label: "Sending", variant: "highlight", icon: ArrowUpIcon, isLoading: true, splitAction: React.createElement(Button, { size: "mini", variant: "highlight", icon: ChevronDownIcon }) }),
19
+ React.createElement(FlexSplitButton, { label: "Sending", variant: "primary", icon: ArrowUpIcon, isLoading: true, splitAction: React.createElement(Button, { size: "mini", variant: "primary", icon: ChevronDownIcon }) }),
20
+ React.createElement(FlexSplitButton, { label: "Sending", variant: "outline", icon: ArrowUpIcon, isLoading: true, splitAction: React.createElement(Button, { size: "mini", variant: "outline", icon: ChevronDownIcon }) }),
21
+ React.createElement(FlexSplitButton, { label: "Sending", variant: "ghost", icon: ArrowUpIcon, isLoading: true, splitAction: React.createElement(Button, { size: "mini", variant: "ghost", icon: ChevronDownIcon }) }))); },
22
+ };
68
23
  //# sourceMappingURL=SplitButton.stories.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SplitButton.stories.js","sourceRoot":"","sources":["../../../src/stories/SplitButton.stories.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC3E,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAElE,OAAO,EACL,MAAM,EACN,UAAU,EACV,eAAe,EACf,QAAQ,EACR,SAAS,EACT,WAAW,GACZ,MAAM,uBAAuB,CAAC;AAE/B,IAAM,IAAI,GAAmD;IAC3D,KAAK,EAAE,wBAAwB;IAC/B,SAAS,EAAE,WAAW;IACtB,QAAQ,EAAE;QACR,OAAO,EAAE;YACP,WAAW,EAAE,wCAAwC;YACrD,OAAO,EAAE,eAAe;YACxB,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;SAC5B;QACD,IAAI,EAAE;YACJ,WAAW,EAAE,wBAAwB;YACrC,OAAO,EAAE,YAAY;YACrB,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;SAC5B;KACF;CACF,CAAC;AAEF,eAAe,IAAI,CAAC;AAGpB,MAAM,CAAC,IAAM,aAAa,GAAU;IAClC,IAAI,EAAE;QACJ,OAAO,EAAE,SAAS;QAClB,IAAI,EAAE,IAAI;QACV,aAAa,EAAE;YACb,KAAK,EAAE,OAAO;YACd,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,eAAe;SACzB;QACD,OAAO,EAAE;YACP;gBACE,KAAK,EAAE,OAAO;gBACd,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,eAAe;aACzB;YACD;gBACE,KAAK,EAAE,QAAQ;gBACf,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,kBAAkB;gBAC3B,QAAQ,EAAE,IAAI;aACf;YACD;gBACE,KAAK,EAAE,OAAO;gBACd,IAAI,EAAE,UAAU;gBAChB,OAAO,EAAE,gBAAgB;gBACzB,QAAQ,EAAE,IAAI;aACf;YACD;gBACE,KAAK,EAAE,OAAO;gBACd,OAAO,EAAE,eAAe;aACzB;YACD;gBACE,KAAK,EAAE,QAAQ;gBACf,OAAO,EAAE,iBAAiB;gBAC1B,SAAS,EAAE,IAAI;aAChB;SACF;KACF;CACF,CAAC;AAEF,MAAM,CAAC,IAAM,uBAAuB,GAAU;IAC5C,MAAM,EAAE,cAAM,OAAA,CACZ,6BAAK,SAAS,EAAC,gBAAgB;QAC7B,oBAAC,eAAe,IACd,KAAK,EAAC,MAAM,EACZ,OAAO,EAAC,WAAW,EACnB,IAAI,EAAE,WAAW,EACjB,WAAW,EACT,oBAAC,MAAM,IAAC,IAAI,EAAC,MAAM,EAAC,OAAO,EAAC,WAAW,EAAC,IAAI,EAAE,eAAe,GAAI,GAEnE;QACF,oBAAC,eAAe,IACd,KAAK,EAAC,MAAM,EACZ,OAAO,EAAC,SAAS,EACjB,IAAI,EAAE,WAAW,EACjB,WAAW,EACT,oBAAC,MAAM,IAAC,IAAI,EAAC,MAAM,EAAC,OAAO,EAAC,SAAS,EAAC,IAAI,EAAE,eAAe,GAAI,GAEjE;QACF,oBAAC,eAAe,IACd,KAAK,EAAC,MAAM,EACZ,OAAO,EAAC,SAAS,EACjB,IAAI,EAAE,WAAW,EACjB,WAAW,EACT,oBAAC,MAAM,IAAC,IAAI,EAAC,MAAM,EAAC,OAAO,EAAC,SAAS,EAAC,IAAI,EAAE,eAAe,GAAI,GAEjE;QACF,oBAAC,eAAe,IACd,KAAK,EAAC,MAAM,EACZ,OAAO,EAAC,OAAO,EACf,IAAI,EAAE,WAAW,EACjB,WAAW,EACT,oBAAC,MAAM,IAAC,IAAI,EAAC,MAAM,EAAC,OAAO,EAAC,OAAO,EAAC,IAAI,EAAE,eAAe,GAAI,GAE/D,CACE,CACP,EAnCa,CAmCb;CACF,CAAC"}
1
+ {"version":3,"file":"SplitButton.stories.js","sourceRoot":"","sources":["../../../src/stories/SplitButton.stories.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAElE,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAEhE,IAAM,IAAI,GAAuD;IAC/D,KAAK,EAAE,wBAAwB;IAC/B,SAAS,EAAE,eAAe;CAC3B,CAAC;AAEF,eAAe,IAAI,CAAC;AAGpB,MAAM,CAAC,IAAM,uBAAuB,GAAU;IAC5C,MAAM,EAAE,cAAM,OAAA,CACZ,6BAAK,SAAS,EAAC,gBAAgB;QAC7B,oBAAC,eAAe,IACd,KAAK,EAAC,MAAM,EACZ,OAAO,EAAC,WAAW,EACnB,IAAI,EAAE,WAAW,EACjB,WAAW,EACT,oBAAC,MAAM,IAAC,IAAI,EAAC,MAAM,EAAC,OAAO,EAAC,WAAW,EAAC,IAAI,EAAE,eAAe,GAAI,GAEnE;QACF,oBAAC,eAAe,IACd,KAAK,EAAC,MAAM,EACZ,OAAO,EAAC,SAAS,EACjB,IAAI,EAAE,WAAW,EACjB,WAAW,EACT,oBAAC,MAAM,IAAC,IAAI,EAAC,MAAM,EAAC,OAAO,EAAC,SAAS,EAAC,IAAI,EAAE,eAAe,GAAI,GAEjE;QACF,oBAAC,eAAe,IACd,KAAK,EAAC,MAAM,EACZ,OAAO,EAAC,SAAS,EACjB,IAAI,EAAE,WAAW,EACjB,WAAW,EACT,oBAAC,MAAM,IAAC,IAAI,EAAC,MAAM,EAAC,OAAO,EAAC,SAAS,EAAC,IAAI,EAAE,eAAe,GAAI,GAEjE;QACF,oBAAC,eAAe,IACd,KAAK,EAAC,MAAM,EACZ,OAAO,EAAC,OAAO,EACf,IAAI,EAAE,WAAW,EACjB,WAAW,EACT,oBAAC,MAAM,IAAC,IAAI,EAAC,MAAM,EAAC,OAAO,EAAC,OAAO,EAAC,IAAI,EAAE,eAAe,GAAI,GAE/D,CACE,CACP,EAnCa,CAmCb;CACF,CAAC;AAEF,MAAM,CAAC,IAAM,sBAAsB,GAAU;IAC3C,MAAM,EAAE,cAAM,OAAA,CACZ,6BAAK,SAAS,EAAC,gBAAgB;QAC7B,oBAAC,eAAe,IACd,KAAK,EAAC,SAAS,EACf,OAAO,EAAC,WAAW,EACnB,IAAI,EAAE,WAAW,EACjB,SAAS,QACT,WAAW,EACT,oBAAC,MAAM,IAAC,IAAI,EAAC,MAAM,EAAC,OAAO,EAAC,WAAW,EAAC,IAAI,EAAE,eAAe,GAAI,GAEnE;QACF,oBAAC,eAAe,IACd,KAAK,EAAC,SAAS,EACf,OAAO,EAAC,SAAS,EACjB,IAAI,EAAE,WAAW,EACjB,SAAS,QACT,WAAW,EACT,oBAAC,MAAM,IAAC,IAAI,EAAC,MAAM,EAAC,OAAO,EAAC,SAAS,EAAC,IAAI,EAAE,eAAe,GAAI,GAEjE;QACF,oBAAC,eAAe,IACd,KAAK,EAAC,SAAS,EACf,OAAO,EAAC,SAAS,EACjB,IAAI,EAAE,WAAW,EACjB,SAAS,QACT,WAAW,EACT,oBAAC,MAAM,IAAC,IAAI,EAAC,MAAM,EAAC,OAAO,EAAC,SAAS,EAAC,IAAI,EAAE,eAAe,GAAI,GAEjE;QACF,oBAAC,eAAe,IACd,KAAK,EAAC,SAAS,EACf,OAAO,EAAC,OAAO,EACf,IAAI,EAAE,WAAW,EACjB,SAAS,QACT,WAAW,EACT,oBAAC,MAAM,IAAC,IAAI,EAAC,MAAM,EAAC,OAAO,EAAC,OAAO,EAAC,IAAI,EAAE,eAAe,GAAI,GAE/D,CACE,CACP,EAvCa,CAuCb;CACF,CAAC"}
package/dist/sparkle.css CHANGED
@@ -1730,6 +1730,10 @@ select {
1730
1730
  width: 350px;
1731
1731
  }
1732
1732
 
1733
+ .s-w-\[360px\] {
1734
+ width: 360px;
1735
+ }
1736
+
1733
1737
  .s-w-\[380px\] {
1734
1738
  width: 380px;
1735
1739
  }
@@ -2495,16 +2499,6 @@ select {
2495
2499
  border-radius: 0.75rem;
2496
2500
  }
2497
2501
 
2498
- .s-rounded-l-none {
2499
- border-top-left-radius: 0px;
2500
- border-bottom-left-radius: 0px;
2501
- }
2502
-
2503
- .s-rounded-r-none {
2504
- border-top-right-radius: 0px;
2505
- border-bottom-right-radius: 0px;
2506
- }
2507
-
2508
2502
  .s-rounded-t-2xl {
2509
2503
  border-top-left-radius: 1rem;
2510
2504
  border-top-right-radius: 1rem;
@@ -2526,18 +2520,10 @@ select {
2526
2520
  border-left-width: 1px;
2527
2521
  }
2528
2522
 
2529
- .s-border-l-0 {
2530
- border-left-width: 0px;
2531
- }
2532
-
2533
2523
  .s-border-r {
2534
2524
  border-right-width: 1px;
2535
2525
  }
2536
2526
 
2537
- .s-border-r-0 {
2538
- border-right-width: 0px;
2539
- }
2540
-
2541
2527
  .s-border-t {
2542
2528
  border-top-width: 1px;
2543
2529
  }
@@ -6036,6 +6022,36 @@ select {
6036
6022
  opacity: 0.5;
6037
6023
  }
6038
6024
 
6025
+ @media (hover: hover) and (pointer: fine) {
6026
+ .disabled\:hover\:s-border-border\/0:hover:disabled {
6027
+ border-color: rgb(238 238 239 / 0);
6028
+ }
6029
+
6030
+ .disabled\:hover\:s-border-primary-100:hover:disabled {
6031
+ --tw-border-opacity: 1;
6032
+ border-color: rgb(238 238 239 / var(--tw-border-opacity));
6033
+ }
6034
+
6035
+ .disabled\:hover\:s-bg-background:hover:disabled {
6036
+ --tw-bg-opacity: 1;
6037
+ background-color: rgb(255 255 255 / var(--tw-bg-opacity));
6038
+ }
6039
+
6040
+ .disabled\:hover\:s-bg-transparent:hover:disabled {
6041
+ background-color: transparent;
6042
+ }
6043
+
6044
+ .disabled\:hover\:s-text-primary-400:hover:disabled {
6045
+ --tw-text-opacity: 1;
6046
+ color: rgb(150 156 165 / var(--tw-text-opacity));
6047
+ }
6048
+
6049
+ .disabled\:hover\:s-text-primary-muted:hover:disabled {
6050
+ --tw-text-opacity: 1;
6051
+ color: rgb(123 129 141 / var(--tw-text-opacity));
6052
+ }
6053
+ }
6054
+
6039
6055
  .s-group\/card:focus-within .group-focus-within\/card\:s-opacity-100 {
6040
6056
  opacity: 1;
6041
6057
  }
@@ -7458,6 +7474,11 @@ select {
7458
7474
  background-color: rgb(211 213 217 / var(--tw-bg-opacity));
7459
7475
  }
7460
7476
 
7477
+ :is(.s-dark .dark\:s-bg-primary-900) {
7478
+ --tw-bg-opacity: 1;
7479
+ background-color: rgb(28 34 45 / var(--tw-bg-opacity));
7480
+ }
7481
+
7461
7482
  :is(.s-dark .dark\:s-bg-primary-900-night) {
7462
7483
  --tw-bg-opacity: 1;
7463
7484
  background-color: rgb(238 238 239 / var(--tw-bg-opacity));
@@ -8768,6 +8789,34 @@ select {
8768
8789
  }
8769
8790
 
8770
8791
  @media (hover: hover) and (pointer: fine) {
8792
+ :is(.s-dark .dark\:disabled\:hover\:s-border-border-night\/0:hover:disabled) {
8793
+ border-color: rgb(42 50 65 / 0);
8794
+ }
8795
+
8796
+ :is(.s-dark .dark\:disabled\:hover\:s-border-primary-100-night:hover:disabled) {
8797
+ --tw-border-opacity: 1;
8798
+ border-color: rgb(28 34 45 / var(--tw-border-opacity));
8799
+ }
8800
+
8801
+ :is(.s-dark .dark\:disabled\:hover\:s-bg-background-night:hover:disabled) {
8802
+ --tw-bg-opacity: 1;
8803
+ background-color: rgb(17 20 24 / var(--tw-bg-opacity));
8804
+ }
8805
+
8806
+ :is(.s-dark .dark\:disabled\:hover\:s-bg-transparent:hover:disabled) {
8807
+ background-color: transparent;
8808
+ }
8809
+
8810
+ :is(.s-dark .dark\:disabled\:hover\:s-text-primary-400-night:hover:disabled) {
8811
+ --tw-text-opacity: 1;
8812
+ color: rgb(84 93 108 / var(--tw-text-opacity));
8813
+ }
8814
+
8815
+ :is(.s-dark .dark\:disabled\:hover\:s-text-primary-muted-night:hover:disabled) {
8816
+ --tw-text-opacity: 1;
8817
+ color: rgb(123 129 141 / var(--tw-text-opacity));
8818
+ }
8819
+
8771
8820
  :is(.s-dark .s-group:hover .dark\:group-hover\:s-bg-primary-200-night\/70) {
8772
8821
  background-color: rgb(42 50 65 / 0.7);
8773
8822
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dust-tt/sparkle",
3
- "version": "0.3.22",
3
+ "version": "0.3.23",
4
4
  "scripts": {
5
5
  "build": "rm -rf dist && npm run tailwind && npm run build:esm && npm run build:cjs",
6
6
  "tailwind": "tailwindcss -i ./src/styles/tailwind.css -o dist/sparkle.css",
@@ -76,7 +76,10 @@ const buttonVariants = cva(
76
76
  "hover:s-border-primary-150 dark:hover:s-border-border-night",
77
77
  "active:s-bg-primary-300 dark:active:s-bg-primary-900",
78
78
  "disabled:s-text-primary-muted dark:disabled:s-text-primary-muted-night",
79
- "disabled:s-border-primary-100 dark:disabled:s-border-primary-100-night"
79
+ "disabled:s-border-primary-100 dark:disabled:s-border-primary-100-night",
80
+ "disabled:hover:s-bg-background dark:disabled:hover:s-bg-background-night",
81
+ "disabled:hover:s-border-primary-100 dark:disabled:hover:s-border-primary-100-night",
82
+ "disabled:hover:s-text-primary-muted dark:disabled:hover:s-text-primary-muted-night"
80
83
  ),
81
84
  ghost: cn(
82
85
  "s-border",
@@ -86,7 +89,10 @@ const buttonVariants = cva(
86
89
  "hover:s-text-primary-900 dark:hover:s-text-white",
87
90
  "hover:s-border-border-dark dark:hover:s-border-border-night",
88
91
  "active:s-bg-primary-300 dark:active:s-bg-primary-900",
89
- "disabled:s-text-primary-400 dark:disabled:s-text-primary-400-night"
92
+ "disabled:s-text-primary-400 dark:disabled:s-text-primary-400-night",
93
+ "disabled:hover:s-bg-transparent dark:disabled:hover:s-bg-transparent",
94
+ "disabled:hover:s-border-border/0 dark:disabled:hover:s-border-border-night/0",
95
+ "disabled:hover:s-text-primary-400 dark:disabled:hover:s-text-primary-400-night"
90
96
  ),
91
97
  "ghost-secondary": cn(
92
98
  "s-border",
@@ -96,7 +102,10 @@ const buttonVariants = cva(
96
102
  "hover:s-text-primary-900 dark:hover:s-text-primary-900-night",
97
103
  "hover:s-border-border-dark dark:hover:s-border-border-night",
98
104
  "active:s-bg-primary-300 dark:active:s-bg-primary-900",
99
- "disabled:s-text-primary-400 dark:disabled:s-text-primary-400-night"
105
+ "disabled:s-text-primary-400 dark:disabled:s-text-primary-400-night",
106
+ "disabled:hover:s-bg-transparent dark:disabled:hover:s-bg-transparent",
107
+ "disabled:hover:s-border-border/0 dark:disabled:hover:s-border-border-night/0",
108
+ "disabled:hover:s-text-primary-400 dark:disabled:hover:s-text-primary-400-night"
100
109
  ),
101
110
  },
102
111
  size: {
@@ -0,0 +1,165 @@
1
+ import { cva, VariantProps } from "class-variance-authority";
2
+ import * as React from "react";
3
+
4
+ import { Button } from "@sparkle/components/Button";
5
+ import { cn } from "@sparkle/lib/utils";
6
+
7
+ type ButtonSize = Extract<
8
+ React.ComponentProps<typeof Button>["size"],
9
+ "xs" | "sm" | "md"
10
+ >;
11
+
12
+ type ButtonsSwitchContextType = {
13
+ value?: string;
14
+ onValueChange?: (value: string) => void;
15
+ size: ButtonSize;
16
+ disabled?: boolean;
17
+ };
18
+
19
+ const ButtonsSwitchContext =
20
+ React.createContext<ButtonsSwitchContextType | null>(null);
21
+
22
+ const useButtonsSwitch = () => {
23
+ const ctx = React.useContext(ButtonsSwitchContext);
24
+ if (!ctx) {
25
+ throw new Error(
26
+ "ButtonsSwitch must be used within a ButtonsSwitchList component"
27
+ );
28
+ }
29
+ return ctx;
30
+ };
31
+
32
+ const listStyles = cva(
33
+ cn(
34
+ "s-inline-flex s-items-center s-gap-1",
35
+ "s-bg-primary-100 dark:s-bg-primary-900"
36
+ ),
37
+ {
38
+ variants: {
39
+ fullWidth: {
40
+ true: "s-w-full",
41
+ false: "",
42
+ },
43
+ size: {
44
+ xs: "s-rounded-lg s-p-0.5",
45
+ sm: "s-rounded-xl s-p-1",
46
+ md: "s-rounded-2xl s-p-1.5",
47
+ },
48
+ },
49
+ defaultVariants: {
50
+ fullWidth: false,
51
+ size: "sm",
52
+ },
53
+ }
54
+ );
55
+
56
+ export interface ButtonsSwitchListProps
57
+ extends React.HTMLAttributes<HTMLDivElement>,
58
+ VariantProps<typeof listStyles> {
59
+ size?: ButtonSize;
60
+ disabled?: boolean;
61
+ defaultValue?: string;
62
+ onValueChange?: (value: string) => void;
63
+ }
64
+
65
+ export const ButtonsSwitchList = React.forwardRef<
66
+ HTMLDivElement,
67
+ ButtonsSwitchListProps
68
+ >(
69
+ (
70
+ {
71
+ className,
72
+ children,
73
+ size = "sm",
74
+ defaultValue,
75
+ onValueChange,
76
+ disabled,
77
+ fullWidth,
78
+ ...props
79
+ },
80
+ ref
81
+ ) => {
82
+ const [internalValue, setInternalValue] = React.useState<
83
+ string | undefined
84
+ >(defaultValue);
85
+
86
+ const selected = internalValue;
87
+
88
+ const handleChange = React.useCallback(
89
+ (next: string) => {
90
+ setInternalValue(next);
91
+ onValueChange?.(next);
92
+ },
93
+ [onValueChange]
94
+ );
95
+
96
+ const context: ButtonsSwitchContextType = React.useMemo(
97
+ () => ({ value: selected, onValueChange: handleChange, size, disabled }),
98
+ [selected, handleChange, size, disabled]
99
+ );
100
+
101
+ return (
102
+ <div
103
+ ref={ref}
104
+ role="tablist"
105
+ aria-orientation="horizontal"
106
+ className={cn(listStyles({ fullWidth, size }), className)}
107
+ {...props}
108
+ >
109
+ <ButtonsSwitchContext.Provider value={context}>
110
+ {children}
111
+ </ButtonsSwitchContext.Provider>
112
+ </div>
113
+ );
114
+ }
115
+ );
116
+ ButtonsSwitchList.displayName = "ButtonsSwitchList";
117
+
118
+ interface ButtonsSwitchProps
119
+ extends Omit<React.ComponentProps<typeof Button>, "size" | "variant"> {
120
+ value: string;
121
+ label?: string;
122
+ icon?: React.ComponentProps<typeof Button>["icon"];
123
+ }
124
+
125
+ export const ButtonsSwitch = React.forwardRef<
126
+ HTMLButtonElement,
127
+ ButtonsSwitchProps
128
+ >(({ className, value, label, icon, disabled, onClick, ...props }, ref) => {
129
+ const {
130
+ value: selected,
131
+ onValueChange,
132
+ size,
133
+ disabled: groupDisabled,
134
+ } = useButtonsSwitch();
135
+
136
+ const isActive = selected === value;
137
+ const isDisabled = disabled || groupDisabled;
138
+
139
+ const handleClick: React.MouseEventHandler<HTMLButtonElement> = (e) => {
140
+ if (isDisabled) {
141
+ return;
142
+ }
143
+ onValueChange?.(value);
144
+ onClick?.(e);
145
+ };
146
+
147
+ return (
148
+ <Button
149
+ ref={ref}
150
+ role="tab"
151
+ aria-selected={isActive}
152
+ size={size}
153
+ variant={isActive ? "outline" : "ghost-secondary"}
154
+ label={label}
155
+ icon={icon}
156
+ className={className}
157
+ disabled={isDisabled}
158
+ onClick={handleClick}
159
+ {...props}
160
+ />
161
+ );
162
+ });
163
+ ButtonsSwitch.displayName = "ButtonsSwitch";
164
+
165
+ export default ButtonsSwitch;
@@ -108,6 +108,8 @@ const Spinner: React.FC<SpinnerProps> = ({ size = "md", variant = "mono" }) => {
108
108
  let anim;
109
109
  switch (size) {
110
110
  case "xs":
111
+ case "sm":
112
+ case "md":
111
113
  anim = animLightXS;
112
114
  break;
113
115
  case "xl":
@@ -136,6 +138,8 @@ const Spinner: React.FC<SpinnerProps> = ({ size = "md", variant = "mono" }) => {
136
138
  let anim;
137
139
  switch (size) {
138
140
  case "xs":
141
+ case "sm":
142
+ case "md":
139
143
  anim = animColorXS;
140
144
  break;
141
145
  case "xl":
@@ -159,6 +163,8 @@ const Spinner: React.FC<SpinnerProps> = ({ size = "md", variant = "mono" }) => {
159
163
  let anim;
160
164
  switch (size) {
161
165
  case "xs":
166
+ case "sm":
167
+ case "md":
162
168
  anim = animLightXS;
163
169
  break;
164
170
  case "xl":
@@ -182,6 +188,8 @@ const Spinner: React.FC<SpinnerProps> = ({ size = "md", variant = "mono" }) => {
182
188
  let anim;
183
189
  switch (size) {
184
190
  case "xs":
191
+ case "sm":
192
+ case "md":
185
193
  anim = animDarkXS;
186
194
  break;
187
195
  case "xl":
@@ -206,6 +214,8 @@ const Spinner: React.FC<SpinnerProps> = ({ size = "md", variant = "mono" }) => {
206
214
  let darkAnim;
207
215
  switch (size) {
208
216
  case "xs":
217
+ case "sm":
218
+ case "md":
209
219
  lightAnim = animLightXS;
210
220
  darkAnim = animDarkXS;
211
221
  break;