soongle-ui 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,41 @@
1
+ # soongle-ui
2
+
3
+ A design system library for React.js and Next.js with TailwindCSS.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ npm install soongle-ui
9
+ ```
10
+
11
+ ## Usage
12
+
13
+ ### 1. Import Styles
14
+
15
+ Import the CSS file in your root layout or entry file (e.g., `_app.tsx`, `layout.tsx`, or `src/index.tsx`):
16
+
17
+ ```tsx
18
+ import 'soongle-ui/styles.css';
19
+ ```
20
+
21
+ ### 2. Use Components
22
+
23
+ ```tsx
24
+ import { Button } from 'soongle-ui';
25
+
26
+ function App() {
27
+ return (
28
+ <div>
29
+ <Button variant="primary">Click me</Button>
30
+ <Button variant="outline">Outline</Button>
31
+ </div>
32
+ );
33
+ }
34
+ ```
35
+
36
+ ## Features
37
+
38
+ - Built with React and Tailwind CSS
39
+ - Fully typed with TypeScript
40
+ - Supports Light/Dark modes (if applicable)
41
+ - Tree-shakable exports
@@ -0,0 +1,133 @@
1
+ import * as React from 'react';
2
+
3
+ type ButtonVariant = 'primary' | 'secondary' | 'outline' | 'ghost' | 'success' | 'warning' | 'error';
4
+ type ButtonSize = 'sm' | 'md' | 'lg';
5
+ interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
6
+ variant?: ButtonVariant;
7
+ size?: ButtonSize;
8
+ children: React.ReactNode;
9
+ }
10
+
11
+ declare const Button: React.ForwardRefExoticComponent<ButtonProps & React.RefAttributes<HTMLButtonElement>>;
12
+
13
+ declare const colors: {
14
+ readonly primary: {
15
+ readonly 50: "#eff6ff";
16
+ readonly 100: "#dbeafe";
17
+ readonly 200: "#bfdbfe";
18
+ readonly 300: "#93c5fd";
19
+ readonly 400: "#60a5fa";
20
+ readonly 500: "#3b82f6";
21
+ readonly 600: "#2563eb";
22
+ readonly 700: "#1d4ed8";
23
+ readonly 800: "#1e40af";
24
+ readonly 900: "#1e3a8a";
25
+ readonly 950: "#172554";
26
+ };
27
+ readonly secondary: {
28
+ readonly 50: "#f8fafc";
29
+ readonly 100: "#f1f5f9";
30
+ readonly 200: "#e2e8f0";
31
+ readonly 300: "#cbd5e1";
32
+ readonly 400: "#94a3b8";
33
+ readonly 500: "#64748b";
34
+ readonly 600: "#475569";
35
+ readonly 700: "#334155";
36
+ readonly 800: "#1e293b";
37
+ readonly 900: "#0f172a";
38
+ readonly 950: "#020617";
39
+ };
40
+ readonly success: {
41
+ readonly 50: "#f0fdf4";
42
+ readonly 100: "#dcfce7";
43
+ readonly 200: "#bbf7d0";
44
+ readonly 300: "#86efac";
45
+ readonly 400: "#4ade80";
46
+ readonly 500: "#22c55e";
47
+ readonly 600: "#16a34a";
48
+ readonly 700: "#15803d";
49
+ readonly 800: "#166534";
50
+ readonly 900: "#14532d";
51
+ readonly 950: "#052e16";
52
+ };
53
+ readonly warning: {
54
+ readonly 50: "#fffbeb";
55
+ readonly 100: "#fef3c7";
56
+ readonly 200: "#fde68a";
57
+ readonly 300: "#fcd34d";
58
+ readonly 400: "#fbbf24";
59
+ readonly 500: "#f59e0b";
60
+ readonly 600: "#d97706";
61
+ readonly 700: "#b45309";
62
+ readonly 800: "#92400e";
63
+ readonly 900: "#78350f";
64
+ readonly 950: "#451a03";
65
+ };
66
+ readonly error: {
67
+ readonly 50: "#fef2f2";
68
+ readonly 100: "#fee2e2";
69
+ readonly 200: "#fecaca";
70
+ readonly 300: "#fca5a5";
71
+ readonly 400: "#f87171";
72
+ readonly 500: "#ef4444";
73
+ readonly 600: "#dc2626";
74
+ readonly 700: "#b91c1c";
75
+ readonly 800: "#991b1b";
76
+ readonly 900: "#7f1d1d";
77
+ readonly 950: "#450a0a";
78
+ };
79
+ readonly neutral: {
80
+ readonly 50: "#fafafa";
81
+ readonly 100: "#f5f5f5";
82
+ readonly 200: "#e5e5e5";
83
+ readonly 300: "#d4d4d4";
84
+ readonly 400: "#a3a3a3";
85
+ readonly 500: "#737373";
86
+ readonly 600: "#525252";
87
+ readonly 700: "#404040";
88
+ readonly 800: "#262626";
89
+ readonly 900: "#171717";
90
+ readonly 950: "#0a0a0a";
91
+ };
92
+ };
93
+
94
+ declare const spacing: {
95
+ readonly xs: "0.5rem";
96
+ readonly sm: "0.75rem";
97
+ readonly md: "1rem";
98
+ readonly lg: "1.5rem";
99
+ readonly xl: "2rem";
100
+ readonly '2xl': "3rem";
101
+ readonly '3xl': "4rem";
102
+ readonly '4xl': "6rem";
103
+ };
104
+
105
+ declare const typography: {
106
+ readonly fontSizes: {
107
+ readonly xs: "0.75rem";
108
+ readonly sm: "0.875rem";
109
+ readonly base: "1rem";
110
+ readonly lg: "1.125rem";
111
+ readonly xl: "1.25rem";
112
+ readonly '2xl': "1.5rem";
113
+ readonly '3xl': "1.875rem";
114
+ readonly '4xl': "2.25rem";
115
+ readonly '5xl': "3rem";
116
+ };
117
+ readonly fontWeights: {
118
+ readonly light: "300";
119
+ readonly normal: "400";
120
+ readonly medium: "500";
121
+ readonly semibold: "600";
122
+ readonly bold: "700";
123
+ readonly extrabold: "800";
124
+ };
125
+ readonly lineHeights: {
126
+ readonly tight: "1.25";
127
+ readonly normal: "1.5";
128
+ readonly relaxed: "1.75";
129
+ readonly loose: "2";
130
+ };
131
+ };
132
+
133
+ export { Button, type ButtonProps, colors, spacing, typography };
@@ -0,0 +1,133 @@
1
+ import * as React from 'react';
2
+
3
+ type ButtonVariant = 'primary' | 'secondary' | 'outline' | 'ghost' | 'success' | 'warning' | 'error';
4
+ type ButtonSize = 'sm' | 'md' | 'lg';
5
+ interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
6
+ variant?: ButtonVariant;
7
+ size?: ButtonSize;
8
+ children: React.ReactNode;
9
+ }
10
+
11
+ declare const Button: React.ForwardRefExoticComponent<ButtonProps & React.RefAttributes<HTMLButtonElement>>;
12
+
13
+ declare const colors: {
14
+ readonly primary: {
15
+ readonly 50: "#eff6ff";
16
+ readonly 100: "#dbeafe";
17
+ readonly 200: "#bfdbfe";
18
+ readonly 300: "#93c5fd";
19
+ readonly 400: "#60a5fa";
20
+ readonly 500: "#3b82f6";
21
+ readonly 600: "#2563eb";
22
+ readonly 700: "#1d4ed8";
23
+ readonly 800: "#1e40af";
24
+ readonly 900: "#1e3a8a";
25
+ readonly 950: "#172554";
26
+ };
27
+ readonly secondary: {
28
+ readonly 50: "#f8fafc";
29
+ readonly 100: "#f1f5f9";
30
+ readonly 200: "#e2e8f0";
31
+ readonly 300: "#cbd5e1";
32
+ readonly 400: "#94a3b8";
33
+ readonly 500: "#64748b";
34
+ readonly 600: "#475569";
35
+ readonly 700: "#334155";
36
+ readonly 800: "#1e293b";
37
+ readonly 900: "#0f172a";
38
+ readonly 950: "#020617";
39
+ };
40
+ readonly success: {
41
+ readonly 50: "#f0fdf4";
42
+ readonly 100: "#dcfce7";
43
+ readonly 200: "#bbf7d0";
44
+ readonly 300: "#86efac";
45
+ readonly 400: "#4ade80";
46
+ readonly 500: "#22c55e";
47
+ readonly 600: "#16a34a";
48
+ readonly 700: "#15803d";
49
+ readonly 800: "#166534";
50
+ readonly 900: "#14532d";
51
+ readonly 950: "#052e16";
52
+ };
53
+ readonly warning: {
54
+ readonly 50: "#fffbeb";
55
+ readonly 100: "#fef3c7";
56
+ readonly 200: "#fde68a";
57
+ readonly 300: "#fcd34d";
58
+ readonly 400: "#fbbf24";
59
+ readonly 500: "#f59e0b";
60
+ readonly 600: "#d97706";
61
+ readonly 700: "#b45309";
62
+ readonly 800: "#92400e";
63
+ readonly 900: "#78350f";
64
+ readonly 950: "#451a03";
65
+ };
66
+ readonly error: {
67
+ readonly 50: "#fef2f2";
68
+ readonly 100: "#fee2e2";
69
+ readonly 200: "#fecaca";
70
+ readonly 300: "#fca5a5";
71
+ readonly 400: "#f87171";
72
+ readonly 500: "#ef4444";
73
+ readonly 600: "#dc2626";
74
+ readonly 700: "#b91c1c";
75
+ readonly 800: "#991b1b";
76
+ readonly 900: "#7f1d1d";
77
+ readonly 950: "#450a0a";
78
+ };
79
+ readonly neutral: {
80
+ readonly 50: "#fafafa";
81
+ readonly 100: "#f5f5f5";
82
+ readonly 200: "#e5e5e5";
83
+ readonly 300: "#d4d4d4";
84
+ readonly 400: "#a3a3a3";
85
+ readonly 500: "#737373";
86
+ readonly 600: "#525252";
87
+ readonly 700: "#404040";
88
+ readonly 800: "#262626";
89
+ readonly 900: "#171717";
90
+ readonly 950: "#0a0a0a";
91
+ };
92
+ };
93
+
94
+ declare const spacing: {
95
+ readonly xs: "0.5rem";
96
+ readonly sm: "0.75rem";
97
+ readonly md: "1rem";
98
+ readonly lg: "1.5rem";
99
+ readonly xl: "2rem";
100
+ readonly '2xl': "3rem";
101
+ readonly '3xl': "4rem";
102
+ readonly '4xl': "6rem";
103
+ };
104
+
105
+ declare const typography: {
106
+ readonly fontSizes: {
107
+ readonly xs: "0.75rem";
108
+ readonly sm: "0.875rem";
109
+ readonly base: "1rem";
110
+ readonly lg: "1.125rem";
111
+ readonly xl: "1.25rem";
112
+ readonly '2xl': "1.5rem";
113
+ readonly '3xl': "1.875rem";
114
+ readonly '4xl': "2.25rem";
115
+ readonly '5xl': "3rem";
116
+ };
117
+ readonly fontWeights: {
118
+ readonly light: "300";
119
+ readonly normal: "400";
120
+ readonly medium: "500";
121
+ readonly semibold: "600";
122
+ readonly bold: "700";
123
+ readonly extrabold: "800";
124
+ };
125
+ readonly lineHeights: {
126
+ readonly tight: "1.25";
127
+ readonly normal: "1.5";
128
+ readonly relaxed: "1.75";
129
+ readonly loose: "2";
130
+ };
131
+ };
132
+
133
+ export { Button, type ButtonProps, colors, spacing, typography };
package/dist/index.js ADDED
@@ -0,0 +1,218 @@
1
+ "use client";
2
+ "use strict";
3
+ var __create = Object.create;
4
+ var __defProp = Object.defineProperty;
5
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
6
+ var __getOwnPropNames = Object.getOwnPropertyNames;
7
+ var __getProtoOf = Object.getPrototypeOf;
8
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
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 index_exports = {};
33
+ __export(index_exports, {
34
+ Button: () => Button,
35
+ colors: () => colors,
36
+ spacing: () => spacing,
37
+ typography: () => typography
38
+ });
39
+ module.exports = __toCommonJS(index_exports);
40
+
41
+ // src/components/Button/Button.tsx
42
+ var React = __toESM(require("react"));
43
+ var import_jsx_runtime = require("react/jsx-runtime");
44
+ var baseStyles = "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";
45
+ var variantStyles = {
46
+ primary: "bg-primary-600 text-white hover:bg-primary-700 active:bg-primary-800 focus-visible:ring-primary-500",
47
+ secondary: "bg-secondary-600 text-white hover:bg-secondary-700 active:bg-secondary-800 focus-visible:ring-secondary-500",
48
+ outline: "border-2 border-primary-600 text-primary-600 hover:bg-primary-50 active:bg-primary-100 focus-visible:ring-primary-500",
49
+ ghost: "text-primary-600 hover:bg-primary-50 active:bg-primary-100 focus-visible:ring-primary-500",
50
+ success: "bg-success-600 text-white hover:bg-success-700 active:bg-success-800 focus-visible:ring-success-500",
51
+ warning: "bg-warning-600 text-white hover:bg-warning-700 active:bg-warning-800 focus-visible:ring-warning-500",
52
+ error: "bg-error-600 text-white hover:bg-error-700 active:bg-error-800 focus-visible:ring-error-500"
53
+ };
54
+ var sizeStyles = {
55
+ sm: "h-9 px-3 text-sm",
56
+ md: "h-10 px-4 text-base",
57
+ lg: "h-11 px-6 text-lg"
58
+ };
59
+ var Button = React.forwardRef(
60
+ ({ className = "", variant = "primary", size = "md", children, ...props }, ref) => {
61
+ const computedClassName = [
62
+ baseStyles,
63
+ variantStyles[variant],
64
+ sizeStyles[size],
65
+ className
66
+ ].filter(Boolean).join(" ");
67
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", { ref, className: computedClassName, ...props, children });
68
+ }
69
+ );
70
+ Button.displayName = "Button";
71
+
72
+ // src/tokens/colors.ts
73
+ var colors = {
74
+ primary: {
75
+ 50: "#eff6ff",
76
+ 100: "#dbeafe",
77
+ 200: "#bfdbfe",
78
+ 300: "#93c5fd",
79
+ 400: "#60a5fa",
80
+ 500: "#3b82f6",
81
+ 600: "#2563eb",
82
+ 700: "#1d4ed8",
83
+ 800: "#1e40af",
84
+ 900: "#1e3a8a",
85
+ 950: "#172554"
86
+ },
87
+ secondary: {
88
+ 50: "#f8fafc",
89
+ 100: "#f1f5f9",
90
+ 200: "#e2e8f0",
91
+ 300: "#cbd5e1",
92
+ 400: "#94a3b8",
93
+ 500: "#64748b",
94
+ 600: "#475569",
95
+ 700: "#334155",
96
+ 800: "#1e293b",
97
+ 900: "#0f172a",
98
+ 950: "#020617"
99
+ },
100
+ success: {
101
+ 50: "#f0fdf4",
102
+ 100: "#dcfce7",
103
+ 200: "#bbf7d0",
104
+ 300: "#86efac",
105
+ 400: "#4ade80",
106
+ 500: "#22c55e",
107
+ 600: "#16a34a",
108
+ 700: "#15803d",
109
+ 800: "#166534",
110
+ 900: "#14532d",
111
+ 950: "#052e16"
112
+ },
113
+ warning: {
114
+ 50: "#fffbeb",
115
+ 100: "#fef3c7",
116
+ 200: "#fde68a",
117
+ 300: "#fcd34d",
118
+ 400: "#fbbf24",
119
+ 500: "#f59e0b",
120
+ 600: "#d97706",
121
+ 700: "#b45309",
122
+ 800: "#92400e",
123
+ 900: "#78350f",
124
+ 950: "#451a03"
125
+ },
126
+ error: {
127
+ 50: "#fef2f2",
128
+ 100: "#fee2e2",
129
+ 200: "#fecaca",
130
+ 300: "#fca5a5",
131
+ 400: "#f87171",
132
+ 500: "#ef4444",
133
+ 600: "#dc2626",
134
+ 700: "#b91c1c",
135
+ 800: "#991b1b",
136
+ 900: "#7f1d1d",
137
+ 950: "#450a0a"
138
+ },
139
+ neutral: {
140
+ 50: "#fafafa",
141
+ 100: "#f5f5f5",
142
+ 200: "#e5e5e5",
143
+ 300: "#d4d4d4",
144
+ 400: "#a3a3a3",
145
+ 500: "#737373",
146
+ 600: "#525252",
147
+ 700: "#404040",
148
+ 800: "#262626",
149
+ 900: "#171717",
150
+ 950: "#0a0a0a"
151
+ }
152
+ };
153
+
154
+ // src/tokens/spacing.ts
155
+ var spacing = {
156
+ xs: "0.5rem",
157
+ // 8px
158
+ sm: "0.75rem",
159
+ // 12px
160
+ md: "1rem",
161
+ // 16px
162
+ lg: "1.5rem",
163
+ // 24px
164
+ xl: "2rem",
165
+ // 32px
166
+ "2xl": "3rem",
167
+ // 48px
168
+ "3xl": "4rem",
169
+ // 64px
170
+ "4xl": "6rem"
171
+ // 96px
172
+ };
173
+
174
+ // src/tokens/typography.ts
175
+ var typography = {
176
+ fontSizes: {
177
+ xs: "0.75rem",
178
+ // 12px
179
+ sm: "0.875rem",
180
+ // 14px
181
+ base: "1rem",
182
+ // 16px
183
+ lg: "1.125rem",
184
+ // 18px
185
+ xl: "1.25rem",
186
+ // 20px
187
+ "2xl": "1.5rem",
188
+ // 24px
189
+ "3xl": "1.875rem",
190
+ // 30px
191
+ "4xl": "2.25rem",
192
+ // 36px
193
+ "5xl": "3rem"
194
+ // 48px
195
+ },
196
+ fontWeights: {
197
+ light: "300",
198
+ normal: "400",
199
+ medium: "500",
200
+ semibold: "600",
201
+ bold: "700",
202
+ extrabold: "800"
203
+ },
204
+ lineHeights: {
205
+ tight: "1.25",
206
+ normal: "1.5",
207
+ relaxed: "1.75",
208
+ loose: "2"
209
+ }
210
+ };
211
+ // Annotate the CommonJS export names for ESM import in node:
212
+ 0 && (module.exports = {
213
+ Button,
214
+ colors,
215
+ spacing,
216
+ typography
217
+ });
218
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts","../src/components/Button/Button.tsx","../src/tokens/colors.ts","../src/tokens/spacing.ts","../src/tokens/typography.ts"],"sourcesContent":["// Export components\r\nexport * from './components';\r\n\r\n// Export design tokens\r\nexport * from './tokens';\r\n\r\n","import * as React from 'react';\r\nimport { ButtonProps, ButtonSize, ButtonVariant } from './types';\r\n\r\nconst baseStyles =\r\n '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';\r\n\r\nconst variantStyles: Record<ButtonVariant, string> = {\r\n primary:\r\n 'bg-primary-600 text-white hover:bg-primary-700 active:bg-primary-800 focus-visible:ring-primary-500',\r\n secondary:\r\n 'bg-secondary-600 text-white hover:bg-secondary-700 active:bg-secondary-800 focus-visible:ring-secondary-500',\r\n outline:\r\n 'border-2 border-primary-600 text-primary-600 hover:bg-primary-50 active:bg-primary-100 focus-visible:ring-primary-500',\r\n ghost:\r\n 'text-primary-600 hover:bg-primary-50 active:bg-primary-100 focus-visible:ring-primary-500',\r\n success:\r\n 'bg-success-600 text-white hover:bg-success-700 active:bg-success-800 focus-visible:ring-success-500',\r\n warning:\r\n 'bg-warning-600 text-white hover:bg-warning-700 active:bg-warning-800 focus-visible:ring-warning-500',\r\n error:\r\n 'bg-error-600 text-white hover:bg-error-700 active:bg-error-800 focus-visible:ring-error-500',\r\n};\r\n\r\nconst sizeStyles: Record<ButtonSize, string> = {\r\n sm: 'h-9 px-3 text-sm',\r\n md: 'h-10 px-4 text-base',\r\n lg: 'h-11 px-6 text-lg',\r\n};\r\n\r\nexport const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\r\n (\r\n { className = '', variant = 'primary', size = 'md', children, ...props },\r\n ref\r\n ) => {\r\n const computedClassName = [\r\n baseStyles,\r\n variantStyles[variant],\r\n sizeStyles[size],\r\n className,\r\n ]\r\n .filter(Boolean)\r\n .join(' ');\r\n\r\n return (\r\n <button ref={ref} className={computedClassName} {...props}>\r\n {children}\r\n </button>\r\n );\r\n }\r\n);\r\n\r\nButton.displayName = 'Button';\r\n","export const colors = {\r\n primary: {\r\n 50: '#eff6ff',\r\n 100: '#dbeafe',\r\n 200: '#bfdbfe',\r\n 300: '#93c5fd',\r\n 400: '#60a5fa',\r\n 500: '#3b82f6',\r\n 600: '#2563eb',\r\n 700: '#1d4ed8',\r\n 800: '#1e40af',\r\n 900: '#1e3a8a',\r\n 950: '#172554',\r\n },\r\n secondary: {\r\n 50: '#f8fafc',\r\n 100: '#f1f5f9',\r\n 200: '#e2e8f0',\r\n 300: '#cbd5e1',\r\n 400: '#94a3b8',\r\n 500: '#64748b',\r\n 600: '#475569',\r\n 700: '#334155',\r\n 800: '#1e293b',\r\n 900: '#0f172a',\r\n 950: '#020617',\r\n },\r\n success: {\r\n 50: '#f0fdf4',\r\n 100: '#dcfce7',\r\n 200: '#bbf7d0',\r\n 300: '#86efac',\r\n 400: '#4ade80',\r\n 500: '#22c55e',\r\n 600: '#16a34a',\r\n 700: '#15803d',\r\n 800: '#166534',\r\n 900: '#14532d',\r\n 950: '#052e16',\r\n },\r\n warning: {\r\n 50: '#fffbeb',\r\n 100: '#fef3c7',\r\n 200: '#fde68a',\r\n 300: '#fcd34d',\r\n 400: '#fbbf24',\r\n 500: '#f59e0b',\r\n 600: '#d97706',\r\n 700: '#b45309',\r\n 800: '#92400e',\r\n 900: '#78350f',\r\n 950: '#451a03',\r\n },\r\n error: {\r\n 50: '#fef2f2',\r\n 100: '#fee2e2',\r\n 200: '#fecaca',\r\n 300: '#fca5a5',\r\n 400: '#f87171',\r\n 500: '#ef4444',\r\n 600: '#dc2626',\r\n 700: '#b91c1c',\r\n 800: '#991b1b',\r\n 900: '#7f1d1d',\r\n 950: '#450a0a',\r\n },\r\n neutral: {\r\n 50: '#fafafa',\r\n 100: '#f5f5f5',\r\n 200: '#e5e5e5',\r\n 300: '#d4d4d4',\r\n 400: '#a3a3a3',\r\n 500: '#737373',\r\n 600: '#525252',\r\n 700: '#404040',\r\n 800: '#262626',\r\n 900: '#171717',\r\n 950: '#0a0a0a',\r\n },\r\n} as const;\r\n","export const spacing = {\r\n xs: '0.5rem', // 8px\r\n sm: '0.75rem', // 12px\r\n md: '1rem', // 16px\r\n lg: '1.5rem', // 24px\r\n xl: '2rem', // 32px\r\n '2xl': '3rem', // 48px\r\n '3xl': '4rem', // 64px\r\n '4xl': '6rem', // 96px\r\n} as const;\r\n","export const typography = {\r\n fontSizes: {\r\n xs: '0.75rem', // 12px\r\n sm: '0.875rem', // 14px\r\n base: '1rem', // 16px\r\n lg: '1.125rem', // 18px\r\n xl: '1.25rem', // 20px\r\n '2xl': '1.5rem', // 24px\r\n '3xl': '1.875rem', // 30px\r\n '4xl': '2.25rem', // 36px\r\n '5xl': '3rem', // 48px\r\n },\r\n fontWeights: {\r\n light: '300',\r\n normal: '400',\r\n medium: '500',\r\n semibold: '600',\r\n bold: '700',\r\n extrabold: '800',\r\n },\r\n lineHeights: {\r\n tight: '1.25',\r\n normal: '1.5',\r\n relaxed: '1.75',\r\n loose: '2',\r\n },\r\n} as const;\r\n"],"mappings":"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","names":[]}
package/dist/index.mjs ADDED
@@ -0,0 +1,179 @@
1
+ "use client";
2
+
3
+ // src/components/Button/Button.tsx
4
+ import * as React from "react";
5
+ import { jsx } from "react/jsx-runtime";
6
+ var baseStyles = "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";
7
+ var variantStyles = {
8
+ primary: "bg-primary-600 text-white hover:bg-primary-700 active:bg-primary-800 focus-visible:ring-primary-500",
9
+ secondary: "bg-secondary-600 text-white hover:bg-secondary-700 active:bg-secondary-800 focus-visible:ring-secondary-500",
10
+ outline: "border-2 border-primary-600 text-primary-600 hover:bg-primary-50 active:bg-primary-100 focus-visible:ring-primary-500",
11
+ ghost: "text-primary-600 hover:bg-primary-50 active:bg-primary-100 focus-visible:ring-primary-500",
12
+ success: "bg-success-600 text-white hover:bg-success-700 active:bg-success-800 focus-visible:ring-success-500",
13
+ warning: "bg-warning-600 text-white hover:bg-warning-700 active:bg-warning-800 focus-visible:ring-warning-500",
14
+ error: "bg-error-600 text-white hover:bg-error-700 active:bg-error-800 focus-visible:ring-error-500"
15
+ };
16
+ var sizeStyles = {
17
+ sm: "h-9 px-3 text-sm",
18
+ md: "h-10 px-4 text-base",
19
+ lg: "h-11 px-6 text-lg"
20
+ };
21
+ var Button = React.forwardRef(
22
+ ({ className = "", variant = "primary", size = "md", children, ...props }, ref) => {
23
+ const computedClassName = [
24
+ baseStyles,
25
+ variantStyles[variant],
26
+ sizeStyles[size],
27
+ className
28
+ ].filter(Boolean).join(" ");
29
+ return /* @__PURE__ */ jsx("button", { ref, className: computedClassName, ...props, children });
30
+ }
31
+ );
32
+ Button.displayName = "Button";
33
+
34
+ // src/tokens/colors.ts
35
+ var colors = {
36
+ primary: {
37
+ 50: "#eff6ff",
38
+ 100: "#dbeafe",
39
+ 200: "#bfdbfe",
40
+ 300: "#93c5fd",
41
+ 400: "#60a5fa",
42
+ 500: "#3b82f6",
43
+ 600: "#2563eb",
44
+ 700: "#1d4ed8",
45
+ 800: "#1e40af",
46
+ 900: "#1e3a8a",
47
+ 950: "#172554"
48
+ },
49
+ secondary: {
50
+ 50: "#f8fafc",
51
+ 100: "#f1f5f9",
52
+ 200: "#e2e8f0",
53
+ 300: "#cbd5e1",
54
+ 400: "#94a3b8",
55
+ 500: "#64748b",
56
+ 600: "#475569",
57
+ 700: "#334155",
58
+ 800: "#1e293b",
59
+ 900: "#0f172a",
60
+ 950: "#020617"
61
+ },
62
+ success: {
63
+ 50: "#f0fdf4",
64
+ 100: "#dcfce7",
65
+ 200: "#bbf7d0",
66
+ 300: "#86efac",
67
+ 400: "#4ade80",
68
+ 500: "#22c55e",
69
+ 600: "#16a34a",
70
+ 700: "#15803d",
71
+ 800: "#166534",
72
+ 900: "#14532d",
73
+ 950: "#052e16"
74
+ },
75
+ warning: {
76
+ 50: "#fffbeb",
77
+ 100: "#fef3c7",
78
+ 200: "#fde68a",
79
+ 300: "#fcd34d",
80
+ 400: "#fbbf24",
81
+ 500: "#f59e0b",
82
+ 600: "#d97706",
83
+ 700: "#b45309",
84
+ 800: "#92400e",
85
+ 900: "#78350f",
86
+ 950: "#451a03"
87
+ },
88
+ error: {
89
+ 50: "#fef2f2",
90
+ 100: "#fee2e2",
91
+ 200: "#fecaca",
92
+ 300: "#fca5a5",
93
+ 400: "#f87171",
94
+ 500: "#ef4444",
95
+ 600: "#dc2626",
96
+ 700: "#b91c1c",
97
+ 800: "#991b1b",
98
+ 900: "#7f1d1d",
99
+ 950: "#450a0a"
100
+ },
101
+ neutral: {
102
+ 50: "#fafafa",
103
+ 100: "#f5f5f5",
104
+ 200: "#e5e5e5",
105
+ 300: "#d4d4d4",
106
+ 400: "#a3a3a3",
107
+ 500: "#737373",
108
+ 600: "#525252",
109
+ 700: "#404040",
110
+ 800: "#262626",
111
+ 900: "#171717",
112
+ 950: "#0a0a0a"
113
+ }
114
+ };
115
+
116
+ // src/tokens/spacing.ts
117
+ var spacing = {
118
+ xs: "0.5rem",
119
+ // 8px
120
+ sm: "0.75rem",
121
+ // 12px
122
+ md: "1rem",
123
+ // 16px
124
+ lg: "1.5rem",
125
+ // 24px
126
+ xl: "2rem",
127
+ // 32px
128
+ "2xl": "3rem",
129
+ // 48px
130
+ "3xl": "4rem",
131
+ // 64px
132
+ "4xl": "6rem"
133
+ // 96px
134
+ };
135
+
136
+ // src/tokens/typography.ts
137
+ var typography = {
138
+ fontSizes: {
139
+ xs: "0.75rem",
140
+ // 12px
141
+ sm: "0.875rem",
142
+ // 14px
143
+ base: "1rem",
144
+ // 16px
145
+ lg: "1.125rem",
146
+ // 18px
147
+ xl: "1.25rem",
148
+ // 20px
149
+ "2xl": "1.5rem",
150
+ // 24px
151
+ "3xl": "1.875rem",
152
+ // 30px
153
+ "4xl": "2.25rem",
154
+ // 36px
155
+ "5xl": "3rem"
156
+ // 48px
157
+ },
158
+ fontWeights: {
159
+ light: "300",
160
+ normal: "400",
161
+ medium: "500",
162
+ semibold: "600",
163
+ bold: "700",
164
+ extrabold: "800"
165
+ },
166
+ lineHeights: {
167
+ tight: "1.25",
168
+ normal: "1.5",
169
+ relaxed: "1.75",
170
+ loose: "2"
171
+ }
172
+ };
173
+ export {
174
+ Button,
175
+ colors,
176
+ spacing,
177
+ typography
178
+ };
179
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/Button/Button.tsx","../src/tokens/colors.ts","../src/tokens/spacing.ts","../src/tokens/typography.ts"],"sourcesContent":["import * as React from 'react';\r\nimport { ButtonProps, ButtonSize, ButtonVariant } from './types';\r\n\r\nconst baseStyles =\r\n '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';\r\n\r\nconst variantStyles: Record<ButtonVariant, string> = {\r\n primary:\r\n 'bg-primary-600 text-white hover:bg-primary-700 active:bg-primary-800 focus-visible:ring-primary-500',\r\n secondary:\r\n 'bg-secondary-600 text-white hover:bg-secondary-700 active:bg-secondary-800 focus-visible:ring-secondary-500',\r\n outline:\r\n 'border-2 border-primary-600 text-primary-600 hover:bg-primary-50 active:bg-primary-100 focus-visible:ring-primary-500',\r\n ghost:\r\n 'text-primary-600 hover:bg-primary-50 active:bg-primary-100 focus-visible:ring-primary-500',\r\n success:\r\n 'bg-success-600 text-white hover:bg-success-700 active:bg-success-800 focus-visible:ring-success-500',\r\n warning:\r\n 'bg-warning-600 text-white hover:bg-warning-700 active:bg-warning-800 focus-visible:ring-warning-500',\r\n error:\r\n 'bg-error-600 text-white hover:bg-error-700 active:bg-error-800 focus-visible:ring-error-500',\r\n};\r\n\r\nconst sizeStyles: Record<ButtonSize, string> = {\r\n sm: 'h-9 px-3 text-sm',\r\n md: 'h-10 px-4 text-base',\r\n lg: 'h-11 px-6 text-lg',\r\n};\r\n\r\nexport const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\r\n (\r\n { className = '', variant = 'primary', size = 'md', children, ...props },\r\n ref\r\n ) => {\r\n const computedClassName = [\r\n baseStyles,\r\n variantStyles[variant],\r\n sizeStyles[size],\r\n className,\r\n ]\r\n .filter(Boolean)\r\n .join(' ');\r\n\r\n return (\r\n <button ref={ref} className={computedClassName} {...props}>\r\n {children}\r\n </button>\r\n );\r\n }\r\n);\r\n\r\nButton.displayName = 'Button';\r\n","export const colors = {\r\n primary: {\r\n 50: '#eff6ff',\r\n 100: '#dbeafe',\r\n 200: '#bfdbfe',\r\n 300: '#93c5fd',\r\n 400: '#60a5fa',\r\n 500: '#3b82f6',\r\n 600: '#2563eb',\r\n 700: '#1d4ed8',\r\n 800: '#1e40af',\r\n 900: '#1e3a8a',\r\n 950: '#172554',\r\n },\r\n secondary: {\r\n 50: '#f8fafc',\r\n 100: '#f1f5f9',\r\n 200: '#e2e8f0',\r\n 300: '#cbd5e1',\r\n 400: '#94a3b8',\r\n 500: '#64748b',\r\n 600: '#475569',\r\n 700: '#334155',\r\n 800: '#1e293b',\r\n 900: '#0f172a',\r\n 950: '#020617',\r\n },\r\n success: {\r\n 50: '#f0fdf4',\r\n 100: '#dcfce7',\r\n 200: '#bbf7d0',\r\n 300: '#86efac',\r\n 400: '#4ade80',\r\n 500: '#22c55e',\r\n 600: '#16a34a',\r\n 700: '#15803d',\r\n 800: '#166534',\r\n 900: '#14532d',\r\n 950: '#052e16',\r\n },\r\n warning: {\r\n 50: '#fffbeb',\r\n 100: '#fef3c7',\r\n 200: '#fde68a',\r\n 300: '#fcd34d',\r\n 400: '#fbbf24',\r\n 500: '#f59e0b',\r\n 600: '#d97706',\r\n 700: '#b45309',\r\n 800: '#92400e',\r\n 900: '#78350f',\r\n 950: '#451a03',\r\n },\r\n error: {\r\n 50: '#fef2f2',\r\n 100: '#fee2e2',\r\n 200: '#fecaca',\r\n 300: '#fca5a5',\r\n 400: '#f87171',\r\n 500: '#ef4444',\r\n 600: '#dc2626',\r\n 700: '#b91c1c',\r\n 800: '#991b1b',\r\n 900: '#7f1d1d',\r\n 950: '#450a0a',\r\n },\r\n neutral: {\r\n 50: '#fafafa',\r\n 100: '#f5f5f5',\r\n 200: '#e5e5e5',\r\n 300: '#d4d4d4',\r\n 400: '#a3a3a3',\r\n 500: '#737373',\r\n 600: '#525252',\r\n 700: '#404040',\r\n 800: '#262626',\r\n 900: '#171717',\r\n 950: '#0a0a0a',\r\n },\r\n} as const;\r\n","export const spacing = {\r\n xs: '0.5rem', // 8px\r\n sm: '0.75rem', // 12px\r\n md: '1rem', // 16px\r\n lg: '1.5rem', // 24px\r\n xl: '2rem', // 32px\r\n '2xl': '3rem', // 48px\r\n '3xl': '4rem', // 64px\r\n '4xl': '6rem', // 96px\r\n} as const;\r\n","export const typography = {\r\n fontSizes: {\r\n xs: '0.75rem', // 12px\r\n sm: '0.875rem', // 14px\r\n base: '1rem', // 16px\r\n lg: '1.125rem', // 18px\r\n xl: '1.25rem', // 20px\r\n '2xl': '1.5rem', // 24px\r\n '3xl': '1.875rem', // 30px\r\n '4xl': '2.25rem', // 36px\r\n '5xl': '3rem', // 48px\r\n },\r\n fontWeights: {\r\n light: '300',\r\n normal: '400',\r\n medium: '500',\r\n semibold: '600',\r\n bold: '700',\r\n extrabold: '800',\r\n },\r\n lineHeights: {\r\n tight: '1.25',\r\n normal: '1.5',\r\n relaxed: '1.75',\r\n loose: '2',\r\n },\r\n} as const;\r\n"],"mappings":"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","names":[]}
@@ -0,0 +1,507 @@
1
+ /*! tailwindcss v4.1.18 | MIT License | https://tailwindcss.com */
2
+ @layer properties;
3
+ @layer theme, base, components, utilities;
4
+ @layer theme {
5
+ :root, :host {
6
+ --font-sans: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji",
7
+ "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
8
+ --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono",
9
+ "Courier New", monospace;
10
+ --color-white: #fff;
11
+ --spacing: 0.25rem;
12
+ --text-sm: 0.875rem;
13
+ --text-sm--line-height: calc(1.25 / 0.875);
14
+ --text-base: 1rem;
15
+ --text-base--line-height: calc(1.5 / 1);
16
+ --text-lg: 1.125rem;
17
+ --text-lg--line-height: calc(1.75 / 1.125);
18
+ --font-weight-medium: 500;
19
+ --radius-md: 0.375rem;
20
+ --default-transition-duration: 150ms;
21
+ --default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
22
+ --default-font-family: var(--font-sans);
23
+ --default-mono-font-family: var(--font-mono);
24
+ --color-primary-50: #eff6ff;
25
+ --color-primary-100: #dbeafe;
26
+ --color-primary-500: #3b82f6;
27
+ --color-primary-600: #2563eb;
28
+ --color-primary-700: #1d4ed8;
29
+ --color-primary-800: #1e40af;
30
+ --color-secondary-500: #64748b;
31
+ --color-secondary-600: #475569;
32
+ --color-secondary-700: #334155;
33
+ --color-secondary-800: #1e293b;
34
+ --color-success-500: #22c55e;
35
+ --color-success-600: #16a34a;
36
+ --color-success-700: #15803d;
37
+ --color-success-800: #166534;
38
+ --color-warning-500: #f59e0b;
39
+ --color-warning-600: #d97706;
40
+ --color-warning-700: #b45309;
41
+ --color-warning-800: #92400e;
42
+ --color-error-500: #ef4444;
43
+ --color-error-600: #dc2626;
44
+ --color-error-700: #b91c1c;
45
+ --color-error-800: #991b1b;
46
+ }
47
+ }
48
+ @layer base {
49
+ *, ::after, ::before, ::backdrop, ::file-selector-button {
50
+ box-sizing: border-box;
51
+ margin: 0;
52
+ padding: 0;
53
+ border: 0 solid;
54
+ }
55
+ html, :host {
56
+ line-height: 1.5;
57
+ -webkit-text-size-adjust: 100%;
58
+ tab-size: 4;
59
+ font-family: var(--default-font-family, ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");
60
+ font-feature-settings: var(--default-font-feature-settings, normal);
61
+ font-variation-settings: var(--default-font-variation-settings, normal);
62
+ -webkit-tap-highlight-color: transparent;
63
+ }
64
+ hr {
65
+ height: 0;
66
+ color: inherit;
67
+ border-top-width: 1px;
68
+ }
69
+ abbr:where([title]) {
70
+ -webkit-text-decoration: underline dotted;
71
+ text-decoration: underline dotted;
72
+ }
73
+ h1, h2, h3, h4, h5, h6 {
74
+ font-size: inherit;
75
+ font-weight: inherit;
76
+ }
77
+ a {
78
+ color: inherit;
79
+ -webkit-text-decoration: inherit;
80
+ text-decoration: inherit;
81
+ }
82
+ b, strong {
83
+ font-weight: bolder;
84
+ }
85
+ code, kbd, samp, pre {
86
+ font-family: var(--default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);
87
+ font-feature-settings: var(--default-mono-font-feature-settings, normal);
88
+ font-variation-settings: var(--default-mono-font-variation-settings, normal);
89
+ font-size: 1em;
90
+ }
91
+ small {
92
+ font-size: 80%;
93
+ }
94
+ sub, sup {
95
+ font-size: 75%;
96
+ line-height: 0;
97
+ position: relative;
98
+ vertical-align: baseline;
99
+ }
100
+ sub {
101
+ bottom: -0.25em;
102
+ }
103
+ sup {
104
+ top: -0.5em;
105
+ }
106
+ table {
107
+ text-indent: 0;
108
+ border-color: inherit;
109
+ border-collapse: collapse;
110
+ }
111
+ :-moz-focusring {
112
+ outline: auto;
113
+ }
114
+ progress {
115
+ vertical-align: baseline;
116
+ }
117
+ summary {
118
+ display: list-item;
119
+ }
120
+ ol, ul, menu {
121
+ list-style: none;
122
+ }
123
+ img, svg, video, canvas, audio, iframe, embed, object {
124
+ display: block;
125
+ vertical-align: middle;
126
+ }
127
+ img, video {
128
+ max-width: 100%;
129
+ height: auto;
130
+ }
131
+ button, input, select, optgroup, textarea, ::file-selector-button {
132
+ font: inherit;
133
+ font-feature-settings: inherit;
134
+ font-variation-settings: inherit;
135
+ letter-spacing: inherit;
136
+ color: inherit;
137
+ border-radius: 0;
138
+ background-color: transparent;
139
+ opacity: 1;
140
+ }
141
+ :where(select:is([multiple], [size])) optgroup {
142
+ font-weight: bolder;
143
+ }
144
+ :where(select:is([multiple], [size])) optgroup option {
145
+ padding-inline-start: 20px;
146
+ }
147
+ ::file-selector-button {
148
+ margin-inline-end: 4px;
149
+ }
150
+ ::placeholder {
151
+ opacity: 1;
152
+ }
153
+ @supports (not (-webkit-appearance: -apple-pay-button)) or (contain-intrinsic-size: 1px) {
154
+ ::placeholder {
155
+ color: currentcolor;
156
+ @supports (color: color-mix(in lab, red, red)) {
157
+ color: color-mix(in oklab, currentcolor 50%, transparent);
158
+ }
159
+ }
160
+ }
161
+ textarea {
162
+ resize: vertical;
163
+ }
164
+ ::-webkit-search-decoration {
165
+ -webkit-appearance: none;
166
+ }
167
+ ::-webkit-date-and-time-value {
168
+ min-height: 1lh;
169
+ text-align: inherit;
170
+ }
171
+ ::-webkit-datetime-edit {
172
+ display: inline-flex;
173
+ }
174
+ ::-webkit-datetime-edit-fields-wrapper {
175
+ padding: 0;
176
+ }
177
+ ::-webkit-datetime-edit, ::-webkit-datetime-edit-year-field, ::-webkit-datetime-edit-month-field, ::-webkit-datetime-edit-day-field, ::-webkit-datetime-edit-hour-field, ::-webkit-datetime-edit-minute-field, ::-webkit-datetime-edit-second-field, ::-webkit-datetime-edit-millisecond-field, ::-webkit-datetime-edit-meridiem-field {
178
+ padding-block: 0;
179
+ }
180
+ ::-webkit-calendar-picker-indicator {
181
+ line-height: 1;
182
+ }
183
+ :-moz-ui-invalid {
184
+ box-shadow: none;
185
+ }
186
+ button, input:where([type="button"], [type="reset"], [type="submit"]), ::file-selector-button {
187
+ appearance: button;
188
+ }
189
+ ::-webkit-inner-spin-button, ::-webkit-outer-spin-button {
190
+ height: auto;
191
+ }
192
+ [hidden]:where(:not([hidden="until-found"])) {
193
+ display: none !important;
194
+ }
195
+ }
196
+ @layer utilities {
197
+ .inline-flex {
198
+ display: inline-flex;
199
+ }
200
+ .h-9 {
201
+ height: calc(var(--spacing) * 9);
202
+ }
203
+ .h-10 {
204
+ height: calc(var(--spacing) * 10);
205
+ }
206
+ .h-11 {
207
+ height: calc(var(--spacing) * 11);
208
+ }
209
+ .items-center {
210
+ align-items: center;
211
+ }
212
+ .justify-center {
213
+ justify-content: center;
214
+ }
215
+ .rounded-md {
216
+ border-radius: var(--radius-md);
217
+ }
218
+ .border-2 {
219
+ border-style: var(--tw-border-style);
220
+ border-width: 2px;
221
+ }
222
+ .border-primary-600 {
223
+ border-color: var(--color-primary-600);
224
+ }
225
+ .bg-error-600 {
226
+ background-color: var(--color-error-600);
227
+ }
228
+ .bg-primary-600 {
229
+ background-color: var(--color-primary-600);
230
+ }
231
+ .bg-secondary-600 {
232
+ background-color: var(--color-secondary-600);
233
+ }
234
+ .bg-success-600 {
235
+ background-color: var(--color-success-600);
236
+ }
237
+ .bg-warning-600 {
238
+ background-color: var(--color-warning-600);
239
+ }
240
+ .px-3 {
241
+ padding-inline: calc(var(--spacing) * 3);
242
+ }
243
+ .px-4 {
244
+ padding-inline: calc(var(--spacing) * 4);
245
+ }
246
+ .px-6 {
247
+ padding-inline: calc(var(--spacing) * 6);
248
+ }
249
+ .text-base {
250
+ font-size: var(--text-base);
251
+ line-height: var(--tw-leading, var(--text-base--line-height));
252
+ }
253
+ .text-lg {
254
+ font-size: var(--text-lg);
255
+ line-height: var(--tw-leading, var(--text-lg--line-height));
256
+ }
257
+ .text-sm {
258
+ font-size: var(--text-sm);
259
+ line-height: var(--tw-leading, var(--text-sm--line-height));
260
+ }
261
+ .font-medium {
262
+ --tw-font-weight: var(--font-weight-medium);
263
+ font-weight: var(--font-weight-medium);
264
+ }
265
+ .text-primary-600 {
266
+ color: var(--color-primary-600);
267
+ }
268
+ .text-white {
269
+ color: var(--color-white);
270
+ }
271
+ .outline {
272
+ outline-style: var(--tw-outline-style);
273
+ outline-width: 1px;
274
+ }
275
+ .transition-colors {
276
+ transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to;
277
+ transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
278
+ transition-duration: var(--tw-duration, var(--default-transition-duration));
279
+ }
280
+ .hover\:bg-error-700 {
281
+ &:hover {
282
+ @media (hover: hover) {
283
+ background-color: var(--color-error-700);
284
+ }
285
+ }
286
+ }
287
+ .hover\:bg-primary-50 {
288
+ &:hover {
289
+ @media (hover: hover) {
290
+ background-color: var(--color-primary-50);
291
+ }
292
+ }
293
+ }
294
+ .hover\:bg-primary-700 {
295
+ &:hover {
296
+ @media (hover: hover) {
297
+ background-color: var(--color-primary-700);
298
+ }
299
+ }
300
+ }
301
+ .hover\:bg-secondary-700 {
302
+ &:hover {
303
+ @media (hover: hover) {
304
+ background-color: var(--color-secondary-700);
305
+ }
306
+ }
307
+ }
308
+ .hover\:bg-success-700 {
309
+ &:hover {
310
+ @media (hover: hover) {
311
+ background-color: var(--color-success-700);
312
+ }
313
+ }
314
+ }
315
+ .hover\:bg-warning-700 {
316
+ &:hover {
317
+ @media (hover: hover) {
318
+ background-color: var(--color-warning-700);
319
+ }
320
+ }
321
+ }
322
+ .focus-visible\:ring-2 {
323
+ &:focus-visible {
324
+ --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);
325
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
326
+ }
327
+ }
328
+ .focus-visible\:ring-error-500 {
329
+ &:focus-visible {
330
+ --tw-ring-color: var(--color-error-500);
331
+ }
332
+ }
333
+ .focus-visible\:ring-primary-500 {
334
+ &:focus-visible {
335
+ --tw-ring-color: var(--color-primary-500);
336
+ }
337
+ }
338
+ .focus-visible\:ring-secondary-500 {
339
+ &:focus-visible {
340
+ --tw-ring-color: var(--color-secondary-500);
341
+ }
342
+ }
343
+ .focus-visible\:ring-success-500 {
344
+ &:focus-visible {
345
+ --tw-ring-color: var(--color-success-500);
346
+ }
347
+ }
348
+ .focus-visible\:ring-warning-500 {
349
+ &:focus-visible {
350
+ --tw-ring-color: var(--color-warning-500);
351
+ }
352
+ }
353
+ .focus-visible\:ring-offset-2 {
354
+ &:focus-visible {
355
+ --tw-ring-offset-width: 2px;
356
+ --tw-ring-offset-shadow: var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
357
+ }
358
+ }
359
+ .focus-visible\:outline-none {
360
+ &:focus-visible {
361
+ --tw-outline-style: none;
362
+ outline-style: none;
363
+ }
364
+ }
365
+ .active\:bg-error-800 {
366
+ &:active {
367
+ background-color: var(--color-error-800);
368
+ }
369
+ }
370
+ .active\:bg-primary-100 {
371
+ &:active {
372
+ background-color: var(--color-primary-100);
373
+ }
374
+ }
375
+ .active\:bg-primary-800 {
376
+ &:active {
377
+ background-color: var(--color-primary-800);
378
+ }
379
+ }
380
+ .active\:bg-secondary-800 {
381
+ &:active {
382
+ background-color: var(--color-secondary-800);
383
+ }
384
+ }
385
+ .active\:bg-success-800 {
386
+ &:active {
387
+ background-color: var(--color-success-800);
388
+ }
389
+ }
390
+ .active\:bg-warning-800 {
391
+ &:active {
392
+ background-color: var(--color-warning-800);
393
+ }
394
+ }
395
+ .disabled\:pointer-events-none {
396
+ &:disabled {
397
+ pointer-events: none;
398
+ }
399
+ }
400
+ .disabled\:opacity-50 {
401
+ &:disabled {
402
+ opacity: 50%;
403
+ }
404
+ }
405
+ }
406
+ @property --tw-border-style {
407
+ syntax: "*";
408
+ inherits: false;
409
+ initial-value: solid;
410
+ }
411
+ @property --tw-font-weight {
412
+ syntax: "*";
413
+ inherits: false;
414
+ }
415
+ @property --tw-outline-style {
416
+ syntax: "*";
417
+ inherits: false;
418
+ initial-value: solid;
419
+ }
420
+ @property --tw-shadow {
421
+ syntax: "*";
422
+ inherits: false;
423
+ initial-value: 0 0 #0000;
424
+ }
425
+ @property --tw-shadow-color {
426
+ syntax: "*";
427
+ inherits: false;
428
+ }
429
+ @property --tw-shadow-alpha {
430
+ syntax: "<percentage>";
431
+ inherits: false;
432
+ initial-value: 100%;
433
+ }
434
+ @property --tw-inset-shadow {
435
+ syntax: "*";
436
+ inherits: false;
437
+ initial-value: 0 0 #0000;
438
+ }
439
+ @property --tw-inset-shadow-color {
440
+ syntax: "*";
441
+ inherits: false;
442
+ }
443
+ @property --tw-inset-shadow-alpha {
444
+ syntax: "<percentage>";
445
+ inherits: false;
446
+ initial-value: 100%;
447
+ }
448
+ @property --tw-ring-color {
449
+ syntax: "*";
450
+ inherits: false;
451
+ }
452
+ @property --tw-ring-shadow {
453
+ syntax: "*";
454
+ inherits: false;
455
+ initial-value: 0 0 #0000;
456
+ }
457
+ @property --tw-inset-ring-color {
458
+ syntax: "*";
459
+ inherits: false;
460
+ }
461
+ @property --tw-inset-ring-shadow {
462
+ syntax: "*";
463
+ inherits: false;
464
+ initial-value: 0 0 #0000;
465
+ }
466
+ @property --tw-ring-inset {
467
+ syntax: "*";
468
+ inherits: false;
469
+ }
470
+ @property --tw-ring-offset-width {
471
+ syntax: "<length>";
472
+ inherits: false;
473
+ initial-value: 0px;
474
+ }
475
+ @property --tw-ring-offset-color {
476
+ syntax: "*";
477
+ inherits: false;
478
+ initial-value: #fff;
479
+ }
480
+ @property --tw-ring-offset-shadow {
481
+ syntax: "*";
482
+ inherits: false;
483
+ initial-value: 0 0 #0000;
484
+ }
485
+ @layer properties {
486
+ @supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))) {
487
+ *, ::before, ::after, ::backdrop {
488
+ --tw-border-style: solid;
489
+ --tw-font-weight: initial;
490
+ --tw-outline-style: solid;
491
+ --tw-shadow: 0 0 #0000;
492
+ --tw-shadow-color: initial;
493
+ --tw-shadow-alpha: 100%;
494
+ --tw-inset-shadow: 0 0 #0000;
495
+ --tw-inset-shadow-color: initial;
496
+ --tw-inset-shadow-alpha: 100%;
497
+ --tw-ring-color: initial;
498
+ --tw-ring-shadow: 0 0 #0000;
499
+ --tw-inset-ring-color: initial;
500
+ --tw-inset-ring-shadow: 0 0 #0000;
501
+ --tw-ring-inset: initial;
502
+ --tw-ring-offset-width: 0px;
503
+ --tw-ring-offset-color: #fff;
504
+ --tw-ring-offset-shadow: 0 0 #0000;
505
+ }
506
+ }
507
+ }
package/package.json ADDED
@@ -0,0 +1,55 @@
1
+ {
2
+ "name": "soongle-ui",
3
+ "version": "0.1.0",
4
+ "description": "A design system library for React.js and Next.js with TailwindCSS v4",
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
+ "dependencies": {
42
+ "class-variance-authority": "^0.7.0",
43
+ "clsx": "^2.1.0"
44
+ },
45
+ "devDependencies": {
46
+ "@tailwindcss/cli": "^4.1.18",
47
+ "@types/react": "^18.2.48",
48
+ "@types/react-dom": "^18.2.18",
49
+ "react": "^18.2.0",
50
+ "react-dom": "^18.2.0",
51
+ "tailwindcss": "^4.0.0",
52
+ "tsup": "^8.0.1",
53
+ "typescript": "^5.3.3"
54
+ }
55
+ }