soongle-ui 0.1.2 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.mts CHANGED
@@ -1,9 +1,18 @@
1
1
  import * as React from 'react';
2
2
 
3
- interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
4
- children: React.ReactNode;
3
+ interface ButtonProps$1 extends React.ButtonHTMLAttributes<HTMLButtonElement> {
4
+ children?: React.ReactNode;
5
+ variant?: "default" | "primary" | "secondary" | "danger" | "ghost";
6
+ size?: "sm" | "md" | "lg";
7
+ className?: string;
5
8
  }
9
+ declare const Button: React.ForwardRefExoticComponent<ButtonProps$1 & React.RefAttributes<HTMLButtonElement>>;
6
10
 
7
- declare const Button: React.ForwardRefExoticComponent<ButtonProps & React.RefAttributes<HTMLButtonElement>>;
11
+ interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
12
+ children?: React.ReactNode;
13
+ variant?: "default" | "primary" | "secondary" | "danger" | "ghost";
14
+ size?: "sm" | "md" | "lg";
15
+ className?: string;
16
+ }
8
17
 
9
18
  export { Button, type ButtonProps };
package/dist/index.d.ts CHANGED
@@ -1,9 +1,18 @@
1
1
  import * as React from 'react';
2
2
 
3
- interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
4
- children: React.ReactNode;
3
+ interface ButtonProps$1 extends React.ButtonHTMLAttributes<HTMLButtonElement> {
4
+ children?: React.ReactNode;
5
+ variant?: "default" | "primary" | "secondary" | "danger" | "ghost";
6
+ size?: "sm" | "md" | "lg";
7
+ className?: string;
5
8
  }
9
+ declare const Button: React.ForwardRefExoticComponent<ButtonProps$1 & React.RefAttributes<HTMLButtonElement>>;
6
10
 
7
- declare const Button: React.ForwardRefExoticComponent<ButtonProps & React.RefAttributes<HTMLButtonElement>>;
11
+ interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
12
+ children?: React.ReactNode;
13
+ variant?: "default" | "primary" | "secondary" | "danger" | "ghost";
14
+ size?: "sm" | "md" | "lg";
15
+ className?: string;
16
+ }
8
17
 
9
18
  export { Button, type ButtonProps };
