@regardio/react 0.7.23 → 0.8.0
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/button/index.d.mts +2 -2
- package/dist/button/index.mjs +2 -2
- package/dist/button-BllZdqCA.mjs +109 -0
- package/dist/carousel/index.mjs +1 -1
- package/dist/checkbox/index.mjs +12 -17
- package/dist/combobox/index.d.mts +142 -0
- package/dist/combobox/index.mjs +238 -0
- package/dist/field/index.d.mts +2 -2
- package/dist/field/index.mjs +26 -26
- package/dist/fieldset/index.d.mts +2 -2
- package/dist/fieldset/index.mjs +18 -21
- package/dist/icon-button/index.d.mts +1 -1
- package/dist/icon-button/index.mjs +1 -1
- package/dist/index-BTB1biC_.d.mts +19 -0
- package/dist/index-DEHa010W.d.mts +35 -0
- package/dist/input/index.d.mts +1 -1
- package/dist/input/index.mjs +1 -1
- package/dist/input-BHRHF8xW.mjs +62 -0
- package/dist/password-input/index.d.mts +2 -2
- package/dist/password-input/index.mjs +5 -6
- package/dist/radio/index.mjs +12 -17
- package/dist/slider/index.mjs +6 -13
- package/dist/switch/index.mjs +7 -12
- package/dist/text/index.d.mts +6 -3
- package/dist/text/index.mjs +6 -3
- package/dist/toggle/index.mjs +44 -29
- package/package.json +39 -27
- package/src/button/button.test.tsx +12 -8
- package/src/button/button.tsx +50 -59
- package/src/button/index.ts +2 -2
- package/src/checkbox/checkbox.tsx +11 -14
- package/src/combobox/combobox.stories.tsx +137 -0
- package/src/combobox/combobox.tsx +435 -0
- package/src/combobox/index.ts +2 -0
- package/src/field/field.test.tsx +1 -1
- package/src/field/field.tsx +21 -13
- package/src/fieldset/fieldset.test.tsx +1 -1
- package/src/fieldset/fieldset.tsx +6 -6
- package/src/icon-button/icon-button.test.tsx +1 -1
- package/src/input/input.stories.tsx +0 -11
- package/src/input/input.test.tsx +5 -2
- package/src/input/input.tsx +34 -75
- package/src/password-input/password-input.tsx +4 -5
- package/src/radio/radio.tsx +11 -14
- package/src/slider/slider.tsx +6 -8
- package/src/storybook.css +27 -0
- package/src/switch/switch.tsx +6 -11
- package/src/text/text.tsx +6 -3
- package/src/toggle/toggle.test.tsx +1 -2
- package/src/toggle/toggle.tsx +44 -29
- package/dist/button-wigUM1BB.mjs +0 -127
- package/dist/index-B_G_f749.d.mts +0 -29
- package/dist/index-DH3W0i5O.d.mts +0 -35
- package/dist/input-C2SM4-AB.mjs +0 -71
package/dist/fieldset/index.mjs
CHANGED
|
@@ -3,34 +3,31 @@ import { jsx } from "react/jsx-runtime";
|
|
|
3
3
|
import { Fieldset as Fieldset$1 } from "@base-ui/react/fieldset";
|
|
4
4
|
//#region src/fieldset/fieldset.tsx
|
|
5
5
|
const fieldsetRoot = tv({
|
|
6
|
-
base: [
|
|
7
|
-
"border",
|
|
8
|
-
"border-gray-200",
|
|
9
|
-
"rounded-lg",
|
|
10
|
-
"p-4"
|
|
11
|
-
],
|
|
6
|
+
base: [],
|
|
12
7
|
defaultVariants: { variant: "default" },
|
|
13
8
|
variants: { variant: {
|
|
14
|
-
compact: [
|
|
15
|
-
|
|
9
|
+
compact: [
|
|
10
|
+
"border",
|
|
11
|
+
"border-current",
|
|
12
|
+
"rounded-lg",
|
|
13
|
+
"p-4",
|
|
14
|
+
"space-y-2"
|
|
15
|
+
],
|
|
16
|
+
default: [
|
|
17
|
+
"border",
|
|
18
|
+
"border-current",
|
|
19
|
+
"rounded-lg",
|
|
20
|
+
"p-4",
|
|
21
|
+
"space-y-4"
|
|
22
|
+
]
|
|
16
23
|
} }
|
|
17
24
|
});
|
|
18
25
|
const fieldsetLegend = tv({
|
|
19
|
-
base: [
|
|
20
|
-
"text-lg",
|
|
21
|
-
"font-semibold",
|
|
22
|
-
"text-gray-900",
|
|
23
|
-
"mb-2"
|
|
24
|
-
],
|
|
26
|
+
base: [],
|
|
25
27
|
defaultVariants: { size: "default" },
|
|
26
28
|
variants: { size: {
|
|
27
|
-
default: [],
|
|
28
|
-
small: [
|
|
29
|
-
"text-base",
|
|
30
|
-
"font-medium",
|
|
31
|
-
"text-gray-900",
|
|
32
|
-
"mb-1"
|
|
33
|
-
]
|
|
29
|
+
default: ["text-foreground", "mb-2"],
|
|
30
|
+
small: ["text-foreground", "mb-1"]
|
|
34
31
|
} }
|
|
35
32
|
});
|
|
36
33
|
const FieldsetRoot = ({ className, variant, ...props }) => {
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { ComponentProps } from "react";
|
|
2
|
+
import { Input } from "@base-ui/react/input";
|
|
3
|
+
|
|
4
|
+
//#region src/input/input.d.ts
|
|
5
|
+
type InputVariant = "default" | "error";
|
|
6
|
+
type InputSize = "sm" | "md" | "lg";
|
|
7
|
+
interface InputProps extends Omit<ComponentProps<typeof Input>, "className" | "size"> {
|
|
8
|
+
className?: string;
|
|
9
|
+
size?: InputSize;
|
|
10
|
+
variant?: InputVariant;
|
|
11
|
+
}
|
|
12
|
+
declare const Input$1: ({
|
|
13
|
+
className,
|
|
14
|
+
variant,
|
|
15
|
+
size,
|
|
16
|
+
...props
|
|
17
|
+
}: InputProps) => React.JSX.Element;
|
|
18
|
+
//#endregion
|
|
19
|
+
export { InputVariant as i, InputProps as n, InputSize as r, Input$1 as t };
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { ComponentProps } from "react";
|
|
2
|
+
import { tv } from "@regardio/tailwind/utils";
|
|
3
|
+
import { Button } from "@base-ui/react/button";
|
|
4
|
+
|
|
5
|
+
//#region src/button/button.d.ts
|
|
6
|
+
declare const buttonVariants: {
|
|
7
|
+
readonly destructive: readonly ["inline-flex", "items-center", "justify-center", "transition-colors", "bg-destructive", "text-destructive-foreground", "border-destructive", "hover:bg-destructive-hover", "hover:border-destructive-hover"];
|
|
8
|
+
readonly ghost: readonly ["inline-flex", "items-center", "justify-center", "transition-colors", "bg-transparent", "text-foreground", "border-transparent", "hover:bg-muted"];
|
|
9
|
+
readonly outline: readonly ["inline-flex", "items-center", "justify-center", "transition-colors", "bg-transparent", "text-foreground", "border-current", "hover:bg-muted"];
|
|
10
|
+
readonly primary: readonly ["inline-flex", "items-center", "justify-center", "transition-colors", "bg-primary", "text-primary-foreground", "border-primary", "hover:bg-primary-hover", "hover:border-primary-hover"];
|
|
11
|
+
readonly secondary: readonly ["inline-flex", "items-center", "justify-center", "transition-colors", "bg-secondary", "text-secondary-foreground", "border-secondary", "hover:bg-secondary-hover", "hover:border-secondary-hover"];
|
|
12
|
+
};
|
|
13
|
+
declare const buttonSizes: {
|
|
14
|
+
readonly "2xl": readonly ["px-8", "py-4", "text-xl"];
|
|
15
|
+
readonly lg: readonly ["px-6", "py-3", "text-lg"];
|
|
16
|
+
readonly md: readonly ["px-4", "py-2", "text-base"];
|
|
17
|
+
readonly sm: readonly ["px-3", "py-1.5", "text-sm"];
|
|
18
|
+
readonly xl: readonly ["px-7", "py-3.5", "text-lg"];
|
|
19
|
+
};
|
|
20
|
+
type ButtonVariant = keyof typeof buttonVariants;
|
|
21
|
+
type ButtonSize = keyof typeof buttonSizes;
|
|
22
|
+
interface ButtonProps extends Omit<ComponentProps<typeof Button>, "className"> {
|
|
23
|
+
className?: string;
|
|
24
|
+
size?: ButtonSize;
|
|
25
|
+
variant?: ButtonVariant;
|
|
26
|
+
}
|
|
27
|
+
declare const Button$1: ({
|
|
28
|
+
children,
|
|
29
|
+
className,
|
|
30
|
+
size,
|
|
31
|
+
variant,
|
|
32
|
+
...props
|
|
33
|
+
}: ButtonProps) => React.JSX.Element;
|
|
34
|
+
//#endregion
|
|
35
|
+
export { buttonVariants as i, ButtonProps as n, ButtonVariant as r, Button$1 as t };
|
package/dist/input/index.d.mts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { i as InputVariant, n as InputProps, r as InputSize, t as Input } from "../index-
|
|
1
|
+
import { i as InputVariant, n as InputProps, r as InputSize, t as Input } from "../index-BTB1biC_.mjs";
|
|
2
2
|
export { Input, InputProps, InputSize, InputVariant };
|
package/dist/input/index.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as Input } from "../input-
|
|
1
|
+
import { t as Input } from "../input-BHRHF8xW.mjs";
|
|
2
2
|
export { Input };
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { tv } from "@regardio/tailwind/utils";
|
|
2
|
+
import { jsx } from "react/jsx-runtime";
|
|
3
|
+
import { Input } from "@base-ui/react/input";
|
|
4
|
+
//#region src/input/input.tsx
|
|
5
|
+
const input = tv({
|
|
6
|
+
base: [],
|
|
7
|
+
defaultVariants: {
|
|
8
|
+
size: "md",
|
|
9
|
+
variant: "default"
|
|
10
|
+
},
|
|
11
|
+
variants: {
|
|
12
|
+
size: {
|
|
13
|
+
lg: ["px-4", "py-3"],
|
|
14
|
+
md: ["px-3", "py-2"],
|
|
15
|
+
sm: ["px-2", "py-1"]
|
|
16
|
+
},
|
|
17
|
+
variant: {
|
|
18
|
+
default: [
|
|
19
|
+
"w-full",
|
|
20
|
+
"border",
|
|
21
|
+
"border-current",
|
|
22
|
+
"rounded-md",
|
|
23
|
+
"bg-background-muted",
|
|
24
|
+
"text-foreground",
|
|
25
|
+
"placeholder:text-muted-foreground",
|
|
26
|
+
"focus:outline-none",
|
|
27
|
+
"focus:ring-2",
|
|
28
|
+
"focus:ring-ring",
|
|
29
|
+
"focus:border-ring",
|
|
30
|
+
"transition-colors",
|
|
31
|
+
"duration-200"
|
|
32
|
+
],
|
|
33
|
+
error: [
|
|
34
|
+
"w-full",
|
|
35
|
+
"border",
|
|
36
|
+
"rounded-md",
|
|
37
|
+
"bg-background-muted",
|
|
38
|
+
"focus:outline-none",
|
|
39
|
+
"focus:ring-2",
|
|
40
|
+
"transition-colors",
|
|
41
|
+
"duration-200",
|
|
42
|
+
"border-destructive",
|
|
43
|
+
"text-destructive",
|
|
44
|
+
"placeholder:text-destructive",
|
|
45
|
+
"focus:ring-destructive",
|
|
46
|
+
"focus:border-destructive"
|
|
47
|
+
]
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
const Input$1 = ({ className, variant, size, ...props }) => {
|
|
52
|
+
return /* @__PURE__ */ jsx(Input, {
|
|
53
|
+
className: input({
|
|
54
|
+
className,
|
|
55
|
+
size,
|
|
56
|
+
variant
|
|
57
|
+
}),
|
|
58
|
+
...props
|
|
59
|
+
});
|
|
60
|
+
};
|
|
61
|
+
//#endregion
|
|
62
|
+
export { Input$1 as t };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { t as Input } from "../index-
|
|
1
|
+
import { t as Input } from "../index-BTB1biC_.mjs";
|
|
2
2
|
|
|
3
3
|
//#region src/password-input/password-input.d.ts
|
|
4
4
|
declare const passwordInputVariants: {
|
|
@@ -8,7 +8,7 @@ declare const passwordInputVariants: {
|
|
|
8
8
|
type PasswordInputVariant = keyof typeof passwordInputVariants;
|
|
9
9
|
interface PasswordInputProps extends Omit<React.ComponentProps<typeof Input>, "type" | "variant"> {
|
|
10
10
|
className?: string;
|
|
11
|
-
inputVariant?: "default" | "error"
|
|
11
|
+
inputVariant?: "default" | "error";
|
|
12
12
|
showToggle?: boolean;
|
|
13
13
|
variant?: PasswordInputVariant;
|
|
14
14
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { t as Button } from "../button-
|
|
2
|
-
import { t as Input } from "../input-
|
|
1
|
+
import { t as Button } from "../button-BllZdqCA.mjs";
|
|
2
|
+
import { t as Input } from "../input-BHRHF8xW.mjs";
|
|
3
3
|
import { useState } from "react";
|
|
4
4
|
import { tv } from "@regardio/tailwind/utils";
|
|
5
5
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
@@ -23,11 +23,11 @@ const toggleButton = tv({ base: [
|
|
|
23
23
|
"cursor-pointer",
|
|
24
24
|
"items-center",
|
|
25
25
|
"justify-center",
|
|
26
|
-
"text-
|
|
27
|
-
"hover:text-
|
|
26
|
+
"text-muted-foreground",
|
|
27
|
+
"hover:text-foreground",
|
|
28
28
|
"focus:outline-none",
|
|
29
29
|
"focus:ring-2",
|
|
30
|
-
"focus:ring-
|
|
30
|
+
"focus:ring-ring",
|
|
31
31
|
"focus:ring-offset-2",
|
|
32
32
|
"rounded",
|
|
33
33
|
"transition-colors",
|
|
@@ -53,7 +53,6 @@ const PasswordInput = ({ className, variant = "default", inputVariant = "default
|
|
|
53
53
|
"aria-label": showPassword ? "Hide password" : "Show password",
|
|
54
54
|
className: toggleButton(),
|
|
55
55
|
onClick: togglePasswordVisibility,
|
|
56
|
-
size: "sm",
|
|
57
56
|
variant: "ghost",
|
|
58
57
|
children: showPassword ? /* @__PURE__ */ jsx("svg", {
|
|
59
58
|
className: "h-4 w-4",
|
package/dist/radio/index.mjs
CHANGED
|
@@ -4,22 +4,19 @@ import { Radio as Radio$1 } from "@base-ui/react/radio";
|
|
|
4
4
|
//#region src/radio/radio.tsx
|
|
5
5
|
const radioRoot = tv({
|
|
6
6
|
base: [
|
|
7
|
-
"
|
|
8
|
-
"
|
|
7
|
+
"flex",
|
|
8
|
+
"items-center",
|
|
9
|
+
"justify-center",
|
|
9
10
|
"rounded-full",
|
|
10
|
-
"
|
|
11
|
-
"
|
|
12
|
-
"
|
|
13
|
-
"focus:outline-none",
|
|
14
|
-
"focus:ring-2",
|
|
15
|
-
"focus:ring-blue-500",
|
|
16
|
-
"focus:ring-offset-2",
|
|
11
|
+
"focus-visible:outline-2",
|
|
12
|
+
"focus-visible:outline-offset-2",
|
|
13
|
+
"focus-visible:outline-ring",
|
|
17
14
|
"disabled:cursor-not-allowed",
|
|
18
|
-
"
|
|
19
|
-
"data-[
|
|
20
|
-
"data-[
|
|
15
|
+
"data-[checked]:bg-primary",
|
|
16
|
+
"data-[unchecked]:border",
|
|
17
|
+
"data-[unchecked]:border-current",
|
|
18
|
+
"data-[unchecked]:bg-background-muted",
|
|
21
19
|
"transition-colors",
|
|
22
|
-
"duration-200",
|
|
23
20
|
"cursor-pointer"
|
|
24
21
|
],
|
|
25
22
|
defaultVariants: { size: "md" },
|
|
@@ -31,10 +28,8 @@ const radioRoot = tv({
|
|
|
31
28
|
});
|
|
32
29
|
const radioIndicator = tv({ base: [
|
|
33
30
|
"flex",
|
|
34
|
-
"
|
|
35
|
-
"
|
|
36
|
-
"text-white",
|
|
37
|
-
"data-[unchecked]:invisible"
|
|
31
|
+
"text-primary-foreground",
|
|
32
|
+
"data-[unchecked]:hidden"
|
|
38
33
|
] });
|
|
39
34
|
const RadioRoot = ({ className, size = "md", ...props }) => {
|
|
40
35
|
return /* @__PURE__ */ jsx(Radio$1.Root, {
|
package/dist/slider/index.mjs
CHANGED
|
@@ -28,7 +28,7 @@ const sliderTrack = tv({
|
|
|
28
28
|
"relative",
|
|
29
29
|
"w-full",
|
|
30
30
|
"rounded-full",
|
|
31
|
-
"bg-
|
|
31
|
+
"bg-muted",
|
|
32
32
|
"overflow-hidden"
|
|
33
33
|
],
|
|
34
34
|
defaultVariants: { size: "md" },
|
|
@@ -41,23 +41,21 @@ const sliderTrack = tv({
|
|
|
41
41
|
const sliderIndicator = tv({ base: [
|
|
42
42
|
"absolute",
|
|
43
43
|
"h-full",
|
|
44
|
-
"bg-
|
|
44
|
+
"bg-primary",
|
|
45
45
|
"rounded-full"
|
|
46
46
|
] });
|
|
47
47
|
const sliderThumb = tv({
|
|
48
48
|
base: [
|
|
49
49
|
"block",
|
|
50
50
|
"rounded-full",
|
|
51
|
-
"bg-
|
|
51
|
+
"bg-background-muted",
|
|
52
52
|
"border-2",
|
|
53
|
-
"border-
|
|
54
|
-
"shadow-lg",
|
|
53
|
+
"border-primary",
|
|
55
54
|
"focus:outline-none",
|
|
56
55
|
"focus:ring-2",
|
|
57
|
-
"focus:ring-
|
|
56
|
+
"focus:ring-ring",
|
|
58
57
|
"focus:ring-offset-2",
|
|
59
58
|
"disabled:cursor-not-allowed",
|
|
60
|
-
"disabled:opacity-50",
|
|
61
59
|
"cursor-grab",
|
|
62
60
|
"active:cursor-grabbing"
|
|
63
61
|
],
|
|
@@ -68,12 +66,7 @@ const sliderThumb = tv({
|
|
|
68
66
|
sm: ["h-3", "w-3"]
|
|
69
67
|
} }
|
|
70
68
|
});
|
|
71
|
-
const sliderValue = tv({ base: [
|
|
72
|
-
"text-sm",
|
|
73
|
-
"font-medium",
|
|
74
|
-
"text-gray-700",
|
|
75
|
-
"mb-2"
|
|
76
|
-
] });
|
|
69
|
+
const sliderValue = tv({ base: ["text-foreground", "mb-2"] });
|
|
77
70
|
const SliderRoot = ({ className, size = "md", ...props }) => {
|
|
78
71
|
return /* @__PURE__ */ jsx(Slider$1.Root, {
|
|
79
72
|
className: sliderRoot({
|
package/dist/switch/index.mjs
CHANGED
|
@@ -9,16 +9,13 @@ const switchRoot = tv({
|
|
|
9
9
|
"items-center",
|
|
10
10
|
"rounded-full",
|
|
11
11
|
"transition-colors",
|
|
12
|
-
"
|
|
13
|
-
"focus:outline-
|
|
14
|
-
"focus:ring
|
|
15
|
-
"focus:ring-blue-500",
|
|
16
|
-
"focus:ring-offset-2",
|
|
12
|
+
"focus-visible:outline-2",
|
|
13
|
+
"focus-visible:outline-offset-2",
|
|
14
|
+
"focus-visible:outline-ring",
|
|
17
15
|
"disabled:cursor-not-allowed",
|
|
18
|
-
"disabled:opacity-50",
|
|
19
16
|
"cursor-pointer",
|
|
20
|
-
"bg-
|
|
21
|
-
"data-[checked]:bg-
|
|
17
|
+
"bg-muted",
|
|
18
|
+
"data-[checked]:bg-primary"
|
|
22
19
|
],
|
|
23
20
|
defaultVariants: { size: "md" },
|
|
24
21
|
variants: { size: {
|
|
@@ -32,13 +29,11 @@ const switchThumb = tv({
|
|
|
32
29
|
"pointer-events-none",
|
|
33
30
|
"inline-block",
|
|
34
31
|
"rounded-full",
|
|
35
|
-
"bg-
|
|
36
|
-
"shadow-lg",
|
|
32
|
+
"bg-background-muted",
|
|
37
33
|
"ring-0",
|
|
38
34
|
"transition-transform",
|
|
39
35
|
"duration-200",
|
|
40
|
-
"translate-x-0"
|
|
41
|
-
"data-[checked]:translate-x-full"
|
|
36
|
+
"translate-x-0"
|
|
42
37
|
],
|
|
43
38
|
defaultVariants: { size: "md" },
|
|
44
39
|
variants: { size: {
|
package/dist/text/index.d.mts
CHANGED
|
@@ -5,9 +5,12 @@ declare const themeColorVariants: {
|
|
|
5
5
|
readonly primary: readonly [];
|
|
6
6
|
};
|
|
7
7
|
declare const textVariants: {
|
|
8
|
-
readonly code: readonly ["font-
|
|
9
|
-
readonly
|
|
10
|
-
readonly
|
|
8
|
+
readonly code: readonly ["font-mono", "text-sm"];
|
|
9
|
+
readonly muted: readonly ["text-muted-foreground"];
|
|
10
|
+
readonly primary: readonly ["text-foreground"];
|
|
11
|
+
readonly secondary: readonly ["text-muted-foreground"];
|
|
12
|
+
readonly subtitle: readonly ["text-muted-foreground"];
|
|
13
|
+
readonly supertitle: readonly ["text-foreground", "font-semibold"];
|
|
11
14
|
};
|
|
12
15
|
type TextThemeColor = keyof typeof themeColorVariants;
|
|
13
16
|
type TextVariant = keyof typeof textVariants;
|
package/dist/text/index.mjs
CHANGED
|
@@ -10,9 +10,12 @@ const text = tv({
|
|
|
10
10
|
variants: {
|
|
11
11
|
themeColor: { primary: [] },
|
|
12
12
|
variant: {
|
|
13
|
-
code: ["font-
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
code: ["font-mono", "text-sm"],
|
|
14
|
+
muted: ["text-muted-foreground"],
|
|
15
|
+
primary: ["text-foreground"],
|
|
16
|
+
secondary: ["text-muted-foreground"],
|
|
17
|
+
subtitle: ["text-muted-foreground"],
|
|
18
|
+
supertitle: ["text-foreground", "font-semibold"]
|
|
16
19
|
}
|
|
17
20
|
}
|
|
18
21
|
});
|
package/dist/toggle/index.mjs
CHANGED
|
@@ -3,22 +3,7 @@ import { jsx } from "react/jsx-runtime";
|
|
|
3
3
|
import { Toggle as Toggle$1 } from "@base-ui/react/toggle";
|
|
4
4
|
//#region src/toggle/toggle.tsx
|
|
5
5
|
const toggle = tv({
|
|
6
|
-
base: [
|
|
7
|
-
"inline-flex",
|
|
8
|
-
"items-center",
|
|
9
|
-
"justify-center",
|
|
10
|
-
"rounded-md",
|
|
11
|
-
"text-sm",
|
|
12
|
-
"font-medium",
|
|
13
|
-
"transition-colors",
|
|
14
|
-
"duration-200",
|
|
15
|
-
"focus:outline-none",
|
|
16
|
-
"focus:ring-2",
|
|
17
|
-
"focus:ring-blue-500",
|
|
18
|
-
"focus:ring-offset-2",
|
|
19
|
-
"disabled:pointer-events-none",
|
|
20
|
-
"disabled:opacity-50"
|
|
21
|
-
],
|
|
6
|
+
base: [],
|
|
22
7
|
defaultVariants: {
|
|
23
8
|
size: "md",
|
|
24
9
|
variant: "outline"
|
|
@@ -42,24 +27,54 @@ const toggle = tv({
|
|
|
42
27
|
]
|
|
43
28
|
},
|
|
44
29
|
variant: {
|
|
45
|
-
default: [
|
|
30
|
+
default: [
|
|
31
|
+
"inline-flex",
|
|
32
|
+
"items-center",
|
|
33
|
+
"justify-center",
|
|
34
|
+
"rounded-md",
|
|
35
|
+
"transition-colors",
|
|
36
|
+
"duration-200",
|
|
37
|
+
"focus:outline-none",
|
|
38
|
+
"focus:ring-2",
|
|
39
|
+
"focus:ring-ring",
|
|
40
|
+
"focus:ring-offset-2",
|
|
41
|
+
"disabled:pointer-events-none"
|
|
42
|
+
],
|
|
46
43
|
ghost: [
|
|
44
|
+
"inline-flex",
|
|
45
|
+
"items-center",
|
|
46
|
+
"justify-center",
|
|
47
|
+
"rounded-md",
|
|
48
|
+
"transition-colors",
|
|
49
|
+
"duration-200",
|
|
50
|
+
"focus:outline-none",
|
|
51
|
+
"focus:ring-2",
|
|
52
|
+
"focus:ring-ring",
|
|
53
|
+
"focus:ring-offset-2",
|
|
54
|
+
"disabled:pointer-events-none",
|
|
47
55
|
"bg-transparent",
|
|
48
|
-
"text-
|
|
49
|
-
"hover:bg-
|
|
50
|
-
"
|
|
51
|
-
"data-[pressed]:bg-gray-200",
|
|
52
|
-
"data-[pressed]:text-gray-900"
|
|
56
|
+
"text-foreground",
|
|
57
|
+
"hover:bg-muted",
|
|
58
|
+
"data-[pressed]:bg-muted"
|
|
53
59
|
],
|
|
54
60
|
outline: [
|
|
61
|
+
"inline-flex",
|
|
62
|
+
"items-center",
|
|
63
|
+
"justify-center",
|
|
64
|
+
"rounded-md",
|
|
65
|
+
"transition-colors",
|
|
66
|
+
"duration-200",
|
|
67
|
+
"focus:outline-none",
|
|
68
|
+
"focus:ring-2",
|
|
69
|
+
"focus:ring-ring",
|
|
70
|
+
"focus:ring-offset-2",
|
|
71
|
+
"disabled:pointer-events-none",
|
|
55
72
|
"border",
|
|
56
|
-
"border-
|
|
57
|
-
"bg-
|
|
58
|
-
"text-
|
|
59
|
-
"hover:bg-
|
|
60
|
-
"
|
|
61
|
-
"data-[pressed]:bg-gray-100",
|
|
62
|
-
"data-[pressed]:text-gray-900"
|
|
73
|
+
"border-current",
|
|
74
|
+
"bg-background-muted",
|
|
75
|
+
"text-foreground",
|
|
76
|
+
"hover:bg-muted",
|
|
77
|
+
"data-[pressed]:bg-muted"
|
|
63
78
|
]
|
|
64
79
|
}
|
|
65
80
|
}
|
package/package.json
CHANGED
|
@@ -1,10 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://www.schemastore.org/package.json",
|
|
3
3
|
"name": "@regardio/react",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.8.0",
|
|
5
5
|
"private": false,
|
|
6
6
|
"description": "Regardio React UI components",
|
|
7
|
-
"keywords": [
|
|
7
|
+
"keywords": [
|
|
8
|
+
"react",
|
|
9
|
+
"components",
|
|
10
|
+
"ui",
|
|
11
|
+
"regardio",
|
|
12
|
+
"tailwindcss"
|
|
13
|
+
],
|
|
8
14
|
"homepage": "https://github.com/regardio/react/blob/main/README.md",
|
|
9
15
|
"bugs": {
|
|
10
16
|
"url": "https://github.com/regardio/react/issues"
|
|
@@ -15,7 +21,9 @@
|
|
|
15
21
|
},
|
|
16
22
|
"license": "MIT",
|
|
17
23
|
"author": "Bernd Matzner <bernd.matzner@regard.io>",
|
|
18
|
-
"sideEffects": [
|
|
24
|
+
"sideEffects": [
|
|
25
|
+
"./src/tailwind.css"
|
|
26
|
+
],
|
|
19
27
|
"type": "module",
|
|
20
28
|
"exports": {
|
|
21
29
|
"./background-slideshow": {
|
|
@@ -180,7 +188,10 @@
|
|
|
180
188
|
"types": "./dist/utils/text/index.d.mts"
|
|
181
189
|
}
|
|
182
190
|
},
|
|
183
|
-
"files": [
|
|
191
|
+
"files": [
|
|
192
|
+
"dist",
|
|
193
|
+
"src"
|
|
194
|
+
],
|
|
184
195
|
"scripts": {
|
|
185
196
|
"build": "tsdown",
|
|
186
197
|
"clean": "exec-clean .turbo dist",
|
|
@@ -206,12 +217,12 @@
|
|
|
206
217
|
"typecheck": "exec-tsc --noEmit"
|
|
207
218
|
},
|
|
208
219
|
"dependencies": {
|
|
209
|
-
"@base-ui/react": "1.
|
|
220
|
+
"@base-ui/react": "1.3.0",
|
|
210
221
|
"@maptiler/sdk": "3.11.1",
|
|
211
222
|
"@mdx-js/react": "3.1.1",
|
|
212
|
-
"@regardio/js": "0.
|
|
213
|
-
"@regardio/tailwind": "0.3.
|
|
214
|
-
"@supabase/supabase-js": "2.99.
|
|
223
|
+
"@regardio/js": "^0.9.2",
|
|
224
|
+
"@regardio/tailwind": "^0.3.12",
|
|
225
|
+
"@supabase/supabase-js": "2.99.2",
|
|
215
226
|
"cmdk": "1.1.1",
|
|
216
227
|
"embla-carousel": "8.6.0",
|
|
217
228
|
"embla-carousel-react": "8.6.0",
|
|
@@ -224,40 +235,41 @@
|
|
|
224
235
|
"react-day-picker": "9.14.0",
|
|
225
236
|
"react-dom": "19.2.4",
|
|
226
237
|
"react-hook-form": "7.71.2",
|
|
227
|
-
"react-resizable-panels": "4.7.
|
|
238
|
+
"react-resizable-panels": "4.7.3",
|
|
228
239
|
"react-router": "7.13.1",
|
|
229
240
|
"tailwind-variants": "3.2.2",
|
|
230
241
|
"vaul": "1.1.2",
|
|
231
242
|
"zod": "4.3.6"
|
|
232
243
|
},
|
|
233
244
|
"devDependencies": {
|
|
234
|
-
"@regardio/dev": "1.
|
|
235
|
-
"@storybook/addon-a11y": "10.
|
|
236
|
-
"@storybook/addon-docs": "10.
|
|
237
|
-
"@storybook/addon-vitest": "10.
|
|
238
|
-
"@storybook/react
|
|
239
|
-
"@
|
|
245
|
+
"@regardio/dev": "^1.18.0",
|
|
246
|
+
"@storybook/addon-a11y": "10.3.0",
|
|
247
|
+
"@storybook/addon-docs": "10.3.0",
|
|
248
|
+
"@storybook/addon-vitest": "10.3.0",
|
|
249
|
+
"@storybook/react": "^10.3.0",
|
|
250
|
+
"@storybook/react-vite": "10.3.0",
|
|
251
|
+
"@tailwindcss/vite": "4.2.2",
|
|
240
252
|
"@testing-library/jest-dom": "6.9.1",
|
|
241
253
|
"@testing-library/react": "16.3.2",
|
|
242
254
|
"@total-typescript/ts-reset": "0.6.1",
|
|
243
255
|
"@types/leaflet": "1.9.21",
|
|
244
|
-
"@types/node": "25.
|
|
256
|
+
"@types/node": "25.5.0",
|
|
245
257
|
"@types/react": "19.2.14",
|
|
246
258
|
"@types/react-dom": "19.2.3",
|
|
247
|
-
"@vitejs/plugin-react": "
|
|
248
|
-
"@vitest/browser-playwright": "4.0
|
|
249
|
-
"@vitest/coverage-v8": "4.0
|
|
250
|
-
"@vitest/ui": "4.0
|
|
251
|
-
"jsdom": "
|
|
259
|
+
"@vitejs/plugin-react": "6.0.1",
|
|
260
|
+
"@vitest/browser-playwright": "4.1.0",
|
|
261
|
+
"@vitest/coverage-v8": "4.1.0",
|
|
262
|
+
"@vitest/ui": "4.1.0",
|
|
263
|
+
"jsdom": "29.0.0",
|
|
252
264
|
"playwright": "1.58.2",
|
|
253
|
-
"storybook": "10.
|
|
254
|
-
"tailwindcss": "4.2.
|
|
255
|
-
"tsdown": "0.21.
|
|
265
|
+
"storybook": "10.3.0",
|
|
266
|
+
"tailwindcss": "4.2.2",
|
|
267
|
+
"tsdown": "0.21.4",
|
|
256
268
|
"typescript": "5.9.3",
|
|
257
|
-
"vite": "
|
|
258
|
-
"vitest": "4.0
|
|
269
|
+
"vite": "8.0.0",
|
|
270
|
+
"vitest": "4.1.0"
|
|
259
271
|
},
|
|
260
272
|
"engines": {
|
|
261
273
|
"node": ">=18"
|
|
262
274
|
}
|
|
263
|
-
}
|
|
275
|
+
}
|
|
@@ -8,22 +8,27 @@ describe('Button', () => {
|
|
|
8
8
|
expect(screen.getByRole('button', { name: 'Click me' })).toBeInTheDocument();
|
|
9
9
|
});
|
|
10
10
|
|
|
11
|
-
it('applies default variant
|
|
11
|
+
it('applies default variant classes', () => {
|
|
12
12
|
render(<Button>Default button</Button>);
|
|
13
13
|
const button = screen.getByRole('button', { name: 'Default button' });
|
|
14
|
-
expect(button).toHaveClass('bg-
|
|
14
|
+
expect(button).toHaveClass('bg-primary', 'text-primary-foreground');
|
|
15
15
|
});
|
|
16
16
|
|
|
17
17
|
it('applies variant classes correctly', () => {
|
|
18
18
|
render(<Button variant="secondary">Secondary button</Button>);
|
|
19
19
|
const button = screen.getByRole('button', { name: 'Secondary button' });
|
|
20
|
-
expect(button).toHaveClass('bg-
|
|
20
|
+
expect(button).toHaveClass('bg-secondary', 'text-secondary-foreground');
|
|
21
21
|
});
|
|
22
22
|
|
|
23
|
-
it('applies
|
|
24
|
-
render(<Button
|
|
25
|
-
const button = screen.getByRole('button', { name: '
|
|
26
|
-
expect(button).toHaveClass(
|
|
23
|
+
it('applies base structural classes', () => {
|
|
24
|
+
render(<Button>Button</Button>);
|
|
25
|
+
const button = screen.getByRole('button', { name: 'Button' });
|
|
26
|
+
expect(button).toHaveClass(
|
|
27
|
+
'inline-flex',
|
|
28
|
+
'items-center',
|
|
29
|
+
'justify-center',
|
|
30
|
+
'transition-colors',
|
|
31
|
+
);
|
|
27
32
|
});
|
|
28
33
|
|
|
29
34
|
it('applies custom className', () => {
|
|
@@ -36,7 +41,6 @@ describe('Button', () => {
|
|
|
36
41
|
render(<Button disabled>Disabled button</Button>);
|
|
37
42
|
const button = screen.getByRole('button', { name: 'Disabled button' });
|
|
38
43
|
expect(button).toBeDisabled();
|
|
39
|
-
expect(button).toHaveClass('disabled:opacity-50', 'disabled:cursor-not-allowed');
|
|
40
44
|
});
|
|
41
45
|
|
|
42
46
|
it('passes through other props', () => {
|