@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.
- package/dist/cjs/index.js +1 -1
- package/dist/esm/components/Button.d.ts.map +1 -1
- package/dist/esm/components/Button.js +3 -3
- package/dist/esm/components/Button.js.map +1 -1
- package/dist/esm/components/ButtonsSwitch.d.ts +23 -0
- package/dist/esm/components/ButtonsSwitch.d.ts.map +1 -0
- package/dist/esm/components/ButtonsSwitch.js +60 -0
- package/dist/esm/components/ButtonsSwitch.js.map +1 -0
- package/dist/esm/components/Spinner.d.ts.map +1 -1
- package/dist/esm/components/Spinner.js +10 -0
- package/dist/esm/components/Spinner.js.map +1 -1
- package/dist/esm/components/SplitButton.d.ts +2 -29
- package/dist/esm/components/SplitButton.d.ts.map +1 -1
- package/dist/esm/components/SplitButton.js +10 -33
- package/dist/esm/components/SplitButton.js.map +1 -1
- package/dist/esm/components/index.d.ts +2 -1
- package/dist/esm/components/index.d.ts.map +1 -1
- package/dist/esm/components/index.js +2 -1
- package/dist/esm/components/index.js.map +1 -1
- package/dist/esm/icons/src/actions/atom.svg +1 -1
- package/dist/esm/logo/platforms/Canva.d.ts +5 -0
- package/dist/esm/logo/platforms/Canva.d.ts.map +1 -0
- package/dist/esm/logo/platforms/Canva.js +14 -0
- package/dist/esm/logo/platforms/Canva.js.map +1 -0
- package/dist/esm/logo/platforms/index.d.ts +1 -0
- package/dist/esm/logo/platforms/index.d.ts.map +1 -1
- package/dist/esm/logo/platforms/index.js +1 -0
- package/dist/esm/logo/platforms/index.js.map +1 -1
- package/dist/esm/stories/ButtonsSwitch.stories.d.ts +12 -0
- package/dist/esm/stories/ButtonsSwitch.stories.d.ts.map +1 -0
- package/dist/esm/stories/ButtonsSwitch.stories.js +21 -0
- package/dist/esm/stories/ButtonsSwitch.stories.js.map +1 -0
- package/dist/esm/stories/SplitButton.stories.d.ts +3 -3
- package/dist/esm/stories/SplitButton.stories.d.ts.map +1 -1
- package/dist/esm/stories/SplitButton.stories.js +9 -54
- package/dist/esm/stories/SplitButton.stories.js.map +1 -1
- package/dist/sparkle.css +67 -18
- package/package.json +1 -1
- package/src/components/Button.tsx +12 -3
- package/src/components/ButtonsSwitch.tsx +165 -0
- package/src/components/Spinner.tsx +10 -0
- package/src/components/SplitButton.tsx +19 -122
- package/src/components/index.ts +2 -1
- package/src/icons/src/actions/atom.svg +1 -1
- package/src/logo/platforms/Canva.tsx +39 -0
- package/src/logo/platforms/index.ts +1 -0
- package/src/stories/ButtonsSwitch.stories.tsx +34 -0
- 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 {
|
|
4
|
-
declare const meta: Meta<React.ComponentProps<typeof
|
|
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;
|
|
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,
|
|
3
|
+
import { Button, FlexSplitButton } from "../index_with_tw_base";
|
|
5
4
|
var meta = {
|
|
6
5
|
title: "Primitives/SplitButton",
|
|
7
|
-
component:
|
|
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,
|
|
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
|
@@ -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;
|