package/dist/index.js CHANGED
@@ -36,17 +36,104 @@ __export(index_exports, {
36
36
  module.exports = __toCommonJS(index_exports);
37
37
 
38
38
  // src/components/Button/Button.tsx
39
+ var React2 = __toESM(require("react"));
40
+
41
+ // src/components/Text/Text.tsx
39
42
  var React = __toESM(require("react"));
40
43
  var import_jsx_runtime = require("react/jsx-runtime");
41
- var Button = React.forwardRef(
42
- ({ className = "", children, ...props }, ref) => {
43
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
44
+ var sizeClasses = {
45
+ xs: "text-xs",
46
+ sm: "text-sm",
47
+ base: "text-base",
48
+ lg: "text-lg",
49
+ xl: "text-xl",
50
+ "2xl": "text-2xl",
51
+ "3xl": "text-3xl",
52
+ "4xl": "text-4xl"
53
+ };
54
+ var weightClasses = {
55
+ light: "font-light",
56
+ normal: "font-normal",
57
+ medium: "font-medium",
58
+ semibold: "font-semibold",
59
+ bold: "font-bold"
60
+ };
61
+ var colorClasses = {
62
+ default: "text-gray-900",
63
+ muted: "text-gray-500",
64
+ primary: "text-blue-600",
65
+ secondary: "text-green-600",
66
+ danger: "text-red-600",
67
+ success: "text-emerald-600"
68
+ };
69
+ var alignClasses = {
70
+ left: "text-left",
71
+ center: "text-center",
72
+ right: "text-right"
73
+ };
74
+ var Text = React.forwardRef(
75
+ ({
76
+ children,
77
+ as: Component = "p",
78
+ size = "base",
79
+ weight = "normal",
80
+ color = "default",
81
+ align = "left",
82
+ className = "",
83
+ ...props
84
+ }, ref) => {
85
+ const classes = [
86
+ sizeClasses[size],
87
+ weightClasses[weight],
88
+ colorClasses[color],
89
+ alignClasses[align],
90
+ className
91
+ ].filter(Boolean).join(" ");
92
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Component, { ref, className: classes, ...props, children });
93
+ }
94
+ );
95
+ Text.displayName = "Text";
96
+
97
+ // src/components/Button/Button.tsx
98
+ var import_jsx_runtime2 = require("react/jsx-runtime");
99
+ var variantClasses = {
100
+ default: "bg-gray-200 text-gray-900 hover:bg-gray-300",
101
+ primary: "bg-blue-600 text-white hover:bg-blue-700",
102
+ secondary: "bg-green-600 text-white hover:bg-green-700",
103
+ danger: "bg-red-600 text-white hover:bg-red-700",
104
+ ghost: "bg-transparent text-gray-700 hover:bg-gray-100"
105
+ };
106
+ var sizeClasses2 = {
107
+ sm: "px-3 py-1.5",
108
+ md: "px-4 py-2",
109
+ lg: "px-6 py-3"
110
+ };
111
+ var textSizeMap = {
112
+ sm: "sm",
113
+ md: "base",
114
+ lg: "lg"
115
+ };
116
+ var Button = React2.forwardRef(
117
+ ({ className = "", children, variant = "default", size = "md", ...props }, ref) => {
118
+ const variantClass = variantClasses[variant];
119
+ const sizeClass = sizeClasses2[size];
120
+ const textSize = textSizeMap[size];
121
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
44
122
  "button",
45
123
  {
46
124
  ref,
47
- className: `cursor-pointer inline-flex items-center justify-center rounded-md px-4 py-2 font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 ${className}`,
125
+ className: `cursor-pointer inline-flex items-center justify-center rounded-md font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 ${variantClass} ${sizeClass} ${className}`,
48
126
  ...props,
49
- children
127
+ children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
128
+ Text,
129
+ {
130
+ as: "span",
131
+ size: textSize,
132
+ weight: "medium",
133
+ className: "leading-none",
134
+ children
135
+ }
136
+ )
50
137
  }
51
138
  );
52
139
  }
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/components/Button/Button.tsx"],"sourcesContent":["// Export components\r\nexport * from './components';\r\n","import * as React from 'react';\r\nimport { ButtonProps } from './types';\r\n\r\nexport const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\r\n ({ className = '', children, ...props }, ref) => {\r\n return (\r\n <button \r\n ref={ref} \r\n className={`cursor-pointer inline-flex items-center justify-center rounded-md px-4 py-2 font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 ${className}`}\r\n {...props}\r\n >\r\n {children}\r\n </button>\r\n );\r\n }\r\n);\r\n\r\nButton.displayName = 'Button';\r\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,YAAuB;AAMjB;AAHC,IAAM,SAAe;AAAA,EAC1B,CAAC,EAAE,YAAY,IAAI,UAAU,GAAG,MAAM,GAAG,QAAQ;AAC/C,WACE;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA,WAAW,0OAA0O,SAAS;AAAA,QAC7P,GAAG;AAAA,QAEH;AAAA;AAAA,IACH;AAAA,EAEJ;AACF;AAEA,OAAO,cAAc;","names":[]}
1
+ {"version":3,"sources":["../src/index.ts","../src/components/Button/Button.tsx","../src/components/Text/Text.tsx"],"sourcesContent":["// Export components\r\nexport * from './components';\r\n","import * as React from \"react\";\r\nimport { Text } from \"../Text/Text\";\r\n\r\nexport interface ButtonProps\r\n extends React.ButtonHTMLAttributes<HTMLButtonElement> {\r\n children?: React.ReactNode;\r\n variant?: \"default\" | \"primary\" | \"secondary\" | \"danger\" | \"ghost\";\r\n size?: \"sm\" | \"md\" | \"lg\";\r\n className?: string;\r\n}\r\n\r\nconst variantClasses = {\r\n default: \"bg-gray-200 text-gray-900 hover:bg-gray-300\",\r\n primary: \"bg-blue-600 text-white hover:bg-blue-700\",\r\n secondary: \"bg-green-600 text-white hover:bg-green-700\",\r\n danger: \"bg-red-600 text-white hover:bg-red-700\",\r\n ghost: \"bg-transparent text-gray-700 hover:bg-gray-100\",\r\n};\r\n\r\nconst sizeClasses = {\r\n sm: \"px-3 py-1.5\",\r\n md: \"px-4 py-2\",\r\n lg: \"px-6 py-3\",\r\n};\r\n\r\nconst textSizeMap = {\r\n sm: \"sm\" as const,\r\n md: \"base\" as const,\r\n lg: \"lg\" as const,\r\n};\r\n\r\nexport const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\r\n (\r\n { className = \"\", children, variant = \"default\", size = \"md\", ...props },\r\n ref\r\n ) => {\r\n const variantClass = variantClasses[variant];\r\n const sizeClass = sizeClasses[size];\r\n const textSize = textSizeMap[size];\r\n\r\n return (\r\n <button\r\n ref={ref}\r\n className={`cursor-pointer inline-flex items-center justify-center rounded-md font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 ${variantClass} ${sizeClass} ${className}`}\r\n {...props}\r\n >\r\n <Text\r\n as=\"span\"\r\n size={textSize}\r\n weight=\"medium\"\r\n className=\"leading-none\"\r\n >\r\n {children}\r\n </Text>\r\n </button>\r\n );\r\n }\r\n);\r\n\r\nButton.displayName = \"Button\";\r\n","import * as React from \"react\";\r\n\r\nexport interface TextProps {\r\n children?: React.ReactNode;\r\n as?: \"p\" | \"span\" | \"div\" | \"label\" | \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\";\r\n size?: \"xs\" | \"sm\" | \"base\" | \"lg\" | \"xl\" | \"2xl\" | \"3xl\" | \"4xl\";\r\n weight?: \"light\" | \"normal\" | \"medium\" | \"semibold\" | \"bold\";\r\n color?: \"default\" | \"muted\" | \"primary\" | \"secondary\" | \"danger\" | \"success\";\r\n align?: \"left\" | \"center\" | \"right\";\r\n className?: string;\r\n}\r\n\r\nconst sizeClasses = {\r\n xs: \"text-xs\",\r\n sm: \"text-sm\",\r\n base: \"text-base\",\r\n lg: \"text-lg\",\r\n xl: \"text-xl\",\r\n \"2xl\": \"text-2xl\",\r\n \"3xl\": \"text-3xl\",\r\n \"4xl\": \"text-4xl\",\r\n};\r\n\r\nconst weightClasses = {\r\n light: \"font-light\",\r\n normal: \"font-normal\",\r\n medium: \"font-medium\",\r\n semibold: \"font-semibold\",\r\n bold: \"font-bold\",\r\n};\r\n\r\nconst colorClasses = {\r\n default: \"text-gray-900\",\r\n muted: \"text-gray-500\",\r\n primary: \"text-blue-600\",\r\n secondary: \"text-green-600\",\r\n danger: \"text-red-600\",\r\n success: \"text-emerald-600\",\r\n};\r\n\r\nconst alignClasses = {\r\n left: \"text-left\",\r\n center: \"text-center\",\r\n right: \"text-right\",\r\n};\r\n\r\nexport const Text = React.forwardRef<HTMLElement, TextProps>(\r\n (\r\n {\r\n children,\r\n as: Component = \"p\",\r\n size = \"base\",\r\n weight = \"normal\",\r\n color = \"default\",\r\n align = \"left\",\r\n className = \"\",\r\n ...props\r\n },\r\n ref\r\n ) => {\r\n const classes = [\r\n sizeClasses[size],\r\n weightClasses[weight],\r\n colorClasses[color],\r\n alignClasses[align],\r\n className,\r\n ]\r\n .filter(Boolean)\r\n .join(\" \");\r\n\r\n return (\r\n <Component ref={ref as any} className={classes} {...props}>\r\n {children}\r\n </Component>\r\n );\r\n }\r\n);\r\n\r\nText.displayName = \"Text\";\r\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAAAA,SAAuB;;;ACAvB,YAAuB;AAuEjB;AA3DN,IAAM,cAAc;AAAA,EAClB,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AACT;AAEA,IAAM,gBAAgB;AAAA,EACpB,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,MAAM;AACR;AAEA,IAAM,eAAe;AAAA,EACnB,SAAS;AAAA,EACT,OAAO;AAAA,EACP,SAAS;AAAA,EACT,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,SAAS;AACX;AAEA,IAAM,eAAe;AAAA,EACnB,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,OAAO;AACT;AAEO,IAAM,OAAa;AAAA,EACxB,CACE;AAAA,IACE;AAAA,IACA,IAAI,YAAY;AAAA,IAChB,OAAO;AAAA,IACP,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,YAAY;AAAA,IACZ,GAAG;AAAA,EACL,GACA,QACG;AACH,UAAM,UAAU;AAAA,MACd,YAAY,IAAI;AAAA,MAChB,cAAc,MAAM;AAAA,MACpB,aAAa,KAAK;AAAA,MAClB,aAAa,KAAK;AAAA,MAClB;AAAA,IACF,EACG,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,WACE,4CAAC,aAAU,KAAiB,WAAW,SAAU,GAAG,OACjD,UACH;AAAA,EAEJ;AACF;AAEA,KAAK,cAAc;;;ADhCX,IAAAC,sBAAA;AAnCR,IAAM,iBAAiB;AAAA,EACrB,SAAS;AAAA,EACT,SAAS;AAAA,EACT,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,OAAO;AACT;AAEA,IAAMC,eAAc;AAAA,EAClB,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN;AAEA,IAAM,cAAc;AAAA,EAClB,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN;AAEO,IAAM,SAAe;AAAA,EAC1B,CACE,EAAE,YAAY,IAAI,UAAU,UAAU,WAAW,OAAO,MAAM,GAAG,MAAM,GACvE,QACG;AACH,UAAM,eAAe,eAAe,OAAO;AAC3C,UAAM,YAAYA,aAAY,IAAI;AAClC,UAAM,WAAW,YAAY,IAAI;AAEjC,WACE;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA,WAAW,gOAAgO,YAAY,IAAI,SAAS,IAAI,SAAS;AAAA,QAChR,GAAG;AAAA,QAEJ;AAAA,UAAC;AAAA;AAAA,YACC,IAAG;AAAA,YACH,MAAM;AAAA,YACN,QAAO;AAAA,YACP,WAAU;AAAA,YAET;AAAA;AAAA,QACH;AAAA;AAAA,IACF;AAAA,EAEJ;AACF;AAEA,OAAO,cAAc;","names":["React","import_jsx_runtime","sizeClasses"]}
package/dist/index.mjs CHANGED
@@ -1,17 +1,104 @@
1
1
  "use client";
2
2
 
3
3
  // src/components/Button/Button.tsx
4
+ import * as React2 from "react";
5
+
6
+ // src/components/Text/Text.tsx
4
7
  import * as React from "react";
5
8
  import { jsx } from "react/jsx-runtime";
6
- var Button = React.forwardRef(
7
- ({ className = "", children, ...props }, ref) => {
8
- return /* @__PURE__ */ jsx(
9
+ var sizeClasses = {
10
+ xs: "text-xs",
11
+ sm: "text-sm",
12
+ base: "text-base",
13
+ lg: "text-lg",
14
+ xl: "text-xl",
15
+ "2xl": "text-2xl",
16
+ "3xl": "text-3xl",
17
+ "4xl": "text-4xl"
18
+ };
19
+ var weightClasses = {
20
+ light: "font-light",
21
+ normal: "font-normal",
22
+ medium: "font-medium",
23
+ semibold: "font-semibold",
24
+ bold: "font-bold"
25
+ };
26
+ var colorClasses = {
27
+ default: "text-gray-900",
28
+ muted: "text-gray-500",
29
+ primary: "text-blue-600",
30
+ secondary: "text-green-600",
31
+ danger: "text-red-600",
32
+ success: "text-emerald-600"
33
+ };
34
+ var alignClasses = {
35
+ left: "text-left",
36
+ center: "text-center",
37
+ right: "text-right"
38
+ };
39
+ var Text = React.forwardRef(
40
+ ({
41
+ children,
42
+ as: Component = "p",
43
+ size = "base",
44
+ weight = "normal",
45
+ color = "default",
46
+ align = "left",
47
+ className = "",
48
+ ...props
49
+ }, ref) => {
50
+ const classes = [
51
+ sizeClasses[size],
52
+ weightClasses[weight],
53
+ colorClasses[color],
54
+ alignClasses[align],
55
+ className
56
+ ].filter(Boolean).join(" ");
57
+ return /* @__PURE__ */ jsx(Component, { ref, className: classes, ...props, children });
58
+ }
59
+ );
60
+ Text.displayName = "Text";
61
+
62
+ // src/components/Button/Button.tsx
63
+ import { jsx as jsx2 } from "react/jsx-runtime";
64
+ var variantClasses = {
65
+ default: "bg-gray-200 text-gray-900 hover:bg-gray-300",
66
+ primary: "bg-blue-600 text-white hover:bg-blue-700",
67
+ secondary: "bg-green-600 text-white hover:bg-green-700",
68
+ danger: "bg-red-600 text-white hover:bg-red-700",
69
+ ghost: "bg-transparent text-gray-700 hover:bg-gray-100"
70
+ };
71
+ var sizeClasses2 = {
72
+ sm: "px-3 py-1.5",
73
+ md: "px-4 py-2",
74
+ lg: "px-6 py-3"
75
+ };
76
+ var textSizeMap = {
77
+ sm: "sm",
78
+ md: "base",
79
+ lg: "lg"
80
+ };
81
+ var Button = React2.forwardRef(
82
+ ({ className = "", children, variant = "default", size = "md", ...props }, ref) => {
83
+ const variantClass = variantClasses[variant];
84
+ const sizeClass = sizeClasses2[size];
85
+ const textSize = textSizeMap[size];
86
+ return /* @__PURE__ */ jsx2(
9
87
  "button",
10
88
  {
11
89
  ref,
12
- className: `cursor-pointer inline-flex items-center justify-center rounded-md px-4 py-2 font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 ${className}`,
90
+ className: `cursor-pointer inline-flex items-center justify-center rounded-md font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 ${variantClass} ${sizeClass} ${className}`,
13
91
  ...props,
14
- children
92
+ children: /* @__PURE__ */ jsx2(
93
+ Text,
94
+ {
95
+ as: "span",
96
+ size: textSize,
97
+ weight: "medium",
98
+ className: "leading-none",
99
+ children
100
+ }
101
+ )
15
102
  }
16
103
  );
17
104
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Button/Button.tsx"],"sourcesContent":["import * as React from 'react';\r\nimport { ButtonProps } from './types';\r\n\r\nexport const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\r\n ({ className = '', children, ...props }, ref) => {\r\n return (\r\n <button \r\n ref={ref} \r\n className={`cursor-pointer inline-flex items-center justify-center rounded-md px-4 py-2 font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 ${className}`}\r\n {...props}\r\n >\r\n {children}\r\n </button>\r\n );\r\n }\r\n);\r\n\r\nButton.displayName = 'Button';\r\n"],"mappings":";;;AAAA,YAAY,WAAW;AAMjB;AAHC,IAAM,SAAe;AAAA,EAC1B,CAAC,EAAE,YAAY,IAAI,UAAU,GAAG,MAAM,GAAG,QAAQ;AAC/C,WACE;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA,WAAW,0OAA0O,SAAS;AAAA,QAC7P,GAAG;AAAA,QAEH;AAAA;AAAA,IACH;AAAA,EAEJ;AACF;AAEA,OAAO,cAAc;","names":[]}
1
+ {"version":3,"sources":["../src/components/Button/Button.tsx","../src/components/Text/Text.tsx"],"sourcesContent":["import * as React from \"react\";\r\nimport { Text } from \"../Text/Text\";\r\n\r\nexport interface ButtonProps\r\n extends React.ButtonHTMLAttributes<HTMLButtonElement> {\r\n children?: React.ReactNode;\r\n variant?: \"default\" | \"primary\" | \"secondary\" | \"danger\" | \"ghost\";\r\n size?: \"sm\" | \"md\" | \"lg\";\r\n className?: string;\r\n}\r\n\r\nconst variantClasses = {\r\n default: \"bg-gray-200 text-gray-900 hover:bg-gray-300\",\r\n primary: \"bg-blue-600 text-white hover:bg-blue-700\",\r\n secondary: \"bg-green-600 text-white hover:bg-green-700\",\r\n danger: \"bg-red-600 text-white hover:bg-red-700\",\r\n ghost: \"bg-transparent text-gray-700 hover:bg-gray-100\",\r\n};\r\n\r\nconst sizeClasses = {\r\n sm: \"px-3 py-1.5\",\r\n md: \"px-4 py-2\",\r\n lg: \"px-6 py-3\",\r\n};\r\n\r\nconst textSizeMap = {\r\n sm: \"sm\" as const,\r\n md: \"base\" as const,\r\n lg: \"lg\" as const,\r\n};\r\n\r\nexport const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\r\n (\r\n { className = \"\", children, variant = \"default\", size = \"md\", ...props },\r\n ref\r\n ) => {\r\n const variantClass = variantClasses[variant];\r\n const sizeClass = sizeClasses[size];\r\n const textSize = textSizeMap[size];\r\n\r\n return (\r\n <button\r\n ref={ref}\r\n className={`cursor-pointer inline-flex items-center justify-center rounded-md font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 ${variantClass} ${sizeClass} ${className}`}\r\n {...props}\r\n >\r\n <Text\r\n as=\"span\"\r\n size={textSize}\r\n weight=\"medium\"\r\n className=\"leading-none\"\r\n >\r\n {children}\r\n </Text>\r\n </button>\r\n );\r\n }\r\n);\r\n\r\nButton.displayName = \"Button\";\r\n","import * as React from \"react\";\r\n\r\nexport interface TextProps {\r\n children?: React.ReactNode;\r\n as?: \"p\" | \"span\" | \"div\" | \"label\" | \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\";\r\n size?: \"xs\" | \"sm\" | \"base\" | \"lg\" | \"xl\" | \"2xl\" | \"3xl\" | \"4xl\";\r\n weight?: \"light\" | \"normal\" | \"medium\" | \"semibold\" | \"bold\";\r\n color?: \"default\" | \"muted\" | \"primary\" | \"secondary\" | \"danger\" | \"success\";\r\n align?: \"left\" | \"center\" | \"right\";\r\n className?: string;\r\n}\r\n\r\nconst sizeClasses = {\r\n xs: \"text-xs\",\r\n sm: \"text-sm\",\r\n base: \"text-base\",\r\n lg: \"text-lg\",\r\n xl: \"text-xl\",\r\n \"2xl\": \"text-2xl\",\r\n \"3xl\": \"text-3xl\",\r\n \"4xl\": \"text-4xl\",\r\n};\r\n\r\nconst weightClasses = {\r\n light: \"font-light\",\r\n normal: \"font-normal\",\r\n medium: \"font-medium\",\r\n semibold: \"font-semibold\",\r\n bold: \"font-bold\",\r\n};\r\n\r\nconst colorClasses = {\r\n default: \"text-gray-900\",\r\n muted: \"text-gray-500\",\r\n primary: \"text-blue-600\",\r\n secondary: \"text-green-600\",\r\n danger: \"text-red-600\",\r\n success: \"text-emerald-600\",\r\n};\r\n\r\nconst alignClasses = {\r\n left: \"text-left\",\r\n center: \"text-center\",\r\n right: \"text-right\",\r\n};\r\n\r\nexport const Text = React.forwardRef<HTMLElement, TextProps>(\r\n (\r\n {\r\n children,\r\n as: Component = \"p\",\r\n size = \"base\",\r\n weight = \"normal\",\r\n color = \"default\",\r\n align = \"left\",\r\n className = \"\",\r\n ...props\r\n },\r\n ref\r\n ) => {\r\n const classes = [\r\n sizeClasses[size],\r\n weightClasses[weight],\r\n colorClasses[color],\r\n alignClasses[align],\r\n className,\r\n ]\r\n .filter(Boolean)\r\n .join(\" \");\r\n\r\n return (\r\n <Component ref={ref as any} className={classes} {...props}>\r\n {children}\r\n </Component>\r\n );\r\n }\r\n);\r\n\r\nText.displayName = \"Text\";\r\n"],"mappings":";;;AAAA,YAAYA,YAAW;;;ACAvB,YAAY,WAAW;AAuEjB;AA3DN,IAAM,cAAc;AAAA,EAClB,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AACT;AAEA,IAAM,gBAAgB;AAAA,EACpB,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,MAAM;AACR;AAEA,IAAM,eAAe;AAAA,EACnB,SAAS;AAAA,EACT,OAAO;AAAA,EACP,SAAS;AAAA,EACT,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,SAAS;AACX;AAEA,IAAM,eAAe;AAAA,EACnB,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,OAAO;AACT;AAEO,IAAM,OAAa;AAAA,EACxB,CACE;AAAA,IACE;AAAA,IACA,IAAI,YAAY;AAAA,IAChB,OAAO;AAAA,IACP,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,YAAY;AAAA,IACZ,GAAG;AAAA,EACL,GACA,QACG;AACH,UAAM,UAAU;AAAA,MACd,YAAY,IAAI;AAAA,MAChB,cAAc,MAAM;AAAA,MACpB,aAAa,KAAK;AAAA,MAClB,aAAa,KAAK;AAAA,MAClB;AAAA,IACF,EACG,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,WACE,oBAAC,aAAU,KAAiB,WAAW,SAAU,GAAG,OACjD,UACH;AAAA,EAEJ;AACF;AAEA,KAAK,cAAc;;;ADhCX,gBAAAC,YAAA;AAnCR,IAAM,iBAAiB;AAAA,EACrB,SAAS;AAAA,EACT,SAAS;AAAA,EACT,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,OAAO;AACT;AAEA,IAAMC,eAAc;AAAA,EAClB,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN;AAEA,IAAM,cAAc;AAAA,EAClB,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN;AAEO,IAAM,SAAe;AAAA,EAC1B,CACE,EAAE,YAAY,IAAI,UAAU,UAAU,WAAW,OAAO,MAAM,GAAG,MAAM,GACvE,QACG;AACH,UAAM,eAAe,eAAe,OAAO;AAC3C,UAAM,YAAYA,aAAY,IAAI;AAClC,UAAM,WAAW,YAAY,IAAI;AAEjC,WACE,gBAAAD;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA,WAAW,gOAAgO,YAAY,IAAI,SAAS,IAAI,SAAS;AAAA,QAChR,GAAG;AAAA,QAEJ,0BAAAA;AAAA,UAAC;AAAA;AAAA,YACC,IAAG;AAAA,YACH,MAAM;AAAA,YACN,QAAO;AAAA,YACP,WAAU;AAAA,YAET;AAAA;AAAA,QACH;AAAA;AAAA,IACF;AAAA,EAEJ;AACF;AAEA,OAAO,cAAc;","names":["React","jsx","sizeClasses"]}
package/dist/styles.css CHANGED
@@ -7,8 +7,42 @@
7
7
  "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
8
8
  --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono",
9
9
  "Courier New", monospace;
10
+ --color-red-600: oklch(57.7% 0.245 27.325);
11
+ --color-red-700: oklch(50.5% 0.213 27.518);
12
+ --color-green-600: oklch(62.7% 0.194 149.214);
13
+ --color-green-700: oklch(52.7% 0.154 150.069);
14
+ --color-emerald-600: oklch(59.6% 0.145 163.225);
15
+ --color-blue-600: oklch(54.6% 0.245 262.881);
16
+ --color-blue-700: oklch(48.8% 0.243 264.376);
17
+ --color-gray-100: oklch(96.7% 0.003 264.542);
18
+ --color-gray-200: oklch(92.8% 0.006 264.531);
19
+ --color-gray-300: oklch(87.2% 0.01 258.338);
20
+ --color-gray-500: oklch(55.1% 0.027 264.364);
21
+ --color-gray-700: oklch(37.3% 0.034 259.733);
22
+ --color-gray-900: oklch(21% 0.034 264.665);
23
+ --color-white: #fff;
10
24
  --spacing: 0.25rem;
25
+ --text-xs: 0.75rem;
26
+ --text-xs--line-height: calc(1 / 0.75);
27
+ --text-sm: 0.875rem;
28
+ --text-sm--line-height: calc(1.25 / 0.875);
29
+ --text-base: 1rem;
30
+ --text-base--line-height: calc(1.5 / 1);
31
+ --text-lg: 1.125rem;
32
+ --text-lg--line-height: calc(1.75 / 1.125);
33
+ --text-xl: 1.25rem;
34
+ --text-xl--line-height: calc(1.75 / 1.25);
35
+ --text-2xl: 1.5rem;
36
+ --text-2xl--line-height: calc(2 / 1.5);
37
+ --text-3xl: 1.875rem;
38
+ --text-3xl--line-height: calc(2.25 / 1.875);
39
+ --text-4xl: 2.25rem;
40
+ --text-4xl--line-height: calc(2.5 / 2.25);
41
+ --font-weight-light: 300;
42
+ --font-weight-normal: 400;
11
43
  --font-weight-medium: 500;
44
+ --font-weight-semibold: 600;
45
+ --font-weight-bold: 700;
12
46
  --radius-md: 0.375rem;
13
47
  --default-transition-duration: 150ms;
14
48
  --default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
@@ -165,36 +199,195 @@
165
199
  }
166
200
  }
167
201
  @layer utilities {
202
+ .flex {
203
+ display: flex;
204
+ }
168
205
  .inline-flex {
169
206
  display: inline-flex;
170
207
  }
171
208
  .cursor-pointer {
172
209
  cursor: pointer;
173
210
  }
211
+ .flex-col {
212
+ flex-direction: column;
213
+ }
174
214
  .items-center {
175
215
  align-items: center;
176
216
  }
177
217
  .justify-center {
178
218
  justify-content: center;
179
219
  }
220
+ .gap-2 {
221
+ gap: calc(var(--spacing) * 2);
222
+ }
223
+ .gap-4 {
224
+ gap: calc(var(--spacing) * 4);
225
+ }
180
226
  .rounded-md {
181
227
  border-radius: var(--radius-md);
182
228
  }
229
+ .bg-blue-600 {
230
+ background-color: var(--color-blue-600);
231
+ }
232
+ .bg-gray-200 {
233
+ background-color: var(--color-gray-200);
234
+ }
235
+ .bg-green-600 {
236
+ background-color: var(--color-green-600);
237
+ }
238
+ .bg-red-600 {
239
+ background-color: var(--color-red-600);
240
+ }
241
+ .bg-transparent {
242
+ background-color: transparent;
243
+ }
244
+ .px-3 {
245
+ padding-inline: calc(var(--spacing) * 3);
246
+ }
183
247
  .px-4 {
184
248
  padding-inline: calc(var(--spacing) * 4);
185
249
  }
250
+ .px-6 {
251
+ padding-inline: calc(var(--spacing) * 6);
252
+ }
253
+ .py-1\.5 {
254
+ padding-block: calc(var(--spacing) * 1.5);
255
+ }
186
256
  .py-2 {
187
257
  padding-block: calc(var(--spacing) * 2);
188
258
  }
259
+ .py-3 {
260
+ padding-block: calc(var(--spacing) * 3);
261
+ }
262
+ .text-center {
263
+ text-align: center;
264
+ }
265
+ .text-left {
266
+ text-align: left;
267
+ }
268
+ .text-right {
269
+ text-align: right;
270
+ }
271
+ .text-2xl {
272
+ font-size: var(--text-2xl);
273
+ line-height: var(--tw-leading, var(--text-2xl--line-height));
274
+ }
275
+ .text-3xl {
276
+ font-size: var(--text-3xl);
277
+ line-height: var(--tw-leading, var(--text-3xl--line-height));
278
+ }
279
+ .text-4xl {
280
+ font-size: var(--text-4xl);
281
+ line-height: var(--tw-leading, var(--text-4xl--line-height));
282
+ }
283
+ .text-base {
284
+ font-size: var(--text-base);
285
+ line-height: var(--tw-leading, var(--text-base--line-height));
286
+ }
287
+ .text-lg {
288
+ font-size: var(--text-lg);
289
+ line-height: var(--tw-leading, var(--text-lg--line-height));
290
+ }
291
+ .text-sm {
292
+ font-size: var(--text-sm);
293
+ line-height: var(--tw-leading, var(--text-sm--line-height));
294
+ }
295
+ .text-xl {
296
+ font-size: var(--text-xl);
297
+ line-height: var(--tw-leading, var(--text-xl--line-height));
298
+ }
299
+ .text-xs {
300
+ font-size: var(--text-xs);
301
+ line-height: var(--tw-leading, var(--text-xs--line-height));
302
+ }
303
+ .leading-none {
304
+ --tw-leading: 1;
305
+ line-height: 1;
306
+ }
307
+ .font-bold {
308
+ --tw-font-weight: var(--font-weight-bold);
309
+ font-weight: var(--font-weight-bold);
310
+ }
311
+ .font-light {
312
+ --tw-font-weight: var(--font-weight-light);
313
+ font-weight: var(--font-weight-light);
314
+ }
189
315
  .font-medium {
190
316
  --tw-font-weight: var(--font-weight-medium);
191
317
  font-weight: var(--font-weight-medium);
192
318
  }
319
+ .font-normal {
320
+ --tw-font-weight: var(--font-weight-normal);
321
+ font-weight: var(--font-weight-normal);
322
+ }
323
+ .font-semibold {
324
+ --tw-font-weight: var(--font-weight-semibold);
325
+ font-weight: var(--font-weight-semibold);
326
+ }
327
+ .text-blue-600 {
328
+ color: var(--color-blue-600);
329
+ }
330
+ .text-emerald-600 {
331
+ color: var(--color-emerald-600);
332
+ }
333
+ .text-gray-500 {
334
+ color: var(--color-gray-500);
335
+ }
336
+ .text-gray-700 {
337
+ color: var(--color-gray-700);
338
+ }
339
+ .text-gray-900 {
340
+ color: var(--color-gray-900);
341
+ }
342
+ .text-green-600 {
343
+ color: var(--color-green-600);
344
+ }
345
+ .text-red-600 {
346
+ color: var(--color-red-600);
347
+ }
348
+ .text-white {
349
+ color: var(--color-white);
350
+ }
193
351
  .transition-colors {
194
352
  transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to;
195
353
  transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
196
354
  transition-duration: var(--tw-duration, var(--default-transition-duration));
197
355
  }
356
+ .hover\:bg-blue-700 {
357
+ &:hover {
358
+ @media (hover: hover) {
359
+ background-color: var(--color-blue-700);
360
+ }
361
+ }
362
+ }
363
+ .hover\:bg-gray-100 {
364
+ &:hover {
365
+ @media (hover: hover) {
366
+ background-color: var(--color-gray-100);
367
+ }
368
+ }
369
+ }
370
+ .hover\:bg-gray-300 {
371
+ &:hover {
372
+ @media (hover: hover) {
373
+ background-color: var(--color-gray-300);
374
+ }
375
+ }
376
+ }
377
+ .hover\:bg-green-700 {
378
+ &:hover {
379
+ @media (hover: hover) {
380
+ background-color: var(--color-green-700);
381
+ }
382
+ }
383
+ }
384
+ .hover\:bg-red-700 {
385
+ &:hover {
386
+ @media (hover: hover) {
387
+ background-color: var(--color-red-700);
388
+ }
389
+ }
390
+ }
198
391
  .focus-visible\:ring-2 {
199
392
  &:focus-visible {
200
393
  --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);
@@ -224,6 +417,10 @@
224
417
  }
225
418
  }
226
419
  }
420
+ @property --tw-leading {
421
+ syntax: "*";
422
+ inherits: false;
423
+ }
227
424
  @property --tw-font-weight {
228
425
  syntax: "*";
229
426
  inherits: false;
@@ -296,6 +493,7 @@
296
493
  @layer properties {
297
494
  @supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))) {
298
495
  *, ::before, ::after, ::backdrop {
496
+ --tw-leading: initial;
299
497
  --tw-font-weight: initial;
300
498
  --tw-shadow: 0 0 #0000;
301
499
  --tw-shadow-color: initial;
package/package.json CHANGED
@@ -1,51 +1,58 @@
1
- {
2
- "name": "soongle-ui",
3
- "version": "0.1.2",
4
- "description": "A design system library for React.js and Next.js with TailwindCSS v4 by Soongle",
5
- "publishConfig": {
6
- "access": "public"
7
- },
8
- "main": "./dist/index.js",
9
- "module": "./dist/index.mjs",
10
- "types": "./dist/index.d.ts",
11
- "exports": {
12
- ".": {
13
- "types": "./dist/index.d.ts",
14
- "import": "./dist/index.mjs",
15
- "require": "./dist/index.js"
16
- },
17
- "./styles.css": "./dist/styles.css"
18
- },
19
- "files": [
20
- "dist"
21
- ],
22
- "scripts": {
23
- "build": "tsup && npm run build:css",
24
- "build:css": "npx @tailwindcss/cli -i ./src/styles.css -o ./dist/styles.css",
25
- "dev": "tsup --watch",
26
- "type-check": "tsc --noEmit"
27
- },
28
- "keywords": [
29
- "design-system",
30
- "react",
31
- "nextjs",
32
- "tailwindcss",
33
- "ui-library"
34
- ],
35
- "author": "",
36
- "license": "MIT",
37
- "peerDependencies": {
38
- "react": "^18.0.0 || ^19.0.0",
39
- "react-dom": "^18.0.0 || ^19.0.0"
40
- },
41
- "devDependencies": {
42
- "@tailwindcss/cli": "^4.1.18",
43
- "@types/react": "^18.2.48",
44
- "@types/react-dom": "^18.2.18",
45
- "react": "^18.2.0",
46
- "react-dom": "^18.2.0",
47
- "tailwindcss": "^4.0.0",
48
- "tsup": "^8.0.1",
49
- "typescript": "^5.3.3"
50
- }
51
- }
1
+ {
2
+ "name": "soongle-ui",
3
+ "version": "0.1.3",
4
+ "description": "A design system library for React.js and Next.js with TailwindCSS v4 by Soongle",
5
+ "publishConfig": {
6
+ "access": "public"
7
+ },
8
+ "main": "./dist/index.js",
9
+ "module": "./dist/index.mjs",
10
+ "types": "./dist/index.d.ts",
11
+ "exports": {
12
+ ".": {
13
+ "types": "./dist/index.d.ts",
14
+ "import": "./dist/index.mjs",
15
+ "require": "./dist/index.js"
16
+ },
17
+ "./styles.css": "./dist/styles.css"
18
+ },
19
+ "files": [
20
+ "dist"
21
+ ],
22
+ "scripts": {
23
+ "build": "tsup && npm run build:css",
24
+ "build:css": "npx @tailwindcss/cli -i ./src/styles.css -o ./dist/styles.css",
25
+ "dev": "tsup --watch",
26
+ "type-check": "tsc --noEmit",
27
+ "storybook": "storybook dev -p 6006",
28
+ "build-storybook": "storybook build"
29
+ },
30
+ "keywords": [
31
+ "design-system",
32
+ "react",
33
+ "nextjs",
34
+ "tailwindcss",
35
+ "ui-library"
36
+ ],
37
+ "author": "",
38
+ "license": "MIT",
39
+ "peerDependencies": {
40
+ "react": "^18.0.0 || ^19.0.0",
41
+ "react-dom": "^18.0.0 || ^19.0.0"
42
+ },
43
+ "devDependencies": {
44
+ "@storybook/react-vite": "^10.1.11",
45
+ "@tailwindcss/cli": "^4.1.18",
46
+ "@tailwindcss/vite": "^4.1.18",
47
+ "@types/react": "^18.2.48",
48
+ "@types/react-dom": "^18.2.18",
49
+ "@vitejs/plugin-react": "^5.1.2",
50
+ "react": "^18.2.0",
51
+ "react-dom": "^18.2.0",
52
+ "storybook": "^10.1.11",
53
+ "tailwindcss": "^4.0.0",
54
+ "tsup": "^8.0.1",
55
+ "typescript": "^5.3.3",
56
+ "vite": "^7.3.0"
57
+ }
58
+ }