@jbpark/ui-kit 2.3.4 → 2.4.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/components/atoms/Button/index.d.mts +5 -1
- package/dist/components/atoms/Button/index.d.mts.map +1 -1
- package/dist/components/atoms/Button/index.mjs +19 -6
- package/dist/components/atoms/Button/index.mjs.map +1 -1
- package/dist/components/atoms/Checkbox/Group/index.d.mts +2 -2
- package/dist/components/atoms/Checkbox/Group/index.d.mts.map +1 -1
- package/dist/components/atoms/Checkbox/Group/index.mjs.map +1 -1
- package/dist/components/atoms/Checkbox/index.d.mts +2 -3
- package/dist/components/atoms/Checkbox/index.d.mts.map +1 -1
- package/dist/components/atoms/Checkbox/index.mjs.map +1 -1
- package/dist/components/atoms/Radio/Group/index.d.mts +7 -2
- package/dist/components/atoms/Radio/Group/index.d.mts.map +1 -1
- package/dist/components/atoms/Radio/Group/index.mjs +15 -4
- package/dist/components/atoms/Radio/Group/index.mjs.map +1 -1
- package/dist/components/atoms/Radio/index.d.mts +6 -3
- package/dist/components/atoms/Radio/index.d.mts.map +1 -1
- package/dist/components/atoms/Radio/index.mjs +3 -2
- package/dist/components/atoms/Radio/index.mjs.map +1 -1
- package/dist/components/atoms/Switch/index.d.mts +6 -0
- package/dist/components/atoms/Switch/index.d.mts.map +1 -1
- package/dist/components/atoms/Switch/index.mjs +38 -5
- package/dist/components/atoms/Switch/index.mjs.map +1 -1
- package/dist/core/switch.d.mts +2 -0
- package/dist/core/switch.d.mts.map +1 -1
- package/dist/core/switch.mjs +5 -5
- package/dist/core/switch.mjs.map +1 -1
- package/dist/style.css +97 -20
- package/package.json +1 -1
|
@@ -5,13 +5,15 @@ import * as react_jsx_runtime0 from "react/jsx-runtime";
|
|
|
5
5
|
//#region src/components/atoms/Button/index.d.ts
|
|
6
6
|
type ButtonProps = Props$1;
|
|
7
7
|
type PresetColors = 'blue' | 'purple' | 'cyan' | 'green' | 'magenta' | 'pink' | 'red' | 'orange' | 'yellow' | 'volcano' | 'geekblue' | 'lime' | 'gold';
|
|
8
|
-
interface Props extends Omit<ButtonProps, 'size' | 'variant'> {
|
|
8
|
+
interface Props extends Omit<ButtonProps, 'size' | 'variant' | 'type'> {
|
|
9
9
|
icon?: React.ReactNode;
|
|
10
10
|
block?: boolean;
|
|
11
11
|
danger?: boolean;
|
|
12
12
|
disabled?: boolean;
|
|
13
13
|
size?: 'small' | 'middle' | 'large';
|
|
14
|
+
type?: 'primary' | 'default' | 'dashed' | 'text' | 'link';
|
|
14
15
|
variant?: 'solid' | 'outlined' | 'dashed' | 'filled' | 'text' | 'link';
|
|
16
|
+
shape?: 'default' | 'circle' | 'round';
|
|
15
17
|
color?: PresetColors | 'default' | 'primary' | 'danger';
|
|
16
18
|
loading?: boolean | {
|
|
17
19
|
icon: React.ReactNode;
|
|
@@ -20,9 +22,11 @@ interface Props extends Omit<ButtonProps, 'size' | 'variant'> {
|
|
|
20
22
|
declare const Button: ({
|
|
21
23
|
icon,
|
|
22
24
|
className,
|
|
25
|
+
type,
|
|
23
26
|
variant,
|
|
24
27
|
size,
|
|
25
28
|
color,
|
|
29
|
+
shape,
|
|
26
30
|
block,
|
|
27
31
|
disabled,
|
|
28
32
|
loading,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../../../../src/components/atoms/Button/index.tsx"],"mappings":";;;;;KAQK,WAAA,GAAc,OAAA;AAAA,KAEd,YAAA;AAAA,UAeY,KAAA,SAAc,IAAA,CAAK,WAAA;EAClC,IAAA,GAAO,KAAA,CAAM,SAAA;EACb,KAAA;EACA,MAAA;EACA,QAAA;EACA,IAAA;EACA,OAAA;EACA,KAAA,GAAQ,YAAA;EACR,OAAA;IAAsB,IAAA,EAAM,KAAA,CAAM,SAAA;EAAA;AAAA;AAAA,
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../../../../src/components/atoms/Button/index.tsx"],"mappings":";;;;;KAQK,WAAA,GAAc,OAAA;AAAA,KAEd,YAAA;AAAA,UAeY,KAAA,SAAc,IAAA,CAAK,WAAA;EAClC,IAAA,GAAO,KAAA,CAAM,SAAA;EACb,KAAA;EACA,MAAA;EACA,QAAA;EACA,IAAA;EACA,IAAA;EACA,OAAA;EACA,KAAA;EACA,KAAA,GAAQ,YAAA;EACR,OAAA;IAAsB,IAAA,EAAM,KAAA,CAAM,SAAA;EAAA;AAAA;AAAA,cAkD9B,MAAA;EAAU,IAAA;EAAA,SAAA;EAAA,IAAA;EAAA,OAAA;EAAA,IAAA;EAAA,KAAA;EAAA,KAAA;EAAA,KAAA;EAAA,QAAA;EAAA,OAAA;EAAA,MAAA;EAAA,QAAA;EAAA,WAAA;EAAA,GAAA;AAAA,GAeb,KAAA,KAAK,kBAAA,CAAA,GAAA,CAAA,OAAA"}
|
|
@@ -16,26 +16,39 @@ const variantClasses = {
|
|
|
16
16
|
text: cn("bg-transparent text-foreground", "hover:bg-accent"),
|
|
17
17
|
link: cn("bg-transparent text-primary", "underline-offset-4 hover:underline", "hover:bg-primary/10")
|
|
18
18
|
};
|
|
19
|
+
const typeToVariant = {
|
|
20
|
+
primary: "solid",
|
|
21
|
+
default: "outlined",
|
|
22
|
+
dashed: "dashed",
|
|
23
|
+
text: "text",
|
|
24
|
+
link: "link"
|
|
25
|
+
};
|
|
19
26
|
const sizesClasses = {
|
|
20
27
|
small: "h-6 px-3 text-sm",
|
|
21
28
|
middle: "h-8 px-4 text-base",
|
|
22
29
|
large: "h-10 px-5 text-lg"
|
|
23
30
|
};
|
|
24
|
-
const
|
|
25
|
-
small:
|
|
26
|
-
middle:
|
|
27
|
-
large:
|
|
31
|
+
const iconClasses = {
|
|
32
|
+
small: `size-6 [&_svg:not([class*='size-'])]:size-3`,
|
|
33
|
+
middle: `size-8 [&_svg:not([class*='size-'])]:size-4`,
|
|
34
|
+
large: `size-10 [&_svg:not([class*='size-'])]:size-5`
|
|
35
|
+
};
|
|
36
|
+
const shapesClasses = {
|
|
37
|
+
default: "rounded-sm",
|
|
38
|
+
circle: "rounded-full",
|
|
39
|
+
round: "rounded-2xl"
|
|
28
40
|
};
|
|
29
|
-
const Button = ({ icon, className,
|
|
41
|
+
const Button = ({ icon, className, type = "default", variant, size = "middle", color = "default", shape = "default", block = false, disabled, loading, danger, children, onMouseDown, ...props }) => {
|
|
30
42
|
const iconOnly = icon && !children;
|
|
31
43
|
const computedColor = danger ? "danger" : color;
|
|
32
44
|
const colored = computedColor && computedColor !== "default";
|
|
45
|
+
const resolvedVariant = variant ?? typeToVariant[type] ?? "solid";
|
|
33
46
|
const displayIcon = loading ? typeof loading === "object" ? loading.icon : /* @__PURE__ */ jsx(LoaderCircle, { className: "animate-spin" }) : icon;
|
|
34
47
|
return /* @__PURE__ */ jsxs(Core, {
|
|
35
48
|
disabled,
|
|
36
49
|
variant: "default",
|
|
37
50
|
"data-color": computedColor,
|
|
38
|
-
className: cn("inline-flex items-center justify-center gap-x-2", "rounded-lg", "cursor-pointer", "h-auto py-0", "transition-all", variantClasses[
|
|
51
|
+
className: cn("inline-flex items-center justify-center gap-x-2", "rounded-lg", "cursor-pointer", "h-auto py-0", "transition-all", variantClasses[resolvedVariant], sizesClasses[size || "medium"], iconOnly && ["p-0", iconClasses[size || "medium"]], shapesClasses[shape || "default"], block && "w-full", colored && (resolvedVariant === "solid" ? [
|
|
39
52
|
"bg-(--btn-bg)",
|
|
40
53
|
"hover:bg-(--btn-bg-hover)",
|
|
41
54
|
"active:bg-(--btn-bg-active)",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":["button.Button"],"sources":["../../../../src/components/atoms/Button/index.tsx"],"sourcesContent":["'use client';\n\nimport { LoaderCircle } from 'lucide-react';\n\nimport { button } from '@repo/ui/core';\nimport { cn } from '@repo/ui/utils';\n\nconst Core = button.Button;\ntype ButtonProps = button.Props;\n\ntype PresetColors =\n | 'blue'\n | 'purple'\n | 'cyan'\n | 'green'\n | 'magenta'\n | 'pink'\n | 'red'\n | 'orange'\n | 'yellow'\n | 'volcano'\n | 'geekblue'\n | 'lime'\n | 'gold';\n\nexport interface Props extends Omit<ButtonProps, 'size' | 'variant'> {\n icon?: React.ReactNode;\n block?: boolean;\n danger?: boolean;\n disabled?: boolean;\n size?: 'small' | 'middle' | 'large';\n variant?: 'solid' | 'outlined' | 'dashed' | 'filled' | 'text' | 'link';\n color?: PresetColors | 'default' | 'primary' | 'danger';\n loading?: boolean | { icon: React.ReactNode };\n}\n\nconst variantClasses: Record<string, string> = {\n solid: '',\n outlined: cn(\n 'border border-[rgb(var(--btn-border)/0.5)]',\n 'bg-background text-foreground',\n 'hover:bg-accent',\n ),\n dashed: cn(\n 'border border-dashed border-[rgb(var(--btn-border)/0.5)]',\n 'bg-background text-foreground',\n 'hover:bg-accent',\n ),\n filled: cn('bg-muted text-foreground', 'hover:bg-muted/80'),\n text: cn('bg-transparent text-foreground', 'hover:bg-accent'),\n link: cn(\n 'bg-transparent text-primary',\n 'underline-offset-4 hover:underline',\n 'hover:bg-primary/10',\n ),\n};\n\nconst sizesClasses: Record<string, string> = {\n small: 'h-6 px-3 text-sm',\n middle: 'h-8 px-4 text-base',\n large: 'h-10 px-5 text-lg',\n};\n\nconst
|
|
1
|
+
{"version":3,"file":"index.mjs","names":["button.Button"],"sources":["../../../../src/components/atoms/Button/index.tsx"],"sourcesContent":["'use client';\n\nimport { LoaderCircle } from 'lucide-react';\n\nimport { button } from '@repo/ui/core';\nimport { cn } from '@repo/ui/utils';\n\nconst Core = button.Button;\ntype ButtonProps = button.Props;\n\ntype PresetColors =\n | 'blue'\n | 'purple'\n | 'cyan'\n | 'green'\n | 'magenta'\n | 'pink'\n | 'red'\n | 'orange'\n | 'yellow'\n | 'volcano'\n | 'geekblue'\n | 'lime'\n | 'gold';\n\nexport interface Props extends Omit<ButtonProps, 'size' | 'variant' | 'type'> {\n icon?: React.ReactNode;\n block?: boolean;\n danger?: boolean;\n disabled?: boolean;\n size?: 'small' | 'middle' | 'large';\n type?: 'primary' | 'default' | 'dashed' | 'text' | 'link';\n variant?: 'solid' | 'outlined' | 'dashed' | 'filled' | 'text' | 'link';\n shape?: 'default' | 'circle' | 'round';\n color?: PresetColors | 'default' | 'primary' | 'danger';\n loading?: boolean | { icon: React.ReactNode };\n}\n\nconst variantClasses: Record<string, string> = {\n solid: '',\n outlined: cn(\n 'border border-[rgb(var(--btn-border)/0.5)]',\n 'bg-background text-foreground',\n 'hover:bg-accent',\n ),\n dashed: cn(\n 'border border-dashed border-[rgb(var(--btn-border)/0.5)]',\n 'bg-background text-foreground',\n 'hover:bg-accent',\n ),\n filled: cn('bg-muted text-foreground', 'hover:bg-muted/80'),\n text: cn('bg-transparent text-foreground', 'hover:bg-accent'),\n link: cn(\n 'bg-transparent text-primary',\n 'underline-offset-4 hover:underline',\n 'hover:bg-primary/10',\n ),\n};\n\nconst typeToVariant: Record<string, string> = {\n primary: 'solid',\n default: 'outlined',\n dashed: 'dashed',\n text: 'text',\n link: 'link',\n};\n\nconst sizesClasses: Record<string, string> = {\n small: 'h-6 px-3 text-sm',\n middle: 'h-8 px-4 text-base',\n large: 'h-10 px-5 text-lg',\n};\n\nconst iconClasses: Record<string, string> = {\n small: `size-6 [&_svg:not([class*='size-'])]:size-3`,\n middle: `size-8 [&_svg:not([class*='size-'])]:size-4`,\n large: `size-10 [&_svg:not([class*='size-'])]:size-5`,\n};\n\nconst shapesClasses = {\n default: 'rounded-sm',\n circle: 'rounded-full',\n round: 'rounded-2xl',\n};\n\nconst Button = ({\n icon,\n className,\n type = 'default',\n variant,\n size = 'middle',\n color = 'default',\n shape = 'default',\n block = false,\n disabled,\n loading,\n danger,\n children,\n onMouseDown,\n ...props\n}: Props) => {\n const iconOnly = icon && !children;\n const computedColor = danger ? 'danger' : color;\n const colored = computedColor && computedColor !== 'default';\n const resolvedVariant = variant ?? typeToVariant[type] ?? 'solid';\n\n const displayIcon = loading ? (\n typeof loading === 'object' ? (\n loading.icon\n ) : (\n <LoaderCircle className=\"animate-spin\" />\n )\n ) : (\n icon\n );\n\n return (\n <Core\n disabled={disabled}\n variant=\"default\"\n data-color={computedColor}\n className={cn(\n 'inline-flex items-center justify-center gap-x-2',\n 'rounded-lg',\n 'cursor-pointer',\n 'h-auto py-0',\n 'transition-all',\n variantClasses[resolvedVariant],\n sizesClasses[size || 'medium'],\n iconOnly && ['p-0', iconClasses[size || 'medium']],\n shapesClasses[shape || 'default'],\n block && 'w-full',\n colored &&\n (resolvedVariant === 'solid'\n ? [\n 'bg-(--btn-bg)',\n 'hover:bg-(--btn-bg-hover)',\n 'active:bg-(--btn-bg-active)',\n 'text-(--btn-fg)',\n 'border-(--btn-border)',\n ]\n : [\n 'text-(--btn-bg)',\n 'border-[rgb(var(--btn-border)/0.5)]',\n //\n ]),\n className,\n //\n )}\n onMouseDown={e => {\n e.preventDefault();\n onMouseDown?.(e);\n }}\n {...props}\n >\n {displayIcon}\n {children}\n </Core>\n );\n};\n\nexport default Button;\n"],"mappings":";;;;;;;;;AAOA,MAAM,OAAOA;AA+Bb,MAAM,iBAAyC;CAC7C,OAAO;CACP,UAAU,GACR,8CACA,iCACA,kBACD;CACD,QAAQ,GACN,4DACA,iCACA,kBACD;CACD,QAAQ,GAAG,4BAA4B,oBAAoB;CAC3D,MAAM,GAAG,kCAAkC,kBAAkB;CAC7D,MAAM,GACJ,+BACA,sCACA,sBACD;CACF;AAED,MAAM,gBAAwC;CAC5C,SAAS;CACT,SAAS;CACT,QAAQ;CACR,MAAM;CACN,MAAM;CACP;AAED,MAAM,eAAuC;CAC3C,OAAO;CACP,QAAQ;CACR,OAAO;CACR;AAED,MAAM,cAAsC;CAC1C,OAAO;CACP,QAAQ;CACR,OAAO;CACR;AAED,MAAM,gBAAgB;CACpB,SAAS;CACT,QAAQ;CACR,OAAO;CACR;AAED,MAAM,UAAU,EACd,MACA,WACA,OAAO,WACP,SACA,OAAO,UACP,QAAQ,WACR,QAAQ,WACR,QAAQ,OACR,UACA,SACA,QACA,UACA,aACA,GAAG,YACQ;CACX,MAAM,WAAW,QAAQ,CAAC;CAC1B,MAAM,gBAAgB,SAAS,WAAW;CAC1C,MAAM,UAAU,iBAAiB,kBAAkB;CACnD,MAAM,kBAAkB,WAAW,cAAc,SAAS;CAE1D,MAAM,cAAc,UAClB,OAAO,YAAY,WACjB,QAAQ,OAER,oBAAC,gBAAa,WAAU,iBAAiB,GAG3C;AAGF,QACE,qBAAC;EACW;EACV,SAAQ;EACR,cAAY;EACZ,WAAW,GACT,mDACA,cACA,kBACA,eACA,kBACA,eAAe,kBACf,aAAa,QAAQ,WACrB,YAAY,CAAC,OAAO,YAAY,QAAQ,UAAU,EAClD,cAAc,SAAS,YACvB,SAAS,UACT,YACG,oBAAoB,UACjB;GACE;GACA;GACA;GACA;GACA;GACD,GACD,CACE,mBACA,sCAED,GACP,UAED;EACD,cAAa,MAAK;AAChB,KAAE,gBAAgB;AAClB,iBAAc,EAAE;;EAElB,GAAI;aAEH,aACA;GACI"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { OptionValue } from "../index.mjs";
|
|
2
1
|
import "react/jsx-runtime";
|
|
3
2
|
|
|
4
3
|
//#region src/components/atoms/Checkbox/Group/index.d.ts
|
|
4
|
+
type OptionValue = string | number | boolean;
|
|
5
5
|
type Option = {
|
|
6
6
|
label: string;
|
|
7
7
|
value: OptionValue;
|
|
@@ -17,5 +17,5 @@ interface Props extends Omit<React.ComponentPropsWithoutRef<'div'>, 'onChange' |
|
|
|
17
17
|
onChange?: (values: OptionValue[]) => void;
|
|
18
18
|
}
|
|
19
19
|
//#endregion
|
|
20
|
-
export { Props };
|
|
20
|
+
export { OptionValue, Props };
|
|
21
21
|
//# sourceMappingURL=index.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../../../../../src/components/atoms/Checkbox/Group/index.tsx"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../../../../../src/components/atoms/Checkbox/Group/index.tsx"],"mappings":";;;KAMY,WAAA;AAAA,KAEP,MAAA;EACH,KAAA;EACA,KAAA,EAAO,WAAA;AAAA;AAAA,KAGJ,OAAA,qCAA4C,MAAA;AAAA,UAEhC,KAAA,SAAc,IAAA,CAC7B,KAAA,CAAM,wBAAA;EAGN,OAAA,GAAU,OAAA;EACV,WAAA;EACA,SAAA;EACA,UAAA,GAAa,MAAA;EACb,YAAA,GAAe,WAAA;EACf,KAAA,GAAQ,WAAA;EACR,QAAA,IAAY,MAAA,EAAQ,WAAA;AAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":[],"sources":["../../../../../src/components/atoms/Checkbox/Group/index.tsx"],"sourcesContent":["import { useState } from 'react';\n\nimport { cn } from '@repo/ui/utils';\n\nimport Checkbox
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../../../../../src/components/atoms/Checkbox/Group/index.tsx"],"sourcesContent":["import { useState } from 'react';\n\nimport { cn } from '@repo/ui/utils';\n\nimport Checkbox from '..';\n\nexport type OptionValue = string | number | boolean;\n\ntype Option = {\n label: string;\n value: OptionValue;\n};\n\ntype Options = string[] | number[] | boolean[] | Option[];\n\nexport interface Props extends Omit<\n React.ComponentPropsWithoutRef<'div'>,\n 'onChange' | 'defaultValue' | 'value'\n> {\n options?: Options;\n orientation?: 'vertical' | 'horizontal';\n placement?: 'left' | 'right';\n classNames?: Record<string, string>;\n defaultValue?: OptionValue[];\n value?: OptionValue[];\n onChange?: (values: OptionValue[]) => void;\n}\n\nconst Group = ({\n orientation = 'vertical',\n placement = 'left',\n className,\n classNames = {},\n options: _options = [],\n defaultValue,\n value: _value,\n onChange: _onChange = () => {},\n}: Props) => {\n const [uncontrolledValue, setUncontrolledValue] = useState<OptionValue[]>(\n defaultValue || [],\n );\n\n const controlled = _value !== undefined;\n const value = controlled ? _value : uncontrolledValue;\n\n const options: Option[] = _options.map(item =>\n typeof item === 'object'\n ? item\n : {\n label: `${item}`,\n value: item,\n },\n );\n\n const onChange = (checked: boolean, optionValue: OptionValue) => {\n const nextValue = checked\n ? [...value, optionValue]\n : value.filter(v => v !== optionValue);\n\n if (!controlled) {\n setUncontrolledValue(nextValue);\n }\n _onChange(nextValue);\n };\n\n return (\n <ul\n className={cn(\n orientation === 'vertical' ? 'space-y-2' : 'flex gap-2',\n className,\n )}\n >\n {options.map((item: Option) => {\n const checked = value.includes(item.value);\n\n return (\n <li\n key={String(item.value)}\n className={cn('flex', classNames?.wrapper)}\n >\n <Checkbox\n placement={placement}\n className={cn(classNames?.item)}\n value={item.value}\n checked={checked}\n onChange={checked => onChange(checked, item.value)}\n >\n {item.label}\n </Checkbox>\n </li>\n );\n })}\n </ul>\n );\n};\n\nexport default Group;\n"],"mappings":";;;;;;AA4BA,MAAM,SAAS,EACb,cAAc,YACd,YAAY,QACZ,WACA,aAAa,EAAE,EACf,SAAS,WAAW,EAAE,EACtB,cACA,OAAO,QACP,UAAU,kBAAkB,SACjB;CACX,MAAM,CAAC,mBAAmB,wBAAwB,SAChD,gBAAgB,EAAE,CACnB;CAED,MAAM,aAAa,WAAW;CAC9B,MAAM,QAAQ,aAAa,SAAS;CAEpC,MAAM,UAAoB,SAAS,KAAI,SACrC,OAAO,SAAS,WACZ,OACA;EACE,OAAO,GAAG;EACV,OAAO;EACR,CACN;CAED,MAAM,YAAY,SAAkB,gBAA6B;EAC/D,MAAM,YAAY,UACd,CAAC,GAAG,OAAO,YAAY,GACvB,MAAM,QAAO,MAAK,MAAM,YAAY;AAExC,MAAI,CAAC,WACH,sBAAqB,UAAU;AAEjC,YAAU,UAAU;;AAGtB,QACE,oBAAC;EACC,WAAW,GACT,gBAAgB,aAAa,cAAc,cAC3C,UACD;YAEA,QAAQ,KAAK,SAAiB;GAC7B,MAAM,UAAU,MAAM,SAAS,KAAK,MAAM;AAE1C,UACE,oBAAC;IAEC,WAAW,GAAG,QAAQ,YAAY,QAAQ;cAE1C,oBAAC;KACY;KACX,WAAW,GAAG,YAAY,KAAK;KAC/B,OAAO,KAAK;KACH;KACT,WAAU,YAAW,SAAS,SAAS,KAAK,MAAM;eAEjD,KAAK;MACG;MAXN,OAAO,KAAK,MAAM,CAYpB;IAEP;GACC"}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import { Props as Props$1 } from "./Group/index.mjs";
|
|
1
|
+
import { OptionValue, Props as Props$1 } from "./Group/index.mjs";
|
|
2
2
|
import * as react_jsx_runtime0 from "react/jsx-runtime";
|
|
3
3
|
|
|
4
4
|
//#region src/components/atoms/Checkbox/index.d.ts
|
|
5
|
-
type OptionValue = string | number | boolean;
|
|
6
5
|
interface Props extends Omit<React.ComponentPropsWithoutRef<'div'>, 'onChange'> {
|
|
7
6
|
placement?: 'left' | 'right';
|
|
8
7
|
defaultChecked?: boolean;
|
|
@@ -41,5 +40,5 @@ declare const Checkbox: {
|
|
|
41
40
|
}: Props$1) => react_jsx_runtime0.JSX.Element;
|
|
42
41
|
};
|
|
43
42
|
//#endregion
|
|
44
|
-
export { Checkbox
|
|
43
|
+
export { Checkbox };
|
|
45
44
|
//# sourceMappingURL=index.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../../../../src/components/atoms/Checkbox/index.tsx"],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../../../../src/components/atoms/Checkbox/index.tsx"],"mappings":";;;;UAciB,KAAA,SAAc,IAAA,CAC7B,KAAA,CAAM,wBAAA;EAGN,SAAA;EACA,cAAA;EACA,OAAA;EACA,KAAA,GAAQ,WAAA;EACR,QAAA;EACA,KAAA;IAAU,OAAA,EAAS,KAAA,CAAM,SAAA;IAAW,SAAA,EAAW,KAAA,CAAM,SAAA;EAAA;EACrD,QAAA,GAAW,KAAA,CAAM,SAAA;EACjB,QAAA,IAAY,OAAA;AAAA;AAAA,cAGR,QAAA;EAAA;;;;;;;;;;;KAWH,KAAA,GAAK,kBAAA,CAAA,GAAA,CAAA,OAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":["checkbox","label"],"sources":["../../../../src/components/atoms/Checkbox/index.tsx"],"sourcesContent":["'use client';\n\nimport { useId, useState } from 'react';\n\nimport { Square, SquareCheck } from 'lucide-react';\n\nimport { checkbox, label } from '@repo/ui/core';\nimport { cn } from '@repo/ui/utils';\n\nimport Group from './Group';\n\nconst { Checkbox: CoreCheckbox } = checkbox;\nconst { Label: CoreLabel } = label;\n\nexport
|
|
1
|
+
{"version":3,"file":"index.mjs","names":["checkbox","label"],"sources":["../../../../src/components/atoms/Checkbox/index.tsx"],"sourcesContent":["'use client';\n\nimport { useId, useState } from 'react';\n\nimport { Square, SquareCheck } from 'lucide-react';\n\nimport { checkbox, label } from '@repo/ui/core';\nimport { cn } from '@repo/ui/utils';\n\nimport Group, { type OptionValue } from './Group';\n\nconst { Checkbox: CoreCheckbox } = checkbox;\nconst { Label: CoreLabel } = label;\n\nexport interface Props extends Omit<\n React.ComponentPropsWithoutRef<'div'>,\n 'onChange'\n> {\n placement?: 'left' | 'right';\n defaultChecked?: boolean;\n checked?: boolean;\n value?: OptionValue;\n disabled?: boolean;\n icons?: { checked: React.ReactNode; unchecked: React.ReactNode };\n children?: React.ReactNode;\n onChange?: (checked: boolean) => void;\n}\n\nconst Checkbox = ({\n placement = 'left',\n value = '',\n children,\n className,\n icons,\n disabled,\n defaultChecked,\n checked: _checked,\n onChange: _onChange = () => {},\n ...props\n}: Props) => {\n const [uncontrolledChecked, setUncontrolledChecked] = useState<boolean>(\n defaultChecked || false,\n );\n\n const reactId = useId();\n\n const id = typeof value === 'boolean' || !value ? reactId : String(value);\n const controlled = _checked !== undefined;\n const checked = controlled ? _checked : uncontrolledChecked;\n\n const cursorClassName = disabled ? 'cursor-not-allowed' : 'cursor-pointer';\n\n const onChange = (next: boolean) => {\n if (disabled) {\n return;\n }\n\n if (!controlled) {\n setUncontrolledChecked(next);\n }\n _onChange(next);\n };\n\n const renderContent = icons ? (\n <>\n <input\n id={id}\n hidden\n type=\"checkbox\"\n checked={checked}\n onChange={e => {\n onChange(e.target.checked);\n }}\n />\n <span\n className={cn(cursorClassName, disabled && 'opacity-50')}\n onClick={() => {\n document.getElementById(id)?.click();\n }}\n >\n {checked\n ? (icons.checked ?? <SquareCheck />)\n : (icons.unchecked ?? <Square />)}\n </span>\n {children && (\n <label\n className={cn(cursorClassName, disabled && 'opacity-50')}\n htmlFor={id}\n >\n {children}\n </label>\n )}\n </>\n ) : (\n <>\n <CoreCheckbox\n id={id}\n checked={checked}\n disabled={disabled}\n className={cn(cursorClassName)}\n onCheckedChange={onChange}\n />\n {children && (\n <CoreLabel htmlFor={id} className={cn(cursorClassName, 'text-left')}>\n {children}\n </CoreLabel>\n )}\n </>\n );\n\n return (\n <div\n className={cn(\n 'flex items-center gap-x-2',\n placement === 'right' && 'flex-row-reverse',\n cursorClassName,\n className,\n //\n )}\n {...props}\n >\n {renderContent}\n </div>\n );\n};\n\nCheckbox.Group = Group;\n\nexport default Checkbox;\n"],"mappings":";;;;;;;;;;;;AAWA,MAAM,EAAE,UAAU,iBAAiBA;AACnC,MAAM,EAAE,OAAO,cAAcC;AAgB7B,MAAM,YAAY,EAChB,YAAY,QACZ,QAAQ,IACR,UACA,WACA,OACA,UACA,gBACA,SAAS,UACT,UAAU,kBAAkB,IAC5B,GAAG,YACQ;CACX,MAAM,CAAC,qBAAqB,0BAA0B,SACpD,kBAAkB,MACnB;CAED,MAAM,UAAU,OAAO;CAEvB,MAAM,KAAK,OAAO,UAAU,aAAa,CAAC,QAAQ,UAAU,OAAO,MAAM;CACzE,MAAM,aAAa,aAAa;CAChC,MAAM,UAAU,aAAa,WAAW;CAExC,MAAM,kBAAkB,WAAW,uBAAuB;CAE1D,MAAM,YAAY,SAAkB;AAClC,MAAI,SACF;AAGF,MAAI,CAAC,WACH,wBAAuB,KAAK;AAE9B,YAAU,KAAK;;CAGjB,MAAM,gBAAgB,QACpB;EACE,oBAAC;GACK;GACJ;GACA,MAAK;GACI;GACT,WAAU,MAAK;AACb,aAAS,EAAE,OAAO,QAAQ;;IAE5B;EACF,oBAAC;GACC,WAAW,GAAG,iBAAiB,YAAY,aAAa;GACxD,eAAe;AACb,aAAS,eAAe,GAAG,EAAE,OAAO;;aAGrC,UACI,MAAM,WAAW,oBAAC,gBAAc,GAChC,MAAM,aAAa,oBAAC,WAAS;IAC7B;EACN,YACC,oBAAC;GACC,WAAW,GAAG,iBAAiB,YAAY,aAAa;GACxD,SAAS;GAER;IACK;KAET,GAEH,4CACE,oBAAC;EACK;EACK;EACC;EACV,WAAW,GAAG,gBAAgB;EAC9B,iBAAiB;GACjB,EACD,YACC,oBAAC;EAAU,SAAS;EAAI,WAAW,GAAG,iBAAiB,YAAY;EAChE;GACS,IAEb;AAGL,QACE,oBAAC;EACC,WAAW,GACT,6BACA,cAAc,WAAW,oBACzB,iBACA,UAED;EACD,GAAI;YAEH;GACG;;AAIV,SAAS,QAAQ"}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import { OptionValue } from "../index.mjs";
|
|
2
1
|
import "react/jsx-runtime";
|
|
3
2
|
|
|
4
3
|
//#region src/components/atoms/Radio/Group/index.d.ts
|
|
4
|
+
type OptionValue = string | number | boolean;
|
|
5
5
|
type Option = {
|
|
6
6
|
label: string;
|
|
7
7
|
value: OptionValue;
|
|
8
|
+
disabled?: boolean;
|
|
8
9
|
};
|
|
9
10
|
type Options = string[] | number[] | boolean[] | Option[];
|
|
10
11
|
interface Props extends Omit<React.ComponentPropsWithoutRef<'div'>, 'onChange' | 'defaultValue' | 'value'> {
|
|
@@ -14,8 +15,12 @@ interface Props extends Omit<React.ComponentPropsWithoutRef<'div'>, 'onChange' |
|
|
|
14
15
|
classNames?: Record<string, string>;
|
|
15
16
|
defaultValue?: OptionValue;
|
|
16
17
|
value?: OptionValue;
|
|
18
|
+
optionType?: 'default' | 'button';
|
|
19
|
+
buttonStyle?: 'solid' | 'outlined';
|
|
20
|
+
size?: 'small' | 'middle' | 'large';
|
|
21
|
+
disabled?: boolean;
|
|
17
22
|
onChange?: (value: OptionValue) => void;
|
|
18
23
|
}
|
|
19
24
|
//#endregion
|
|
20
|
-
export { Props };
|
|
25
|
+
export { OptionValue, Props };
|
|
21
26
|
//# sourceMappingURL=index.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../../../../../src/components/atoms/Radio/Group/index.tsx"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../../../../../src/components/atoms/Radio/Group/index.tsx"],"mappings":";;;KAOY,WAAA;AAAA,KAEP,MAAA;EACH,KAAA;EACA,KAAA,EAAO,WAAA;EACP,QAAA;AAAA;AAAA,KAGG,OAAA,qCAA4C,MAAA;AAAA,UAEhC,KAAA,SAAc,IAAA,CAC7B,KAAA,CAAM,wBAAA;EAGN,OAAA,GAAU,OAAA;EACV,WAAA;EACA,SAAA;EACA,UAAA,GAAa,MAAA;EACb,YAAA,GAAe,WAAA;EACf,KAAA,GAAQ,WAAA;EACR,UAAA;EACA,WAAA;EACA,IAAA;EACA,QAAA;EACA,QAAA,IAAY,KAAA,EAAO,WAAA;AAAA"}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { cn } from "../../../../utils.mjs";
|
|
2
|
+
import Button from "../../Button/index.mjs";
|
|
2
3
|
import Radio from "../index.mjs";
|
|
4
|
+
import "../../../../index.mjs";
|
|
3
5
|
import { useState } from "react";
|
|
4
6
|
import { jsx } from "react/jsx-runtime";
|
|
5
7
|
|
|
6
8
|
//#region src/components/atoms/Radio/Group/index.tsx
|
|
7
|
-
const RadioGroup = ({ orientation = "
|
|
9
|
+
const RadioGroup = ({ orientation = "horizontal", placement = "left", className, classNames = {}, options: _options = [], optionType = "default", buttonStyle = "solid", size, disabled, defaultValue, value: _value, onChange: _onChange = () => {} }) => {
|
|
8
10
|
const [uncontrolledValue, setUncontrolledValue] = useState(defaultValue);
|
|
9
11
|
const controlled = _value !== void 0;
|
|
10
12
|
const value = controlled ? _value : uncontrolledValue;
|
|
@@ -12,22 +14,31 @@ const RadioGroup = ({ orientation = "vertical", placement = "left", className, c
|
|
|
12
14
|
label: `${item}`,
|
|
13
15
|
value: item
|
|
14
16
|
});
|
|
17
|
+
const isButton = optionType === "button";
|
|
15
18
|
const onChange = (checked, optionValue) => {
|
|
16
19
|
if (!checked) return;
|
|
17
20
|
if (!controlled) setUncontrolledValue(optionValue);
|
|
18
21
|
_onChange(optionValue);
|
|
19
22
|
};
|
|
20
23
|
return /* @__PURE__ */ jsx("ul", {
|
|
21
|
-
className: cn(orientation === "vertical"
|
|
22
|
-
children: options.map((item) => {
|
|
24
|
+
className: cn("flex gap-4", className, orientation === "vertical" && "flex-col", isButton && "gap-0"),
|
|
25
|
+
children: options.map((item, index) => {
|
|
23
26
|
const checked = value === item.value;
|
|
24
27
|
return /* @__PURE__ */ jsx("li", {
|
|
25
28
|
className: cn("flex", classNames?.wrapper),
|
|
26
|
-
children: /* @__PURE__ */ jsx(
|
|
29
|
+
children: isButton ? /* @__PURE__ */ jsx(Button, {
|
|
30
|
+
variant: checked ? buttonStyle : "outlined",
|
|
31
|
+
size,
|
|
32
|
+
className: cn("rounded-none", index === 0 && "rounded-l-lg", index === options.length - 1 && "rounded-r-lg", checked && buttonStyle === "outlined" && "border-primary"),
|
|
33
|
+
disabled: disabled || item.disabled,
|
|
34
|
+
onClick: () => onChange(true, item.value),
|
|
35
|
+
children: item.label
|
|
36
|
+
}) : /* @__PURE__ */ jsx(Radio, {
|
|
27
37
|
placement,
|
|
28
38
|
className: cn(classNames?.item),
|
|
29
39
|
value: item.value,
|
|
30
40
|
checked,
|
|
41
|
+
disabled: item.disabled,
|
|
31
42
|
onChange: (checked) => onChange(checked, item.value),
|
|
32
43
|
children: item.label
|
|
33
44
|
})
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":[],"sources":["../../../../../src/components/atoms/Radio/Group/index.tsx"],"sourcesContent":["import { useState } from 'react';\n\nimport { cn } from '@repo/ui/utils';\n\nimport Radio
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../../../../../src/components/atoms/Radio/Group/index.tsx"],"sourcesContent":["import { useState } from 'react';\n\nimport { Button } from '@repo/ui';\nimport { cn } from '@repo/ui/utils';\n\nimport Radio from '..';\n\nexport type OptionValue = string | number | boolean;\n\ntype Option = {\n label: string;\n value: OptionValue;\n disabled?: boolean;\n};\n\ntype Options = string[] | number[] | boolean[] | Option[];\n\nexport interface Props extends Omit<\n React.ComponentPropsWithoutRef<'div'>,\n 'onChange' | 'defaultValue' | 'value'\n> {\n options?: Options;\n orientation?: 'vertical' | 'horizontal';\n placement?: 'left' | 'right';\n classNames?: Record<string, string>;\n defaultValue?: OptionValue;\n value?: OptionValue;\n optionType?: 'default' | 'button';\n buttonStyle?: 'solid' | 'outlined';\n size?: 'small' | 'middle' | 'large';\n disabled?: boolean;\n onChange?: (value: OptionValue) => void;\n}\n\nconst RadioGroup = ({\n orientation = 'horizontal',\n placement = 'left',\n className,\n classNames = {},\n options: _options = [],\n optionType = 'default',\n buttonStyle = 'solid',\n size,\n disabled,\n defaultValue,\n value: _value,\n onChange: _onChange = () => {},\n}: Props) => {\n const [uncontrolledValue, setUncontrolledValue] = useState<\n OptionValue | undefined\n >(defaultValue);\n\n const controlled = _value !== undefined;\n const value = controlled ? _value : uncontrolledValue;\n\n const options: Option[] = _options.map(item =>\n typeof item === 'object'\n ? item\n : {\n label: `${item}`,\n value: item,\n },\n );\n\n const isButton = optionType === 'button';\n\n const onChange = (checked: boolean, optionValue: OptionValue) => {\n if (!checked) {\n return;\n }\n if (!controlled) {\n setUncontrolledValue(optionValue);\n }\n _onChange(optionValue);\n };\n\n return (\n <ul\n className={cn(\n 'flex gap-4',\n className,\n orientation === 'vertical' && 'flex-col',\n isButton && 'gap-0',\n )}\n >\n {options.map((item: Option, index) => {\n const checked = value === item.value;\n\n return (\n <li\n key={String(item.value)}\n className={cn('flex', classNames?.wrapper)}\n >\n {isButton ? (\n <Button\n variant={checked ? buttonStyle : 'outlined'}\n size={size}\n className={cn(\n 'rounded-none',\n index === 0 && 'rounded-l-lg',\n index === options.length - 1 && 'rounded-r-lg',\n checked && buttonStyle === 'outlined' && 'border-primary',\n )}\n disabled={disabled || item.disabled}\n onClick={() => onChange(true, item.value)}\n >\n {item.label}\n </Button>\n ) : (\n <Radio\n placement={placement}\n className={cn(classNames?.item)}\n value={item.value}\n checked={checked}\n disabled={item.disabled}\n onChange={checked => onChange(checked, item.value)}\n >\n {item.label}\n </Radio>\n )}\n </li>\n );\n })}\n </ul>\n );\n};\n\nexport default RadioGroup;\n"],"mappings":";;;;;;;;AAkCA,MAAM,cAAc,EAClB,cAAc,cACd,YAAY,QACZ,WACA,aAAa,EAAE,EACf,SAAS,WAAW,EAAE,EACtB,aAAa,WACb,cAAc,SACd,MACA,UACA,cACA,OAAO,QACP,UAAU,kBAAkB,SACjB;CACX,MAAM,CAAC,mBAAmB,wBAAwB,SAEhD,aAAa;CAEf,MAAM,aAAa,WAAW;CAC9B,MAAM,QAAQ,aAAa,SAAS;CAEpC,MAAM,UAAoB,SAAS,KAAI,SACrC,OAAO,SAAS,WACZ,OACA;EACE,OAAO,GAAG;EACV,OAAO;EACR,CACN;CAED,MAAM,WAAW,eAAe;CAEhC,MAAM,YAAY,SAAkB,gBAA6B;AAC/D,MAAI,CAAC,QACH;AAEF,MAAI,CAAC,WACH,sBAAqB,YAAY;AAEnC,YAAU,YAAY;;AAGxB,QACE,oBAAC;EACC,WAAW,GACT,cACA,WACA,gBAAgB,cAAc,YAC9B,YAAY,QACb;YAEA,QAAQ,KAAK,MAAc,UAAU;GACpC,MAAM,UAAU,UAAU,KAAK;AAE/B,UACE,oBAAC;IAEC,WAAW,GAAG,QAAQ,YAAY,QAAQ;cAEzC,WACC,oBAAC;KACC,SAAS,UAAU,cAAc;KAC3B;KACN,WAAW,GACT,gBACA,UAAU,KAAK,gBACf,UAAU,QAAQ,SAAS,KAAK,gBAChC,WAAW,gBAAgB,cAAc,iBAC1C;KACD,UAAU,YAAY,KAAK;KAC3B,eAAe,SAAS,MAAM,KAAK,MAAM;eAExC,KAAK;MACC,GAET,oBAAC;KACY;KACX,WAAW,GAAG,YAAY,KAAK;KAC/B,OAAO,KAAK;KACH;KACT,UAAU,KAAK;KACf,WAAU,YAAW,SAAS,SAAS,KAAK,MAAM;eAEjD,KAAK;MACA;MA5BL,OAAO,KAAK,MAAM,CA8BpB;IAEP;GACC"}
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import { RadioGroup } from "../../../core/radio-group.mjs";
|
|
2
2
|
import "../../../core.mjs";
|
|
3
|
-
import { Props as Props$1 } from "./Group/index.mjs";
|
|
3
|
+
import { OptionValue, Props as Props$1 } from "./Group/index.mjs";
|
|
4
4
|
import * as react_jsx_runtime0 from "react/jsx-runtime";
|
|
5
5
|
|
|
6
6
|
//#region src/components/atoms/Radio/index.d.ts
|
|
7
7
|
declare const Core: typeof RadioGroup;
|
|
8
|
-
type OptionValue = string | number | boolean;
|
|
9
8
|
interface Props extends Omit<React.ComponentPropsWithoutRef<typeof Core>, 'onChange' | 'value'> {
|
|
10
9
|
placement?: 'left' | 'right';
|
|
11
10
|
defaultChecked?: boolean;
|
|
@@ -37,11 +36,15 @@ declare const Radio: {
|
|
|
37
36
|
className,
|
|
38
37
|
classNames,
|
|
39
38
|
options: _options,
|
|
39
|
+
optionType,
|
|
40
|
+
buttonStyle,
|
|
41
|
+
size,
|
|
42
|
+
disabled,
|
|
40
43
|
defaultValue,
|
|
41
44
|
value: _value,
|
|
42
45
|
onChange: _onChange
|
|
43
46
|
}: Props$1) => react_jsx_runtime0.JSX.Element;
|
|
44
47
|
};
|
|
45
48
|
//#endregion
|
|
46
|
-
export {
|
|
49
|
+
export { Radio };
|
|
47
50
|
//# sourceMappingURL=index.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../../../../src/components/atoms/Radio/index.tsx"],"mappings":";;;;;;cAWoB,IAAA,SAAI,UAAA;AAAA,
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../../../../src/components/atoms/Radio/index.tsx"],"mappings":";;;;;;cAWoB,IAAA,SAAI,UAAA;AAAA,UAGP,KAAA,SAAc,IAAA,CAC7B,KAAA,CAAM,wBAAA,QAAgC,IAAA;EAGtC,SAAA;EACA,cAAA;EACA,OAAA;EACA,KAAA,GAAQ,WAAA;EACR,QAAA;EACA,KAAA;IAAU,OAAA,EAAS,KAAA,CAAM,SAAA;IAAW,SAAA,EAAW,KAAA,CAAM,SAAA;EAAA;EACrD,QAAA,IAAY,OAAA;AAAA;AAAA,cAGR,KAAA;EAAA;;;;;;;;;;;KAWH,KAAA,GAAK,kBAAA,CAAA,GAAA,CAAA,OAAA"}
|
|
@@ -51,7 +51,7 @@ const Radio = ({ placement = "left", value = "", children, className, icons, dis
|
|
|
51
51
|
onValueChange: () => onChange(true),
|
|
52
52
|
children: /* @__PURE__ */ jsxs(Field, {
|
|
53
53
|
orientation: "horizontal",
|
|
54
|
-
className: cn("flex", placement === "right" && "flex-row-reverse"),
|
|
54
|
+
className: cn("flex gap-2", placement === "right" && "flex-row-reverse"),
|
|
55
55
|
"data-disabled": disabled,
|
|
56
56
|
children: [/* @__PURE__ */ jsx(Item, {
|
|
57
57
|
value: id,
|
|
@@ -60,12 +60,13 @@ const Radio = ({ placement = "left", value = "", children, className, icons, dis
|
|
|
60
60
|
disabled
|
|
61
61
|
}), /* @__PURE__ */ jsx(FieldLabel, {
|
|
62
62
|
htmlFor: id,
|
|
63
|
+
className: cursorClassName,
|
|
63
64
|
children
|
|
64
65
|
})]
|
|
65
66
|
})
|
|
66
67
|
});
|
|
67
68
|
return /* @__PURE__ */ jsx("div", {
|
|
68
|
-
className: cn("flex items-center
|
|
69
|
+
className: cn("flex items-center", icons && placement === "right" && "flex-row-reverse", cursorClassName, className),
|
|
69
70
|
...props,
|
|
70
71
|
children: renderContent
|
|
71
72
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":["radio","field","Group"],"sources":["../../../../src/components/atoms/Radio/index.tsx"],"sourcesContent":["'use client';\n\nimport { useId, useState } from 'react';\n\nimport { Circle, CircleCheck } from 'lucide-react';\n\nimport { field, radio } from '@repo/ui/core';\nimport { cn } from '@repo/ui/utils';\n\nimport Group from './Group';\n\nconst { RadioGroup: Core, RadioGroupItem: Item } = radio;\nconst { Field, FieldLabel } = field;\n\nexport
|
|
1
|
+
{"version":3,"file":"index.mjs","names":["radio","field","Group"],"sources":["../../../../src/components/atoms/Radio/index.tsx"],"sourcesContent":["'use client';\n\nimport { useId, useState } from 'react';\n\nimport { Circle, CircleCheck } from 'lucide-react';\n\nimport { field, radio } from '@repo/ui/core';\nimport { cn } from '@repo/ui/utils';\n\nimport Group, { type OptionValue } from './Group';\n\nconst { RadioGroup: Core, RadioGroupItem: Item } = radio;\nconst { Field, FieldLabel } = field;\n\nexport interface Props extends Omit<\n React.ComponentPropsWithoutRef<typeof Core>,\n 'onChange' | 'value'\n> {\n placement?: 'left' | 'right';\n defaultChecked?: boolean;\n checked?: boolean;\n value?: OptionValue;\n disabled?: boolean;\n icons?: { checked: React.ReactNode; unchecked: React.ReactNode };\n onChange?: (checked: boolean) => void;\n}\n\nconst Radio = ({\n placement = 'left',\n value = '',\n children,\n className,\n icons,\n disabled,\n defaultChecked,\n checked: _checked,\n onChange: _onChange = () => {},\n ...props\n}: Props) => {\n const [uncontrolledChecked, setUncontrolledChecked] = useState<boolean>(\n defaultChecked || false,\n );\n\n const reactId = useId();\n const id = typeof value === 'boolean' || !value ? reactId : String(value);\n const controlled = _checked !== undefined;\n const checked = controlled ? _checked : uncontrolledChecked;\n\n const cursorClassName = disabled ? 'cursor-not-allowed' : 'cursor-pointer';\n\n const onChange = (next: boolean) => {\n if (disabled) {\n return;\n }\n\n if (!controlled) {\n setUncontrolledChecked(next);\n }\n _onChange(next);\n };\n\n const renderContent = icons ? (\n <>\n <input\n id={id}\n hidden\n type=\"radio\"\n checked={checked}\n onChange={e => {\n onChange(e.target.checked);\n }}\n />\n <span\n className={cn(cursorClassName, disabled && 'opacity-50')}\n onClick={() => {\n document.getElementById(id)?.click();\n }}\n >\n {checked\n ? (icons.checked ?? <CircleCheck />)\n : (icons.unchecked ?? <Circle />)}\n </span>\n {children && (\n <label\n className={cn(cursorClassName, disabled && 'opacity-50')}\n htmlFor={id}\n >\n {children}\n </label>\n )}\n </>\n ) : (\n <Core value={checked ? id : ''} onValueChange={() => onChange(true)}>\n <Field\n orientation=\"horizontal\"\n className={cn(\n 'flex gap-2',\n placement === 'right' && 'flex-row-reverse',\n )}\n data-disabled={disabled}\n >\n <Item value={id} id={id} checked={checked} disabled={disabled} />\n <FieldLabel htmlFor={id} className={cursorClassName}>\n {children}\n </FieldLabel>\n </Field>\n </Core>\n );\n\n return (\n <div\n className={cn(\n 'flex items-center',\n icons && placement === 'right' && 'flex-row-reverse',\n cursorClassName,\n className,\n //\n )}\n {...props}\n >\n {renderContent}\n </div>\n );\n};\n\nRadio.Group = Group;\n\nexport default Radio;\n"],"mappings":";;;;;;;;;;;;AAWA,MAAM,EAAE,YAAY,MAAM,gBAAgB,SAASA;AACnD,MAAM,EAAE,OAAO,eAAeC;AAe9B,MAAM,SAAS,EACb,YAAY,QACZ,QAAQ,IACR,UACA,WACA,OACA,UACA,gBACA,SAAS,UACT,UAAU,kBAAkB,IAC5B,GAAG,YACQ;CACX,MAAM,CAAC,qBAAqB,0BAA0B,SACpD,kBAAkB,MACnB;CAED,MAAM,UAAU,OAAO;CACvB,MAAM,KAAK,OAAO,UAAU,aAAa,CAAC,QAAQ,UAAU,OAAO,MAAM;CACzE,MAAM,aAAa,aAAa;CAChC,MAAM,UAAU,aAAa,WAAW;CAExC,MAAM,kBAAkB,WAAW,uBAAuB;CAE1D,MAAM,YAAY,SAAkB;AAClC,MAAI,SACF;AAGF,MAAI,CAAC,WACH,wBAAuB,KAAK;AAE9B,YAAU,KAAK;;CAGjB,MAAM,gBAAgB,QACpB;EACE,oBAAC;GACK;GACJ;GACA,MAAK;GACI;GACT,WAAU,MAAK;AACb,aAAS,EAAE,OAAO,QAAQ;;IAE5B;EACF,oBAAC;GACC,WAAW,GAAG,iBAAiB,YAAY,aAAa;GACxD,eAAe;AACb,aAAS,eAAe,GAAG,EAAE,OAAO;;aAGrC,UACI,MAAM,WAAW,oBAAC,gBAAc,GAChC,MAAM,aAAa,oBAAC,WAAS;IAC7B;EACN,YACC,oBAAC;GACC,WAAW,GAAG,iBAAiB,YAAY,aAAa;GACxD,SAAS;GAER;IACK;KAET,GAEH,oBAAC;EAAK,OAAO,UAAU,KAAK;EAAI,qBAAqB,SAAS,KAAK;YACjE,qBAAC;GACC,aAAY;GACZ,WAAW,GACT,cACA,cAAc,WAAW,mBAC1B;GACD,iBAAe;cAEf,oBAAC;IAAK,OAAO;IAAQ;IAAa;IAAmB;KAAY,EACjE,oBAAC;IAAW,SAAS;IAAI,WAAW;IACjC;KACU;IACP;GACH;AAGT,QACE,oBAAC;EACC,WAAW,GACT,qBACA,SAAS,cAAc,WAAW,oBAClC,iBACA,UAED;EACD,GAAI;YAEH;GACG;;AAIV,MAAM,QAAQC"}
|
|
@@ -6,17 +6,23 @@ interface Props extends Omit<React.ComponentPropsWithoutRef<'button'>, 'onChange
|
|
|
6
6
|
track?: string;
|
|
7
7
|
handle?: string;
|
|
8
8
|
};
|
|
9
|
+
size?: 'small' | 'medium';
|
|
9
10
|
defaultChecked?: boolean;
|
|
10
11
|
checked?: boolean;
|
|
11
12
|
disabled?: boolean;
|
|
12
13
|
onChange?: (checked: boolean) => void;
|
|
14
|
+
checkedChildren?: React.ReactNode;
|
|
15
|
+
unCheckedChildren?: React.ReactNode;
|
|
13
16
|
}
|
|
14
17
|
declare const Switch: ({
|
|
15
18
|
className,
|
|
16
19
|
classNames,
|
|
20
|
+
size,
|
|
17
21
|
defaultChecked,
|
|
18
22
|
checked: _checked,
|
|
19
23
|
onChange: _onChange,
|
|
24
|
+
checkedChildren,
|
|
25
|
+
unCheckedChildren,
|
|
20
26
|
...props
|
|
21
27
|
}: Props) => react_jsx_runtime0.JSX.Element;
|
|
22
28
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../../../../src/components/atoms/Switch/index.tsx"],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../../../../src/components/atoms/Switch/index.tsx"],"mappings":";;;UA4BU,KAAA,SAAc,IAAA,CACtB,KAAA,CAAM,wBAAA;EAGN,UAAA;IACE,KAAA;IACA,MAAA;EAAA;EAEF,IAAA;EACA,cAAA;EACA,OAAA;EACA,QAAA;EACA,QAAA,IAAY,OAAA;EACZ,eAAA,GAAkB,KAAA,CAAM,SAAA;EACxB,iBAAA,GAAoB,KAAA,CAAM,SAAA;AAAA;AAAA,cAGtB,MAAA;EAAU,SAAA;EAAA,UAAA;EAAA,IAAA;EAAA,cAAA;EAAA,OAAA,EAAA,QAAA;EAAA,QAAA,EAAA,SAAA;EAAA,eAAA;EAAA,iBAAA;EAAA,GAAA;AAAA,GAUb,KAAA,KAAK,kBAAA,CAAA,GAAA,CAAA,OAAA"}
|
|
@@ -4,11 +4,27 @@ import { cn } from "../../../utils.mjs";
|
|
|
4
4
|
import { switch_exports } from "../../../core/switch.mjs";
|
|
5
5
|
import "../../../core.mjs";
|
|
6
6
|
import { useState } from "react";
|
|
7
|
-
import { jsx } from "react/jsx-runtime";
|
|
7
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
8
8
|
|
|
9
9
|
//#region src/components/atoms/Switch/index.tsx
|
|
10
10
|
const { Switch: Core } = switch_exports;
|
|
11
|
-
const
|
|
11
|
+
const sizeConfig = {
|
|
12
|
+
medium: {
|
|
13
|
+
core: "default",
|
|
14
|
+
handleChecked: "data-[state=unchecked]:left-0 data-[state=checked]:left-[calc(100%-16px)]",
|
|
15
|
+
fontSize: "text-[9px]",
|
|
16
|
+
marginChecked: "mr-4.5 ml-1",
|
|
17
|
+
marginUnchecked: "mr-1 ml-4.5"
|
|
18
|
+
},
|
|
19
|
+
small: {
|
|
20
|
+
core: "sm",
|
|
21
|
+
handleChecked: "data-[state=unchecked]:left-0 data-[state=checked]:left-[calc(100%-12px)]",
|
|
22
|
+
fontSize: "text-[7px]",
|
|
23
|
+
marginChecked: "mr-3.5 ml-0.5",
|
|
24
|
+
marginUnchecked: "mr-0.5 ml-3.5"
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
const Switch = ({ className, classNames, size = "medium", defaultChecked, checked: _checked, onChange: _onChange = () => {}, checkedChildren, unCheckedChildren, ...props }) => {
|
|
12
28
|
const [uncontrolledChecked, setUncontrolledChecked] = useState(defaultChecked || false);
|
|
13
29
|
const controlled = _checked !== void 0;
|
|
14
30
|
const checked = controlled ? _checked : uncontrolledChecked;
|
|
@@ -16,14 +32,31 @@ const Switch = ({ className, classNames, defaultChecked, checked: _checked, onCh
|
|
|
16
32
|
if (!controlled) setUncontrolledChecked(next);
|
|
17
33
|
_onChange(next);
|
|
18
34
|
};
|
|
35
|
+
const hasChildren = !!(checkedChildren || unCheckedChildren);
|
|
36
|
+
const config = sizeConfig[size];
|
|
19
37
|
return /* @__PURE__ */ jsx(Core, {
|
|
20
38
|
checked,
|
|
21
|
-
|
|
22
|
-
|
|
39
|
+
size: config.core,
|
|
40
|
+
className: cn("relative", hasChildren && "w-auto! overflow-hidden", className, classNames?.track),
|
|
41
|
+
handleClassName: cn(hasChildren && [
|
|
42
|
+
"!absolute top-1/2 !-translate-y-1/2 !translate-x-0",
|
|
43
|
+
"transition-[left] duration-200",
|
|
44
|
+
config.handleChecked
|
|
45
|
+
], classNames?.handle),
|
|
23
46
|
onCheckedChange: (checked) => {
|
|
24
47
|
onChange(checked);
|
|
25
48
|
},
|
|
26
|
-
...props
|
|
49
|
+
...props,
|
|
50
|
+
children: hasChildren && /* @__PURE__ */ jsxs("span", {
|
|
51
|
+
className: cn("grid leading-none text-white transition-[margin] duration-200", config.fontSize, checked ? config.marginChecked : config.marginUnchecked),
|
|
52
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
53
|
+
className: cn("col-start-1 row-start-1 transition-opacity duration-200", checked ? "opacity-100" : "opacity-0"),
|
|
54
|
+
children: checkedChildren
|
|
55
|
+
}), /* @__PURE__ */ jsx("span", {
|
|
56
|
+
className: cn("col-start-1 row-start-1 transition-opacity duration-200", checked ? "opacity-0" : "opacity-100"),
|
|
57
|
+
children: unCheckedChildren
|
|
58
|
+
})]
|
|
59
|
+
})
|
|
27
60
|
});
|
|
28
61
|
};
|
|
29
62
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":["switchComponent"],"sources":["../../../../src/components/atoms/Switch/index.tsx"],"sourcesContent":["'use client';\n\nimport { useState } from 'react';\n\nimport { switchComponent } from '@repo/ui/core';\nimport { cn } from '@repo/ui/utils';\n\nconst { Switch: Core } = switchComponent;\n\ninterface Props extends Omit<\n React.ComponentPropsWithoutRef<'button'>,\n 'onChange'\n> {\n classNames?: {\n track?: string;\n handle?: string;\n };\n defaultChecked?: boolean;\n checked?: boolean;\n disabled?: boolean;\n onChange?: (checked: boolean) => void;\n}\n\nconst Switch = ({\n className,\n classNames,\n defaultChecked,\n checked: _checked,\n onChange: _onChange = () => {},\n ...props\n}: Props) => {\n const [uncontrolledChecked, setUncontrolledChecked] = useState<boolean>(\n defaultChecked || false,\n );\n\n const controlled = _checked !== undefined;\n const checked = controlled ? _checked : uncontrolledChecked;\n\n const onChange = (next: boolean) => {\n if (!controlled) {\n setUncontrolledChecked(next);\n }\n _onChange(next);\n };\n\n return (\n <Core\n checked={checked}\n className={cn(\n '
|
|
1
|
+
{"version":3,"file":"index.mjs","names":["switchComponent"],"sources":["../../../../src/components/atoms/Switch/index.tsx"],"sourcesContent":["'use client';\n\nimport { useState } from 'react';\n\nimport { switchComponent } from '@repo/ui/core';\nimport { cn } from '@repo/ui/utils';\n\nconst { Switch: Core } = switchComponent;\n\nconst sizeConfig = {\n medium: {\n core: 'default' as const,\n handleChecked:\n 'data-[state=unchecked]:left-0 data-[state=checked]:left-[calc(100%-16px)]',\n fontSize: 'text-[9px]',\n marginChecked: 'mr-4.5 ml-1',\n marginUnchecked: 'mr-1 ml-4.5',\n },\n small: {\n core: 'sm' as const,\n handleChecked:\n 'data-[state=unchecked]:left-0 data-[state=checked]:left-[calc(100%-12px)]',\n fontSize: 'text-[7px]',\n marginChecked: 'mr-3.5 ml-0.5',\n marginUnchecked: 'mr-0.5 ml-3.5',\n },\n};\n\ninterface Props extends Omit<\n React.ComponentPropsWithoutRef<'button'>,\n 'onChange'\n> {\n classNames?: {\n track?: string;\n handle?: string;\n };\n size?: 'small' | 'medium';\n defaultChecked?: boolean;\n checked?: boolean;\n disabled?: boolean;\n onChange?: (checked: boolean) => void;\n checkedChildren?: React.ReactNode;\n unCheckedChildren?: React.ReactNode;\n}\n\nconst Switch = ({\n className,\n classNames,\n size = 'medium',\n defaultChecked,\n checked: _checked,\n onChange: _onChange = () => {},\n checkedChildren,\n unCheckedChildren,\n ...props\n}: Props) => {\n const [uncontrolledChecked, setUncontrolledChecked] = useState<boolean>(\n defaultChecked || false,\n );\n\n const controlled = _checked !== undefined;\n const checked = controlled ? _checked : uncontrolledChecked;\n\n const onChange = (next: boolean) => {\n if (!controlled) {\n setUncontrolledChecked(next);\n }\n _onChange(next);\n };\n\n const hasChildren = !!(checkedChildren || unCheckedChildren);\n const config = sizeConfig[size];\n\n return (\n <Core\n checked={checked}\n size={config.core}\n className={cn(\n 'relative',\n hasChildren && 'w-auto! overflow-hidden',\n className,\n classNames?.track,\n //\n )}\n handleClassName={cn(\n hasChildren && [\n '!absolute top-1/2 !-translate-y-1/2 !translate-x-0',\n 'transition-[left] duration-200',\n config.handleChecked,\n ],\n classNames?.handle,\n //\n )}\n onCheckedChange={checked => {\n onChange(checked);\n }}\n {...props}\n >\n {hasChildren && (\n <span\n className={cn(\n 'grid leading-none text-white transition-[margin] duration-200',\n config.fontSize,\n checked ? config.marginChecked : config.marginUnchecked,\n //\n )}\n >\n <span\n className={cn(\n 'col-start-1 row-start-1 transition-opacity duration-200',\n checked ? 'opacity-100' : 'opacity-0',\n )}\n >\n {checkedChildren}\n </span>\n <span\n className={cn(\n 'col-start-1 row-start-1 transition-opacity duration-200',\n checked ? 'opacity-0' : 'opacity-100',\n )}\n >\n {unCheckedChildren}\n </span>\n </span>\n )}\n </Core>\n );\n};\n\nexport default Switch;\n"],"mappings":";;;;;;;;;AAOA,MAAM,EAAE,QAAQ,SAASA;AAEzB,MAAM,aAAa;CACjB,QAAQ;EACN,MAAM;EACN,eACE;EACF,UAAU;EACV,eAAe;EACf,iBAAiB;EAClB;CACD,OAAO;EACL,MAAM;EACN,eACE;EACF,UAAU;EACV,eAAe;EACf,iBAAiB;EAClB;CACF;AAmBD,MAAM,UAAU,EACd,WACA,YACA,OAAO,UACP,gBACA,SAAS,UACT,UAAU,kBAAkB,IAC5B,iBACA,mBACA,GAAG,YACQ;CACX,MAAM,CAAC,qBAAqB,0BAA0B,SACpD,kBAAkB,MACnB;CAED,MAAM,aAAa,aAAa;CAChC,MAAM,UAAU,aAAa,WAAW;CAExC,MAAM,YAAY,SAAkB;AAClC,MAAI,CAAC,WACH,wBAAuB,KAAK;AAE9B,YAAU,KAAK;;CAGjB,MAAM,cAAc,CAAC,EAAE,mBAAmB;CAC1C,MAAM,SAAS,WAAW;AAE1B,QACE,oBAAC;EACU;EACT,MAAM,OAAO;EACb,WAAW,GACT,YACA,eAAe,2BACf,WACA,YAAY,MAEb;EACD,iBAAiB,GACf,eAAe;GACb;GACA;GACA,OAAO;GACR,EACD,YAAY,OAEb;EACD,kBAAiB,YAAW;AAC1B,YAAS,QAAQ;;EAEnB,GAAI;YAEH,eACC,qBAAC;GACC,WAAW,GACT,iEACA,OAAO,UACP,UAAU,OAAO,gBAAgB,OAAO,gBAEzC;cAED,oBAAC;IACC,WAAW,GACT,2DACA,UAAU,gBAAgB,YAC3B;cAEA;KACI,EACP,oBAAC;IACC,WAAW,GACT,2DACA,UAAU,cAAc,cACzB;cAEA;KACI;IACF;GAEJ"}
|
package/dist/core/switch.d.mts
CHANGED
|
@@ -8,11 +8,13 @@ declare namespace switch_d_exports {
|
|
|
8
8
|
}
|
|
9
9
|
interface CustomProps {
|
|
10
10
|
handleClassName?: string;
|
|
11
|
+
children?: React$1.ReactNode;
|
|
11
12
|
}
|
|
12
13
|
declare function Switch({
|
|
13
14
|
className,
|
|
14
15
|
size,
|
|
15
16
|
handleClassName,
|
|
17
|
+
children,
|
|
16
18
|
...props
|
|
17
19
|
}: React$1.ComponentProps<typeof SwitchPrimitive.Root> & {
|
|
18
20
|
size?: 'sm' | 'default';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"switch.d.mts","names":[],"sources":["../../src/core/switch.tsx"],"mappings":";;;;;;;;UAQU,WAAA;EACR,eAAA;AAAA;AAAA,
|
|
1
|
+
{"version":3,"file":"switch.d.mts","names":[],"sources":["../../src/core/switch.tsx"],"mappings":";;;;;;;;UAQU,WAAA;EACR,eAAA;EACA,QAAA,GAAW,OAAA,CAAM,SAAA;AAAA;AAAA,iBAGV,MAAA,CAAA;EACP,SAAA;EACA,IAAA;EACA,eAAA;EACA,QAAA;EAAA,GACG;AAAA,GACF,OAAA,CAAM,cAAA,QAAsB,eAAA,CAAgB,IAAA;EAC7C,IAAA;AAAA,IACE,WAAA,GAAW,kBAAA,CAAA,GAAA,CAAA,OAAA"}
|
package/dist/core/switch.mjs
CHANGED
|
@@ -3,13 +3,13 @@
|
|
|
3
3
|
import { __exportAll } from "../_virtual/_rolldown/runtime.mjs";
|
|
4
4
|
import { cn } from "../utils.mjs";
|
|
5
5
|
import "react";
|
|
6
|
-
import { jsx } from "react/jsx-runtime";
|
|
6
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
7
7
|
import * as SwitchPrimitive from "@radix-ui/react-switch";
|
|
8
8
|
|
|
9
9
|
//#region src/core/switch.tsx
|
|
10
10
|
var switch_exports = /* @__PURE__ */ __exportAll({ Switch: () => Switch });
|
|
11
|
-
function Switch({ className, size = "default", handleClassName, ...props }) {
|
|
12
|
-
return /* @__PURE__ */
|
|
11
|
+
function Switch({ className, size = "default", handleClassName, children, ...props }) {
|
|
12
|
+
return /* @__PURE__ */ jsxs(SwitchPrimitive.Root, {
|
|
13
13
|
"data-slot": "switch",
|
|
14
14
|
"data-size": size,
|
|
15
15
|
className: cn(`peer data-[state=checked]:bg-primary data-[state=unchecked]:bg-input
|
|
@@ -21,7 +21,7 @@ function Switch({ className, size = "default", handleClassName, ...props }) {
|
|
|
21
21
|
data-[size=default]:h-[1.15rem] data-[size=default]:w-8
|
|
22
22
|
data-[size=sm]:h-3.5 data-[size=sm]:w-6`, className),
|
|
23
23
|
...props,
|
|
24
|
-
children: /* @__PURE__ */ jsx(SwitchPrimitive.Thumb, {
|
|
24
|
+
children: [/* @__PURE__ */ jsx(SwitchPrimitive.Thumb, {
|
|
25
25
|
"data-slot": "switch-thumb",
|
|
26
26
|
className: cn(`bg-background dark:data-[state=unchecked]:bg-foreground
|
|
27
27
|
dark:data-[state=checked]:bg-primary-foreground pointer-events-none
|
|
@@ -30,7 +30,7 @@ function Switch({ className, size = "default", handleClassName, ...props }) {
|
|
|
30
30
|
group-data-[size=sm]/switch:size-3
|
|
31
31
|
data-[state=checked]:translate-x-[calc(100%-2px)]
|
|
32
32
|
data-[state=unchecked]:translate-x-0`, handleClassName)
|
|
33
|
-
})
|
|
33
|
+
}), children]
|
|
34
34
|
});
|
|
35
35
|
}
|
|
36
36
|
|
package/dist/core/switch.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"switch.mjs","names":[],"sources":["../../src/core/switch.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\n\nimport * as SwitchPrimitive from '@radix-ui/react-switch';\n\nimport { cn } from '@repo/ui/utils';\n\ninterface CustomProps {\n handleClassName?: string;\n}\n\nfunction Switch({\n className,\n size = 'default',\n handleClassName,\n ...props\n}: React.ComponentProps<typeof SwitchPrimitive.Root> & {\n size?: 'sm' | 'default';\n} & CustomProps) {\n return (\n <SwitchPrimitive.Root\n data-slot=\"switch\"\n data-size={size}\n className={cn(\n `peer data-[state=checked]:bg-primary data-[state=unchecked]:bg-input\n focus-visible:border-ring focus-visible:ring-ring/50\n dark:data-[state=unchecked]:bg-input/80 group/switch inline-flex\n shrink-0 items-center rounded-full border border-transparent shadow-xs\n transition-all outline-none focus-visible:ring-[3px]\n disabled:cursor-not-allowed disabled:opacity-50\n data-[size=default]:h-[1.15rem] data-[size=default]:w-8\n data-[size=sm]:h-3.5 data-[size=sm]:w-6`,\n className,\n )}\n {...props}\n >\n <SwitchPrimitive.Thumb\n data-slot=\"switch-thumb\"\n className={cn(\n `bg-background dark:data-[state=unchecked]:bg-foreground\n dark:data-[state=checked]:bg-primary-foreground pointer-events-none\n block rounded-full ring-0 transition-transform\n group-data-[size=default]/switch:size-4\n group-data-[size=sm]/switch:size-3\n data-[state=checked]:translate-x-[calc(100%-2px)]\n data-[state=unchecked]:translate-x-0`,\n handleClassName,\n )}\n />\n </SwitchPrimitive.Root>\n );\n}\n\nexport { Switch };\n"],"mappings":";;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"switch.mjs","names":[],"sources":["../../src/core/switch.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\n\nimport * as SwitchPrimitive from '@radix-ui/react-switch';\n\nimport { cn } from '@repo/ui/utils';\n\ninterface CustomProps {\n handleClassName?: string;\n children?: React.ReactNode;\n}\n\nfunction Switch({\n className,\n size = 'default',\n handleClassName,\n children,\n ...props\n}: React.ComponentProps<typeof SwitchPrimitive.Root> & {\n size?: 'sm' | 'default';\n} & CustomProps) {\n return (\n <SwitchPrimitive.Root\n data-slot=\"switch\"\n data-size={size}\n className={cn(\n `peer data-[state=checked]:bg-primary data-[state=unchecked]:bg-input\n focus-visible:border-ring focus-visible:ring-ring/50\n dark:data-[state=unchecked]:bg-input/80 group/switch inline-flex\n shrink-0 items-center rounded-full border border-transparent shadow-xs\n transition-all outline-none focus-visible:ring-[3px]\n disabled:cursor-not-allowed disabled:opacity-50\n data-[size=default]:h-[1.15rem] data-[size=default]:w-8\n data-[size=sm]:h-3.5 data-[size=sm]:w-6`,\n className,\n )}\n {...props}\n >\n <SwitchPrimitive.Thumb\n data-slot=\"switch-thumb\"\n className={cn(\n `bg-background dark:data-[state=unchecked]:bg-foreground\n dark:data-[state=checked]:bg-primary-foreground pointer-events-none\n block rounded-full ring-0 transition-transform\n group-data-[size=default]/switch:size-4\n group-data-[size=sm]/switch:size-3\n data-[state=checked]:translate-x-[calc(100%-2px)]\n data-[state=unchecked]:translate-x-0`,\n handleClassName,\n )}\n />\n {children}\n </SwitchPrimitive.Root>\n );\n}\n\nexport { Switch };\n"],"mappings":";;;;;;;;;;AAaA,SAAS,OAAO,EACd,WACA,OAAO,WACP,iBACA,UACA,GAAG,SAGY;AACf,QACE,qBAAC,gBAAgB;EACf,aAAU;EACV,aAAW;EACX,WAAW,GACT;;;;;;;kDAQA,UACD;EACD,GAAI;aAEJ,oBAAC,gBAAgB;GACf,aAAU;GACV,WAAW,GACT;;;;;;iDAOA,gBACD;IACD,EACD;GACoB"}
|
package/dist/style.css
CHANGED
|
@@ -215,6 +215,9 @@
|
|
|
215
215
|
white-space: nowrap;
|
|
216
216
|
border-width: 0;
|
|
217
217
|
}
|
|
218
|
+
.\!absolute {
|
|
219
|
+
position: absolute !important;
|
|
220
|
+
}
|
|
218
221
|
.absolute {
|
|
219
222
|
position: absolute;
|
|
220
223
|
}
|
|
@@ -302,6 +305,12 @@
|
|
|
302
305
|
.col-span-3 {
|
|
303
306
|
grid-column: span 3 / span 3;
|
|
304
307
|
}
|
|
308
|
+
.col-start-1 {
|
|
309
|
+
grid-column-start: 1;
|
|
310
|
+
}
|
|
311
|
+
.row-start-1 {
|
|
312
|
+
grid-row-start: 1;
|
|
313
|
+
}
|
|
305
314
|
.container {
|
|
306
315
|
width: 100%;
|
|
307
316
|
@media (width >= 40rem) {
|
|
@@ -344,15 +353,39 @@
|
|
|
344
353
|
.mt-auto {
|
|
345
354
|
margin-top: auto;
|
|
346
355
|
}
|
|
356
|
+
.mr-0\.5 {
|
|
357
|
+
margin-right: calc(var(--spacing) * 0.5);
|
|
358
|
+
}
|
|
359
|
+
.mr-1 {
|
|
360
|
+
margin-right: calc(var(--spacing) * 1);
|
|
361
|
+
}
|
|
362
|
+
.mr-3\.5 {
|
|
363
|
+
margin-right: calc(var(--spacing) * 3.5);
|
|
364
|
+
}
|
|
365
|
+
.mr-4\.5 {
|
|
366
|
+
margin-right: calc(var(--spacing) * 4.5);
|
|
367
|
+
}
|
|
347
368
|
.mb-3 {
|
|
348
369
|
margin-bottom: calc(var(--spacing) * 3);
|
|
349
370
|
}
|
|
350
371
|
.mb-4 {
|
|
351
372
|
margin-bottom: calc(var(--spacing) * 4);
|
|
352
373
|
}
|
|
374
|
+
.ml-0\.5 {
|
|
375
|
+
margin-left: calc(var(--spacing) * 0.5);
|
|
376
|
+
}
|
|
377
|
+
.ml-1 {
|
|
378
|
+
margin-left: calc(var(--spacing) * 1);
|
|
379
|
+
}
|
|
380
|
+
.ml-3\.5 {
|
|
381
|
+
margin-left: calc(var(--spacing) * 3.5);
|
|
382
|
+
}
|
|
353
383
|
.ml-4 {
|
|
354
384
|
margin-left: calc(var(--spacing) * 4);
|
|
355
385
|
}
|
|
386
|
+
.ml-4\.5 {
|
|
387
|
+
margin-left: calc(var(--spacing) * 4.5);
|
|
388
|
+
}
|
|
356
389
|
.box-content {
|
|
357
390
|
box-sizing: content-box;
|
|
358
391
|
}
|
|
@@ -423,15 +456,9 @@
|
|
|
423
456
|
.h-6 {
|
|
424
457
|
height: calc(var(--spacing) * 6);
|
|
425
458
|
}
|
|
426
|
-
.h-7 {
|
|
427
|
-
height: calc(var(--spacing) * 7);
|
|
428
|
-
}
|
|
429
459
|
.h-8 {
|
|
430
460
|
height: calc(var(--spacing) * 8);
|
|
431
461
|
}
|
|
432
|
-
.h-8\.5 {
|
|
433
|
-
height: calc(var(--spacing) * 8.5);
|
|
434
|
-
}
|
|
435
462
|
.h-9 {
|
|
436
463
|
height: calc(var(--spacing) * 9);
|
|
437
464
|
}
|
|
@@ -468,15 +495,9 @@
|
|
|
468
495
|
.w-4 {
|
|
469
496
|
width: calc(var(--spacing) * 4);
|
|
470
497
|
}
|
|
471
|
-
.w-7 {
|
|
472
|
-
width: calc(var(--spacing) * 7);
|
|
473
|
-
}
|
|
474
498
|
.w-12 {
|
|
475
499
|
width: calc(var(--spacing) * 12);
|
|
476
500
|
}
|
|
477
|
-
.w-13 {
|
|
478
|
-
width: calc(var(--spacing) * 13);
|
|
479
|
-
}
|
|
480
501
|
.w-15 {
|
|
481
502
|
width: calc(var(--spacing) * 15);
|
|
482
503
|
}
|
|
@@ -504,6 +525,9 @@
|
|
|
504
525
|
.w-auto {
|
|
505
526
|
width: auto;
|
|
506
527
|
}
|
|
528
|
+
.w-auto\! {
|
|
529
|
+
width: auto !important;
|
|
530
|
+
}
|
|
507
531
|
.w-fit {
|
|
508
532
|
width: fit-content;
|
|
509
533
|
}
|
|
@@ -555,6 +579,10 @@
|
|
|
555
579
|
.origin-\(--radix-select-content-transform-origin\) {
|
|
556
580
|
transform-origin: var(--radix-select-content-transform-origin);
|
|
557
581
|
}
|
|
582
|
+
.\!translate-x-0 {
|
|
583
|
+
--tw-translate-x: calc(var(--spacing) * 0) !important;
|
|
584
|
+
translate: var(--tw-translate-x) var(--tw-translate-y) !important;
|
|
585
|
+
}
|
|
558
586
|
.-translate-x-1\/2 {
|
|
559
587
|
--tw-translate-x: calc(calc(1/2 * 100%) * -1);
|
|
560
588
|
translate: var(--tw-translate-x) var(--tw-translate-y);
|
|
@@ -563,6 +591,10 @@
|
|
|
563
591
|
--tw-translate-x: -50%;
|
|
564
592
|
translate: var(--tw-translate-x) var(--tw-translate-y);
|
|
565
593
|
}
|
|
594
|
+
.\!-translate-y-1\/2 {
|
|
595
|
+
--tw-translate-y: calc(calc(1/2 * 100%) * -1) !important;
|
|
596
|
+
translate: var(--tw-translate-x) var(--tw-translate-y) !important;
|
|
597
|
+
}
|
|
566
598
|
.-translate-y-1\/2 {
|
|
567
599
|
--tw-translate-y: calc(calc(1/2 * 100%) * -1);
|
|
568
600
|
translate: var(--tw-translate-x) var(--tw-translate-y);
|
|
@@ -665,6 +697,9 @@
|
|
|
665
697
|
.justify-end {
|
|
666
698
|
justify-content: flex-end;
|
|
667
699
|
}
|
|
700
|
+
.gap-0 {
|
|
701
|
+
gap: calc(var(--spacing) * 0);
|
|
702
|
+
}
|
|
668
703
|
.gap-0\.5 {
|
|
669
704
|
gap: calc(var(--spacing) * 0.5);
|
|
670
705
|
}
|
|
@@ -757,10 +792,18 @@
|
|
|
757
792
|
border-top-left-radius: 30px !important;
|
|
758
793
|
border-top-right-radius: 30px !important;
|
|
759
794
|
}
|
|
795
|
+
.rounded-l-lg {
|
|
796
|
+
border-top-left-radius: var(--radius);
|
|
797
|
+
border-bottom-left-radius: var(--radius);
|
|
798
|
+
}
|
|
760
799
|
.rounded-l-none {
|
|
761
800
|
border-top-left-radius: 0;
|
|
762
801
|
border-bottom-left-radius: 0;
|
|
763
802
|
}
|
|
803
|
+
.rounded-r-lg {
|
|
804
|
+
border-top-right-radius: var(--radius);
|
|
805
|
+
border-bottom-right-radius: var(--radius);
|
|
806
|
+
}
|
|
764
807
|
.rounded-r-none {
|
|
765
808
|
border-top-right-radius: 0;
|
|
766
809
|
border-bottom-right-radius: 0;
|
|
@@ -804,6 +847,9 @@
|
|
|
804
847
|
.border-input {
|
|
805
848
|
border-color: var(--input);
|
|
806
849
|
}
|
|
850
|
+
.border-primary {
|
|
851
|
+
border-color: var(--primary);
|
|
852
|
+
}
|
|
807
853
|
.border-transparent {
|
|
808
854
|
border-color: transparent;
|
|
809
855
|
}
|
|
@@ -1000,6 +1046,12 @@
|
|
|
1000
1046
|
font-size: var(--text-xs);
|
|
1001
1047
|
line-height: var(--tw-leading, var(--text-xs--line-height));
|
|
1002
1048
|
}
|
|
1049
|
+
.text-\[7px\] {
|
|
1050
|
+
font-size: 7px;
|
|
1051
|
+
}
|
|
1052
|
+
.text-\[9px\] {
|
|
1053
|
+
font-size: 9px;
|
|
1054
|
+
}
|
|
1003
1055
|
.leading-5\.75 {
|
|
1004
1056
|
--tw-leading: calc(var(--spacing) * 5.75);
|
|
1005
1057
|
line-height: calc(var(--spacing) * 5.75);
|
|
@@ -1101,12 +1153,18 @@
|
|
|
1101
1153
|
.underline-offset-8 {
|
|
1102
1154
|
text-underline-offset: 8px;
|
|
1103
1155
|
}
|
|
1156
|
+
.opacity-0 {
|
|
1157
|
+
opacity: 0%;
|
|
1158
|
+
}
|
|
1104
1159
|
.opacity-50 {
|
|
1105
1160
|
opacity: 50%;
|
|
1106
1161
|
}
|
|
1107
1162
|
.opacity-70 {
|
|
1108
1163
|
opacity: 70%;
|
|
1109
1164
|
}
|
|
1165
|
+
.opacity-100 {
|
|
1166
|
+
opacity: 100%;
|
|
1167
|
+
}
|
|
1110
1168
|
.shadow {
|
|
1111
1169
|
--tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1));
|
|
1112
1170
|
box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
|
|
@@ -1160,6 +1218,16 @@
|
|
|
1160
1218
|
transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
|
|
1161
1219
|
transition-duration: var(--tw-duration, var(--default-transition-duration));
|
|
1162
1220
|
}
|
|
1221
|
+
.transition-\[left\] {
|
|
1222
|
+
transition-property: left;
|
|
1223
|
+
transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
|
|
1224
|
+
transition-duration: var(--tw-duration, var(--default-transition-duration));
|
|
1225
|
+
}
|
|
1226
|
+
.transition-\[margin\] {
|
|
1227
|
+
transition-property: margin;
|
|
1228
|
+
transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
|
|
1229
|
+
transition-duration: var(--tw-duration, var(--default-transition-duration));
|
|
1230
|
+
}
|
|
1163
1231
|
.transition-all {
|
|
1164
1232
|
transition-property: all;
|
|
1165
1233
|
transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
|
|
@@ -2067,10 +2135,14 @@
|
|
|
2067
2135
|
}
|
|
2068
2136
|
}
|
|
2069
2137
|
}
|
|
2070
|
-
.data-\[state\=checked\]\:
|
|
2138
|
+
.data-\[state\=checked\]\:left-\[calc\(100\%-12px\)\] {
|
|
2071
2139
|
&[data-state="checked"] {
|
|
2072
|
-
|
|
2073
|
-
|
|
2140
|
+
left: calc(100% - 12px);
|
|
2141
|
+
}
|
|
2142
|
+
}
|
|
2143
|
+
.data-\[state\=checked\]\:left-\[calc\(100\%-16px\)\] {
|
|
2144
|
+
&[data-state="checked"] {
|
|
2145
|
+
left: calc(100% - 16px);
|
|
2074
2146
|
}
|
|
2075
2147
|
}
|
|
2076
2148
|
.data-\[state\=checked\]\:translate-x-\[calc\(100\%-2px\)\] {
|
|
@@ -2104,15 +2176,14 @@
|
|
|
2104
2176
|
color: var(--muted-foreground);
|
|
2105
2177
|
}
|
|
2106
2178
|
}
|
|
2107
|
-
.data-\[state\=unchecked\]\:
|
|
2179
|
+
.data-\[state\=unchecked\]\:left-0 {
|
|
2108
2180
|
&[data-state="unchecked"] {
|
|
2109
|
-
|
|
2110
|
-
translate: var(--tw-translate-x) var(--tw-translate-y);
|
|
2181
|
+
left: calc(var(--spacing) * 0);
|
|
2111
2182
|
}
|
|
2112
2183
|
}
|
|
2113
|
-
.data-\[state\=unchecked\]\:translate-x
|
|
2184
|
+
.data-\[state\=unchecked\]\:translate-x-0 {
|
|
2114
2185
|
&[data-state="unchecked"] {
|
|
2115
|
-
--tw-translate-x:
|
|
2186
|
+
--tw-translate-x: calc(var(--spacing) * 0);
|
|
2116
2187
|
translate: var(--tw-translate-x) var(--tw-translate-y);
|
|
2117
2188
|
}
|
|
2118
2189
|
}
|
|
@@ -2444,6 +2515,12 @@
|
|
|
2444
2515
|
height: calc(var(--spacing) * 4);
|
|
2445
2516
|
}
|
|
2446
2517
|
}
|
|
2518
|
+
.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-5 {
|
|
2519
|
+
& svg:not([class*='size-']) {
|
|
2520
|
+
width: calc(var(--spacing) * 5);
|
|
2521
|
+
height: calc(var(--spacing) * 5);
|
|
2522
|
+
}
|
|
2523
|
+
}
|
|
2447
2524
|
.\[\&_svg\:not\(\[class\*\=\'text-\'\]\)\]\:text-muted-foreground {
|
|
2448
2525
|
& svg:not([class*='text-']) {
|
|
2449
2526
|
color: var(--muted-foreground);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jbpark/ui-kit",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.4.0",
|
|
4
4
|
"description": "Modern React UI component library built with TypeScript, Tailwind CSS, and Radix UI. Featuring atoms, molecules, organisms and layout templates for building beautiful interfaces.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"react",
|