@liner-fe/prism 1.1.7 → 1.1.8
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/lib/components/Button/index.d.ts +28 -4
- package/lib/components/Button/index.stories.d.ts +17 -9
- package/lib/index.cjs +56 -6
- package/lib/index.cjs.map +2 -2
- package/lib/index.css +29 -3
- package/lib/index.css.map +2 -2
- package/lib/index.mjs +56 -6
- package/lib/index.mjs.map +2 -2
- package/package.json +1 -1
- package/src/components/Button/index.stories.tsx +79 -18
- package/src/components/Button/index.tsx +92 -8
- package/src/components/Button/style.module.scss +38 -8
|
@@ -1,19 +1,43 @@
|
|
|
1
1
|
import { ButtonHTMLAttributes } from 'react';
|
|
2
2
|
import { VariantProps } from 'class-variance-authority';
|
|
3
|
-
declare const
|
|
3
|
+
declare const defaultButtonVariants: (props?: ({
|
|
4
4
|
level?: "primary" | "secondary" | "tertiary" | "quaternary" | "quinary" | "negative" | "inverse" | null | undefined;
|
|
5
5
|
align?: "center" | "spaceBetween" | null | undefined;
|
|
6
6
|
size?: "cta" | "l" | "m" | "s" | null | undefined;
|
|
7
7
|
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
8
|
-
|
|
8
|
+
declare const textButtonVariants: (props?: ({
|
|
9
|
+
level?: "inversePrimary" | "neutralPrimary" | "inverseStaticPrimary" | null | undefined;
|
|
10
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
11
|
+
declare const iconButtonVariants: (props?: ({
|
|
12
|
+
level?: "primary" | "secondary" | "tertiary" | "quaternary" | "quinary" | "negative" | null | undefined;
|
|
13
|
+
weight?: null | undefined;
|
|
14
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
15
|
+
interface CommonButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {
|
|
16
|
+
as?: 'default' | 'text' | 'icon';
|
|
17
|
+
asChild?: boolean;
|
|
18
|
+
}
|
|
19
|
+
export interface DefaultButtonProps extends CommonButtonProps, VariantProps<typeof defaultButtonVariants> {
|
|
20
|
+
as?: 'default';
|
|
9
21
|
asChild?: boolean;
|
|
10
|
-
align?: 'center' | 'spaceBetween';
|
|
11
22
|
level?: 'primary' | 'secondary' | 'tertiary' | 'quaternary' | 'quinary' | 'negative' | 'inverse';
|
|
12
23
|
size?: 'cta' | 'l' | 'm' | 's';
|
|
24
|
+
align?: 'center' | 'spaceBetween';
|
|
25
|
+
}
|
|
26
|
+
export interface TextButtonProps extends CommonButtonProps, VariantProps<typeof textButtonVariants> {
|
|
27
|
+
as?: 'text';
|
|
28
|
+
asChild?: boolean;
|
|
29
|
+
level?: 'inversePrimary' | 'neutralPrimary' | 'inverseStaticPrimary';
|
|
30
|
+
}
|
|
31
|
+
export interface IconButtonProps extends CommonButtonProps, VariantProps<typeof iconButtonVariants> {
|
|
32
|
+
as?: 'icon';
|
|
33
|
+
asChild?: boolean;
|
|
13
34
|
}
|
|
35
|
+
export type ButtonProps = DefaultButtonProps | TextButtonProps | IconButtonProps;
|
|
14
36
|
/**
|
|
15
37
|
* 버튼 컴포넌트
|
|
16
38
|
*/
|
|
39
|
+
export declare const DefaultButton: import("react").ForwardRefExoticComponent<DefaultButtonProps & import("react").RefAttributes<HTMLButtonElement>>;
|
|
40
|
+
export declare const TextButton: import("react").ForwardRefExoticComponent<TextButtonProps & import("react").RefAttributes<HTMLButtonElement>>;
|
|
41
|
+
export declare const IconButton: import("react").ForwardRefExoticComponent<IconButtonProps & import("react").RefAttributes<HTMLButtonElement>>;
|
|
17
42
|
export declare const Button: import("react").ForwardRefExoticComponent<ButtonProps & import("react").RefAttributes<HTMLButtonElement>>;
|
|
18
|
-
export declare const Component: () => import("react/jsx-runtime").JSX.Element;
|
|
19
43
|
export {};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
|
-
import {
|
|
3
|
-
declare const meta: Meta<typeof
|
|
2
|
+
import { DefaultButton } from '.';
|
|
3
|
+
declare const meta: Meta<typeof DefaultButton>;
|
|
4
4
|
export default meta;
|
|
5
5
|
type Story = StoryObj<typeof meta>;
|
|
6
6
|
/**
|
|
@@ -8,18 +8,26 @@ type Story = StoryObj<typeof meta>;
|
|
|
8
8
|
*/
|
|
9
9
|
export declare const Default: Story;
|
|
10
10
|
/**
|
|
11
|
-
*
|
|
11
|
+
* 종류별 버튼
|
|
12
12
|
*/
|
|
13
|
-
export declare const
|
|
13
|
+
export declare const AS: Story;
|
|
14
14
|
/**
|
|
15
|
-
*
|
|
15
|
+
* Default 버튼 타입 - level 종류
|
|
16
16
|
*/
|
|
17
|
-
export declare const
|
|
17
|
+
export declare const DefaultLevel: Story;
|
|
18
18
|
/**
|
|
19
|
-
*
|
|
19
|
+
* Default 버튼 - align 종류
|
|
20
20
|
*/
|
|
21
|
-
export declare const
|
|
21
|
+
export declare const DefaultAlign: Story;
|
|
22
22
|
/**
|
|
23
|
-
*
|
|
23
|
+
* Default 버튼 - size 종류
|
|
24
|
+
*/
|
|
25
|
+
export declare const DefaultSize: Story;
|
|
26
|
+
/**
|
|
27
|
+
* Text 버튼 - level 종류
|
|
28
|
+
*/
|
|
29
|
+
export declare const TextLevel: Story;
|
|
30
|
+
/**
|
|
31
|
+
* Default 버튼 - 비활성화 상태
|
|
24
32
|
*/
|
|
25
33
|
export declare const Disabled: Story;
|
package/lib/index.cjs
CHANGED
|
@@ -32,7 +32,9 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
32
32
|
var src_exports = {};
|
|
33
33
|
__export(src_exports, {
|
|
34
34
|
Button: () => Button,
|
|
35
|
-
|
|
35
|
+
DefaultButton: () => DefaultButton,
|
|
36
|
+
IconButton: () => IconButton,
|
|
37
|
+
TextButton: () => TextButton,
|
|
36
38
|
objectToArray: () => objectToArray
|
|
37
39
|
});
|
|
38
40
|
module.exports = __toCommonJS(src_exports);
|
|
@@ -52,7 +54,7 @@ var style_module_default = {};
|
|
|
52
54
|
var import_class_variance_authority = require("class-variance-authority");
|
|
53
55
|
var import_react_slot = require("@radix-ui/react-slot");
|
|
54
56
|
var import_clsx = __toESM(require("clsx"));
|
|
55
|
-
var
|
|
57
|
+
var defaultButtonVariants = (0, import_class_variance_authority.cva)([style_module_default.button, style_module_default.default], {
|
|
56
58
|
variants: {
|
|
57
59
|
level: {
|
|
58
60
|
primary: style_module_default.primary,
|
|
@@ -75,12 +77,60 @@ var buttonVariants = (0, import_class_variance_authority.cva)(style_module_defau
|
|
|
75
77
|
}
|
|
76
78
|
}
|
|
77
79
|
});
|
|
78
|
-
var
|
|
79
|
-
|
|
80
|
+
var textButtonVariants = (0, import_class_variance_authority.cva)([style_module_default.button, style_module_default.text], {
|
|
81
|
+
variants: {
|
|
82
|
+
level: {
|
|
83
|
+
inversePrimary: style_module_default["inverse-primary"],
|
|
84
|
+
neutralPrimary: style_module_default["neutral-primary"],
|
|
85
|
+
inverseStaticPrimary: style_module_default["inverse-static-primary"]
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
var iconButtonVariants = (0, import_class_variance_authority.cva)([style_module_default.button, style_module_default.icon], {
|
|
90
|
+
variants: {
|
|
91
|
+
level: {
|
|
92
|
+
primary: style_module_default.primary,
|
|
93
|
+
secondary: style_module_default.secondary,
|
|
94
|
+
tertiary: style_module_default.tertiary,
|
|
95
|
+
quaternary: style_module_default.quaternary,
|
|
96
|
+
quinary: style_module_default.quinary,
|
|
97
|
+
negative: style_module_default.negative
|
|
98
|
+
},
|
|
99
|
+
weight: {
|
|
100
|
+
//
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
var DefaultButton = (0, import_react.forwardRef)(
|
|
105
|
+
({ as = "default", asChild = false, level = "primary", align = "center", size = "cta", ...rest }, ref) => {
|
|
106
|
+
const Comp = asChild ? import_react_slot.Slot : "button";
|
|
107
|
+
return <Comp {...rest} className={(0, import_clsx.default)(defaultButtonVariants({ level, align, size }))} ref={ref} />;
|
|
108
|
+
}
|
|
109
|
+
);
|
|
110
|
+
var TextButton = (0, import_react.forwardRef)(
|
|
111
|
+
({ as = "text", asChild = false, level = "inversePrimary", ...rest }, ref) => {
|
|
80
112
|
const Comp = asChild ? import_react_slot.Slot : "button";
|
|
81
|
-
return <Comp className={(0, import_clsx.default)(
|
|
113
|
+
return <Comp {...rest} className={(0, import_clsx.default)(textButtonVariants({ level }))} ref={ref} />;
|
|
114
|
+
}
|
|
115
|
+
);
|
|
116
|
+
var IconButton = (0, import_react.forwardRef)(
|
|
117
|
+
(props, ref) => {
|
|
118
|
+
const Comp = props.asChild ? import_react_slot.Slot : "button";
|
|
119
|
+
return <Comp {...props} className={(0, import_clsx.default)(iconButtonVariants({ level: props.level }))} ref={ref} />;
|
|
120
|
+
}
|
|
121
|
+
);
|
|
122
|
+
var Button = (0, import_react.forwardRef)(
|
|
123
|
+
(props, ref) => {
|
|
124
|
+
const Comp = props.asChild ? import_react_slot.Slot : "button";
|
|
125
|
+
switch (props.as) {
|
|
126
|
+
case "default":
|
|
127
|
+
const { level = "primary", align = "center", size = "cta" } = props;
|
|
128
|
+
return <Comp {...props} className={(0, import_clsx.default)(defaultButtonVariants({ level, align, size }))} ref={ref} />;
|
|
129
|
+
case "text":
|
|
130
|
+
const { level: textLevel = "inversePrimary" } = props;
|
|
131
|
+
return <Comp {...props} className={(0, import_clsx.default)(textButtonVariants({ level: textLevel }))} ref={ref} />;
|
|
132
|
+
}
|
|
82
133
|
}
|
|
83
134
|
);
|
|
84
|
-
var Component = /* @__PURE__ */ __name(() => <div>TEST</div>, "Component");
|
|
85
135
|
/*! For license information please see index.cjs.LEGAL.txt */
|
|
86
136
|
//# sourceMappingURL=index.cjs.map
|
package/lib/index.cjs.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/index.ts", "../src/utils/object.ts", "../src/components/Button/index.tsx", "../src/components/Button/style.module.scss"],
|
|
4
|
-
"sourcesContent": ["export * from './utils/object';\nexport * from './components/Button';\n", "export const objectToArray = <T extends Record<string, any>>(obj: T) => {\n return Object.entries(obj);\n};\n", "import { ButtonHTMLAttributes, forwardRef } from 'react';\nimport style from './style.module.scss';\nimport { VariantProps, cva } from 'class-variance-authority';\nimport { Slot } from '@radix-ui/react-slot';\nimport clsx from 'clsx';\n\nconst buttonVariants = cva(style.button, {\n variants: {\n level: {\n primary: style.primary,\n secondary: style.secondary,\n tertiary: style.tertiary,\n quaternary: style.quaternary,\n quinary: style.quinary,\n negative: style.negative,\n inverse: style.inverse,\n },\n align: {\n center: style['align-center'],\n spaceBetween: style['align-space-between'],\n },\n size: {\n cta: style.cta,\n l: style.l,\n m: style.m,\n s: style.s,\n },\n },\n});\n\nexport interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof buttonVariants> {\n asChild?: boolean;\n align?: 'center' | 'spaceBetween';\n level?: 'primary' | 'secondary' | 'tertiary' | 'quaternary' | 'quinary' | 'negative' | 'inverse';\n size?: 'cta' | 'l' | 'm' | 's';\n // isLoading?: boolean;\n // leftIcon?: ReactNode;\n // rightIcon?: ReactNode;\n}\n\n/**\n * \uBC84\uD2BC \uCEF4\uD3EC\uB10C\uD2B8\n */\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(\n ({ asChild, level = 'primary', align = 'center', size = 'cta', ...props }, ref) => {\n const Comp = asChild ? Slot : 'button';\n\n return <Comp className={clsx(buttonVariants({ level, align, size }))} ref={ref} {...props} />;\n }\n);\n\nexport const Component = () => <div>TEST</div>;\n", ".button {\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n border: none;\n font-size: normal;\n font-weight: var(--lp-pri-font-weight-700);\n line-height: 130%;\n color: var(--inverse-label-static-primary);\n background: var(--lp-pri-achromatic-white);\n overflow: hidden;\n cursor: pointer;\n}\n.button:disabled {\n background: var(--neutral-container-mid);\n color: var(--neutral-label-tertiary);\n cursor: not-allowed;\n}\n\n.primary {\n background: #4058FF;\n}\n.primary:not(:disabled):hover {\n background: #3346cc;\n}\n\n.secondary {\n background: var(--inverse-container-high);\n}\n.secondary:not(:disabled):hover {\n background: #121212;\n}\n\n.tertiary {\n background: rgba(109, 109, 112, 0.0784313725);\n color: var(--neutral-label-primary);\n}\n.tertiary:not(:disabled):hover {\n background: #ebebeb;\n}\n\n.quaternary {\n color: var(--neutral-label-primary);\n border: 1px solid var(--neutral-border-overlay-normal);\n}\n.quaternary:not(:disabled):hover {\n background: #f5f5f5;\n}\n.quaternary:disabled {\n background: var(--neutral-container-mid);\n color: var(--neutral-label-tertiary);\n opacity: 0.4;\n}\n\n.quinary {\n color: rgba(109, 109, 112, 0.8);\n}\n.quinary:not(:disabled):hover {\n background: #f5f5f5;\n}\n.quinary:disabled {\n background: var(--neutral-container-mid);\n color: var(--neutral-label-tertiary);\n opacity: 0.4;\n}\n\n.negative {\n background: var(--function-negative);\n}\n.negative:not(:disabled):hover {\n background: #af1b1c;\n}\n\n.inverse {\n color: var(--neutral-label-primary);\n}\n.inverse:not(:disabled):hover {\n background: #f5f5f5;\n}\n\n.cta {\n border-radius: 8px;\n padding: 13.5px 12px;\n font-size: var(--lp-pri-font-size-16);\n min-width: 129px;\n max-height: 48px;\n}\n\n.l {\n border-radius: 6px;\n padding: 10.5px 8px;\n font-size: var(--lp-pri-font-size-15);\n min-width: 107px;\n max-height: 40px;\n}\n\n.m {\n border-radius: 6px;\n padding: 7px 6px;\n font-size: var(--lp-pri-font-size-14);\n font-weight: var(--lp-pri-font-weight-500);\n min-width: 91px;\n max-height: 32px;\n}\n\n.s {\n border-radius: 6px;\n padding: 3.5px 6px;\n font-size: var(--lp-pri-font-size-13);\n font-weight: var(--lp-pri-font-weight-500);\n min-width: 89px;\n max-height: 24px;\n}\n\n.align-center {\n justify-content: center;\n}\n\n.align-space-between {\n justify-content: space-between;\n}\n/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VSb290IjoiL2hvbWUvcnVubmVyL3dvcmsvZnJvbnRlbmQtcGFja2FnZXMvZnJvbnRlbmQtcGFja2FnZXMvcGFja2FnZXMvbGluZXItcHJpc20vc3JjL2NvbXBvbmVudHMvQnV0dG9uIiwic291cmNlcyI6WyJzdHlsZS5tb2R1bGUuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQTtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFFQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFFQTs7QUFHQTtFQUNFO0VBQ0E7RUFDQTs7O0FBS0o7RUFDRTs7QUFFQTtFQUNFOzs7QUFHSjtFQUNFOztBQUVBO0VBQ0U7OztBQUdKO0VBQ0U7RUFDQTs7QUFFQTtFQUNFOzs7QUFHSjtFQUVFO0VBQ0E7O0FBRUE7RUFDRTs7QUFHRjtFQUNFO0VBQ0E7RUFDQTs7O0FBR0o7RUFFRTs7QUFFQTtFQUNFOztBQUVGO0VBQ0U7RUFDQTtFQUNBOzs7QUFHSjtFQUVFOztBQUVBO0VBQ0U7OztBQUdKO0VBRUU7O0FBRUE7RUFDRTs7O0FBS0o7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBOzs7QUFFRjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7OztBQUVGO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOzs7QUFFRjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7O0FBSUY7RUFDRTs7O0FBRUY7RUFDRSIsInNvdXJjZXNDb250ZW50IjpbIi8vIEBpbXBvcnQgXCIuLi8uLi8uLi8uLi9kZXNpZ24tdG9rZW4vZ2xvYmFsLmNzc1wiO1xuLy8gQHVzZSBcIi4uLy4uLy4uLy4uL2Rlc2lnbi10b2tlbi9nbG9iYWwuY3NzXCIgYXMgKjtcblxuLmJ1dHRvbiB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGJvcmRlcjogbm9uZTtcblxuICBmb250LXNpemU6IG5vcm1hbDtcbiAgZm9udC13ZWlnaHQ6IHZhcigtLWxwLXByaS1mb250LXdlaWdodC03MDApO1xuICBsaW5lLWhlaWdodDogMTMwJTsgLy8gVE9ETzog7Yag7YGwXG4gIGNvbG9yOiB2YXIoLS1pbnZlcnNlLWxhYmVsLXN0YXRpYy1wcmltYXJ5KTtcbiAgYmFja2dyb3VuZDogdmFyKC0tbHAtcHJpLWFjaHJvbWF0aWMtd2hpdGUpOyAvLyBUT0RPOiDthqDtgbBcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcblxuICBjdXJzb3I6IHBvaW50ZXI7XG4gIC8vIGNvbG9yOiB2YXIoLS1icmFuZC1jb250YWluZXItbWlkKTtcblxuICAmOmRpc2FibGVkIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1uZXV0cmFsLWNvbnRhaW5lci1taWQpO1xuICAgIGNvbG9yOiB2YXIoLS1uZXV0cmFsLWxhYmVsLXRlcnRpYXJ5KTtcbiAgICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xuICB9XG59XG5cbi8vIGxldmVsXG4ucHJpbWFyeSB7XG4gIGJhY2tncm91bmQ6ICM0MDU4RkY7IC8vIFRPRE86IO2GoO2BsCDsl4XrjbDsnbTtirggKOyDieyDgSDri6TrpoQpXG5cbiAgJjpub3QoOmRpc2FibGVkKTpob3ZlciB7IC8vIFRPRE86IO2GoO2BsOycvOuhnCDrs4DtmZhcbiAgICBiYWNrZ3JvdW5kOiAjMzM0NmNjO1xuICB9XG59XG4uc2Vjb25kYXJ5IHtcbiAgYmFja2dyb3VuZDogdmFyKC0taW52ZXJzZS1jb250YWluZXItaGlnaCk7XG5cbiAgJjpub3QoOmRpc2FibGVkKTpob3ZlciB7IC8vIFRPRE86IO2GoO2BsOycvOuhnCDrs4DtmZhcbiAgICBiYWNrZ3JvdW5kOiAjMTIxMjEyO1xuICB9XG59XG4udGVydGlhcnkge1xuICBiYWNrZ3JvdW5kOiAjNkQ2RDcwMTQ7XG4gIGNvbG9yOiB2YXIoLS1uZXV0cmFsLWxhYmVsLXByaW1hcnkpO1xuXG4gICY6bm90KDpkaXNhYmxlZCk6aG92ZXIgeyAvLyBUT0RPOiDthqDtgbDsnLzroZwg67OA7ZmYXG4gICAgYmFja2dyb3VuZDogI2ViZWJlYjtcbiAgfVxufVxuLnF1YXRlcm5hcnkge1xuICAvLyBUT0RPOiDthqDtgbAg7JeF642w7J207Yq4IG5ldXRyYWwvYm9yZGVyL292ZXJsYXkvbm9ybWFsXG4gIGNvbG9yOiB2YXIoLS1uZXV0cmFsLWxhYmVsLXByaW1hcnkpO1xuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1uZXV0cmFsLWJvcmRlci1vdmVybGF5LW5vcm1hbCk7XG5cbiAgJjpub3QoOmRpc2FibGVkKTpob3ZlciB7IC8vIFRPRE86IO2GoO2BsOycvOuhnCDrs4DtmZhcbiAgICBiYWNrZ3JvdW5kOiAjZjVmNWY1O1xuICB9XG5cbiAgJjpkaXNhYmxlZCB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tbmV1dHJhbC1jb250YWluZXItbWlkKTtcbiAgICBjb2xvcjogdmFyKC0tbmV1dHJhbC1sYWJlbC10ZXJ0aWFyeSk7XG4gICAgb3BhY2l0eTogMC40O1xuICB9XG59XG4ucXVpbmFyeSB7XG4gIC8vIGNvbG9yOiB2YXIoLS1uZXV0cmFsLWxhYmVsLXNlY29uZGFyeSk7XG4gIGNvbG9yOiAjNkQ2RDcwQ0M7IC8vIFRPRE86IO2GoO2BsCDsl4XrjbDsnbTtirhcblxuICAmOm5vdCg6ZGlzYWJsZWQpOmhvdmVyIHsgLy8gVE9ETzog7Yag7YGw7Jy866GcIOuzgO2ZmFxuICAgIGJhY2tncm91bmQ6ICNmNWY1ZjU7XG4gIH1cbiAgJjpkaXNhYmxlZCB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tbmV1dHJhbC1jb250YWluZXItbWlkKTtcbiAgICBjb2xvcjogdmFyKC0tbmV1dHJhbC1sYWJlbC10ZXJ0aWFyeSk7XG4gICAgb3BhY2l0eTogMC40O1xuICB9XG59XG4ubmVnYXRpdmUge1xuICAvLyBUT0RPOiBmdW50aW9uL2NvbnRhaW5lci9uZWdhdGl2ZVxuICBiYWNrZ3JvdW5kOiB2YXIoLS1mdW5jdGlvbi1uZWdhdGl2ZSk7XG5cbiAgJjpub3QoOmRpc2FibGVkKTpob3ZlciB7IC8vIFRPRE86IO2GoO2BsOycvOuhnCDrs4DtmZhcbiAgICBiYWNrZ3JvdW5kOiAjYWYxYjFjO1xuICB9XG59XG4uaW52ZXJzZSB7XG4gIC8vIFRPRE86IG5ldXRyYWwvbGFiZWwvc3RhdGljL3ByaW1hcnlcbiAgY29sb3I6IHZhcigtLW5ldXRyYWwtbGFiZWwtcHJpbWFyeSk7XG5cbiAgJjpub3QoOmRpc2FibGVkKTpob3ZlciB7IC8vIFRPRE86IO2GoO2BsOycvOuhnCDrs4DtmZhcbiAgICBiYWNrZ3JvdW5kOiAjZjVmNWY1O1xuICB9XG59XG5cbi8vIHNpemVcbi5jdGEge1xuICBib3JkZXItcmFkaXVzOiA4cHg7IC8vIFRPRE86IO2GoO2BsFxuICBwYWRkaW5nOiAxMy41cHggMTJweDsgLy8gVE9ETzog7Yag7YGwXG4gIGZvbnQtc2l6ZTogdmFyKC0tbHAtcHJpLWZvbnQtc2l6ZS0xNik7XG4gIG1pbi13aWR0aDogMTI5cHg7XG4gIG1heC1oZWlnaHQ6IDQ4cHg7XG59XG4ubCB7XG4gIGJvcmRlci1yYWRpdXM6IDZweDsgLy8gVE9ETzog7Yag7YGwXG4gIHBhZGRpbmc6IDEwLjVweCA4cHg7IC8vIFRPRE86IO2GoO2BsFxuICBmb250LXNpemU6IHZhcigtLWxwLXByaS1mb250LXNpemUtMTUpO1xuICBtaW4td2lkdGg6IDEwN3B4O1xuICBtYXgtaGVpZ2h0OiA0MHB4O1xufVxuLm0ge1xuICBib3JkZXItcmFkaXVzOiA2cHg7IC8vIFRPRE86IO2GoO2BsFxuICBwYWRkaW5nOiA3cHggNnB4OyAvLyBUT0RPOiDthqDtgbBcbiAgZm9udC1zaXplOiB2YXIoLS1scC1wcmktZm9udC1zaXplLTE0KTtcbiAgZm9udC13ZWlnaHQ6IHZhcigtLWxwLXByaS1mb250LXdlaWdodC01MDApO1xuICBtaW4td2lkdGg6IDkxcHg7XG4gIG1heC1oZWlnaHQ6IDMycHg7XG59XG4ucyB7XG4gIGJvcmRlci1yYWRpdXM6IDZweDsgLy8gVE9ETzog7Yag7YGwXG4gIHBhZGRpbmc6IDMuNXB4IDZweDsgLy8gVE9ETzog7Yag7YGwXG4gIGZvbnQtc2l6ZTogdmFyKC0tbHAtcHJpLWZvbnQtc2l6ZS0xMyk7XG4gIGZvbnQtd2VpZ2h0OiB2YXIoLS1scC1wcmktZm9udC13ZWlnaHQtNTAwKTtcbiAgbWluLXdpZHRoOiA4OXB4O1xuICBtYXgtaGVpZ2h0OiAyNHB4O1xufVxuXG4vLyBhbGlnblxuLmFsaWduLWNlbnRlciB7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xufVxuLmFsaWduLXNwYWNlLWJldHdlZW4ge1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG59XG4iXX0= */"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAO,IAAM,gBAAgB,wBAAgC,QAAW;AACtE,SAAO,OAAO,QAAQ,GAAG;AAC3B,GAF6B;;;ACA7B,mBAAiD;;;ACAjD;;;ADEA,sCAAkC;AAClC,wBAAqB;AACrB,kBAAiB;AAEjB,IAAM,
|
|
4
|
+
"sourcesContent": ["export * from './utils/object';\nexport * from './components/Button';\n", "export const objectToArray = <T extends Record<string, any>>(obj: T) => {\n return Object.entries(obj);\n};\n", "import { ButtonHTMLAttributes, forwardRef } from 'react';\nimport style from './style.module.scss';\nimport { VariantProps, cva } from 'class-variance-authority';\nimport { Slot } from '@radix-ui/react-slot';\nimport clsx from 'clsx';\n\nconst defaultButtonVariants = cva([style.button,style.default], {\n variants: {\n level: {\n primary: style.primary,\n secondary: style.secondary,\n tertiary: style.tertiary,\n quaternary: style.quaternary,\n quinary: style.quinary,\n negative: style.negative,\n inverse: style.inverse,\n },\n align: {\n center: style['align-center'],\n spaceBetween: style['align-space-between'],\n },\n size: {\n cta: style.cta,\n l: style.l,\n m: style.m,\n s: style.s,\n },\n },\n});\nconst textButtonVariants = cva([style.button,style.text], {\n variants: {\n level: {\n inversePrimary: style['inverse-primary'],\n neutralPrimary: style['neutral-primary'],\n inverseStaticPrimary: style['inverse-static-primary'],\n },\n },\n});\nconst iconButtonVariants = cva([style.button,style.icon], {\n variants: {\n level: {\n primary: style.primary,\n secondary: style.secondary,\n tertiary: style.tertiary,\n quaternary: style.quaternary,\n quinary: style.quinary,\n negative: style.negative,\n },\n weight: {\n // \n },\n },\n});\n\nconst getButtonVariant = (props: ButtonProps) => {\n switch (props.as) {\n case 'default':\n const {level=\"primary\", align=\"center\", size=\"cta\"} = props;\n return defaultButtonVariants({ level, align, size });\n case 'text':\n return textButtonVariants({ level: props.level });\n case 'icon':\n return iconButtonVariants({ level: props.level });\n }\n}\n\ninterface CommonButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n as?: 'default' | 'text' | 'icon';\n asChild?: boolean;\n}\nexport interface DefaultButtonProps extends CommonButtonProps, VariantProps<typeof defaultButtonVariants> {\n as?: 'default';\n asChild?: boolean;\n level?: 'primary' | 'secondary' | 'tertiary' | 'quaternary' | 'quinary' | 'negative' | 'inverse';\n size?: 'cta' | 'l' | 'm' | 's';\n align?: 'center' | 'spaceBetween';\n // isLoading?: boolean;\n // leftIcon?: ReactNode;\n // rightIcon?: ReactNode; \n}\nexport interface TextButtonProps extends CommonButtonProps, VariantProps<typeof textButtonVariants> {\n as?: 'text';\n asChild?: boolean;\n level?: 'inversePrimary' | 'neutralPrimary' | 'inverseStaticPrimary' \n}\nexport interface IconButtonProps extends CommonButtonProps, VariantProps<typeof iconButtonVariants> {\n as?: 'icon';\n asChild?: boolean;\n // weight\n}\nexport type ButtonProps = DefaultButtonProps | TextButtonProps | IconButtonProps;\n\n/**\n * \uBC84\uD2BC \uCEF4\uD3EC\uB10C\uD2B8\n */\n\nexport const DefaultButton = forwardRef<HTMLButtonElement, DefaultButtonProps>(\n ({as = 'default',asChild = false, level = 'primary', align = 'center', size= 'cta', ...rest}, ref) => {\n const Comp = asChild ? Slot : 'button';\n\n return <Comp {...rest} className={clsx(defaultButtonVariants({ level, align, size }))} ref={ref} />;\n }\n);\n\nexport const TextButton = forwardRef<HTMLButtonElement, TextButtonProps>(\n ({as = 'text',asChild = false, level = 'inversePrimary', ...rest}, ref) => {\n const Comp = asChild ? Slot : 'button';\n\n return <Comp {...rest} className={clsx(textButtonVariants({ level }))} ref={ref} />;\n }\n);\n\nexport const IconButton = forwardRef<HTMLButtonElement, IconButtonProps>(\n (props, ref) => {\n const Comp = props.asChild ? Slot : 'button';\n\n return <Comp {...props} className={clsx(iconButtonVariants({ level: props.level }))} ref={ref} />;\n }\n);\n\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(\n (props, ref) => {\n const Comp = props.asChild ? Slot : 'button';\n\n switch (props.as){\n case 'default':\n const {level=\"primary\", align=\"center\", size=\"cta\"} = props;\n return <Comp {...props} className={clsx(defaultButtonVariants({ level, align, size }))} ref={ref} />;\n case 'text':\n const {level:textLevel = 'inversePrimary'} = props;\n return <Comp {...props} className={clsx(textButtonVariants({ level: textLevel }))} ref={ref} />;\n // case 'icon':\n // return <Comp {...props} className={clsx(iconButtonVariants({ level: props.level }))} ref={ref} />;\n }\n }\n);\n", ".button {\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n border: none;\n font-style: normal;\n font-size: var(--lp-pri-font-size-16);\n font-weight: var(--lp-pri-font-weight-700);\n line-height: 130%;\n overflow: hidden;\n cursor: pointer;\n}\n.button:disabled {\n background: var(--neutral-container-mid);\n color: var(--neutral-label-tertiary);\n cursor: not-allowed;\n}\n\n.default {\n color: var(--inverse-label-static-primary);\n background: var(--lp-pri-achromatic-white);\n}\n\n.text {\n background: none;\n color: var(--inverse-label-static-primary);\n font-size: var(--lp-pri-font-size-13);\n font-weight: var(--lp-pri-font-weight-500);\n}\n.text:not(:disabled):hover {\n text-decoration: underline;\n text-underline-offset: 0.2rem;\n}\n\n.icon {\n background: none;\n}\n\n.primary {\n background: #4058FF;\n}\n.primary:not(:disabled):hover {\n background: #3346cc;\n}\n\n.secondary {\n background: var(--inverse-container-high);\n}\n.secondary:not(:disabled):hover {\n background: #121212;\n}\n\n.tertiary {\n background: rgba(109, 109, 112, 0.0784313725);\n color: var(--neutral-label-primary);\n}\n.tertiary:not(:disabled):hover {\n background: #ebebeb;\n}\n\n.quaternary {\n color: var(--neutral-label-primary);\n border: 1px solid var(--neutral-border-overlay-normal);\n}\n.quaternary:not(:disabled):hover {\n background: #f5f5f5;\n}\n.quaternary:disabled {\n background: var(--neutral-container-mid);\n color: var(--neutral-label-tertiary);\n opacity: 0.4;\n}\n\n.quinary {\n color: rgba(109, 109, 112, 0.8);\n}\n.quinary:not(:disabled):hover {\n background: #f5f5f5;\n}\n.quinary:disabled {\n background: var(--neutral-container-mid);\n color: var(--neutral-label-tertiary);\n opacity: 0.4;\n}\n\n.negative {\n background: var(--function-negative);\n}\n.negative:not(:disabled):hover {\n background: #af1b1c;\n}\n\n.inverse {\n color: var(--neutral-label-primary);\n}\n.inverse:not(:disabled):hover {\n background: #f5f5f5;\n}\n\n.cta {\n border-radius: 8px;\n padding: 13.5px 12px;\n font-size: var(--lp-pri-font-size-16);\n min-width: 129px;\n max-height: 48px;\n}\n\n.l {\n border-radius: 6px;\n padding: 10.5px 8px;\n font-size: var(--lp-pri-font-size-15);\n min-width: 107px;\n max-height: 40px;\n}\n\n.m {\n border-radius: 6px;\n padding: 7px 6px;\n font-size: var(--lp-pri-font-size-14);\n font-weight: var(--lp-pri-font-weight-500);\n min-width: 91px;\n max-height: 32px;\n}\n\n.s {\n border-radius: 6px;\n padding: 3.5px 6px;\n font-size: var(--lp-pri-font-size-13);\n font-weight: var(--lp-pri-font-weight-500);\n min-width: 89px;\n max-height: 24px;\n}\n\n.align-center {\n justify-content: center;\n}\n\n.align-space-between {\n justify-content: space-between;\n}\n\n.inverse-primary {\n color: var(--inverse-label-static-primary);\n}\n\n.neutral-primary {\n color: rgba(109, 109, 112, 0.8);\n opacity: 0.8;\n}\n\n.inverse-static-primary {\n color: var(--inverse-label-static-primary);\n}\n/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VSb290IjoiL2hvbWUvcnVubmVyL3dvcmsvZnJvbnRlbmQtcGFja2FnZXMvZnJvbnRlbmQtcGFja2FnZXMvcGFja2FnZXMvbGluZXItcHJpc20vc3JjL2NvbXBvbmVudHMvQnV0dG9uIiwic291cmNlcyI6WyJzdHlsZS5tb2R1bGUuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFFQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBRUE7O0FBRUE7RUFDRTtFQUNBO0VBQ0E7OztBQUtKO0VBQ0U7RUFDQTs7O0FBR0Y7RUFDRTtFQUNBO0VBQ0E7RUFDQTs7QUFFQTtFQUNFO0VBQ0E7OztBQUdKO0VBQ0U7OztBQUtGO0VBQ0U7O0FBRUE7RUFDRTs7O0FBR0o7RUFDRTs7QUFFQTtFQUNFOzs7QUFHSjtFQUNFO0VBQ0E7O0FBRUE7RUFDRTs7O0FBR0o7RUFFRTtFQUNBOztBQUVBO0VBQ0U7O0FBR0Y7RUFDRTtFQUNBO0VBQ0E7OztBQUdKO0VBRUU7O0FBRUE7RUFDRTs7QUFFRjtFQUNFO0VBQ0E7RUFDQTs7O0FBR0o7RUFFRTs7QUFFQTtFQUNFOzs7QUFHSjtFQUVFOztBQUVBO0VBQ0U7OztBQUtKO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7O0FBRUY7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBOzs7QUFFRjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7O0FBRUY7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7OztBQUlGO0VBQ0U7OztBQUVGO0VBQ0U7OztBQUlGO0VBQ0U7OztBQUVGO0VBRUU7RUFDQTs7O0FBRUY7RUFDRSIsInNvdXJjZXNDb250ZW50IjpbIi5idXR0b24ge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBib3JkZXI6IG5vbmU7XG5cbiAgZm9udC1zdHlsZTpub3JtYWw7XG4gIGZvbnQtc2l6ZTogdmFyKC0tbHAtcHJpLWZvbnQtc2l6ZS0xNik7XG4gIGZvbnQtd2VpZ2h0OiB2YXIoLS1scC1wcmktZm9udC13ZWlnaHQtNzAwKTtcbiAgbGluZS1oZWlnaHQ6IDEzMCU7IC8vIFRPRE86IO2GoO2BsFxuICBvdmVyZmxvdzogaGlkZGVuO1xuXG4gIGN1cnNvcjogcG9pbnRlcjtcblxuICAmOmRpc2FibGVkIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1uZXV0cmFsLWNvbnRhaW5lci1taWQpO1xuICAgIGNvbG9yOiB2YXIoLS1uZXV0cmFsLWxhYmVsLXRlcnRpYXJ5KTtcbiAgICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xuICB9XG59XG5cbi8vIGFzXG4uZGVmYXVsdCB7XG4gIGNvbG9yOiB2YXIoLS1pbnZlcnNlLWxhYmVsLXN0YXRpYy1wcmltYXJ5KTtcbiAgYmFja2dyb3VuZDogdmFyKC0tbHAtcHJpLWFjaHJvbWF0aWMtd2hpdGUpOyAvLyBUT0RPOiDthqDtgbBcbiAgLy8gY29sb3I6IHZhcigtLWJyYW5kLWNvbnRhaW5lci1taWQpO1xufVxuLnRleHQge1xuICBiYWNrZ3JvdW5kOiBub25lO1xuICBjb2xvcjogdmFyKC0taW52ZXJzZS1sYWJlbC1zdGF0aWMtcHJpbWFyeSk7XG4gIGZvbnQtc2l6ZTogdmFyKC0tbHAtcHJpLWZvbnQtc2l6ZS0xMyk7IFxuICBmb250LXdlaWdodDogdmFyKC0tbHAtcHJpLWZvbnQtd2VpZ2h0LTUwMCk7XG5cbiAgJjpub3QoOmRpc2FibGVkKTpob3ZlciB7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG4gICAgdGV4dC11bmRlcmxpbmUtb2Zmc2V0OiAwLjJyZW07XG4gIH1cbn1cbi5pY29uIHtcbiAgYmFja2dyb3VuZDogbm9uZTtcbiAgXG59XG5cbi8vIERlZmF1bHRCdXR0b24gLSBsZXZlbFxuLnByaW1hcnkge1xuICBiYWNrZ3JvdW5kOiAjNDA1OEZGOyAvLyBUT0RPOiDthqDtgbAg7JeF642w7J207Yq4ICjsg4nsg4Eg64uk66aEKVxuXG4gICY6bm90KDpkaXNhYmxlZCk6aG92ZXIgeyAvLyBUT0RPOiDthqDtgbDsnLzroZwg67OA7ZmYXG4gICAgYmFja2dyb3VuZDogIzMzNDZjYztcbiAgfVxufVxuLnNlY29uZGFyeSB7XG4gIGJhY2tncm91bmQ6IHZhcigtLWludmVyc2UtY29udGFpbmVyLWhpZ2gpO1xuXG4gICY6bm90KDpkaXNhYmxlZCk6aG92ZXIgeyAvLyBUT0RPOiDthqDtgbDsnLzroZwg67OA7ZmYXG4gICAgYmFja2dyb3VuZDogIzEyMTIxMjtcbiAgfVxufVxuLnRlcnRpYXJ5IHtcbiAgYmFja2dyb3VuZDogIzZENkQ3MDE0O1xuICBjb2xvcjogdmFyKC0tbmV1dHJhbC1sYWJlbC1wcmltYXJ5KTtcblxuICAmOm5vdCg6ZGlzYWJsZWQpOmhvdmVyIHsgLy8gVE9ETzog7Yag7YGw7Jy866GcIOuzgO2ZmFxuICAgIGJhY2tncm91bmQ6ICNlYmViZWI7XG4gIH1cbn1cbi5xdWF0ZXJuYXJ5IHtcbiAgLy8gVE9ETzog7Yag7YGwIOyXheuNsOydtO2KuCBuZXV0cmFsL2JvcmRlci9vdmVybGF5L25vcm1hbFxuICBjb2xvcjogdmFyKC0tbmV1dHJhbC1sYWJlbC1wcmltYXJ5KTtcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbmV1dHJhbC1ib3JkZXItb3ZlcmxheS1ub3JtYWwpO1xuXG4gICY6bm90KDpkaXNhYmxlZCk6aG92ZXIgeyAvLyBUT0RPOiDthqDtgbDsnLzroZwg67OA7ZmYXG4gICAgYmFja2dyb3VuZDogI2Y1ZjVmNTtcbiAgfVxuXG4gICY6ZGlzYWJsZWQge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLW5ldXRyYWwtY29udGFpbmVyLW1pZCk7XG4gICAgY29sb3I6IHZhcigtLW5ldXRyYWwtbGFiZWwtdGVydGlhcnkpO1xuICAgIG9wYWNpdHk6IDAuNDtcbiAgfVxufVxuLnF1aW5hcnkge1xuICAvLyBjb2xvcjogdmFyKC0tbmV1dHJhbC1sYWJlbC1zZWNvbmRhcnkpO1xuICBjb2xvcjogIzZENkQ3MENDOyAvLyBUT0RPOiDthqDtgbAg7JeF642w7J207Yq4XG5cbiAgJjpub3QoOmRpc2FibGVkKTpob3ZlciB7IC8vIFRPRE86IO2GoO2BsOycvOuhnCDrs4DtmZhcbiAgICBiYWNrZ3JvdW5kOiAjZjVmNWY1O1xuICB9XG4gICY6ZGlzYWJsZWQge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLW5ldXRyYWwtY29udGFpbmVyLW1pZCk7XG4gICAgY29sb3I6IHZhcigtLW5ldXRyYWwtbGFiZWwtdGVydGlhcnkpO1xuICAgIG9wYWNpdHk6IDAuNDtcbiAgfVxufVxuLm5lZ2F0aXZlIHtcbiAgLy8gVE9ETzogZnVudGlvbi9jb250YWluZXIvbmVnYXRpdmVcbiAgYmFja2dyb3VuZDogdmFyKC0tZnVuY3Rpb24tbmVnYXRpdmUpO1xuXG4gICY6bm90KDpkaXNhYmxlZCk6aG92ZXIgeyAvLyBUT0RPOiDthqDtgbDsnLzroZwg67OA7ZmYXG4gICAgYmFja2dyb3VuZDogI2FmMWIxYztcbiAgfVxufVxuLmludmVyc2Uge1xuICAvLyBUT0RPOiBuZXV0cmFsL2xhYmVsL3N0YXRpYy9wcmltYXJ5XG4gIGNvbG9yOiB2YXIoLS1uZXV0cmFsLWxhYmVsLXByaW1hcnkpO1xuXG4gICY6bm90KDpkaXNhYmxlZCk6aG92ZXIgeyAvLyBUT0RPOiDthqDtgbDsnLzroZwg67OA7ZmYXG4gICAgYmFja2dyb3VuZDogI2Y1ZjVmNTtcbiAgfVxufVxuXG4vLyBzaXplXG4uY3RhIHtcbiAgYm9yZGVyLXJhZGl1czogOHB4OyAvLyBUT0RPOiDthqDtgbBcbiAgcGFkZGluZzogMTMuNXB4IDEycHg7IC8vIFRPRE86IO2GoO2BsFxuICBmb250LXNpemU6IHZhcigtLWxwLXByaS1mb250LXNpemUtMTYpO1xuICBtaW4td2lkdGg6IDEyOXB4O1xuICBtYXgtaGVpZ2h0OiA0OHB4O1xufVxuLmwge1xuICBib3JkZXItcmFkaXVzOiA2cHg7IC8vIFRPRE86IO2GoO2BsFxuICBwYWRkaW5nOiAxMC41cHggOHB4OyAvLyBUT0RPOiDthqDtgbBcbiAgZm9udC1zaXplOiB2YXIoLS1scC1wcmktZm9udC1zaXplLTE1KTtcbiAgbWluLXdpZHRoOiAxMDdweDtcbiAgbWF4LWhlaWdodDogNDBweDtcbn1cbi5tIHtcbiAgYm9yZGVyLXJhZGl1czogNnB4OyAvLyBUT0RPOiDthqDtgbBcbiAgcGFkZGluZzogN3B4IDZweDsgLy8gVE9ETzog7Yag7YGwXG4gIGZvbnQtc2l6ZTogdmFyKC0tbHAtcHJpLWZvbnQtc2l6ZS0xNCk7XG4gIGZvbnQtd2VpZ2h0OiB2YXIoLS1scC1wcmktZm9udC13ZWlnaHQtNTAwKTtcbiAgbWluLXdpZHRoOiA5MXB4O1xuICBtYXgtaGVpZ2h0OiAzMnB4O1xufVxuLnMge1xuICBib3JkZXItcmFkaXVzOiA2cHg7IC8vIFRPRE86IO2GoO2BsFxuICBwYWRkaW5nOiAzLjVweCA2cHg7IC8vIFRPRE86IO2GoO2BsFxuICBmb250LXNpemU6IHZhcigtLWxwLXByaS1mb250LXNpemUtMTMpO1xuICBmb250LXdlaWdodDogdmFyKC0tbHAtcHJpLWZvbnQtd2VpZ2h0LTUwMCk7XG4gIG1pbi13aWR0aDogODlweDtcbiAgbWF4LWhlaWdodDogMjRweDtcbn1cblxuLy8gYWxpZ25cbi5hbGlnbi1jZW50ZXIge1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbn1cbi5hbGlnbi1zcGFjZS1iZXR3ZWVuIHtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xufVxuXG4vLyBUZXh0QnV0dG9uIC0gbGV2ZWxcbi5pbnZlcnNlLXByaW1hcnkge1xuICBjb2xvcjogdmFyKC0taW52ZXJzZS1sYWJlbC1zdGF0aWMtcHJpbWFyeSk7IC8vIFRPRE86IO2GoO2BsCDsl4XrjbDsnbTtirggKOyDieyDgSDri6TrpoQpXG59XG4ubmV1dHJhbC1wcmltYXJ5IHtcbiAgLy8gY29sb3I6IHZhcigtLW5ldXRyYWwtbGFiZWwtc2Vjb25kYXJ5KTsgLy8gVE9ETzog7Yag7YGwIOyXheuNsOydtO2KuCAo7IOJ7IOBIOuLpOumhClcbiAgY29sb3I6ICM2RDZENzBDQztcbiAgb3BhY2l0eTogMC44O1xufVxuLmludmVyc2Utc3RhdGljLXByaW1hcnkge1xuICBjb2xvcjogdmFyKC0taW52ZXJzZS1sYWJlbC1zdGF0aWMtcHJpbWFyeSk7XG59Il19 */"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["clsx"]
|
|
7
7
|
}
|
package/lib/index.css
CHANGED
|
@@ -5,11 +5,10 @@
|
|
|
5
5
|
align-items: center;
|
|
6
6
|
justify-content: center;
|
|
7
7
|
border: none;
|
|
8
|
-
font-
|
|
8
|
+
font-style: normal;
|
|
9
|
+
font-size: var(--lp-pri-font-size-16);
|
|
9
10
|
font-weight: var(--lp-pri-font-weight-700);
|
|
10
11
|
line-height: 130%;
|
|
11
|
-
color: var(--inverse-label-static-primary);
|
|
12
|
-
background: var(--lp-pri-achromatic-white);
|
|
13
12
|
overflow: hidden;
|
|
14
13
|
cursor: pointer;
|
|
15
14
|
}
|
|
@@ -18,6 +17,23 @@
|
|
|
18
17
|
color: var(--neutral-label-tertiary);
|
|
19
18
|
cursor: not-allowed;
|
|
20
19
|
}
|
|
20
|
+
.default {
|
|
21
|
+
color: var(--inverse-label-static-primary);
|
|
22
|
+
background: var(--lp-pri-achromatic-white);
|
|
23
|
+
}
|
|
24
|
+
.text {
|
|
25
|
+
background: none;
|
|
26
|
+
color: var(--inverse-label-static-primary);
|
|
27
|
+
font-size: var(--lp-pri-font-size-13);
|
|
28
|
+
font-weight: var(--lp-pri-font-weight-500);
|
|
29
|
+
}
|
|
30
|
+
.text:not(:disabled):hover {
|
|
31
|
+
text-decoration: underline;
|
|
32
|
+
text-underline-offset: 0.2rem;
|
|
33
|
+
}
|
|
34
|
+
.icon {
|
|
35
|
+
background: none;
|
|
36
|
+
}
|
|
21
37
|
.primary {
|
|
22
38
|
background: #4058FF;
|
|
23
39
|
}
|
|
@@ -108,5 +124,15 @@
|
|
|
108
124
|
.align-space-between {
|
|
109
125
|
justify-content: space-between;
|
|
110
126
|
}
|
|
127
|
+
.inverse-primary {
|
|
128
|
+
color: var(--inverse-label-static-primary);
|
|
129
|
+
}
|
|
130
|
+
.neutral-primary {
|
|
131
|
+
color: rgba(109, 109, 112, 0.8);
|
|
132
|
+
opacity: 0.8;
|
|
133
|
+
}
|
|
134
|
+
.inverse-static-primary {
|
|
135
|
+
color: var(--inverse-label-static-primary);
|
|
136
|
+
}
|
|
111
137
|
/*! For license information please see index.css.LEGAL.txt */
|
|
112
138
|
/*# sourceMappingURL=index.css.map */
|
package/lib/index.css.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/components/Button/style.module.scss"],
|
|
4
|
-
"sourcesContent": ["
|
|
5
|
-
"mappings": ";
|
|
4
|
+
"sourcesContent": [".button {\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n border: none;\n\n font-style:normal;\n font-size: var(--lp-pri-font-size-16);\n font-weight: var(--lp-pri-font-weight-700);\n line-height: 130%; // TODO: 토큰\n overflow: hidden;\n\n cursor: pointer;\n\n &:disabled {\n background: var(--neutral-container-mid);\n color: var(--neutral-label-tertiary);\n cursor: not-allowed;\n }\n}\n\n// as\n.default {\n color: var(--inverse-label-static-primary);\n background: var(--lp-pri-achromatic-white); // TODO: 토큰\n // color: var(--brand-container-mid);\n}\n.text {\n background: none;\n color: var(--inverse-label-static-primary);\n font-size: var(--lp-pri-font-size-13); \n font-weight: var(--lp-pri-font-weight-500);\n\n &:not(:disabled):hover {\n text-decoration: underline;\n text-underline-offset: 0.2rem;\n }\n}\n.icon {\n background: none;\n \n}\n\n// DefaultButton - level\n.primary {\n background: #4058FF; // TODO: 토큰 업데이트 (색상 다름)\n\n &:not(:disabled):hover { // TODO: 토큰으로 변환\n background: #3346cc;\n }\n}\n.secondary {\n background: var(--inverse-container-high);\n\n &:not(:disabled):hover { // TODO: 토큰으로 변환\n background: #121212;\n }\n}\n.tertiary {\n background: #6D6D7014;\n color: var(--neutral-label-primary);\n\n &:not(:disabled):hover { // TODO: 토큰으로 변환\n background: #ebebeb;\n }\n}\n.quaternary {\n // TODO: 토큰 업데이트 neutral/border/overlay/normal\n color: var(--neutral-label-primary);\n border: 1px solid var(--neutral-border-overlay-normal);\n\n &:not(:disabled):hover { // TODO: 토큰으로 변환\n background: #f5f5f5;\n }\n\n &:disabled {\n background: var(--neutral-container-mid);\n color: var(--neutral-label-tertiary);\n opacity: 0.4;\n }\n}\n.quinary {\n // color: var(--neutral-label-secondary);\n color: #6D6D70CC; // TODO: 토큰 업데이트\n\n &:not(:disabled):hover { // TODO: 토큰으로 변환\n background: #f5f5f5;\n }\n &:disabled {\n background: var(--neutral-container-mid);\n color: var(--neutral-label-tertiary);\n opacity: 0.4;\n }\n}\n.negative {\n // TODO: funtion/container/negative\n background: var(--function-negative);\n\n &:not(:disabled):hover { // TODO: 토큰으로 변환\n background: #af1b1c;\n }\n}\n.inverse {\n // TODO: neutral/label/static/primary\n color: var(--neutral-label-primary);\n\n &:not(:disabled):hover { // TODO: 토큰으로 변환\n background: #f5f5f5;\n }\n}\n\n// size\n.cta {\n border-radius: 8px; // TODO: 토큰\n padding: 13.5px 12px; // TODO: 토큰\n font-size: var(--lp-pri-font-size-16);\n min-width: 129px;\n max-height: 48px;\n}\n.l {\n border-radius: 6px; // TODO: 토큰\n padding: 10.5px 8px; // TODO: 토큰\n font-size: var(--lp-pri-font-size-15);\n min-width: 107px;\n max-height: 40px;\n}\n.m {\n border-radius: 6px; // TODO: 토큰\n padding: 7px 6px; // TODO: 토큰\n font-size: var(--lp-pri-font-size-14);\n font-weight: var(--lp-pri-font-weight-500);\n min-width: 91px;\n max-height: 32px;\n}\n.s {\n border-radius: 6px; // TODO: 토큰\n padding: 3.5px 6px; // TODO: 토큰\n font-size: var(--lp-pri-font-size-13);\n font-weight: var(--lp-pri-font-weight-500);\n min-width: 89px;\n max-height: 24px;\n}\n\n// align\n.align-center {\n justify-content: center;\n}\n.align-space-between {\n justify-content: space-between;\n}\n\n// TextButton - level\n.inverse-primary {\n color: var(--inverse-label-static-primary); // TODO: 토큰 업데이트 (색상 다름)\n}\n.neutral-primary {\n // color: var(--neutral-label-secondary); // TODO: 토큰 업데이트 (색상 다름)\n color: #6D6D70CC;\n opacity: 0.8;\n}\n.inverse-static-primary {\n color: var(--inverse-label-static-primary);\n}"],
|
|
5
|
+
"mappings": ";AAAA,CAAA;AACE,YAAA;AACA,WAAA;AACA,eAAA;AACA,mBAAA;AACA,UAAA;AAEA,cAAA;AACA,aAAA,IAAA;AACA,eAAA,IAAA;AACA,eAAA;AACA,YAAA;AAEA,UAAA;;AAEA,CAfF,MAeE;AACE,cAAA,IAAA;AACA,SAAA,IAAA;AACA,UAAA;;AAKJ,CAAA;AACE,SAAA,IAAA;AACA,cAAA,IAAA;;AAGF,CAAA;AACE,cAAA;AACA,SAAA,IAAA;AACA,aAAA,IAAA;AACA,eAAA,IAAA;;AAEA,CANF,IAME,KAAA,UAAA;AACE,mBAAA;AACA,yBAAA;;AAGJ,CAAA;AACE,cAAA;;AAKF,CAAA;AACE,cAAA;;AAEA,CAHF,OAGE,KAAA,UAAA;AACE,cAAA;;AAGJ,CAAA;AACE,cAAA,IAAA;;AAEA,CAHF,SAGE,KAAA,UAAA;AACE,cAAA;;AAGJ,CAAA;AACE,cAAA,KAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA;AACA,SAAA,IAAA;;AAEA,CAJF,QAIE,KAAA,UAAA;AACE,cAAA;;AAGJ,CAAA;AAEE,SAAA,IAAA;AACA,UAAA,IAAA,MAAA,IAAA;;AAEA,CALF,UAKE,KAAA,UAAA;AACE,cAAA;;AAGF,CATF,UASE;AACE,cAAA,IAAA;AACA,SAAA,IAAA;AACA,WAAA;;AAGJ,CAAA;AAEE,SAAA,KAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA;;AAEA,CAJF,OAIE,KAAA,UAAA;AACE,cAAA;;AAEF,CAPF,OAOE;AACE,cAAA,IAAA;AACA,SAAA,IAAA;AACA,WAAA;;AAGJ,CAAA;AAEE,cAAA,IAAA;;AAEA,CAJF,QAIE,KAAA,UAAA;AACE,cAAA;;AAGJ,CAAA;AAEE,SAAA,IAAA;;AAEA,CAJF,OAIE,KAAA,UAAA;AACE,cAAA;;AAKJ,CAAA;AACE,iBAAA;AACA,WAAA,OAAA;AACA,aAAA,IAAA;AACA,aAAA;AACA,cAAA;;AAEF,CAAA;AACE,iBAAA;AACA,WAAA,OAAA;AACA,aAAA,IAAA;AACA,aAAA;AACA,cAAA;;AAEF,CAAA;AACE,iBAAA;AACA,WAAA,IAAA;AACA,aAAA,IAAA;AACA,eAAA,IAAA;AACA,aAAA;AACA,cAAA;;AAEF,CAAA;AACE,iBAAA;AACA,WAAA,MAAA;AACA,aAAA,IAAA;AACA,eAAA,IAAA;AACA,aAAA;AACA,cAAA;;AAIF,CAAA;AACE,mBAAA;;AAEF,CAAA;AACE,mBAAA;;AAIF,CAAA;AACE,SAAA,IAAA;;AAEF,CAAA;AAEE,SAAA,KAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA;AACA,WAAA;;AAEF,CAAA;AACE,SAAA,IAAA;;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/lib/index.mjs
CHANGED
|
@@ -16,7 +16,7 @@ var style_module_default = {};
|
|
|
16
16
|
import { cva } from "class-variance-authority";
|
|
17
17
|
import { Slot } from "@radix-ui/react-slot";
|
|
18
18
|
import clsx from "clsx";
|
|
19
|
-
var
|
|
19
|
+
var defaultButtonVariants = cva([style_module_default.button, style_module_default.default], {
|
|
20
20
|
variants: {
|
|
21
21
|
level: {
|
|
22
22
|
primary: style_module_default.primary,
|
|
@@ -39,16 +39,66 @@ var buttonVariants = cva(style_module_default.button, {
|
|
|
39
39
|
}
|
|
40
40
|
}
|
|
41
41
|
});
|
|
42
|
-
var
|
|
43
|
-
|
|
42
|
+
var textButtonVariants = cva([style_module_default.button, style_module_default.text], {
|
|
43
|
+
variants: {
|
|
44
|
+
level: {
|
|
45
|
+
inversePrimary: style_module_default["inverse-primary"],
|
|
46
|
+
neutralPrimary: style_module_default["neutral-primary"],
|
|
47
|
+
inverseStaticPrimary: style_module_default["inverse-static-primary"]
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
var iconButtonVariants = cva([style_module_default.button, style_module_default.icon], {
|
|
52
|
+
variants: {
|
|
53
|
+
level: {
|
|
54
|
+
primary: style_module_default.primary,
|
|
55
|
+
secondary: style_module_default.secondary,
|
|
56
|
+
tertiary: style_module_default.tertiary,
|
|
57
|
+
quaternary: style_module_default.quaternary,
|
|
58
|
+
quinary: style_module_default.quinary,
|
|
59
|
+
negative: style_module_default.negative
|
|
60
|
+
},
|
|
61
|
+
weight: {
|
|
62
|
+
//
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
var DefaultButton = forwardRef(
|
|
67
|
+
({ as = "default", asChild = false, level = "primary", align = "center", size = "cta", ...rest }, ref) => {
|
|
68
|
+
const Comp = asChild ? Slot : "button";
|
|
69
|
+
return <Comp {...rest} className={clsx(defaultButtonVariants({ level, align, size }))} ref={ref} />;
|
|
70
|
+
}
|
|
71
|
+
);
|
|
72
|
+
var TextButton = forwardRef(
|
|
73
|
+
({ as = "text", asChild = false, level = "inversePrimary", ...rest }, ref) => {
|
|
44
74
|
const Comp = asChild ? Slot : "button";
|
|
45
|
-
return <Comp className={clsx(
|
|
75
|
+
return <Comp {...rest} className={clsx(textButtonVariants({ level }))} ref={ref} />;
|
|
76
|
+
}
|
|
77
|
+
);
|
|
78
|
+
var IconButton = forwardRef(
|
|
79
|
+
(props, ref) => {
|
|
80
|
+
const Comp = props.asChild ? Slot : "button";
|
|
81
|
+
return <Comp {...props} className={clsx(iconButtonVariants({ level: props.level }))} ref={ref} />;
|
|
82
|
+
}
|
|
83
|
+
);
|
|
84
|
+
var Button = forwardRef(
|
|
85
|
+
(props, ref) => {
|
|
86
|
+
const Comp = props.asChild ? Slot : "button";
|
|
87
|
+
switch (props.as) {
|
|
88
|
+
case "default":
|
|
89
|
+
const { level = "primary", align = "center", size = "cta" } = props;
|
|
90
|
+
return <Comp {...props} className={clsx(defaultButtonVariants({ level, align, size }))} ref={ref} />;
|
|
91
|
+
case "text":
|
|
92
|
+
const { level: textLevel = "inversePrimary" } = props;
|
|
93
|
+
return <Comp {...props} className={clsx(textButtonVariants({ level: textLevel }))} ref={ref} />;
|
|
94
|
+
}
|
|
46
95
|
}
|
|
47
96
|
);
|
|
48
|
-
var Component = /* @__PURE__ */ __name(() => <div>TEST</div>, "Component");
|
|
49
97
|
export {
|
|
50
98
|
Button,
|
|
51
|
-
|
|
99
|
+
DefaultButton,
|
|
100
|
+
IconButton,
|
|
101
|
+
TextButton,
|
|
52
102
|
objectToArray
|
|
53
103
|
};
|
|
54
104
|
/*! For license information please see index.mjs.LEGAL.txt */
|
package/lib/index.mjs.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/utils/object.ts", "../src/components/Button/index.tsx", "../src/components/Button/style.module.scss"],
|
|
4
|
-
"sourcesContent": ["export const objectToArray = <T extends Record<string, any>>(obj: T) => {\n return Object.entries(obj);\n};\n", "import { ButtonHTMLAttributes, forwardRef } from 'react';\nimport style from './style.module.scss';\nimport { VariantProps, cva } from 'class-variance-authority';\nimport { Slot } from '@radix-ui/react-slot';\nimport clsx from 'clsx';\n\nconst buttonVariants = cva(style.button, {\n variants: {\n level: {\n primary: style.primary,\n secondary: style.secondary,\n tertiary: style.tertiary,\n quaternary: style.quaternary,\n quinary: style.quinary,\n negative: style.negative,\n inverse: style.inverse,\n },\n align: {\n center: style['align-center'],\n spaceBetween: style['align-space-between'],\n },\n size: {\n cta: style.cta,\n l: style.l,\n m: style.m,\n s: style.s,\n },\n },\n});\n\nexport interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof buttonVariants> {\n asChild?: boolean;\n align?: 'center' | 'spaceBetween';\n level?: 'primary' | 'secondary' | 'tertiary' | 'quaternary' | 'quinary' | 'negative' | 'inverse';\n size?: 'cta' | 'l' | 'm' | 's';\n // isLoading?: boolean;\n // leftIcon?: ReactNode;\n // rightIcon?: ReactNode;\n}\n\n/**\n * \uBC84\uD2BC \uCEF4\uD3EC\uB10C\uD2B8\n */\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(\n ({ asChild, level = 'primary', align = 'center', size = 'cta', ...props }, ref) => {\n const Comp = asChild ? Slot : 'button';\n\n return <Comp className={clsx(buttonVariants({ level, align, size }))} ref={ref} {...props} />;\n }\n);\n\nexport const Component = () => <div>TEST</div>;\n", ".button {\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n border: none;\n font-size: normal;\n font-weight: var(--lp-pri-font-weight-700);\n line-height: 130%;\n color: var(--inverse-label-static-primary);\n background: var(--lp-pri-achromatic-white);\n overflow: hidden;\n cursor: pointer;\n}\n.button:disabled {\n background: var(--neutral-container-mid);\n color: var(--neutral-label-tertiary);\n cursor: not-allowed;\n}\n\n.primary {\n background: #4058FF;\n}\n.primary:not(:disabled):hover {\n background: #3346cc;\n}\n\n.secondary {\n background: var(--inverse-container-high);\n}\n.secondary:not(:disabled):hover {\n background: #121212;\n}\n\n.tertiary {\n background: rgba(109, 109, 112, 0.0784313725);\n color: var(--neutral-label-primary);\n}\n.tertiary:not(:disabled):hover {\n background: #ebebeb;\n}\n\n.quaternary {\n color: var(--neutral-label-primary);\n border: 1px solid var(--neutral-border-overlay-normal);\n}\n.quaternary:not(:disabled):hover {\n background: #f5f5f5;\n}\n.quaternary:disabled {\n background: var(--neutral-container-mid);\n color: var(--neutral-label-tertiary);\n opacity: 0.4;\n}\n\n.quinary {\n color: rgba(109, 109, 112, 0.8);\n}\n.quinary:not(:disabled):hover {\n background: #f5f5f5;\n}\n.quinary:disabled {\n background: var(--neutral-container-mid);\n color: var(--neutral-label-tertiary);\n opacity: 0.4;\n}\n\n.negative {\n background: var(--function-negative);\n}\n.negative:not(:disabled):hover {\n background: #af1b1c;\n}\n\n.inverse {\n color: var(--neutral-label-primary);\n}\n.inverse:not(:disabled):hover {\n background: #f5f5f5;\n}\n\n.cta {\n border-radius: 8px;\n padding: 13.5px 12px;\n font-size: var(--lp-pri-font-size-16);\n min-width: 129px;\n max-height: 48px;\n}\n\n.l {\n border-radius: 6px;\n padding: 10.5px 8px;\n font-size: var(--lp-pri-font-size-15);\n min-width: 107px;\n max-height: 40px;\n}\n\n.m {\n border-radius: 6px;\n padding: 7px 6px;\n font-size: var(--lp-pri-font-size-14);\n font-weight: var(--lp-pri-font-weight-500);\n min-width: 91px;\n max-height: 32px;\n}\n\n.s {\n border-radius: 6px;\n padding: 3.5px 6px;\n font-size: var(--lp-pri-font-size-13);\n font-weight: var(--lp-pri-font-weight-500);\n min-width: 89px;\n max-height: 24px;\n}\n\n.align-center {\n justify-content: center;\n}\n\n.align-space-between {\n justify-content: space-between;\n}\n/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VSb290IjoiL2hvbWUvcnVubmVyL3dvcmsvZnJvbnRlbmQtcGFja2FnZXMvZnJvbnRlbmQtcGFja2FnZXMvcGFja2FnZXMvbGluZXItcHJpc20vc3JjL2NvbXBvbmVudHMvQnV0dG9uIiwic291cmNlcyI6WyJzdHlsZS5tb2R1bGUuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQTtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFFQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFFQTs7QUFHQTtFQUNFO0VBQ0E7RUFDQTs7O0FBS0o7RUFDRTs7QUFFQTtFQUNFOzs7QUFHSjtFQUNFOztBQUVBO0VBQ0U7OztBQUdKO0VBQ0U7RUFDQTs7QUFFQTtFQUNFOzs7QUFHSjtFQUVFO0VBQ0E7O0FBRUE7RUFDRTs7QUFHRjtFQUNFO0VBQ0E7RUFDQTs7O0FBR0o7RUFFRTs7QUFFQTtFQUNFOztBQUVGO0VBQ0U7RUFDQTtFQUNBOzs7QUFHSjtFQUVFOztBQUVBO0VBQ0U7OztBQUdKO0VBRUU7O0FBRUE7RUFDRTs7O0FBS0o7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBOzs7QUFFRjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7OztBQUVGO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOzs7QUFFRjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7O0FBSUY7RUFDRTs7O0FBRUY7RUFDRSIsInNvdXJjZXNDb250ZW50IjpbIi8vIEBpbXBvcnQgXCIuLi8uLi8uLi8uLi9kZXNpZ24tdG9rZW4vZ2xvYmFsLmNzc1wiO1xuLy8gQHVzZSBcIi4uLy4uLy4uLy4uL2Rlc2lnbi10b2tlbi9nbG9iYWwuY3NzXCIgYXMgKjtcblxuLmJ1dHRvbiB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGJvcmRlcjogbm9uZTtcblxuICBmb250LXNpemU6IG5vcm1hbDtcbiAgZm9udC13ZWlnaHQ6IHZhcigtLWxwLXByaS1mb250LXdlaWdodC03MDApO1xuICBsaW5lLWhlaWdodDogMTMwJTsgLy8gVE9ETzog7Yag7YGwXG4gIGNvbG9yOiB2YXIoLS1pbnZlcnNlLWxhYmVsLXN0YXRpYy1wcmltYXJ5KTtcbiAgYmFja2dyb3VuZDogdmFyKC0tbHAtcHJpLWFjaHJvbWF0aWMtd2hpdGUpOyAvLyBUT0RPOiDthqDtgbBcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcblxuICBjdXJzb3I6IHBvaW50ZXI7XG4gIC8vIGNvbG9yOiB2YXIoLS1icmFuZC1jb250YWluZXItbWlkKTtcblxuICAmOmRpc2FibGVkIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1uZXV0cmFsLWNvbnRhaW5lci1taWQpO1xuICAgIGNvbG9yOiB2YXIoLS1uZXV0cmFsLWxhYmVsLXRlcnRpYXJ5KTtcbiAgICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xuICB9XG59XG5cbi8vIGxldmVsXG4ucHJpbWFyeSB7XG4gIGJhY2tncm91bmQ6ICM0MDU4RkY7IC8vIFRPRE86IO2GoO2BsCDsl4XrjbDsnbTtirggKOyDieyDgSDri6TrpoQpXG5cbiAgJjpub3QoOmRpc2FibGVkKTpob3ZlciB7IC8vIFRPRE86IO2GoO2BsOycvOuhnCDrs4DtmZhcbiAgICBiYWNrZ3JvdW5kOiAjMzM0NmNjO1xuICB9XG59XG4uc2Vjb25kYXJ5IHtcbiAgYmFja2dyb3VuZDogdmFyKC0taW52ZXJzZS1jb250YWluZXItaGlnaCk7XG5cbiAgJjpub3QoOmRpc2FibGVkKTpob3ZlciB7IC8vIFRPRE86IO2GoO2BsOycvOuhnCDrs4DtmZhcbiAgICBiYWNrZ3JvdW5kOiAjMTIxMjEyO1xuICB9XG59XG4udGVydGlhcnkge1xuICBiYWNrZ3JvdW5kOiAjNkQ2RDcwMTQ7XG4gIGNvbG9yOiB2YXIoLS1uZXV0cmFsLWxhYmVsLXByaW1hcnkpO1xuXG4gICY6bm90KDpkaXNhYmxlZCk6aG92ZXIgeyAvLyBUT0RPOiDthqDtgbDsnLzroZwg67OA7ZmYXG4gICAgYmFja2dyb3VuZDogI2ViZWJlYjtcbiAgfVxufVxuLnF1YXRlcm5hcnkge1xuICAvLyBUT0RPOiDthqDtgbAg7JeF642w7J207Yq4IG5ldXRyYWwvYm9yZGVyL292ZXJsYXkvbm9ybWFsXG4gIGNvbG9yOiB2YXIoLS1uZXV0cmFsLWxhYmVsLXByaW1hcnkpO1xuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1uZXV0cmFsLWJvcmRlci1vdmVybGF5LW5vcm1hbCk7XG5cbiAgJjpub3QoOmRpc2FibGVkKTpob3ZlciB7IC8vIFRPRE86IO2GoO2BsOycvOuhnCDrs4DtmZhcbiAgICBiYWNrZ3JvdW5kOiAjZjVmNWY1O1xuICB9XG5cbiAgJjpkaXNhYmxlZCB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tbmV1dHJhbC1jb250YWluZXItbWlkKTtcbiAgICBjb2xvcjogdmFyKC0tbmV1dHJhbC1sYWJlbC10ZXJ0aWFyeSk7XG4gICAgb3BhY2l0eTogMC40O1xuICB9XG59XG4ucXVpbmFyeSB7XG4gIC8vIGNvbG9yOiB2YXIoLS1uZXV0cmFsLWxhYmVsLXNlY29uZGFyeSk7XG4gIGNvbG9yOiAjNkQ2RDcwQ0M7IC8vIFRPRE86IO2GoO2BsCDsl4XrjbDsnbTtirhcblxuICAmOm5vdCg6ZGlzYWJsZWQpOmhvdmVyIHsgLy8gVE9ETzog7Yag7YGw7Jy866GcIOuzgO2ZmFxuICAgIGJhY2tncm91bmQ6ICNmNWY1ZjU7XG4gIH1cbiAgJjpkaXNhYmxlZCB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tbmV1dHJhbC1jb250YWluZXItbWlkKTtcbiAgICBjb2xvcjogdmFyKC0tbmV1dHJhbC1sYWJlbC10ZXJ0aWFyeSk7XG4gICAgb3BhY2l0eTogMC40O1xuICB9XG59XG4ubmVnYXRpdmUge1xuICAvLyBUT0RPOiBmdW50aW9uL2NvbnRhaW5lci9uZWdhdGl2ZVxuICBiYWNrZ3JvdW5kOiB2YXIoLS1mdW5jdGlvbi1uZWdhdGl2ZSk7XG5cbiAgJjpub3QoOmRpc2FibGVkKTpob3ZlciB7IC8vIFRPRE86IO2GoO2BsOycvOuhnCDrs4DtmZhcbiAgICBiYWNrZ3JvdW5kOiAjYWYxYjFjO1xuICB9XG59XG4uaW52ZXJzZSB7XG4gIC8vIFRPRE86IG5ldXRyYWwvbGFiZWwvc3RhdGljL3ByaW1hcnlcbiAgY29sb3I6IHZhcigtLW5ldXRyYWwtbGFiZWwtcHJpbWFyeSk7XG5cbiAgJjpub3QoOmRpc2FibGVkKTpob3ZlciB7IC8vIFRPRE86IO2GoO2BsOycvOuhnCDrs4DtmZhcbiAgICBiYWNrZ3JvdW5kOiAjZjVmNWY1O1xuICB9XG59XG5cbi8vIHNpemVcbi5jdGEge1xuICBib3JkZXItcmFkaXVzOiA4cHg7IC8vIFRPRE86IO2GoO2BsFxuICBwYWRkaW5nOiAxMy41cHggMTJweDsgLy8gVE9ETzog7Yag7YGwXG4gIGZvbnQtc2l6ZTogdmFyKC0tbHAtcHJpLWZvbnQtc2l6ZS0xNik7XG4gIG1pbi13aWR0aDogMTI5cHg7XG4gIG1heC1oZWlnaHQ6IDQ4cHg7XG59XG4ubCB7XG4gIGJvcmRlci1yYWRpdXM6IDZweDsgLy8gVE9ETzog7Yag7YGwXG4gIHBhZGRpbmc6IDEwLjVweCA4cHg7IC8vIFRPRE86IO2GoO2BsFxuICBmb250LXNpemU6IHZhcigtLWxwLXByaS1mb250LXNpemUtMTUpO1xuICBtaW4td2lkdGg6IDEwN3B4O1xuICBtYXgtaGVpZ2h0OiA0MHB4O1xufVxuLm0ge1xuICBib3JkZXItcmFkaXVzOiA2cHg7IC8vIFRPRE86IO2GoO2BsFxuICBwYWRkaW5nOiA3cHggNnB4OyAvLyBUT0RPOiDthqDtgbBcbiAgZm9udC1zaXplOiB2YXIoLS1scC1wcmktZm9udC1zaXplLTE0KTtcbiAgZm9udC13ZWlnaHQ6IHZhcigtLWxwLXByaS1mb250LXdlaWdodC01MDApO1xuICBtaW4td2lkdGg6IDkxcHg7XG4gIG1heC1oZWlnaHQ6IDMycHg7XG59XG4ucyB7XG4gIGJvcmRlci1yYWRpdXM6IDZweDsgLy8gVE9ETzog7Yag7YGwXG4gIHBhZGRpbmc6IDMuNXB4IDZweDsgLy8gVE9ETzog7Yag7YGwXG4gIGZvbnQtc2l6ZTogdmFyKC0tbHAtcHJpLWZvbnQtc2l6ZS0xMyk7XG4gIGZvbnQtd2VpZ2h0OiB2YXIoLS1scC1wcmktZm9udC13ZWlnaHQtNTAwKTtcbiAgbWluLXdpZHRoOiA4OXB4O1xuICBtYXgtaGVpZ2h0OiAyNHB4O1xufVxuXG4vLyBhbGlnblxuLmFsaWduLWNlbnRlciB7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xufVxuLmFsaWduLXNwYWNlLWJldHdlZW4ge1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG59XG4iXX0= */"],
|
|
5
|
-
"mappings": ";;;;AAAO,IAAM,gBAAgB,wBAAgC,QAAW;AACtE,SAAO,OAAO,QAAQ,GAAG;AAC3B,GAF6B;;;ACA7B,SAA+B,kBAAkB;;;ACAjD;;;ADEA,SAAuB,WAAW;AAClC,SAAS,YAAY;AACrB,OAAO,UAAU;AAEjB,IAAM,
|
|
4
|
+
"sourcesContent": ["export const objectToArray = <T extends Record<string, any>>(obj: T) => {\n return Object.entries(obj);\n};\n", "import { ButtonHTMLAttributes, forwardRef } from 'react';\nimport style from './style.module.scss';\nimport { VariantProps, cva } from 'class-variance-authority';\nimport { Slot } from '@radix-ui/react-slot';\nimport clsx from 'clsx';\n\nconst defaultButtonVariants = cva([style.button,style.default], {\n variants: {\n level: {\n primary: style.primary,\n secondary: style.secondary,\n tertiary: style.tertiary,\n quaternary: style.quaternary,\n quinary: style.quinary,\n negative: style.negative,\n inverse: style.inverse,\n },\n align: {\n center: style['align-center'],\n spaceBetween: style['align-space-between'],\n },\n size: {\n cta: style.cta,\n l: style.l,\n m: style.m,\n s: style.s,\n },\n },\n});\nconst textButtonVariants = cva([style.button,style.text], {\n variants: {\n level: {\n inversePrimary: style['inverse-primary'],\n neutralPrimary: style['neutral-primary'],\n inverseStaticPrimary: style['inverse-static-primary'],\n },\n },\n});\nconst iconButtonVariants = cva([style.button,style.icon], {\n variants: {\n level: {\n primary: style.primary,\n secondary: style.secondary,\n tertiary: style.tertiary,\n quaternary: style.quaternary,\n quinary: style.quinary,\n negative: style.negative,\n },\n weight: {\n // \n },\n },\n});\n\nconst getButtonVariant = (props: ButtonProps) => {\n switch (props.as) {\n case 'default':\n const {level=\"primary\", align=\"center\", size=\"cta\"} = props;\n return defaultButtonVariants({ level, align, size });\n case 'text':\n return textButtonVariants({ level: props.level });\n case 'icon':\n return iconButtonVariants({ level: props.level });\n }\n}\n\ninterface CommonButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n as?: 'default' | 'text' | 'icon';\n asChild?: boolean;\n}\nexport interface DefaultButtonProps extends CommonButtonProps, VariantProps<typeof defaultButtonVariants> {\n as?: 'default';\n asChild?: boolean;\n level?: 'primary' | 'secondary' | 'tertiary' | 'quaternary' | 'quinary' | 'negative' | 'inverse';\n size?: 'cta' | 'l' | 'm' | 's';\n align?: 'center' | 'spaceBetween';\n // isLoading?: boolean;\n // leftIcon?: ReactNode;\n // rightIcon?: ReactNode; \n}\nexport interface TextButtonProps extends CommonButtonProps, VariantProps<typeof textButtonVariants> {\n as?: 'text';\n asChild?: boolean;\n level?: 'inversePrimary' | 'neutralPrimary' | 'inverseStaticPrimary' \n}\nexport interface IconButtonProps extends CommonButtonProps, VariantProps<typeof iconButtonVariants> {\n as?: 'icon';\n asChild?: boolean;\n // weight\n}\nexport type ButtonProps = DefaultButtonProps | TextButtonProps | IconButtonProps;\n\n/**\n * \uBC84\uD2BC \uCEF4\uD3EC\uB10C\uD2B8\n */\n\nexport const DefaultButton = forwardRef<HTMLButtonElement, DefaultButtonProps>(\n ({as = 'default',asChild = false, level = 'primary', align = 'center', size= 'cta', ...rest}, ref) => {\n const Comp = asChild ? Slot : 'button';\n\n return <Comp {...rest} className={clsx(defaultButtonVariants({ level, align, size }))} ref={ref} />;\n }\n);\n\nexport const TextButton = forwardRef<HTMLButtonElement, TextButtonProps>(\n ({as = 'text',asChild = false, level = 'inversePrimary', ...rest}, ref) => {\n const Comp = asChild ? Slot : 'button';\n\n return <Comp {...rest} className={clsx(textButtonVariants({ level }))} ref={ref} />;\n }\n);\n\nexport const IconButton = forwardRef<HTMLButtonElement, IconButtonProps>(\n (props, ref) => {\n const Comp = props.asChild ? Slot : 'button';\n\n return <Comp {...props} className={clsx(iconButtonVariants({ level: props.level }))} ref={ref} />;\n }\n);\n\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(\n (props, ref) => {\n const Comp = props.asChild ? Slot : 'button';\n\n switch (props.as){\n case 'default':\n const {level=\"primary\", align=\"center\", size=\"cta\"} = props;\n return <Comp {...props} className={clsx(defaultButtonVariants({ level, align, size }))} ref={ref} />;\n case 'text':\n const {level:textLevel = 'inversePrimary'} = props;\n return <Comp {...props} className={clsx(textButtonVariants({ level: textLevel }))} ref={ref} />;\n // case 'icon':\n // return <Comp {...props} className={clsx(iconButtonVariants({ level: props.level }))} ref={ref} />;\n }\n }\n);\n", ".button {\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n border: none;\n font-style: normal;\n font-size: var(--lp-pri-font-size-16);\n font-weight: var(--lp-pri-font-weight-700);\n line-height: 130%;\n overflow: hidden;\n cursor: pointer;\n}\n.button:disabled {\n background: var(--neutral-container-mid);\n color: var(--neutral-label-tertiary);\n cursor: not-allowed;\n}\n\n.default {\n color: var(--inverse-label-static-primary);\n background: var(--lp-pri-achromatic-white);\n}\n\n.text {\n background: none;\n color: var(--inverse-label-static-primary);\n font-size: var(--lp-pri-font-size-13);\n font-weight: var(--lp-pri-font-weight-500);\n}\n.text:not(:disabled):hover {\n text-decoration: underline;\n text-underline-offset: 0.2rem;\n}\n\n.icon {\n background: none;\n}\n\n.primary {\n background: #4058FF;\n}\n.primary:not(:disabled):hover {\n background: #3346cc;\n}\n\n.secondary {\n background: var(--inverse-container-high);\n}\n.secondary:not(:disabled):hover {\n background: #121212;\n}\n\n.tertiary {\n background: rgba(109, 109, 112, 0.0784313725);\n color: var(--neutral-label-primary);\n}\n.tertiary:not(:disabled):hover {\n background: #ebebeb;\n}\n\n.quaternary {\n color: var(--neutral-label-primary);\n border: 1px solid var(--neutral-border-overlay-normal);\n}\n.quaternary:not(:disabled):hover {\n background: #f5f5f5;\n}\n.quaternary:disabled {\n background: var(--neutral-container-mid);\n color: var(--neutral-label-tertiary);\n opacity: 0.4;\n}\n\n.quinary {\n color: rgba(109, 109, 112, 0.8);\n}\n.quinary:not(:disabled):hover {\n background: #f5f5f5;\n}\n.quinary:disabled {\n background: var(--neutral-container-mid);\n color: var(--neutral-label-tertiary);\n opacity: 0.4;\n}\n\n.negative {\n background: var(--function-negative);\n}\n.negative:not(:disabled):hover {\n background: #af1b1c;\n}\n\n.inverse {\n color: var(--neutral-label-primary);\n}\n.inverse:not(:disabled):hover {\n background: #f5f5f5;\n}\n\n.cta {\n border-radius: 8px;\n padding: 13.5px 12px;\n font-size: var(--lp-pri-font-size-16);\n min-width: 129px;\n max-height: 48px;\n}\n\n.l {\n border-radius: 6px;\n padding: 10.5px 8px;\n font-size: var(--lp-pri-font-size-15);\n min-width: 107px;\n max-height: 40px;\n}\n\n.m {\n border-radius: 6px;\n padding: 7px 6px;\n font-size: var(--lp-pri-font-size-14);\n font-weight: var(--lp-pri-font-weight-500);\n min-width: 91px;\n max-height: 32px;\n}\n\n.s {\n border-radius: 6px;\n padding: 3.5px 6px;\n font-size: var(--lp-pri-font-size-13);\n font-weight: var(--lp-pri-font-weight-500);\n min-width: 89px;\n max-height: 24px;\n}\n\n.align-center {\n justify-content: center;\n}\n\n.align-space-between {\n justify-content: space-between;\n}\n\n.inverse-primary {\n color: var(--inverse-label-static-primary);\n}\n\n.neutral-primary {\n color: rgba(109, 109, 112, 0.8);\n opacity: 0.8;\n}\n\n.inverse-static-primary {\n color: var(--inverse-label-static-primary);\n}\n/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VSb290IjoiL2hvbWUvcnVubmVyL3dvcmsvZnJvbnRlbmQtcGFja2FnZXMvZnJvbnRlbmQtcGFja2FnZXMvcGFja2FnZXMvbGluZXItcHJpc20vc3JjL2NvbXBvbmVudHMvQnV0dG9uIiwic291cmNlcyI6WyJzdHlsZS5tb2R1bGUuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFFQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBRUE7O0FBRUE7RUFDRTtFQUNBO0VBQ0E7OztBQUtKO0VBQ0U7RUFDQTs7O0FBR0Y7RUFDRTtFQUNBO0VBQ0E7RUFDQTs7QUFFQTtFQUNFO0VBQ0E7OztBQUdKO0VBQ0U7OztBQUtGO0VBQ0U7O0FBRUE7RUFDRTs7O0FBR0o7RUFDRTs7QUFFQTtFQUNFOzs7QUFHSjtFQUNFO0VBQ0E7O0FBRUE7RUFDRTs7O0FBR0o7RUFFRTtFQUNBOztBQUVBO0VBQ0U7O0FBR0Y7RUFDRTtFQUNBO0VBQ0E7OztBQUdKO0VBRUU7O0FBRUE7RUFDRTs7QUFFRjtFQUNFO0VBQ0E7RUFDQTs7O0FBR0o7RUFFRTs7QUFFQTtFQUNFOzs7QUFHSjtFQUVFOztBQUVBO0VBQ0U7OztBQUtKO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7O0FBRUY7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBOzs7QUFFRjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7O0FBRUY7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7OztBQUlGO0VBQ0U7OztBQUVGO0VBQ0U7OztBQUlGO0VBQ0U7OztBQUVGO0VBRUU7RUFDQTs7O0FBRUY7RUFDRSIsInNvdXJjZXNDb250ZW50IjpbIi5idXR0b24ge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBib3JkZXI6IG5vbmU7XG5cbiAgZm9udC1zdHlsZTpub3JtYWw7XG4gIGZvbnQtc2l6ZTogdmFyKC0tbHAtcHJpLWZvbnQtc2l6ZS0xNik7XG4gIGZvbnQtd2VpZ2h0OiB2YXIoLS1scC1wcmktZm9udC13ZWlnaHQtNzAwKTtcbiAgbGluZS1oZWlnaHQ6IDEzMCU7IC8vIFRPRE86IO2GoO2BsFxuICBvdmVyZmxvdzogaGlkZGVuO1xuXG4gIGN1cnNvcjogcG9pbnRlcjtcblxuICAmOmRpc2FibGVkIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1uZXV0cmFsLWNvbnRhaW5lci1taWQpO1xuICAgIGNvbG9yOiB2YXIoLS1uZXV0cmFsLWxhYmVsLXRlcnRpYXJ5KTtcbiAgICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xuICB9XG59XG5cbi8vIGFzXG4uZGVmYXVsdCB7XG4gIGNvbG9yOiB2YXIoLS1pbnZlcnNlLWxhYmVsLXN0YXRpYy1wcmltYXJ5KTtcbiAgYmFja2dyb3VuZDogdmFyKC0tbHAtcHJpLWFjaHJvbWF0aWMtd2hpdGUpOyAvLyBUT0RPOiDthqDtgbBcbiAgLy8gY29sb3I6IHZhcigtLWJyYW5kLWNvbnRhaW5lci1taWQpO1xufVxuLnRleHQge1xuICBiYWNrZ3JvdW5kOiBub25lO1xuICBjb2xvcjogdmFyKC0taW52ZXJzZS1sYWJlbC1zdGF0aWMtcHJpbWFyeSk7XG4gIGZvbnQtc2l6ZTogdmFyKC0tbHAtcHJpLWZvbnQtc2l6ZS0xMyk7IFxuICBmb250LXdlaWdodDogdmFyKC0tbHAtcHJpLWZvbnQtd2VpZ2h0LTUwMCk7XG5cbiAgJjpub3QoOmRpc2FibGVkKTpob3ZlciB7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG4gICAgdGV4dC11bmRlcmxpbmUtb2Zmc2V0OiAwLjJyZW07XG4gIH1cbn1cbi5pY29uIHtcbiAgYmFja2dyb3VuZDogbm9uZTtcbiAgXG59XG5cbi8vIERlZmF1bHRCdXR0b24gLSBsZXZlbFxuLnByaW1hcnkge1xuICBiYWNrZ3JvdW5kOiAjNDA1OEZGOyAvLyBUT0RPOiDthqDtgbAg7JeF642w7J207Yq4ICjsg4nsg4Eg64uk66aEKVxuXG4gICY6bm90KDpkaXNhYmxlZCk6aG92ZXIgeyAvLyBUT0RPOiDthqDtgbDsnLzroZwg67OA7ZmYXG4gICAgYmFja2dyb3VuZDogIzMzNDZjYztcbiAgfVxufVxuLnNlY29uZGFyeSB7XG4gIGJhY2tncm91bmQ6IHZhcigtLWludmVyc2UtY29udGFpbmVyLWhpZ2gpO1xuXG4gICY6bm90KDpkaXNhYmxlZCk6aG92ZXIgeyAvLyBUT0RPOiDthqDtgbDsnLzroZwg67OA7ZmYXG4gICAgYmFja2dyb3VuZDogIzEyMTIxMjtcbiAgfVxufVxuLnRlcnRpYXJ5IHtcbiAgYmFja2dyb3VuZDogIzZENkQ3MDE0O1xuICBjb2xvcjogdmFyKC0tbmV1dHJhbC1sYWJlbC1wcmltYXJ5KTtcblxuICAmOm5vdCg6ZGlzYWJsZWQpOmhvdmVyIHsgLy8gVE9ETzog7Yag7YGw7Jy866GcIOuzgO2ZmFxuICAgIGJhY2tncm91bmQ6ICNlYmViZWI7XG4gIH1cbn1cbi5xdWF0ZXJuYXJ5IHtcbiAgLy8gVE9ETzog7Yag7YGwIOyXheuNsOydtO2KuCBuZXV0cmFsL2JvcmRlci9vdmVybGF5L25vcm1hbFxuICBjb2xvcjogdmFyKC0tbmV1dHJhbC1sYWJlbC1wcmltYXJ5KTtcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbmV1dHJhbC1ib3JkZXItb3ZlcmxheS1ub3JtYWwpO1xuXG4gICY6bm90KDpkaXNhYmxlZCk6aG92ZXIgeyAvLyBUT0RPOiDthqDtgbDsnLzroZwg67OA7ZmYXG4gICAgYmFja2dyb3VuZDogI2Y1ZjVmNTtcbiAgfVxuXG4gICY6ZGlzYWJsZWQge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLW5ldXRyYWwtY29udGFpbmVyLW1pZCk7XG4gICAgY29sb3I6IHZhcigtLW5ldXRyYWwtbGFiZWwtdGVydGlhcnkpO1xuICAgIG9wYWNpdHk6IDAuNDtcbiAgfVxufVxuLnF1aW5hcnkge1xuICAvLyBjb2xvcjogdmFyKC0tbmV1dHJhbC1sYWJlbC1zZWNvbmRhcnkpO1xuICBjb2xvcjogIzZENkQ3MENDOyAvLyBUT0RPOiDthqDtgbAg7JeF642w7J207Yq4XG5cbiAgJjpub3QoOmRpc2FibGVkKTpob3ZlciB7IC8vIFRPRE86IO2GoO2BsOycvOuhnCDrs4DtmZhcbiAgICBiYWNrZ3JvdW5kOiAjZjVmNWY1O1xuICB9XG4gICY6ZGlzYWJsZWQge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLW5ldXRyYWwtY29udGFpbmVyLW1pZCk7XG4gICAgY29sb3I6IHZhcigtLW5ldXRyYWwtbGFiZWwtdGVydGlhcnkpO1xuICAgIG9wYWNpdHk6IDAuNDtcbiAgfVxufVxuLm5lZ2F0aXZlIHtcbiAgLy8gVE9ETzogZnVudGlvbi9jb250YWluZXIvbmVnYXRpdmVcbiAgYmFja2dyb3VuZDogdmFyKC0tZnVuY3Rpb24tbmVnYXRpdmUpO1xuXG4gICY6bm90KDpkaXNhYmxlZCk6aG92ZXIgeyAvLyBUT0RPOiDthqDtgbDsnLzroZwg67OA7ZmYXG4gICAgYmFja2dyb3VuZDogI2FmMWIxYztcbiAgfVxufVxuLmludmVyc2Uge1xuICAvLyBUT0RPOiBuZXV0cmFsL2xhYmVsL3N0YXRpYy9wcmltYXJ5XG4gIGNvbG9yOiB2YXIoLS1uZXV0cmFsLWxhYmVsLXByaW1hcnkpO1xuXG4gICY6bm90KDpkaXNhYmxlZCk6aG92ZXIgeyAvLyBUT0RPOiDthqDtgbDsnLzroZwg67OA7ZmYXG4gICAgYmFja2dyb3VuZDogI2Y1ZjVmNTtcbiAgfVxufVxuXG4vLyBzaXplXG4uY3RhIHtcbiAgYm9yZGVyLXJhZGl1czogOHB4OyAvLyBUT0RPOiDthqDtgbBcbiAgcGFkZGluZzogMTMuNXB4IDEycHg7IC8vIFRPRE86IO2GoO2BsFxuICBmb250LXNpemU6IHZhcigtLWxwLXByaS1mb250LXNpemUtMTYpO1xuICBtaW4td2lkdGg6IDEyOXB4O1xuICBtYXgtaGVpZ2h0OiA0OHB4O1xufVxuLmwge1xuICBib3JkZXItcmFkaXVzOiA2cHg7IC8vIFRPRE86IO2GoO2BsFxuICBwYWRkaW5nOiAxMC41cHggOHB4OyAvLyBUT0RPOiDthqDtgbBcbiAgZm9udC1zaXplOiB2YXIoLS1scC1wcmktZm9udC1zaXplLTE1KTtcbiAgbWluLXdpZHRoOiAxMDdweDtcbiAgbWF4LWhlaWdodDogNDBweDtcbn1cbi5tIHtcbiAgYm9yZGVyLXJhZGl1czogNnB4OyAvLyBUT0RPOiDthqDtgbBcbiAgcGFkZGluZzogN3B4IDZweDsgLy8gVE9ETzog7Yag7YGwXG4gIGZvbnQtc2l6ZTogdmFyKC0tbHAtcHJpLWZvbnQtc2l6ZS0xNCk7XG4gIGZvbnQtd2VpZ2h0OiB2YXIoLS1scC1wcmktZm9udC13ZWlnaHQtNTAwKTtcbiAgbWluLXdpZHRoOiA5MXB4O1xuICBtYXgtaGVpZ2h0OiAzMnB4O1xufVxuLnMge1xuICBib3JkZXItcmFkaXVzOiA2cHg7IC8vIFRPRE86IO2GoO2BsFxuICBwYWRkaW5nOiAzLjVweCA2cHg7IC8vIFRPRE86IO2GoO2BsFxuICBmb250LXNpemU6IHZhcigtLWxwLXByaS1mb250LXNpemUtMTMpO1xuICBmb250LXdlaWdodDogdmFyKC0tbHAtcHJpLWZvbnQtd2VpZ2h0LTUwMCk7XG4gIG1pbi13aWR0aDogODlweDtcbiAgbWF4LWhlaWdodDogMjRweDtcbn1cblxuLy8gYWxpZ25cbi5hbGlnbi1jZW50ZXIge1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbn1cbi5hbGlnbi1zcGFjZS1iZXR3ZWVuIHtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xufVxuXG4vLyBUZXh0QnV0dG9uIC0gbGV2ZWxcbi5pbnZlcnNlLXByaW1hcnkge1xuICBjb2xvcjogdmFyKC0taW52ZXJzZS1sYWJlbC1zdGF0aWMtcHJpbWFyeSk7IC8vIFRPRE86IO2GoO2BsCDsl4XrjbDsnbTtirggKOyDieyDgSDri6TrpoQpXG59XG4ubmV1dHJhbC1wcmltYXJ5IHtcbiAgLy8gY29sb3I6IHZhcigtLW5ldXRyYWwtbGFiZWwtc2Vjb25kYXJ5KTsgLy8gVE9ETzog7Yag7YGwIOyXheuNsOydtO2KuCAo7IOJ7IOBIOuLpOumhClcbiAgY29sb3I6ICM2RDZENzBDQztcbiAgb3BhY2l0eTogMC44O1xufVxuLmludmVyc2Utc3RhdGljLXByaW1hcnkge1xuICBjb2xvcjogdmFyKC0taW52ZXJzZS1sYWJlbC1zdGF0aWMtcHJpbWFyeSk7XG59Il19 */"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/package.json
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
|
-
import { Button, ButtonProps } from '.';
|
|
2
|
+
import { Button, ButtonProps, DefaultButton, DefaultButtonProps, IconButton, TextButton, TextButtonProps } from '.';
|
|
3
3
|
|
|
4
|
-
const meta: Meta<typeof
|
|
4
|
+
const meta: Meta<typeof DefaultButton> = {
|
|
5
5
|
title: 'Components/Button',
|
|
6
|
-
component:
|
|
6
|
+
component: DefaultButton,
|
|
7
7
|
args: {
|
|
8
8
|
children: 'Button',
|
|
9
|
+
as: 'default',
|
|
10
|
+
asChild: false,
|
|
9
11
|
level: 'primary',
|
|
10
12
|
align: 'center',
|
|
11
13
|
size: 'cta',
|
|
@@ -18,12 +20,26 @@ const meta: Meta<typeof Button> = {
|
|
|
18
20
|
},
|
|
19
21
|
description: '버튼 안에 표시할 컨텐츠',
|
|
20
22
|
},
|
|
23
|
+
as: {
|
|
24
|
+
options: ['default', 'text', 'icon'],
|
|
25
|
+
control: {
|
|
26
|
+
type: 'inline-radio',
|
|
27
|
+
},
|
|
28
|
+
description: '버튼의 종류를 설정합니다. 스토리북에서는 동작하지 않습니다',
|
|
29
|
+
},
|
|
30
|
+
asChild: {
|
|
31
|
+
control: {
|
|
32
|
+
type: 'boolean',
|
|
33
|
+
default: false,
|
|
34
|
+
},
|
|
35
|
+
description: '버튼을 부모 태그의 자식 요소로 사용할 때 사용합니다.',
|
|
36
|
+
},
|
|
21
37
|
level: {
|
|
22
38
|
options: ['primary', 'secondary', 'tertiary', 'quaternary', 'quinary', 'negative', 'inverse'],
|
|
23
39
|
control: {
|
|
24
40
|
type: 'select',
|
|
25
41
|
},
|
|
26
|
-
description: '버튼의
|
|
42
|
+
description: '버튼의 레벨을 설정합니다.',
|
|
27
43
|
},
|
|
28
44
|
align: {
|
|
29
45
|
options: ['center', 'spaceBetween'],
|
|
@@ -72,16 +88,32 @@ type Story = StoryObj<typeof meta>;
|
|
|
72
88
|
*/
|
|
73
89
|
export const Default: Story = {
|
|
74
90
|
args: {
|
|
91
|
+
as: 'default',
|
|
75
92
|
level: 'primary',
|
|
76
93
|
align: 'center',
|
|
77
94
|
size: 'cta',
|
|
78
95
|
disabled: false,
|
|
79
96
|
},
|
|
80
97
|
|
|
81
|
-
render: args => <
|
|
98
|
+
render: args => <DefaultButton {...args}>{args.children}</DefaultButton>,
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* 종류별 버튼
|
|
103
|
+
*/
|
|
104
|
+
export const AS: Story = {
|
|
105
|
+
render: args => (
|
|
106
|
+
<>
|
|
107
|
+
<Button as="default">Default</Button>
|
|
108
|
+
<Button as="text" level="neutralPrimary">
|
|
109
|
+
Text
|
|
110
|
+
</Button>
|
|
111
|
+
{/* <Button as="icon">Icon</Button> */}
|
|
112
|
+
</>
|
|
113
|
+
),
|
|
82
114
|
};
|
|
83
115
|
|
|
84
|
-
const
|
|
116
|
+
const DEFAULT_LEVEL_OPTIONS: Extract<ButtonProps, DefaultButtonProps>['level'][] = [
|
|
85
117
|
'primary',
|
|
86
118
|
'secondary',
|
|
87
119
|
'tertiary',
|
|
@@ -92,12 +124,12 @@ const LEVELS: ButtonProps['level'][] = [
|
|
|
92
124
|
];
|
|
93
125
|
|
|
94
126
|
/**
|
|
95
|
-
* level
|
|
127
|
+
* Default 버튼 타입 - level 종류
|
|
96
128
|
*/
|
|
97
|
-
export const
|
|
129
|
+
export const DefaultLevel: Story = {
|
|
98
130
|
render: args => (
|
|
99
131
|
<>
|
|
100
|
-
{
|
|
132
|
+
{DEFAULT_LEVEL_OPTIONS.map(level => (
|
|
101
133
|
<Button {...args} level={level} key={level}>
|
|
102
134
|
{level}
|
|
103
135
|
</Button>
|
|
@@ -106,15 +138,15 @@ export const Level: Story = {
|
|
|
106
138
|
),
|
|
107
139
|
};
|
|
108
140
|
|
|
109
|
-
const
|
|
141
|
+
const DEFAULT_ALIGN_OPTIONS: Extract<ButtonProps, DefaultButtonProps>['align'][] = ['center', 'spaceBetween'];
|
|
110
142
|
|
|
111
143
|
/**
|
|
112
|
-
* align
|
|
144
|
+
* Default 버튼 - align 종류
|
|
113
145
|
*/
|
|
114
|
-
export const
|
|
146
|
+
export const DefaultAlign: Story = {
|
|
115
147
|
render: args => (
|
|
116
148
|
<>
|
|
117
|
-
{
|
|
149
|
+
{DEFAULT_ALIGN_OPTIONS.map(align => (
|
|
118
150
|
<Button {...args} align={align} key={align}>
|
|
119
151
|
{align}
|
|
120
152
|
</Button>
|
|
@@ -123,15 +155,15 @@ export const Align: Story = {
|
|
|
123
155
|
),
|
|
124
156
|
};
|
|
125
157
|
|
|
126
|
-
const
|
|
158
|
+
const DEFAULT_SIZE_OPTIONS: Extract<ButtonProps, DefaultButtonProps>['size'][] = ['cta', 'l', 'm', 's'];
|
|
127
159
|
|
|
128
160
|
/**
|
|
129
|
-
* size
|
|
161
|
+
* Default 버튼 - size 종류
|
|
130
162
|
*/
|
|
131
|
-
export const
|
|
163
|
+
export const DefaultSize: Story = {
|
|
132
164
|
render: args => (
|
|
133
165
|
<>
|
|
134
|
-
{
|
|
166
|
+
{DEFAULT_SIZE_OPTIONS.map(size => (
|
|
135
167
|
<Button {...args} size={size} key={size}>
|
|
136
168
|
{size}
|
|
137
169
|
</Button>
|
|
@@ -140,8 +172,37 @@ export const Size: Story = {
|
|
|
140
172
|
),
|
|
141
173
|
};
|
|
142
174
|
|
|
175
|
+
const TEXT_LEVEL_OPTIONS: Extract<ButtonProps, TextButtonProps>['level'][] = [
|
|
176
|
+
'inversePrimary',
|
|
177
|
+
'neutralPrimary',
|
|
178
|
+
'inverseStaticPrimary',
|
|
179
|
+
];
|
|
180
|
+
|
|
181
|
+
/**
|
|
182
|
+
* Text 버튼 - level 종류
|
|
183
|
+
*/
|
|
184
|
+
export const TextLevel: Story = {
|
|
185
|
+
render: args => (
|
|
186
|
+
<div
|
|
187
|
+
style={{
|
|
188
|
+
display: 'flex',
|
|
189
|
+
width: '100%',
|
|
190
|
+
height: '50px',
|
|
191
|
+
gap: '2rem',
|
|
192
|
+
background: '#444444',
|
|
193
|
+
}}
|
|
194
|
+
>
|
|
195
|
+
{TEXT_LEVEL_OPTIONS.map(level => (
|
|
196
|
+
<Button as="text" level={level} key={level}>
|
|
197
|
+
{level}
|
|
198
|
+
</Button>
|
|
199
|
+
))}
|
|
200
|
+
</div>
|
|
201
|
+
),
|
|
202
|
+
};
|
|
203
|
+
|
|
143
204
|
/**
|
|
144
|
-
*
|
|
205
|
+
* Default 버튼 - 비활성화 상태
|
|
145
206
|
*/
|
|
146
207
|
export const Disabled: Story = {
|
|
147
208
|
render: args => (
|
|
@@ -4,7 +4,7 @@ import { VariantProps, cva } from 'class-variance-authority';
|
|
|
4
4
|
import { Slot } from '@radix-ui/react-slot';
|
|
5
5
|
import clsx from 'clsx';
|
|
6
6
|
|
|
7
|
-
const
|
|
7
|
+
const defaultButtonVariants = cva([style.button,style.default], {
|
|
8
8
|
variants: {
|
|
9
9
|
level: {
|
|
10
10
|
primary: style.primary,
|
|
@@ -27,26 +27,110 @@ const buttonVariants = cva(style.button, {
|
|
|
27
27
|
},
|
|
28
28
|
},
|
|
29
29
|
});
|
|
30
|
+
const textButtonVariants = cva([style.button,style.text], {
|
|
31
|
+
variants: {
|
|
32
|
+
level: {
|
|
33
|
+
inversePrimary: style['inverse-primary'],
|
|
34
|
+
neutralPrimary: style['neutral-primary'],
|
|
35
|
+
inverseStaticPrimary: style['inverse-static-primary'],
|
|
36
|
+
},
|
|
37
|
+
},
|
|
38
|
+
});
|
|
39
|
+
const iconButtonVariants = cva([style.button,style.icon], {
|
|
40
|
+
variants: {
|
|
41
|
+
level: {
|
|
42
|
+
primary: style.primary,
|
|
43
|
+
secondary: style.secondary,
|
|
44
|
+
tertiary: style.tertiary,
|
|
45
|
+
quaternary: style.quaternary,
|
|
46
|
+
quinary: style.quinary,
|
|
47
|
+
negative: style.negative,
|
|
48
|
+
},
|
|
49
|
+
weight: {
|
|
50
|
+
//
|
|
51
|
+
},
|
|
52
|
+
},
|
|
53
|
+
});
|
|
30
54
|
|
|
31
|
-
|
|
55
|
+
const getButtonVariant = (props: ButtonProps) => {
|
|
56
|
+
switch (props.as) {
|
|
57
|
+
case 'default':
|
|
58
|
+
const {level="primary", align="center", size="cta"} = props;
|
|
59
|
+
return defaultButtonVariants({ level, align, size });
|
|
60
|
+
case 'text':
|
|
61
|
+
return textButtonVariants({ level: props.level });
|
|
62
|
+
case 'icon':
|
|
63
|
+
return iconButtonVariants({ level: props.level });
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
interface CommonButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {
|
|
68
|
+
as?: 'default' | 'text' | 'icon';
|
|
69
|
+
asChild?: boolean;
|
|
70
|
+
}
|
|
71
|
+
export interface DefaultButtonProps extends CommonButtonProps, VariantProps<typeof defaultButtonVariants> {
|
|
72
|
+
as?: 'default';
|
|
32
73
|
asChild?: boolean;
|
|
33
|
-
align?: 'center' | 'spaceBetween';
|
|
34
74
|
level?: 'primary' | 'secondary' | 'tertiary' | 'quaternary' | 'quinary' | 'negative' | 'inverse';
|
|
35
75
|
size?: 'cta' | 'l' | 'm' | 's';
|
|
76
|
+
align?: 'center' | 'spaceBetween';
|
|
36
77
|
// isLoading?: boolean;
|
|
37
78
|
// leftIcon?: ReactNode;
|
|
38
|
-
// rightIcon?: ReactNode;
|
|
79
|
+
// rightIcon?: ReactNode;
|
|
80
|
+
}
|
|
81
|
+
export interface TextButtonProps extends CommonButtonProps, VariantProps<typeof textButtonVariants> {
|
|
82
|
+
as?: 'text';
|
|
83
|
+
asChild?: boolean;
|
|
84
|
+
level?: 'inversePrimary' | 'neutralPrimary' | 'inverseStaticPrimary'
|
|
85
|
+
}
|
|
86
|
+
export interface IconButtonProps extends CommonButtonProps, VariantProps<typeof iconButtonVariants> {
|
|
87
|
+
as?: 'icon';
|
|
88
|
+
asChild?: boolean;
|
|
89
|
+
// weight
|
|
39
90
|
}
|
|
91
|
+
export type ButtonProps = DefaultButtonProps | TextButtonProps | IconButtonProps;
|
|
40
92
|
|
|
41
93
|
/**
|
|
42
94
|
* 버튼 컴포넌트
|
|
43
95
|
*/
|
|
44
|
-
|
|
45
|
-
|
|
96
|
+
|
|
97
|
+
export const DefaultButton = forwardRef<HTMLButtonElement, DefaultButtonProps>(
|
|
98
|
+
({as = 'default',asChild = false, level = 'primary', align = 'center', size= 'cta', ...rest}, ref) => {
|
|
46
99
|
const Comp = asChild ? Slot : 'button';
|
|
47
100
|
|
|
48
|
-
return <Comp className={clsx(
|
|
101
|
+
return <Comp {...rest} className={clsx(defaultButtonVariants({ level, align, size }))} ref={ref} />;
|
|
49
102
|
}
|
|
50
103
|
);
|
|
51
104
|
|
|
52
|
-
export const
|
|
105
|
+
export const TextButton = forwardRef<HTMLButtonElement, TextButtonProps>(
|
|
106
|
+
({as = 'text',asChild = false, level = 'inversePrimary', ...rest}, ref) => {
|
|
107
|
+
const Comp = asChild ? Slot : 'button';
|
|
108
|
+
|
|
109
|
+
return <Comp {...rest} className={clsx(textButtonVariants({ level }))} ref={ref} />;
|
|
110
|
+
}
|
|
111
|
+
);
|
|
112
|
+
|
|
113
|
+
export const IconButton = forwardRef<HTMLButtonElement, IconButtonProps>(
|
|
114
|
+
(props, ref) => {
|
|
115
|
+
const Comp = props.asChild ? Slot : 'button';
|
|
116
|
+
|
|
117
|
+
return <Comp {...props} className={clsx(iconButtonVariants({ level: props.level }))} ref={ref} />;
|
|
118
|
+
}
|
|
119
|
+
);
|
|
120
|
+
|
|
121
|
+
export const Button = forwardRef<HTMLButtonElement, ButtonProps>(
|
|
122
|
+
(props, ref) => {
|
|
123
|
+
const Comp = props.asChild ? Slot : 'button';
|
|
124
|
+
|
|
125
|
+
switch (props.as){
|
|
126
|
+
case 'default':
|
|
127
|
+
const {level="primary", align="center", size="cta"} = props;
|
|
128
|
+
return <Comp {...props} className={clsx(defaultButtonVariants({ level, align, size }))} ref={ref} />;
|
|
129
|
+
case 'text':
|
|
130
|
+
const {level:textLevel = 'inversePrimary'} = props;
|
|
131
|
+
return <Comp {...props} className={clsx(textButtonVariants({ level: textLevel }))} ref={ref} />;
|
|
132
|
+
// case 'icon':
|
|
133
|
+
// return <Comp {...props} className={clsx(iconButtonVariants({ level: props.level }))} ref={ref} />;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
);
|
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
// @import "../../../../design-token/global.css";
|
|
2
|
-
// @use "../../../../design-token/global.css" as *;
|
|
3
|
-
|
|
4
1
|
.button {
|
|
5
2
|
position: relative;
|
|
6
3
|
display: flex;
|
|
@@ -8,15 +5,13 @@
|
|
|
8
5
|
justify-content: center;
|
|
9
6
|
border: none;
|
|
10
7
|
|
|
11
|
-
font-
|
|
8
|
+
font-style:normal;
|
|
9
|
+
font-size: var(--lp-pri-font-size-16);
|
|
12
10
|
font-weight: var(--lp-pri-font-weight-700);
|
|
13
11
|
line-height: 130%; // TODO: 토큰
|
|
14
|
-
color: var(--inverse-label-static-primary);
|
|
15
|
-
background: var(--lp-pri-achromatic-white); // TODO: 토큰
|
|
16
12
|
overflow: hidden;
|
|
17
13
|
|
|
18
14
|
cursor: pointer;
|
|
19
|
-
// color: var(--brand-container-mid);
|
|
20
15
|
|
|
21
16
|
&:disabled {
|
|
22
17
|
background: var(--neutral-container-mid);
|
|
@@ -25,7 +20,29 @@
|
|
|
25
20
|
}
|
|
26
21
|
}
|
|
27
22
|
|
|
28
|
-
//
|
|
23
|
+
// as
|
|
24
|
+
.default {
|
|
25
|
+
color: var(--inverse-label-static-primary);
|
|
26
|
+
background: var(--lp-pri-achromatic-white); // TODO: 토큰
|
|
27
|
+
// color: var(--brand-container-mid);
|
|
28
|
+
}
|
|
29
|
+
.text {
|
|
30
|
+
background: none;
|
|
31
|
+
color: var(--inverse-label-static-primary);
|
|
32
|
+
font-size: var(--lp-pri-font-size-13);
|
|
33
|
+
font-weight: var(--lp-pri-font-weight-500);
|
|
34
|
+
|
|
35
|
+
&:not(:disabled):hover {
|
|
36
|
+
text-decoration: underline;
|
|
37
|
+
text-underline-offset: 0.2rem;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
.icon {
|
|
41
|
+
background: none;
|
|
42
|
+
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// DefaultButton - level
|
|
29
46
|
.primary {
|
|
30
47
|
background: #4058FF; // TODO: 토큰 업데이트 (색상 다름)
|
|
31
48
|
|
|
@@ -132,3 +149,16 @@
|
|
|
132
149
|
.align-space-between {
|
|
133
150
|
justify-content: space-between;
|
|
134
151
|
}
|
|
152
|
+
|
|
153
|
+
// TextButton - level
|
|
154
|
+
.inverse-primary {
|
|
155
|
+
color: var(--inverse-label-static-primary); // TODO: 토큰 업데이트 (색상 다름)
|
|
156
|
+
}
|
|
157
|
+
.neutral-primary {
|
|
158
|
+
// color: var(--neutral-label-secondary); // TODO: 토큰 업데이트 (색상 다름)
|
|
159
|
+
color: #6D6D70CC;
|
|
160
|
+
opacity: 0.8;
|
|
161
|
+
}
|
|
162
|
+
.inverse-static-primary {
|
|
163
|
+
color: var(--inverse-label-static-primary);
|
|
164
|
+
}
|