@liner-fe/prism 1.1.4 → 1.1.6

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.
Files changed (40) hide show
  1. package/lib/components/Button/index.d.ts +1 -1
  2. package/lib/components/Button/index.stories.d.ts +25 -0
  3. package/lib/design-token/border-radius/index.d.ts +1 -0
  4. package/lib/design-token/color/index.d.ts +5 -0
  5. package/lib/design-token/opacity/index.d.ts +1 -0
  6. package/lib/design-token/size/index.d.ts +1 -0
  7. package/lib/design-token/typography/index.d.ts +1 -0
  8. package/lib/index.cjs +84 -0
  9. package/lib/index.cjs.map +7 -0
  10. package/lib/index.css +112 -1
  11. package/lib/index.css.map +7 -0
  12. package/lib/index.mjs +53 -0
  13. package/lib/index.mjs.map +7 -0
  14. package/package.json +20 -14
  15. package/src/Configure.mdx +32 -0
  16. package/src/assets/design-token-cover.png +0 -0
  17. package/src/components/Button/index.stories.tsx +152 -0
  18. package/src/components/Button/index.tsx +50 -0
  19. package/src/components/Button/style.module.scss +134 -0
  20. package/src/design-token/border-radius/index.mdx +8 -0
  21. package/src/design-token/border-radius/index.stories.ts +17 -0
  22. package/src/design-token/border-radius/index.tsx +29 -0
  23. package/src/design-token/color/index.mdx +38 -0
  24. package/src/design-token/color/index.stories.ts +28 -0
  25. package/src/design-token/color/index.tsx +28 -0
  26. package/src/design-token/opacity/index.mdx +8 -0
  27. package/src/design-token/opacity/index.stories.ts +17 -0
  28. package/src/design-token/opacity/index.tsx +1 -0
  29. package/src/design-token/size/index.mdx +8 -0
  30. package/src/design-token/size/index.stories.ts +17 -0
  31. package/src/design-token/size/index.tsx +23 -0
  32. package/src/design-token/typography/index.mdx +8 -0
  33. package/src/design-token/typography/index.stories.ts +17 -0
  34. package/src/design-token/typography/index.tsx +13 -0
  35. package/src/index.ts +2 -0
  36. package/src/utils/object.ts +3 -0
  37. package/lib/components/Button/index.jsx +0 -41
  38. package/lib/index.js +0 -1
  39. package/lib/tsconfig.production.tsbuildinfo +0 -1
  40. package/lib/utils/object.js +0 -7
