@liner-fe/prism 1.1.6 → 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.
@@ -1,18 +1,43 @@
1
1
  import { ButtonHTMLAttributes } from 'react';
2
2
  import { VariantProps } from 'class-variance-authority';
3
- declare const buttonVariants: (props?: ({
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
- export interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof buttonVariants> {
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
43
  export {};
@@ -1,6 +1,6 @@
1
1
  import type { Meta, StoryObj } from '@storybook/react';
2
- import { Button } from '.';
3
- declare const meta: Meta<typeof Button>;
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
- * level별 버튼
11
+ * 종류별 버튼
12
12
  */
13
- export declare const Level: Story;
13
+ export declare const AS: Story;
14
14
  /**
15
- * align별 버튼
15
+ * Default 버튼 타입 - level 종류
16
16
  */
17
- export declare const Align: Story;
17
+ export declare const DefaultLevel: Story;
18
18
  /**
19
- * size별 버튼
19
+ * Default 버튼 - align 종류
20
20
  */
21
- export declare const Size: Story;
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,6 +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
+ DefaultButton: () => DefaultButton,
36
+ IconButton: () => IconButton,
37
+ TextButton: () => TextButton,
35
38
  objectToArray: () => objectToArray
36
39
  });
37
40
  module.exports = __toCommonJS(src_exports);
@@ -51,7 +54,7 @@ var style_module_default = {};
51
54
  var import_class_variance_authority = require("class-variance-authority");
52
55
  var import_react_slot = require("@radix-ui/react-slot");
53
56
  var import_clsx = __toESM(require("clsx"));
54
- var buttonVariants = (0, import_class_variance_authority.cva)(style_module_default.button, {
57
+ var defaultButtonVariants = (0, import_class_variance_authority.cva)([style_module_default.button, style_module_default.default], {
55
58
  variants: {
56
59
  level: {
57
60
  primary: style_module_default.primary,
@@ -74,10 +77,59 @@ var buttonVariants = (0, import_class_variance_authority.cva)(style_module_defau
74
77
  }
75
78
  }
76
79
  });
77
- var Button = (0, import_react.forwardRef)(
78
- ({ asChild, level = "primary", align = "center", size = "cta", ...props }, ref) => {
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) => {
79
112
  const Comp = asChild ? import_react_slot.Slot : "button";
80
- return <Comp className={(0, import_clsx.default)(buttonVariants({ level, align, size }))} ref={ref} {...props} />;
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
+ }
81
133
  }
82
134
  );
83
135
  /*! For license information please see index.cjs.LEGAL.txt */
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", ".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;;;ACAO,IAAM,gBAAgB,wBAAgC,QAAW;AACtE,SAAO,OAAO,QAAQ,GAAG;AAC3B,GAF6B;;;ACA7B,mBAAiD;;;ACAjD;;;ADEA,sCAAkC;AAClC,wBAAqB;AACrB,kBAAiB;AAEjB,IAAM,qBAAiB,qCAAI,qBAAM,QAAQ;AAAA,EACvC,UAAU;AAAA,IACR,OAAO;AAAA,MACL,SAAS,qBAAM;AAAA,MACf,WAAW,qBAAM;AAAA,MACjB,UAAU,qBAAM;AAAA,MAChB,YAAY,qBAAM;AAAA,MAClB,SAAS,qBAAM;AAAA,MACf,UAAU,qBAAM;AAAA,MAChB,SAAS,qBAAM;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,MACL,QAAQ,qBAAM,cAAc;AAAA,MAC5B,cAAc,qBAAM,qBAAqB;AAAA,IAC3C;AAAA,IACA,MAAM;AAAA,MACJ,KAAK,qBAAM;AAAA,MACX,GAAG,qBAAM;AAAA,MACT,GAAG,qBAAM;AAAA,MACT,GAAG,qBAAM;AAAA,IACX;AAAA,EACF;AACF,CAAC;AAeM,IAAM,aAAS;AAAA,EACpB,CAAC,EAAE,SAAS,QAAQ,WAAW,QAAQ,UAAU,OAAO,OAAO,GAAG,MAAM,GAAG,QAAQ;AACjF,UAAM,OAAO,UAAU,yBAAO;AAE9B,WAAO,CAAC,KAAK,eAAW,YAAAA,SAAK,eAAe,EAAE,OAAO,OAAO,KAAK,CAAC,CAAC,GAAG,KAAK,SAAS,OAAO;AAAA,EAC7F;AACF;",
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-size: normal;
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": ["// @import \"../../../../design-token/global.css\";\n// @use \"../../../../design-token/global.css\" as *;\n\n.button {\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n border: none;\n\n font-size: normal;\n font-weight: var(--lp-pri-font-weight-700);\n line-height: 130%; // TODO: 토큰\n color: var(--inverse-label-static-primary);\n background: var(--lp-pri-achromatic-white); // TODO: 토큰\n overflow: hidden;\n\n cursor: pointer;\n // color: var(--brand-container-mid);\n\n &:disabled {\n background: var(--neutral-container-mid);\n color: var(--neutral-label-tertiary);\n cursor: not-allowed;\n }\n}\n\n// 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"],
5
- "mappings": ";AAGA,CAAA;AACE,YAAA;AACA,WAAA;AACA,eAAA;AACA,mBAAA;AACA,UAAA;AAEA,aAAA;AACA,eAAA,IAAA;AACA,eAAA;AACA,SAAA,IAAA;AACA,cAAA,IAAA;AACA,YAAA;AAEA,UAAA;;AAGA,CAjBF,MAiBE;AACE,cAAA,IAAA;AACA,SAAA,IAAA;AACA,UAAA;;AAKJ,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;;",
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 buttonVariants = cva(style_module_default.button, {
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,14 +39,66 @@ var buttonVariants = cva(style_module_default.button, {
39
39
  }
40
40
  }
41
41
  });
42
- var Button = forwardRef(
43
- ({ asChild, level = "primary", align = "center", size = "cta", ...props }, ref) => {
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(buttonVariants({ level, align, size }))} ref={ref} {...props} />;
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
97
  export {
49
98
  Button,
99
+ DefaultButton,
100
+ IconButton,
101
+ TextButton,
50
102
  objectToArray
51
103
  };
52
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", ".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,iBAAiB,IAAI,qBAAM,QAAQ;AAAA,EACvC,UAAU;AAAA,IACR,OAAO;AAAA,MACL,SAAS,qBAAM;AAAA,MACf,WAAW,qBAAM;AAAA,MACjB,UAAU,qBAAM;AAAA,MAChB,YAAY,qBAAM;AAAA,MAClB,SAAS,qBAAM;AAAA,MACf,UAAU,qBAAM;AAAA,MAChB,SAAS,qBAAM;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,MACL,QAAQ,qBAAM,cAAc;AAAA,MAC5B,cAAc,qBAAM,qBAAqB;AAAA,IAC3C;AAAA,IACA,MAAM;AAAA,MACJ,KAAK,qBAAM;AAAA,MACX,GAAG,qBAAM;AAAA,MACT,GAAG,qBAAM;AAAA,MACT,GAAG,qBAAM;AAAA,IACX;AAAA,EACF;AACF,CAAC;AAeM,IAAM,SAAS;AAAA,EACpB,CAAC,EAAE,SAAS,QAAQ,WAAW,QAAQ,UAAU,OAAO,OAAO,GAAG,MAAM,GAAG,QAAQ;AACjF,UAAM,OAAO,UAAU,OAAO;AAE9B,WAAO,CAAC,KAAK,WAAW,KAAK,eAAe,EAAE,OAAO,OAAO,KAAK,CAAC,CAAC,GAAG,KAAK,SAAS,OAAO;AAAA,EAC7F;AACF;",
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,6 +1,6 @@
1
1
  {
2
2
  "name": "@liner-fe/prism",
3
- "version": "1.1.6",
3
+ "version": "1.1.8",
4
4
  "packageManager": "yarn@3.6.0",
5
5
  "scripts": {
6
6
  "dev": "next dev",
@@ -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 Button> = {
4
+ const meta: Meta<typeof DefaultButton> = {
5
5
  title: 'Components/Button',
6
- component: Button,
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 => <Button {...args}>{args.children}</Button>,
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 LEVELS: ButtonProps['level'][] = [
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 Level: Story = {
129
+ export const DefaultLevel: Story = {
98
130
  render: args => (
99
131
  <>
100
- {LEVELS.map(level => (
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 ALIGN_OPTIONS: ButtonProps['align'][] = ['center', 'spaceBetween'];
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 Align: Story = {
146
+ export const DefaultAlign: Story = {
115
147
  render: args => (
116
148
  <>
117
- {ALIGN_OPTIONS.map(align => (
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 SIZE_OPTIONS: ButtonProps['size'][] = ['cta', 'l', 'm', 's'];
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 Size: Story = {
163
+ export const DefaultSize: Story = {
132
164
  render: args => (
133
165
  <>
134
- {SIZE_OPTIONS.map(size => (
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 buttonVariants = cva(style.button, {
7
+ const defaultButtonVariants = cva([style.button,style.default], {
8
8
  variants: {
9
9
  level: {
10
10
  primary: style.primary,
@@ -27,24 +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
- export interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof buttonVariants> {
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
- export const Button = forwardRef<HTMLButtonElement, ButtonProps>(
45
- ({ asChild, level = 'primary', align = 'center', size = 'cta', ...props }, ref) => {
96
+
97
+ export const DefaultButton = forwardRef<HTMLButtonElement, DefaultButtonProps>(
98
+ ({as = 'default',asChild = false, level = 'primary', align = 'center', size= 'cta', ...rest}, ref) => {
99
+ const Comp = asChild ? Slot : 'button';
100
+
101
+ return <Comp {...rest} className={clsx(defaultButtonVariants({ level, align, size }))} ref={ref} />;
102
+ }
103
+ );
104
+
105
+ export const TextButton = forwardRef<HTMLButtonElement, TextButtonProps>(
106
+ ({as = 'text',asChild = false, level = 'inversePrimary', ...rest}, ref) => {
46
107
  const Comp = asChild ? Slot : 'button';
47
108
 
48
- return <Comp className={clsx(buttonVariants({ level, align, size }))} ref={ref} {...props} />;
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
+ }
49
135
  }
50
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-size: normal;
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
- // level
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
+ }