@@ -4,7 +4,7 @@ declare const buttonVariants: (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
- } & import("class-variance-authority/dist/types").ClassProp) | undefined) => string;
7
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
8
8
  export interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof buttonVariants> {
9
9
  asChild?: boolean;
10
10
  align?: 'center' | 'spaceBetween';
@@ -0,0 +1,25 @@
1
+ import type { Meta, StoryObj } from '@storybook/react';
2
+ import { Button } from '.';
3
+ declare const meta: Meta<typeof Button>;
4
+ export default meta;
5
+ type Story = StoryObj<typeof meta>;
6
+ /**
7
+ * 기본 버튼
8
+ */
9
+ export declare const Default: Story;
10
+ /**
11
+ * level별 버튼
12
+ */
13
+ export declare const Level: Story;
14
+ /**
15
+ * align별 버튼
16
+ */
17
+ export declare const Align: Story;
18
+ /**
19
+ * size별 버튼
20
+ */
21
+ export declare const Size: Story;
22
+ /**
23
+ * 버튼의 비활성화 상태
24
+ */
25
+ export declare const Disabled: Story;
@@ -0,0 +1 @@
1
+ export declare const Color: () => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,5 @@
1
+ interface IProps {
2
+ type: 'primitive' | 'system';
3
+ }
4
+ export declare const Color: ({ type }: IProps) => import("react/jsx-runtime").JSX.Element;
5
+ export {};
@@ -0,0 +1 @@
1
+ export declare const Opacity: () => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1 @@
1
+ export declare const Size: () => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1 @@
1
+ export declare const Typography: () => import("react/jsx-runtime").JSX.Element;
package/lib/index.cjs ADDED
@@ -0,0 +1,84 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
9
+ var __export = (target, all) => {
10
+ for (var name in all)
11
+ __defProp(target, name, { get: all[name], enumerable: true });
12
+ };
13
+ var __copyProps = (to, from, except, desc) => {
14
+ if (from && typeof from === "object" || typeof from === "function") {
15
+ for (let key of __getOwnPropNames(from))
16
+ if (!__hasOwnProp.call(to, key) && key !== except)
17
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
18
+ }
19
+ return to;
20
+ };
21
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
22
+ // If the importer is in node compatibility mode or this is not an ESM
23
+ // file that has been converted to a CommonJS file using a Babel-
24
+ // compatible transform (i.e. "__esModule" has not been set), then set
25
+ // "default" to the CommonJS "module.exports" for node compatibility.
26
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
27
+ mod
28
+ ));
29
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
30
+
31
+ // src/index.ts
32
+ var src_exports = {};
33
+ __export(src_exports, {
34
+ Button: () => Button,
35
+ objectToArray: () => objectToArray
36
+ });
37
+ module.exports = __toCommonJS(src_exports);
38
+
39
+ // src/utils/object.ts
40
+ var objectToArray = /* @__PURE__ */ __name((obj) => {
41
+ return Object.entries(obj);
42
+ }, "objectToArray");
43
+
44
+ // src/components/Button/index.tsx
45
+ var import_react = require("react");
46
+
47
+ // src/components/Button/style.module.scss
48
+ var style_module_default = {};
49
+
50
+ // src/components/Button/index.tsx
51
+ var import_class_variance_authority = require("class-variance-authority");
52
+ var import_react_slot = require("@radix-ui/react-slot");
53
+ var import_clsx = __toESM(require("clsx"));
54
+ var buttonVariants = (0, import_class_variance_authority.cva)(style_module_default.button, {
55
+ variants: {
56
+ level: {
57
+ primary: style_module_default.primary,
58
+ secondary: style_module_default.secondary,
59
+ tertiary: style_module_default.tertiary,
60
+ quaternary: style_module_default.quaternary,
61
+ quinary: style_module_default.quinary,
62
+ negative: style_module_default.negative,
63
+ inverse: style_module_default.inverse
64
+ },
65
+ align: {
66
+ center: style_module_default["align-center"],
67
+ spaceBetween: style_module_default["align-space-between"]
68
+ },
69
+ size: {
70
+ cta: style_module_default.cta,
71
+ l: style_module_default.l,
72
+ m: style_module_default.m,
73
+ s: style_module_default.s
74
+ }
75
+ }
76
+ });
77
+ var Button = (0, import_react.forwardRef)(
78
+ ({ asChild, level = "primary", align = "center", size = "cta", ...props }, ref) => {
79
+ const Comp = asChild ? import_react_slot.Slot : "button";
80
+ return <Comp className={(0, import_clsx.default)(buttonVariants({ level, align, size }))} ref={ref} {...props} />;
81
+ }
82
+ );
83
+ /*! For license information please see index.cjs.LEGAL.txt */
84
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 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;",
6
+ "names": ["clsx"]
7
+ }
package/lib/index.css CHANGED
@@ -1 +1,112 @@
1
- .button{position:relative;display:flex;align-items:center;justify-content:center;border:none;font-size:normal;font-weight:var(--lp-pri-font-weight-700);line-height:130%;color:var(--inverse-label-static-primary);background:var(--lp-pri-achromatic-white);overflow:hidden;cursor:pointer}.button:disabled{background:var(--neutral-container-mid);color:var(--neutral-label-tertiary);cursor:not-allowed}.primary{background:#4058ff}.primary:not(:disabled):hover{background:#3346cc}.secondary{background:var(--inverse-container-high)}.secondary:not(:disabled):hover{background:#121212}.tertiary{background:#6d6d7014;color:var(--neutral-label-primary)}.tertiary:not(:disabled):hover{background:#ebebeb}.quaternary{color:var(--neutral-label-primary);border:1px solid var(--neutral-border-overlay-normal)}.quaternary:not(:disabled):hover{background:#f5f5f5}.quaternary:disabled{background:var(--neutral-container-mid);color:var(--neutral-label-tertiary);opacity:.4}.quinary{color:#6d6d70cc}.quinary:not(:disabled):hover{background:#f5f5f5}.quinary:disabled{background:var(--neutral-container-mid);color:var(--neutral-label-tertiary);opacity:.4}.negative{background:var(--function-negative)}.negative:not(:disabled):hover{background:#af1b1c}.inverse{color:var(--neutral-label-primary)}.inverse:not(:disabled):hover{background:#f5f5f5}.cta{border-radius:8px;padding:13.5px 12px;font-size:var(--lp-pri-font-size-16);min-width:129px;max-height:48px}.l{border-radius:6px;padding:10.5px 8px;font-size:var(--lp-pri-font-size-15);min-width:107px;max-height:40px}.m{border-radius:6px;padding:7px 6px;font-size:var(--lp-pri-font-size-14);font-weight:var(--lp-pri-font-weight-500);min-width:91px;max-height:32px}.s{border-radius:6px;padding:3.5px 6px;font-size:var(--lp-pri-font-size-13);font-weight:var(--lp-pri-font-weight-500);min-width:89px;max-height:24px}.align-center{justify-content:center}.align-space-between{justify-content:space-between}
1
+ /* src/components/Button/style.module.scss */
2
+ .button {
3
+ position: relative;
4
+ display: flex;
5
+ align-items: center;
6
+ justify-content: center;
7
+ border: none;
8
+ font-size: normal;
9
+ font-weight: var(--lp-pri-font-weight-700);
10
+ line-height: 130%;
11
+ color: var(--inverse-label-static-primary);
12
+ background: var(--lp-pri-achromatic-white);
13
+ overflow: hidden;
14
+ cursor: pointer;
15
+ }
16
+ .button:disabled {
17
+ background: var(--neutral-container-mid);
18
+ color: var(--neutral-label-tertiary);
19
+ cursor: not-allowed;
20
+ }
21
+ .primary {
22
+ background: #4058FF;
23
+ }
24
+ .primary:not(:disabled):hover {
25
+ background: #3346cc;
26
+ }
27
+ .secondary {
28
+ background: var(--inverse-container-high);
29
+ }
30
+ .secondary:not(:disabled):hover {
31
+ background: #121212;
32
+ }
33
+ .tertiary {
34
+ background: rgba(109, 109, 112, 0.0784313725);
35
+ color: var(--neutral-label-primary);
36
+ }
37
+ .tertiary:not(:disabled):hover {
38
+ background: #ebebeb;
39
+ }
40
+ .quaternary {
41
+ color: var(--neutral-label-primary);
42
+ border: 1px solid var(--neutral-border-overlay-normal);
43
+ }
44
+ .quaternary:not(:disabled):hover {
45
+ background: #f5f5f5;
46
+ }
47
+ .quaternary:disabled {
48
+ background: var(--neutral-container-mid);
49
+ color: var(--neutral-label-tertiary);
50
+ opacity: 0.4;
51
+ }
52
+ .quinary {
53
+ color: rgba(109, 109, 112, 0.8);
54
+ }
55
+ .quinary:not(:disabled):hover {
56
+ background: #f5f5f5;
57
+ }
58
+ .quinary:disabled {
59
+ background: var(--neutral-container-mid);
60
+ color: var(--neutral-label-tertiary);
61
+ opacity: 0.4;
62
+ }
63
+ .negative {
64
+ background: var(--function-negative);
65
+ }
66
+ .negative:not(:disabled):hover {
67
+ background: #af1b1c;
68
+ }
69
+ .inverse {
70
+ color: var(--neutral-label-primary);
71
+ }
72
+ .inverse:not(:disabled):hover {
73
+ background: #f5f5f5;
74
+ }
75
+ .cta {
76
+ border-radius: 8px;
77
+ padding: 13.5px 12px;
78
+ font-size: var(--lp-pri-font-size-16);
79
+ min-width: 129px;
80
+ max-height: 48px;
81
+ }
82
+ .l {
83
+ border-radius: 6px;
84
+ padding: 10.5px 8px;
85
+ font-size: var(--lp-pri-font-size-15);
86
+ min-width: 107px;
87
+ max-height: 40px;
88
+ }
89
+ .m {
90
+ border-radius: 6px;
91
+ padding: 7px 6px;
92
+ font-size: var(--lp-pri-font-size-14);
93
+ font-weight: var(--lp-pri-font-weight-500);
94
+ min-width: 91px;
95
+ max-height: 32px;
96
+ }
97
+ .s {
98
+ border-radius: 6px;
99
+ padding: 3.5px 6px;
100
+ font-size: var(--lp-pri-font-size-13);
101
+ font-weight: var(--lp-pri-font-weight-500);
102
+ min-width: 89px;
103
+ max-height: 24px;
104
+ }
105
+ .align-center {
106
+ justify-content: center;
107
+ }
108
+ .align-space-between {
109
+ justify-content: space-between;
110
+ }
111
+ /*! For license information please see index.css.LEGAL.txt */
112
+ /*# sourceMappingURL=index.css.map */
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 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;;",
6
+ "names": []
7
+ }
package/lib/index.mjs ADDED
@@ -0,0 +1,53 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
+
4
+ // src/utils/object.ts
5
+ var objectToArray = /* @__PURE__ */ __name((obj) => {
6
+ return Object.entries(obj);
7
+ }, "objectToArray");
8
+
9
+ // src/components/Button/index.tsx
10
+ import { forwardRef } from "react";
11
+
12
+ // src/components/Button/style.module.scss
13
+ var style_module_default = {};
14
+
15
+ // src/components/Button/index.tsx
16
+ import { cva } from "class-variance-authority";
17
+ import { Slot } from "@radix-ui/react-slot";
18
+ import clsx from "clsx";
19
+ var buttonVariants = cva(style_module_default.button, {
20
+ variants: {
21
+ level: {
22
+ primary: style_module_default.primary,
23
+ secondary: style_module_default.secondary,
24
+ tertiary: style_module_default.tertiary,
25
+ quaternary: style_module_default.quaternary,
26
+ quinary: style_module_default.quinary,
27
+ negative: style_module_default.negative,
28
+ inverse: style_module_default.inverse
29
+ },
30
+ align: {
31
+ center: style_module_default["align-center"],
32
+ spaceBetween: style_module_default["align-space-between"]
33
+ },
34
+ size: {
35
+ cta: style_module_default.cta,
36
+ l: style_module_default.l,
37
+ m: style_module_default.m,
38
+ s: style_module_default.s
39
+ }
40
+ }
41
+ });
42
+ var Button = forwardRef(
43
+ ({ asChild, level = "primary", align = "center", size = "cta", ...props }, ref) => {
44
+ const Comp = asChild ? Slot : "button";
45
+ return <Comp className={clsx(buttonVariants({ level, align, size }))} ref={ref} {...props} />;
46
+ }
47
+ );
48
+ export {
49
+ Button,
50
+ objectToArray
51
+ };
52
+ /*! For license information please see index.mjs.LEGAL.txt */
53
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 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;",
6
+ "names": []
7
+ }
package/package.json CHANGED
@@ -1,15 +1,14 @@
1
1
  {
2
2
  "name": "@liner-fe/prism",
3
- "version": "1.1.4",
3
+ "version": "1.1.6",
4
4
  "packageManager": "yarn@3.6.0",
5
- "type": "module",
6
5
  "scripts": {
7
6
  "dev": "next dev",
8
7
  "start": "next start",
9
8
  "lint": "next lint",
10
9
  "storybook": "storybook dev -p 6006",
11
10
  "build-storybook": "storybook build",
12
- "build": "tsc --project tsconfig.production.json && node ./build.mjs",
11
+ "build": "bundler build && tsc --project tsconfig.build.json",
13
12
  "build:package": "yarn build",
14
13
  "prepack": "yarn build"
15
14
  },
@@ -28,6 +27,7 @@
28
27
  },
29
28
  "devDependencies": {
30
29
  "@chromatic-com/storybook": "^1.5.0",
30
+ "@liner-fe/bundler": "workspace:^",
31
31
  "@storybook/addon-essentials": "^8.1.7",
32
32
  "@storybook/addon-interactions": "^8.1.7",
33
33
  "@storybook/addon-links": "^8.1.7",
@@ -42,9 +42,6 @@
42
42
  "@types/react-dom": "^18.2.5",
43
43
  "autoprefixer": "^10.4.14",
44
44
  "chromatic": "^11.5.3",
45
- "esbuild": "^0.23.0",
46
- "esbuild-sass-plugin": "^3.3.1",
47
- "nanobundle": "^1.6.0",
48
45
  "postcss": "^8.4.24",
49
46
  "prettier": "^2.8.8",
50
47
  "prettier-plugin-tailwindcss": "^0.3.0",
@@ -54,19 +51,28 @@
54
51
  "typescript": "^5.1.6",
55
52
  "typescript-plugin-css-modules": "^5.1.0"
56
53
  },
54
+ "publishConfig": {
55
+ "access": "public",
56
+ "main": "./lib/index.mjs"
57
+ },
58
+ "main": "./lib/index.cjs",
59
+ "types": "./lib/index.d.ts",
60
+ "exports": {
61
+ ".": {
62
+ "types": "./lib/index.d.ts",
63
+ "import": "./lib/index.mjs",
64
+ "require": "./lib/index.cjs"
65
+ },
66
+ "./package.json": "./package.json"
67
+ },
57
68
  "files": [
58
- "lib"
69
+ "lib",
70
+ "src"
59
71
  ],
60
- "module": "lib/index",
61
- "main": "lib/index",
62
72
  "maintainers": [
63
73
  {
64
74
  "name": "jake-liner",
65
75
  "email": "jake@linercorp.com"
66
76
  }
67
- ],
68
- "publishConfig": {
69
- "access": "public",
70
- "main": "./lib/index.mjs"
71
- }
77
+ ]
72
78
  }
@@ -0,0 +1,32 @@
1
+ import { Meta } from '@storybook/blocks';
2
+ import Image from 'next/image';
3
+
4
+ import Styling from './assets/design-token-cover.png';
5
+
6
+ <Meta title="Liner 디자인 시스템 온보딩 문서" />
7
+
8
+ <div className="sb-container">
9
+ <div className='sb-section-title'>
10
+ # Liner Design System에 오신 것을 환영합니다.
11
+
12
+ Liner Design System은 지속가능한 방식으로 디자인의 구성요소를 만듭니다.
13
+
14
+ </div>
15
+ <div>
16
+ <div>
17
+ <Image
18
+ src={Styling}
19
+ alt="A wall of logos representing different styling technologies"
20
+ width={200}
21
+ height={0}
22
+ style={{ width: '100%', height: 'auto', borderRadius: "10px" }}
23
+ />
24
+ </div>
25
+ </div>
26
+
27
+ <h2 style={{ marginTop: '40px' }}>developer Guide</h2>
28
+
29
+ `npm i @liner-fe/design-token`
30
+
31
+ <p>마지막 수정자: 엘리엇 (2024. 06. 13)</p>
32
+ </div>
@@ -0,0 +1,152 @@
1
+ import type { Meta, StoryObj } from '@storybook/react';
2
+ import { Button, ButtonProps } from '.';
3
+
4
+ const meta: Meta<typeof Button> = {
5
+ title: 'Components/Button',
6
+ component: Button,
7
+ args: {
8
+ children: 'Button',
9
+ level: 'primary',
10
+ align: 'center',
11
+ size: 'cta',
12
+ disabled: false,
13
+ },
14
+ argTypes: {
15
+ children: {
16
+ control: {
17
+ type: 'text',
18
+ },
19
+ description: '버튼 안에 표시할 컨텐츠',
20
+ },
21
+ level: {
22
+ options: ['primary', 'secondary', 'tertiary', 'quaternary', 'quinary', 'negative', 'inverse'],
23
+ control: {
24
+ type: 'select',
25
+ },
26
+ description: '버튼의 레벨 타입을 설정합니다.',
27
+ },
28
+ align: {
29
+ options: ['center', 'spaceBetween'],
30
+ control: {
31
+ type: 'inline-radio',
32
+ },
33
+ description: '버튼 안의 컨텐츠의 정렬 방식을 설정합니다.',
34
+ },
35
+ size: {
36
+ options: ['cta', 'l', 'm', 's'],
37
+ control: {
38
+ type: 'inline-radio',
39
+ },
40
+ description: '버튼의 크기를 설정합니다.',
41
+ },
42
+ disabled: {
43
+ control: {
44
+ type: 'boolean',
45
+ default: false,
46
+ },
47
+ description: '버튼의 비활성화 여부를 설정합니다.',
48
+ },
49
+ },
50
+ decorators: [
51
+ Story => (
52
+ <article
53
+ style={{
54
+ display: 'flex',
55
+ gap: '10px',
56
+ flexWrap: 'wrap',
57
+ alignItems: 'flex-end',
58
+ }}
59
+ >
60
+ <Story />
61
+ </article>
62
+ ),
63
+ ],
64
+ tags: ['autodocs'],
65
+ };
66
+ export default meta;
67
+
68
+ type Story = StoryObj<typeof meta>;
69
+
70
+ /**
71
+ * 기본 버튼
72
+ */
73
+ export const Default: Story = {
74
+ args: {
75
+ level: 'primary',
76
+ align: 'center',
77
+ size: 'cta',
78
+ disabled: false,
79
+ },
80
+
81
+ render: args => <Button {...args}>{args.children}</Button>,
82
+ };
83
+
84
+ const LEVELS: ButtonProps['level'][] = [
85
+ 'primary',
86
+ 'secondary',
87
+ 'tertiary',
88
+ 'quaternary',
89
+ 'quinary',
90
+ 'negative',
91
+ 'inverse',
92
+ ];
93
+
94
+ /**
95
+ * level별 버튼
96
+ */
97
+ export const Level: Story = {
98
+ render: args => (
99
+ <>
100
+ {LEVELS.map(level => (
101
+ <Button {...args} level={level} key={level}>
102
+ {level}
103
+ </Button>
104
+ ))}
105
+ </>
106
+ ),
107
+ };
108
+
109
+ const ALIGN_OPTIONS: ButtonProps['align'][] = ['center', 'spaceBetween'];
110
+
111
+ /**
112
+ * align별 버튼
113
+ */
114
+ export const Align: Story = {
115
+ render: args => (
116
+ <>
117
+ {ALIGN_OPTIONS.map(align => (
118
+ <Button {...args} align={align} key={align}>
119
+ {align}
120
+ </Button>
121
+ ))}
122
+ </>
123
+ ),
124
+ };
125
+
126
+ const SIZE_OPTIONS: ButtonProps['size'][] = ['cta', 'l', 'm', 's'];
127
+
128
+ /**
129
+ * size별 버튼
130
+ */
131
+ export const Size: Story = {
132
+ render: args => (
133
+ <>
134
+ {SIZE_OPTIONS.map(size => (
135
+ <Button {...args} size={size} key={size}>
136
+ {size}
137
+ </Button>
138
+ ))}
139
+ </>
140
+ ),
141
+ };
142
+
143
+ /**
144
+ * 버튼의 비활성화 상태
145
+ */
146
+ export const Disabled: Story = {
147
+ render: args => (
148
+ <Button {...args} disabled>
149
+ Disabled
150
+ </Button>
151
+ ),
152
+ };