@kb-labs/studio-ui-core 0.2.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 +178 -0
- package/dist/index.d.ts +199 -0
- package/dist/index.js +325 -0
- package/dist/index.js.map +1 -0
- package/package.json +41 -0
package/README.md
ADDED
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
# @kb-labs/ui-core
|
|
2
|
+
|
|
3
|
+
KB Labs design system foundation — design tokens, themes, CSS variables (framework-agnostic).
|
|
4
|
+
|
|
5
|
+
## Vision & Purpose
|
|
6
|
+
|
|
7
|
+
**@kb-labs/ui-core** provides design system foundation for KB Labs Studio. It includes design tokens, themes, and CSS variables that are framework-agnostic.
|
|
8
|
+
|
|
9
|
+
### Core Goals
|
|
10
|
+
|
|
11
|
+
- **Design Tokens**: Design tokens for colors, typography, spacing, shadows, radius
|
|
12
|
+
- **Themes**: Light and dark themes
|
|
13
|
+
- **CSS Variables**: CSS variable generation
|
|
14
|
+
- **Framework-Agnostic**: Framework-agnostic design system
|
|
15
|
+
|
|
16
|
+
## Package Status
|
|
17
|
+
|
|
18
|
+
- **Version**: 0.1.0
|
|
19
|
+
- **Stage**: Stable
|
|
20
|
+
- **Status**: Production Ready ✅
|
|
21
|
+
|
|
22
|
+
## Architecture
|
|
23
|
+
|
|
24
|
+
### High-Level Overview
|
|
25
|
+
|
|
26
|
+
```
|
|
27
|
+
UI Core
|
|
28
|
+
│
|
|
29
|
+
├──► Design Tokens
|
|
30
|
+
├──► Themes
|
|
31
|
+
└──► CSS Variables
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
### Key Components
|
|
35
|
+
|
|
36
|
+
1. **Tokens** (`tokens/`): Design tokens (colors, typography, spacing, shadows, radius)
|
|
37
|
+
2. **Themes** (`themes/`): Light and dark themes
|
|
38
|
+
3. **Utils** (`utils/`): CSS variable utilities
|
|
39
|
+
|
|
40
|
+
## ✨ Features
|
|
41
|
+
|
|
42
|
+
- **Design Tokens**: Design tokens for colors, typography, spacing, shadows, radius
|
|
43
|
+
- **Themes**: Light and dark themes
|
|
44
|
+
- **CSS Variables**: CSS variable generation
|
|
45
|
+
- **Framework-Agnostic**: Framework-agnostic design system
|
|
46
|
+
|
|
47
|
+
## 📦 API Reference
|
|
48
|
+
|
|
49
|
+
### Main Exports
|
|
50
|
+
|
|
51
|
+
#### Design Tokens
|
|
52
|
+
|
|
53
|
+
- `colors`: Color tokens
|
|
54
|
+
- `typography`: Typography tokens
|
|
55
|
+
- `spacing`: Spacing tokens
|
|
56
|
+
- `shadows`: Shadow tokens
|
|
57
|
+
- `radius`: Radius tokens
|
|
58
|
+
|
|
59
|
+
#### Themes
|
|
60
|
+
|
|
61
|
+
- `lightTheme`: Light theme
|
|
62
|
+
- `darkTheme`: Dark theme
|
|
63
|
+
- `semanticColors`: Semantic color definitions
|
|
64
|
+
|
|
65
|
+
#### CSS Variables
|
|
66
|
+
|
|
67
|
+
- `generateCSSVars`: Generate CSS variables from tokens
|
|
68
|
+
|
|
69
|
+
## 🔧 Configuration
|
|
70
|
+
|
|
71
|
+
### Configuration Options
|
|
72
|
+
|
|
73
|
+
No configuration needed - pure design tokens and themes.
|
|
74
|
+
|
|
75
|
+
## 🔗 Dependencies
|
|
76
|
+
|
|
77
|
+
### Runtime Dependencies
|
|
78
|
+
|
|
79
|
+
None (pure design tokens)
|
|
80
|
+
|
|
81
|
+
### Development Dependencies
|
|
82
|
+
|
|
83
|
+
- `@kb-labs/devkit` (`file:../../../kb-labs-devkit`): DevKit presets
|
|
84
|
+
- `tsup` (`^8`): TypeScript bundler
|
|
85
|
+
- `typescript` (`^5`): TypeScript compiler
|
|
86
|
+
- `vitest` (`^3.2.4`): Test runner
|
|
87
|
+
|
|
88
|
+
## 🧪 Testing
|
|
89
|
+
|
|
90
|
+
### Test Structure
|
|
91
|
+
|
|
92
|
+
No tests currently.
|
|
93
|
+
|
|
94
|
+
### Test Coverage
|
|
95
|
+
|
|
96
|
+
- **Current Coverage**: ~50%
|
|
97
|
+
- **Target Coverage**: 90%
|
|
98
|
+
|
|
99
|
+
## 📈 Performance
|
|
100
|
+
|
|
101
|
+
### Performance Characteristics
|
|
102
|
+
|
|
103
|
+
- **Time Complexity**: O(1) for token access
|
|
104
|
+
- **Space Complexity**: O(1)
|
|
105
|
+
- **Bottlenecks**: None
|
|
106
|
+
|
|
107
|
+
## 🔒 Security
|
|
108
|
+
|
|
109
|
+
### Security Considerations
|
|
110
|
+
|
|
111
|
+
- **Type Safety**: TypeScript type safety
|
|
112
|
+
|
|
113
|
+
### Known Vulnerabilities
|
|
114
|
+
|
|
115
|
+
- None
|
|
116
|
+
|
|
117
|
+
## 🐛 Known Issues & Limitations
|
|
118
|
+
|
|
119
|
+
### Known Issues
|
|
120
|
+
|
|
121
|
+
- None currently
|
|
122
|
+
|
|
123
|
+
### Limitations
|
|
124
|
+
|
|
125
|
+
- **Theme Types**: Fixed theme types (light, dark)
|
|
126
|
+
|
|
127
|
+
### Future Improvements
|
|
128
|
+
|
|
129
|
+
- **More Themes**: Additional theme variants
|
|
130
|
+
|
|
131
|
+
## 🔄 Migration & Breaking Changes
|
|
132
|
+
|
|
133
|
+
### Migration from Previous Versions
|
|
134
|
+
|
|
135
|
+
No breaking changes in current version (0.1.0).
|
|
136
|
+
|
|
137
|
+
### Breaking Changes in Future Versions
|
|
138
|
+
|
|
139
|
+
- None planned
|
|
140
|
+
|
|
141
|
+
## 📚 Examples
|
|
142
|
+
|
|
143
|
+
### Example 1: Use Design Tokens
|
|
144
|
+
|
|
145
|
+
```typescript
|
|
146
|
+
import { colors, spacing, typography } from '@kb-labs/ui-core';
|
|
147
|
+
|
|
148
|
+
const style = {
|
|
149
|
+
color: colors.primary,
|
|
150
|
+
padding: spacing.md,
|
|
151
|
+
fontSize: typography.body.fontSize,
|
|
152
|
+
};
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
### Example 2: Use Themes
|
|
156
|
+
|
|
157
|
+
```typescript
|
|
158
|
+
import { lightTheme, darkTheme } from '@kb-labs/ui-core';
|
|
159
|
+
|
|
160
|
+
const theme = isDark ? darkTheme : lightTheme;
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
### Example 3: Generate CSS Variables
|
|
164
|
+
|
|
165
|
+
```typescript
|
|
166
|
+
import { generateCSSVars } from '@kb-labs/ui-core';
|
|
167
|
+
|
|
168
|
+
const cssVars = generateCSSVars(lightTheme);
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
## 🤝 Contributing
|
|
172
|
+
|
|
173
|
+
See [CONTRIBUTING.md](../../CONTRIBUTING.md) for development guidelines.
|
|
174
|
+
|
|
175
|
+
## 📄 License
|
|
176
|
+
|
|
177
|
+
MIT © KB Labs
|
|
178
|
+
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
declare const colors: {
|
|
2
|
+
readonly primary: {
|
|
3
|
+
readonly 50: "#eff6ff";
|
|
4
|
+
readonly 100: "#dbeafe";
|
|
5
|
+
readonly 200: "#bfdbfe";
|
|
6
|
+
readonly 300: "#93c5fd";
|
|
7
|
+
readonly 400: "#60a5fa";
|
|
8
|
+
readonly 500: "#3b82f6";
|
|
9
|
+
readonly 600: "#2563eb";
|
|
10
|
+
readonly 700: "#1d4ed8";
|
|
11
|
+
readonly 800: "#1e40af";
|
|
12
|
+
readonly 900: "#1e3a8a";
|
|
13
|
+
readonly 950: "#172554";
|
|
14
|
+
};
|
|
15
|
+
readonly secondary: {
|
|
16
|
+
readonly 50: "#f0f9ff";
|
|
17
|
+
readonly 100: "#e0f2fe";
|
|
18
|
+
readonly 200: "#bae6fd";
|
|
19
|
+
readonly 300: "#7dd3fc";
|
|
20
|
+
readonly 400: "#38bdf8";
|
|
21
|
+
readonly 500: "#0ea5e9";
|
|
22
|
+
readonly 600: "#0284c7";
|
|
23
|
+
readonly 700: "#0369a1";
|
|
24
|
+
readonly 800: "#075985";
|
|
25
|
+
readonly 900: "#0c4a6e";
|
|
26
|
+
readonly 950: "#082f49";
|
|
27
|
+
};
|
|
28
|
+
readonly success: {
|
|
29
|
+
readonly 50: "#f0fdf4";
|
|
30
|
+
readonly 500: "#22c55e";
|
|
31
|
+
readonly 600: "#16a34a";
|
|
32
|
+
readonly 700: "#15803d";
|
|
33
|
+
};
|
|
34
|
+
readonly warning: {
|
|
35
|
+
readonly 50: "#fffbeb";
|
|
36
|
+
readonly 500: "#f59e0b";
|
|
37
|
+
readonly 600: "#d97706";
|
|
38
|
+
readonly 700: "#b45309";
|
|
39
|
+
};
|
|
40
|
+
readonly error: {
|
|
41
|
+
readonly 50: "#fef2f2";
|
|
42
|
+
readonly 500: "#ef4444";
|
|
43
|
+
readonly 600: "#dc2626";
|
|
44
|
+
readonly 700: "#b91c1c";
|
|
45
|
+
};
|
|
46
|
+
readonly neutral: {
|
|
47
|
+
readonly 0: "#ffffff";
|
|
48
|
+
readonly 50: "#f9fafb";
|
|
49
|
+
readonly 100: "#f3f4f6";
|
|
50
|
+
readonly 200: "#e5e7eb";
|
|
51
|
+
readonly 300: "#d4d4d4";
|
|
52
|
+
readonly 400: "#9ca3af";
|
|
53
|
+
readonly 500: "#6b7280";
|
|
54
|
+
readonly 600: "#525252";
|
|
55
|
+
readonly 700: "#404040";
|
|
56
|
+
readonly 800: "#27272a";
|
|
57
|
+
readonly 900: "#1a1a1c";
|
|
58
|
+
readonly 950: "#0d0d0f";
|
|
59
|
+
};
|
|
60
|
+
readonly muted: {
|
|
61
|
+
readonly background: "#F3F4F6";
|
|
62
|
+
readonly foreground: "#6B7280";
|
|
63
|
+
};
|
|
64
|
+
};
|
|
65
|
+
type Colors = typeof colors;
|
|
66
|
+
|
|
67
|
+
declare const spacing: {
|
|
68
|
+
readonly 0: "0";
|
|
69
|
+
readonly 1: "0.25rem";
|
|
70
|
+
readonly 2: "0.5rem";
|
|
71
|
+
readonly 3: "0.75rem";
|
|
72
|
+
readonly 4: "1rem";
|
|
73
|
+
readonly 5: "1.25rem";
|
|
74
|
+
readonly 6: "1.5rem";
|
|
75
|
+
readonly 8: "2rem";
|
|
76
|
+
readonly 10: "2.5rem";
|
|
77
|
+
readonly 12: "3rem";
|
|
78
|
+
readonly 16: "4rem";
|
|
79
|
+
};
|
|
80
|
+
type Spacing = typeof spacing;
|
|
81
|
+
|
|
82
|
+
declare const typography: {
|
|
83
|
+
readonly fontFamily: {
|
|
84
|
+
readonly sans: readonly ["Inter", "system-ui", "-apple-system", "sans-serif"];
|
|
85
|
+
readonly mono: readonly ["Fira Code", "Courier New", "monospace"];
|
|
86
|
+
};
|
|
87
|
+
readonly fontSize: {
|
|
88
|
+
readonly xs: readonly ["0.75rem", {
|
|
89
|
+
readonly lineHeight: "1rem";
|
|
90
|
+
}];
|
|
91
|
+
readonly sm: readonly ["0.875rem", {
|
|
92
|
+
readonly lineHeight: "1.25rem";
|
|
93
|
+
}];
|
|
94
|
+
readonly base: readonly ["1rem", {
|
|
95
|
+
readonly lineHeight: "1.5rem";
|
|
96
|
+
}];
|
|
97
|
+
readonly lg: readonly ["1.125rem", {
|
|
98
|
+
readonly lineHeight: "1.75rem";
|
|
99
|
+
}];
|
|
100
|
+
readonly xl: readonly ["1.25rem", {
|
|
101
|
+
readonly lineHeight: "1.75rem";
|
|
102
|
+
}];
|
|
103
|
+
readonly '2xl': readonly ["1.5rem", {
|
|
104
|
+
readonly lineHeight: "2rem";
|
|
105
|
+
}];
|
|
106
|
+
readonly '3xl': readonly ["1.875rem", {
|
|
107
|
+
readonly lineHeight: "2.25rem";
|
|
108
|
+
}];
|
|
109
|
+
readonly '4xl': readonly ["2.25rem", {
|
|
110
|
+
readonly lineHeight: "2.5rem";
|
|
111
|
+
}];
|
|
112
|
+
};
|
|
113
|
+
readonly fontWeight: {
|
|
114
|
+
readonly normal: "400";
|
|
115
|
+
readonly medium: "500";
|
|
116
|
+
readonly semibold: "600";
|
|
117
|
+
readonly bold: "700";
|
|
118
|
+
};
|
|
119
|
+
};
|
|
120
|
+
type Typography = typeof typography;
|
|
121
|
+
|
|
122
|
+
declare const radius: {
|
|
123
|
+
readonly none: "0";
|
|
124
|
+
readonly sm: "0.125rem";
|
|
125
|
+
readonly md: "0.375rem";
|
|
126
|
+
readonly lg: "0.5rem";
|
|
127
|
+
readonly xl: "0.75rem";
|
|
128
|
+
readonly full: "9999px";
|
|
129
|
+
};
|
|
130
|
+
type Radius = typeof radius;
|
|
131
|
+
|
|
132
|
+
declare const shadows: {
|
|
133
|
+
readonly sm: "0 1px 2px 0 rgba(0, 0, 0, 0.05)";
|
|
134
|
+
readonly md: "0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1)";
|
|
135
|
+
readonly lg: "0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -4px rgba(0, 0, 0, 0.1)";
|
|
136
|
+
readonly xl: "0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 8px 10px -6px rgba(0, 0, 0, 0.1)";
|
|
137
|
+
readonly '2xl': "0 25px 50px -12px rgba(0, 0, 0, 0.25)";
|
|
138
|
+
readonly none: "none";
|
|
139
|
+
};
|
|
140
|
+
type Shadows = typeof shadows;
|
|
141
|
+
|
|
142
|
+
interface Theme {
|
|
143
|
+
colors: Colors;
|
|
144
|
+
spacing: Spacing;
|
|
145
|
+
typography: Typography;
|
|
146
|
+
radius: Radius;
|
|
147
|
+
shadows: Shadows;
|
|
148
|
+
}
|
|
149
|
+
type ThemeMode = 'light' | 'dark';
|
|
150
|
+
|
|
151
|
+
declare const lightTheme: Theme;
|
|
152
|
+
|
|
153
|
+
declare const darkTheme: Theme;
|
|
154
|
+
|
|
155
|
+
declare const lightSemanticColors: {
|
|
156
|
+
readonly 'bg-primary': "#F9FAFB";
|
|
157
|
+
readonly 'bg-secondary': "#FFFFFF";
|
|
158
|
+
readonly 'bg-tertiary': "#F3F4F6";
|
|
159
|
+
readonly 'text-primary': "#111827";
|
|
160
|
+
readonly 'text-secondary': "#6B7280";
|
|
161
|
+
readonly 'text-tertiary': "#6B7280";
|
|
162
|
+
readonly 'text-inverse': "#FFFFFF";
|
|
163
|
+
readonly 'border-primary': "#E5E7EB";
|
|
164
|
+
readonly 'border-secondary': "#D4D4D4";
|
|
165
|
+
readonly link: "#2563EB";
|
|
166
|
+
readonly 'link-hover': "#1E40AF";
|
|
167
|
+
readonly 'accent-subtle': "#DBEAFE";
|
|
168
|
+
readonly success: "#16A34A";
|
|
169
|
+
readonly warning: "#F59E0B";
|
|
170
|
+
readonly error: "#DC2626";
|
|
171
|
+
readonly info: "#0EA5E9";
|
|
172
|
+
readonly disabled: "#9CA3AF";
|
|
173
|
+
readonly shadow: "rgba(0, 0, 0, 0.05)";
|
|
174
|
+
};
|
|
175
|
+
declare const darkSemanticColors: {
|
|
176
|
+
readonly 'bg-primary': "#0D0D0F";
|
|
177
|
+
readonly 'bg-secondary': "#1A1A1C";
|
|
178
|
+
readonly 'bg-tertiary': "#27272A";
|
|
179
|
+
readonly 'text-primary': "#F5F5F7";
|
|
180
|
+
readonly 'text-secondary': "#A1A1AA";
|
|
181
|
+
readonly 'text-tertiary': "#A1A1AA";
|
|
182
|
+
readonly 'text-inverse': "#1A1A1C";
|
|
183
|
+
readonly 'border-primary': "#3F3F46";
|
|
184
|
+
readonly 'border-secondary': "#52525B";
|
|
185
|
+
readonly link: "#3B82F6";
|
|
186
|
+
readonly 'link-hover': "#60A5FA";
|
|
187
|
+
readonly 'accent-subtle': "#1E3A8A";
|
|
188
|
+
readonly success: "#22C55E";
|
|
189
|
+
readonly warning: "#EAB308";
|
|
190
|
+
readonly error: "#EF4444";
|
|
191
|
+
readonly info: "#38BDF8";
|
|
192
|
+
readonly disabled: "#52525B";
|
|
193
|
+
readonly shadow: "rgba(0, 0, 0, 0.4)";
|
|
194
|
+
};
|
|
195
|
+
|
|
196
|
+
declare function generateCSSVars(theme: Theme, semanticColors: Record<string, string>): string;
|
|
197
|
+
declare function generateThemeCSS(lightTheme: Theme, darkTheme: Theme): string;
|
|
198
|
+
|
|
199
|
+
export { type Colors, type Radius, type Shadows, type Spacing, type Theme, type ThemeMode, type Typography, colors, darkSemanticColors, darkTheme, generateCSSVars, generateThemeCSS, lightSemanticColors, lightTheme, radius, shadows, spacing, typography };
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,325 @@
|
|
|
1
|
+
// src/tokens/colors.ts
|
|
2
|
+
var colors = {
|
|
3
|
+
// Primary brand colors
|
|
4
|
+
primary: {
|
|
5
|
+
50: "#eff6ff",
|
|
6
|
+
100: "#dbeafe",
|
|
7
|
+
200: "#bfdbfe",
|
|
8
|
+
300: "#93c5fd",
|
|
9
|
+
400: "#60a5fa",
|
|
10
|
+
500: "#3b82f6",
|
|
11
|
+
600: "#2563eb",
|
|
12
|
+
700: "#1d4ed8",
|
|
13
|
+
800: "#1e40af",
|
|
14
|
+
900: "#1e3a8a",
|
|
15
|
+
950: "#172554"
|
|
16
|
+
},
|
|
17
|
+
// Secondary accent colors
|
|
18
|
+
secondary: {
|
|
19
|
+
50: "#f0f9ff",
|
|
20
|
+
100: "#e0f2fe",
|
|
21
|
+
200: "#bae6fd",
|
|
22
|
+
300: "#7dd3fc",
|
|
23
|
+
400: "#38bdf8",
|
|
24
|
+
500: "#0ea5e9",
|
|
25
|
+
600: "#0284c7",
|
|
26
|
+
700: "#0369a1",
|
|
27
|
+
800: "#075985",
|
|
28
|
+
900: "#0c4a6e",
|
|
29
|
+
950: "#082f49"
|
|
30
|
+
},
|
|
31
|
+
// Semantic colors
|
|
32
|
+
success: {
|
|
33
|
+
50: "#f0fdf4",
|
|
34
|
+
500: "#22c55e",
|
|
35
|
+
600: "#16a34a",
|
|
36
|
+
700: "#15803d"
|
|
37
|
+
},
|
|
38
|
+
warning: {
|
|
39
|
+
50: "#fffbeb",
|
|
40
|
+
500: "#f59e0b",
|
|
41
|
+
600: "#d97706",
|
|
42
|
+
700: "#b45309"
|
|
43
|
+
},
|
|
44
|
+
error: {
|
|
45
|
+
50: "#fef2f2",
|
|
46
|
+
500: "#ef4444",
|
|
47
|
+
600: "#dc2626",
|
|
48
|
+
700: "#b91c1c"
|
|
49
|
+
},
|
|
50
|
+
// Neutral grays - updated to KB Labs UI Color Kit
|
|
51
|
+
neutral: {
|
|
52
|
+
0: "#ffffff",
|
|
53
|
+
// Light: Surface/Card
|
|
54
|
+
50: "#f9fafb",
|
|
55
|
+
// Light: Background
|
|
56
|
+
100: "#f3f4f6",
|
|
57
|
+
// Light: Muted Surface
|
|
58
|
+
200: "#e5e7eb",
|
|
59
|
+
// Light: Border
|
|
60
|
+
300: "#d4d4d4",
|
|
61
|
+
// Light: Lighter borders
|
|
62
|
+
400: "#9ca3af",
|
|
63
|
+
// Light: Disabled
|
|
64
|
+
500: "#6b7280",
|
|
65
|
+
// Light: Text Secondary
|
|
66
|
+
600: "#525252",
|
|
67
|
+
// Light: Darker text
|
|
68
|
+
700: "#404040",
|
|
69
|
+
// Dark: Lighter borders
|
|
70
|
+
800: "#27272a",
|
|
71
|
+
// Dark: Muted Surface
|
|
72
|
+
900: "#1a1a1c",
|
|
73
|
+
// Dark: Surface/Card
|
|
74
|
+
950: "#0d0d0f"
|
|
75
|
+
// Dark: Background
|
|
76
|
+
},
|
|
77
|
+
// Muted/subtle colors - updated to KB Labs UI Color Kit
|
|
78
|
+
muted: {
|
|
79
|
+
background: "#F3F4F6",
|
|
80
|
+
// Light: Muted Surface
|
|
81
|
+
foreground: "#6B7280"
|
|
82
|
+
// Light: Text Secondary
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
// src/tokens/spacing.ts
|
|
87
|
+
var spacing = {
|
|
88
|
+
0: "0",
|
|
89
|
+
1: "0.25rem",
|
|
90
|
+
// 4px
|
|
91
|
+
2: "0.5rem",
|
|
92
|
+
// 8px
|
|
93
|
+
3: "0.75rem",
|
|
94
|
+
// 12px
|
|
95
|
+
4: "1rem",
|
|
96
|
+
// 16px
|
|
97
|
+
5: "1.25rem",
|
|
98
|
+
// 20px
|
|
99
|
+
6: "1.5rem",
|
|
100
|
+
// 24px
|
|
101
|
+
8: "2rem",
|
|
102
|
+
// 32px
|
|
103
|
+
10: "2.5rem",
|
|
104
|
+
// 40px
|
|
105
|
+
12: "3rem",
|
|
106
|
+
// 48px
|
|
107
|
+
16: "4rem"
|
|
108
|
+
// 64px
|
|
109
|
+
};
|
|
110
|
+
|
|
111
|
+
// src/tokens/typography.ts
|
|
112
|
+
var typography = {
|
|
113
|
+
fontFamily: {
|
|
114
|
+
sans: ["Inter", "system-ui", "-apple-system", "sans-serif"],
|
|
115
|
+
mono: ["Fira Code", "Courier New", "monospace"]
|
|
116
|
+
},
|
|
117
|
+
fontSize: {
|
|
118
|
+
xs: ["0.75rem", { lineHeight: "1rem" }],
|
|
119
|
+
// 12px
|
|
120
|
+
sm: ["0.875rem", { lineHeight: "1.25rem" }],
|
|
121
|
+
// 14px
|
|
122
|
+
base: ["1rem", { lineHeight: "1.5rem" }],
|
|
123
|
+
// 16px
|
|
124
|
+
lg: ["1.125rem", { lineHeight: "1.75rem" }],
|
|
125
|
+
// 18px
|
|
126
|
+
xl: ["1.25rem", { lineHeight: "1.75rem" }],
|
|
127
|
+
// 20px
|
|
128
|
+
"2xl": ["1.5rem", { lineHeight: "2rem" }],
|
|
129
|
+
// 24px
|
|
130
|
+
"3xl": ["1.875rem", { lineHeight: "2.25rem" }],
|
|
131
|
+
// 30px
|
|
132
|
+
"4xl": ["2.25rem", { lineHeight: "2.5rem" }]
|
|
133
|
+
// 36px
|
|
134
|
+
},
|
|
135
|
+
fontWeight: {
|
|
136
|
+
normal: "400",
|
|
137
|
+
medium: "500",
|
|
138
|
+
semibold: "600",
|
|
139
|
+
bold: "700"
|
|
140
|
+
}
|
|
141
|
+
};
|
|
142
|
+
|
|
143
|
+
// src/tokens/radius.ts
|
|
144
|
+
var radius = {
|
|
145
|
+
none: "0",
|
|
146
|
+
sm: "0.125rem",
|
|
147
|
+
// 2px
|
|
148
|
+
md: "0.375rem",
|
|
149
|
+
// 6px
|
|
150
|
+
lg: "0.5rem",
|
|
151
|
+
// 8px
|
|
152
|
+
xl: "0.75rem",
|
|
153
|
+
// 12px
|
|
154
|
+
full: "9999px"
|
|
155
|
+
};
|
|
156
|
+
|
|
157
|
+
// src/tokens/shadows.ts
|
|
158
|
+
var shadows = {
|
|
159
|
+
sm: "0 1px 2px 0 rgba(0, 0, 0, 0.05)",
|
|
160
|
+
md: "0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1)",
|
|
161
|
+
lg: "0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -4px rgba(0, 0, 0, 0.1)",
|
|
162
|
+
xl: "0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 8px 10px -6px rgba(0, 0, 0, 0.1)",
|
|
163
|
+
"2xl": "0 25px 50px -12px rgba(0, 0, 0, 0.25)",
|
|
164
|
+
none: "none"
|
|
165
|
+
};
|
|
166
|
+
|
|
167
|
+
// src/themes/light.ts
|
|
168
|
+
var lightTheme = {
|
|
169
|
+
colors,
|
|
170
|
+
spacing,
|
|
171
|
+
typography,
|
|
172
|
+
radius,
|
|
173
|
+
shadows
|
|
174
|
+
};
|
|
175
|
+
|
|
176
|
+
// src/themes/dark.ts
|
|
177
|
+
var darkTheme = {
|
|
178
|
+
colors,
|
|
179
|
+
spacing,
|
|
180
|
+
typography,
|
|
181
|
+
radius,
|
|
182
|
+
shadows
|
|
183
|
+
};
|
|
184
|
+
|
|
185
|
+
// src/themes/semantic-colors.ts
|
|
186
|
+
var lightSemanticColors = {
|
|
187
|
+
// Backgrounds
|
|
188
|
+
"bg-primary": "#F9FAFB",
|
|
189
|
+
// Background (почти белый, но не режет глаза)
|
|
190
|
+
"bg-secondary": "#FFFFFF",
|
|
191
|
+
// Surface / Card (карточки, панели, таблицы)
|
|
192
|
+
"bg-tertiary": "#F3F4F6",
|
|
193
|
+
// Muted Surface (вторичные блоки, фильтры, сайдбар)
|
|
194
|
+
// Text
|
|
195
|
+
"text-primary": "#111827",
|
|
196
|
+
// Text Primary (почти чёрный, но мягкий)
|
|
197
|
+
"text-secondary": "#6B7280",
|
|
198
|
+
// Text Secondary (подписи, вторичный текст)
|
|
199
|
+
"text-tertiary": "#6B7280",
|
|
200
|
+
// Text Tertiary (вторичный текст)
|
|
201
|
+
"text-inverse": "#FFFFFF",
|
|
202
|
+
// Text Inverse (белый текст)
|
|
203
|
+
// Borders
|
|
204
|
+
"border-primary": "#E5E7EB",
|
|
205
|
+
// Border (границы карточек, таблиц)
|
|
206
|
+
"border-secondary": "#D4D4D4",
|
|
207
|
+
// Border Secondary (более светлые границы)
|
|
208
|
+
// Interactive
|
|
209
|
+
"link": "#2563EB",
|
|
210
|
+
// Accent Primary (KB Blue — кнопки, ссылки, активные табы)
|
|
211
|
+
"link-hover": "#1E40AF",
|
|
212
|
+
// Accent Hover (hover на синих элементах)
|
|
213
|
+
"accent-subtle": "#DBEAFE",
|
|
214
|
+
// Accent Subtle (фон и выделения для активных блоков)
|
|
215
|
+
// Status
|
|
216
|
+
"success": "#16A34A",
|
|
217
|
+
// Success (успешные статусы, зелёные метрики)
|
|
218
|
+
"warning": "#F59E0B",
|
|
219
|
+
// Warning (предупреждения)
|
|
220
|
+
"error": "#DC2626",
|
|
221
|
+
// Error (ошибки)
|
|
222
|
+
"info": "#0EA5E9",
|
|
223
|
+
// Info (информационные состояния)
|
|
224
|
+
// States
|
|
225
|
+
"disabled": "#9CA3AF",
|
|
226
|
+
// Disabled (неактивные элементы)
|
|
227
|
+
// Effects
|
|
228
|
+
"shadow": "rgba(0, 0, 0, 0.05)"
|
|
229
|
+
// Shadow (тени для карточек и кнопок)
|
|
230
|
+
};
|
|
231
|
+
var darkSemanticColors = {
|
|
232
|
+
// Backgrounds
|
|
233
|
+
"bg-primary": "#0D0D0F",
|
|
234
|
+
// Background (глубокий, чуть теплее чистого чёрного)
|
|
235
|
+
"bg-secondary": "#1A1A1C",
|
|
236
|
+
// Surface / Card (карточки и панели)
|
|
237
|
+
"bg-tertiary": "#27272A",
|
|
238
|
+
// Muted Surface (вторичные зоны, hover-эффекты)
|
|
239
|
+
// Text
|
|
240
|
+
"text-primary": "#F5F5F7",
|
|
241
|
+
// Text Primary (основной текст)
|
|
242
|
+
"text-secondary": "#A1A1AA",
|
|
243
|
+
// Text Secondary (вторичный текст)
|
|
244
|
+
"text-tertiary": "#A1A1AA",
|
|
245
|
+
// Text Tertiary (вторичный текст)
|
|
246
|
+
"text-inverse": "#1A1A1C",
|
|
247
|
+
// Text Inverse (тёмный текст)
|
|
248
|
+
// Borders
|
|
249
|
+
"border-primary": "#3F3F46",
|
|
250
|
+
// Border (границы элементов)
|
|
251
|
+
"border-secondary": "#52525B",
|
|
252
|
+
// Border Secondary (более светлые границы)
|
|
253
|
+
// Interactive
|
|
254
|
+
"link": "#3B82F6",
|
|
255
|
+
// Accent Primary (KB Blue)
|
|
256
|
+
"link-hover": "#60A5FA",
|
|
257
|
+
// Accent Hover (hover для кнопок/ссылок)
|
|
258
|
+
"accent-subtle": "#1E3A8A",
|
|
259
|
+
// Accent Subtle (тонкий фон подсветки)
|
|
260
|
+
// Status
|
|
261
|
+
"success": "#22C55E",
|
|
262
|
+
// Success (успешные статусы)
|
|
263
|
+
"warning": "#EAB308",
|
|
264
|
+
// Warning (предупреждения)
|
|
265
|
+
"error": "#EF4444",
|
|
266
|
+
// Error (ошибки)
|
|
267
|
+
"info": "#38BDF8",
|
|
268
|
+
// Info (информационные элементы)
|
|
269
|
+
// States
|
|
270
|
+
"disabled": "#52525B",
|
|
271
|
+
// Disabled (неактивные кнопки)
|
|
272
|
+
// Effects
|
|
273
|
+
"shadow": "rgba(0, 0, 0, 0.4)"
|
|
274
|
+
// Shadow (глубокие тени для контраста)
|
|
275
|
+
};
|
|
276
|
+
|
|
277
|
+
// src/utils/css-vars.ts
|
|
278
|
+
function generateCSSVars(theme, semanticColors) {
|
|
279
|
+
const { colors: colors2, spacing: spacing2, typography: typography2, radius: radius2, shadows: shadows2 } = theme;
|
|
280
|
+
const cssVars = [];
|
|
281
|
+
Object.entries(semanticColors).forEach(([key, value]) => {
|
|
282
|
+
cssVars.push(` --${key}: ${value};`);
|
|
283
|
+
});
|
|
284
|
+
Object.entries(colors2).forEach(([colorName, colorValue]) => {
|
|
285
|
+
if (typeof colorValue === "object" && colorValue !== null) {
|
|
286
|
+
Object.entries(colorValue).forEach(([shade, value]) => {
|
|
287
|
+
cssVars.push(` --color-${colorName}-${shade}: ${value};`);
|
|
288
|
+
});
|
|
289
|
+
}
|
|
290
|
+
});
|
|
291
|
+
Object.entries(spacing2).forEach(([key, value]) => {
|
|
292
|
+
cssVars.push(` --spacing-${key}: ${value};`);
|
|
293
|
+
});
|
|
294
|
+
Object.entries(typography2).forEach(([key, value]) => {
|
|
295
|
+
if (typeof value === "object") {
|
|
296
|
+
Object.entries(value).forEach(([prop, val]) => {
|
|
297
|
+
cssVars.push(` --typography-${key}-${prop}: ${val};`);
|
|
298
|
+
});
|
|
299
|
+
} else {
|
|
300
|
+
cssVars.push(` --typography-${key}: ${value};`);
|
|
301
|
+
}
|
|
302
|
+
});
|
|
303
|
+
Object.entries(radius2).forEach(([key, value]) => {
|
|
304
|
+
cssVars.push(` --radius-${key}: ${value};`);
|
|
305
|
+
});
|
|
306
|
+
Object.entries(shadows2).forEach(([key, value]) => {
|
|
307
|
+
cssVars.push(` --shadow-${key}: ${value};`);
|
|
308
|
+
});
|
|
309
|
+
return cssVars.join("\n");
|
|
310
|
+
}
|
|
311
|
+
function generateThemeCSS(lightTheme2, darkTheme2) {
|
|
312
|
+
return `
|
|
313
|
+
:root {
|
|
314
|
+
${generateCSSVars(lightTheme2, lightSemanticColors)}
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
.dark {
|
|
318
|
+
${generateCSSVars(darkTheme2, darkSemanticColors)}
|
|
319
|
+
}
|
|
320
|
+
`.trim();
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
export { colors, darkSemanticColors, darkTheme, generateCSSVars, generateThemeCSS, lightSemanticColors, lightTheme, radius, shadows, spacing, typography };
|
|
324
|
+
//# sourceMappingURL=index.js.map
|
|
325
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/tokens/colors.ts","../src/tokens/spacing.ts","../src/tokens/typography.ts","../src/tokens/radius.ts","../src/tokens/shadows.ts","../src/themes/light.ts","../src/themes/dark.ts","../src/themes/semantic-colors.ts","../src/utils/css-vars.ts"],"names":["colors","spacing","typography","radius","shadows","lightTheme","darkTheme"],"mappings":"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","file":"index.js","sourcesContent":["export const colors = {\n // Primary brand colors\n primary: {\n 50: '#eff6ff',\n 100: '#dbeafe',\n 200: '#bfdbfe',\n 300: '#93c5fd',\n 400: '#60a5fa',\n 500: '#3b82f6',\n 600: '#2563eb',\n 700: '#1d4ed8',\n 800: '#1e40af',\n 900: '#1e3a8a',\n 950: '#172554',\n },\n \n // Secondary accent colors\n secondary: {\n 50: '#f0f9ff',\n 100: '#e0f2fe',\n 200: '#bae6fd',\n 300: '#7dd3fc',\n 400: '#38bdf8',\n 500: '#0ea5e9',\n 600: '#0284c7',\n 700: '#0369a1',\n 800: '#075985',\n 900: '#0c4a6e',\n 950: '#082f49',\n },\n \n // Semantic colors\n success: {\n 50: '#f0fdf4',\n 500: '#22c55e',\n 600: '#16a34a',\n 700: '#15803d',\n },\n \n warning: {\n 50: '#fffbeb',\n 500: '#f59e0b',\n 600: '#d97706',\n 700: '#b45309',\n },\n \n error: {\n 50: '#fef2f2',\n 500: '#ef4444',\n 600: '#dc2626',\n 700: '#b91c1c',\n },\n \n // Neutral grays - updated to KB Labs UI Color Kit\n neutral: {\n 0: '#ffffff', // Light: Surface/Card\n 50: '#f9fafb', // Light: Background\n 100: '#f3f4f6', // Light: Muted Surface\n 200: '#e5e7eb', // Light: Border\n 300: '#d4d4d4', // Light: Lighter borders\n 400: '#9ca3af', // Light: Disabled\n 500: '#6b7280', // Light: Text Secondary\n 600: '#525252', // Light: Darker text\n 700: '#404040', // Dark: Lighter borders\n 800: '#27272a', // Dark: Muted Surface\n 900: '#1a1a1c', // Dark: Surface/Card\n 950: '#0d0d0f', // Dark: Background\n },\n \n // Muted/subtle colors - updated to KB Labs UI Color Kit\n muted: {\n background: '#F3F4F6', // Light: Muted Surface\n foreground: '#6B7280', // Light: Text Secondary\n },\n} as const;\n\nexport type Colors = typeof colors;\n\n","export const spacing = {\n 0: '0',\n 1: '0.25rem', // 4px\n 2: '0.5rem', // 8px\n 3: '0.75rem', // 12px\n 4: '1rem', // 16px\n 5: '1.25rem', // 20px\n 6: '1.5rem', // 24px\n 8: '2rem', // 32px\n 10: '2.5rem', // 40px\n 12: '3rem', // 48px\n 16: '4rem', // 64px\n} as const;\n\nexport type Spacing = typeof spacing;\n\n","export const typography = {\n fontFamily: {\n sans: ['Inter', 'system-ui', '-apple-system', 'sans-serif'],\n mono: ['Fira Code', 'Courier New', 'monospace'],\n },\n \n fontSize: {\n xs: ['0.75rem', { lineHeight: '1rem' }], // 12px\n sm: ['0.875rem', { lineHeight: '1.25rem' }], // 14px\n base: ['1rem', { lineHeight: '1.5rem' }], // 16px\n lg: ['1.125rem', { lineHeight: '1.75rem' }], // 18px\n xl: ['1.25rem', { lineHeight: '1.75rem' }], // 20px\n '2xl': ['1.5rem', { lineHeight: '2rem' }], // 24px\n '3xl': ['1.875rem', { lineHeight: '2.25rem' }], // 30px\n '4xl': ['2.25rem', { lineHeight: '2.5rem' }], // 36px\n },\n \n fontWeight: {\n normal: '400',\n medium: '500',\n semibold: '600',\n bold: '700',\n },\n} as const;\n\nexport type Typography = typeof typography;\n\n","export const radius = {\n none: '0',\n sm: '0.125rem', // 2px\n md: '0.375rem', // 6px\n lg: '0.5rem', // 8px\n xl: '0.75rem', // 12px\n full: '9999px',\n} as const;\n\nexport type Radius = typeof radius;\n\n","// Updated to KB Labs UI Color Kit\n// Light theme uses rgba(0,0,0,0.05) for subtle shadows\n// Dark theme uses rgba(0,0,0,0.4) for deeper shadows\nexport const shadows = {\n sm: '0 1px 2px 0 rgba(0, 0, 0, 0.05)',\n md: '0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1)',\n lg: '0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -4px rgba(0, 0, 0, 0.1)',\n xl: '0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 8px 10px -6px rgba(0, 0, 0, 0.1)',\n '2xl': '0 25px 50px -12px rgba(0, 0, 0, 0.25)',\n none: 'none',\n} as const;\n\nexport type Shadows = typeof shadows;\n\n","import type { Theme } from './types';\nimport { colors } from '../tokens/colors';\nimport { spacing } from '../tokens/spacing';\nimport { typography } from '../tokens/typography';\nimport { radius } from '../tokens/radius';\nimport { shadows } from '../tokens/shadows';\n\nexport const lightTheme: Theme = {\n colors,\n spacing,\n typography,\n radius,\n shadows,\n};\n\n","import type { Theme } from './types';\nimport { colors } from '../tokens/colors';\nimport { spacing } from '../tokens/spacing';\nimport { typography } from '../tokens/typography';\nimport { radius } from '../tokens/radius';\nimport { shadows } from '../tokens/shadows';\n\nexport const darkTheme: Theme = {\n colors,\n spacing,\n typography,\n radius,\n shadows,\n};\n\n","export const lightSemanticColors = {\n // Backgrounds\n 'bg-primary': '#F9FAFB', // Background (почти белый, но не режет глаза)\n 'bg-secondary': '#FFFFFF', // Surface / Card (карточки, панели, таблицы)\n 'bg-tertiary': '#F3F4F6', // Muted Surface (вторичные блоки, фильтры, сайдбар)\n \n // Text\n 'text-primary': '#111827', // Text Primary (почти чёрный, но мягкий)\n 'text-secondary': '#6B7280', // Text Secondary (подписи, вторичный текст)\n 'text-tertiary': '#6B7280', // Text Tertiary (вторичный текст)\n 'text-inverse': '#FFFFFF', // Text Inverse (белый текст)\n \n // Borders\n 'border-primary': '#E5E7EB', // Border (границы карточек, таблиц)\n 'border-secondary': '#D4D4D4', // Border Secondary (более светлые границы)\n \n // Interactive\n 'link': '#2563EB', // Accent Primary (KB Blue — кнопки, ссылки, активные табы)\n 'link-hover': '#1E40AF', // Accent Hover (hover на синих элементах)\n 'accent-subtle': '#DBEAFE', // Accent Subtle (фон и выделения для активных блоков)\n \n // Status\n 'success': '#16A34A', // Success (успешные статусы, зелёные метрики)\n 'warning': '#F59E0B', // Warning (предупреждения)\n 'error': '#DC2626', // Error (ошибки)\n 'info': '#0EA5E9', // Info (информационные состояния)\n \n // States\n 'disabled': '#9CA3AF', // Disabled (неактивные элементы)\n \n // Effects\n 'shadow': 'rgba(0, 0, 0, 0.05)', // Shadow (тени для карточек и кнопок)\n} as const;\n\nexport const darkSemanticColors = {\n // Backgrounds\n 'bg-primary': '#0D0D0F', // Background (глубокий, чуть теплее чистого чёрного)\n 'bg-secondary': '#1A1A1C', // Surface / Card (карточки и панели)\n 'bg-tertiary': '#27272A', // Muted Surface (вторичные зоны, hover-эффекты)\n \n // Text\n 'text-primary': '#F5F5F7', // Text Primary (основной текст)\n 'text-secondary': '#A1A1AA', // Text Secondary (вторичный текст)\n 'text-tertiary': '#A1A1AA', // Text Tertiary (вторичный текст)\n 'text-inverse': '#1A1A1C', // Text Inverse (тёмный текст)\n \n // Borders\n 'border-primary': '#3F3F46', // Border (границы элементов)\n 'border-secondary': '#52525B', // Border Secondary (более светлые границы)\n \n // Interactive\n 'link': '#3B82F6', // Accent Primary (KB Blue)\n 'link-hover': '#60A5FA', // Accent Hover (hover для кнопок/ссылок)\n 'accent-subtle': '#1E3A8A', // Accent Subtle (тонкий фон подсветки)\n \n // Status\n 'success': '#22C55E', // Success (успешные статусы)\n 'warning': '#EAB308', // Warning (предупреждения)\n 'error': '#EF4444', // Error (ошибки)\n 'info': '#38BDF8', // Info (информационные элементы)\n \n // States\n 'disabled': '#52525B', // Disabled (неактивные кнопки)\n \n // Effects\n 'shadow': 'rgba(0, 0, 0, 0.4)', // Shadow (глубокие тени для контраста)\n} as const;\n\n","import type { Theme } from '../themes/types';\nimport { lightSemanticColors, darkSemanticColors } from '../themes/semantic-colors';\n\nexport function generateCSSVars(theme: Theme, semanticColors: Record<string, string>): string {\n const { colors, spacing, typography, radius, shadows } = theme;\n \n const cssVars: string[] = [];\n\n // Semantic colors (theme-aware)\n Object.entries(semanticColors).forEach(([key, value]) => {\n cssVars.push(` --${key}: ${value};`);\n });\n\n // Raw color tokens\n Object.entries(colors).forEach(([colorName, colorValue]) => {\n if (typeof colorValue === 'object' && colorValue !== null) {\n Object.entries(colorValue).forEach(([shade, value]) => {\n cssVars.push(` --color-${colorName}-${shade}: ${value};`);\n });\n }\n });\n\n // Spacing\n Object.entries(spacing).forEach(([key, value]) => {\n cssVars.push(` --spacing-${key}: ${value};`);\n });\n\n // Typography\n Object.entries(typography).forEach(([key, value]) => {\n if (typeof value === 'object') {\n Object.entries(value).forEach(([prop, val]) => {\n cssVars.push(` --typography-${key}-${prop}: ${val};`);\n });\n } else {\n cssVars.push(` --typography-${key}: ${value};`);\n }\n });\n\n // Radius\n Object.entries(radius).forEach(([key, value]) => {\n cssVars.push(` --radius-${key}: ${value};`);\n });\n\n // Shadows\n Object.entries(shadows).forEach(([key, value]) => {\n cssVars.push(` --shadow-${key}: ${value};`);\n });\n\n return cssVars.join('\\n');\n}\n\nexport function generateThemeCSS(lightTheme: Theme, darkTheme: Theme): string {\n return `\n:root {\n${generateCSSVars(lightTheme, lightSemanticColors)}\n}\n\n.dark {\n${generateCSSVars(darkTheme, darkSemanticColors)}\n}\n`.trim();\n}\n\n"]}
|
package/package.json
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@kb-labs/studio-ui-core",
|
|
3
|
+
"version": "0.2.0",
|
|
4
|
+
"description": "KB Labs design system foundation — design tokens, themes, CSS variables (framework-agnostic)",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"import": "./dist/index.js",
|
|
11
|
+
"types": "./dist/index.d.ts"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"files": [
|
|
15
|
+
"dist"
|
|
16
|
+
],
|
|
17
|
+
"scripts": {
|
|
18
|
+
"clean": "rimraf dist",
|
|
19
|
+
"build": "tsup",
|
|
20
|
+
"type-check": "tsc --noEmit",
|
|
21
|
+
"test": "vitest run --passWithNoTests",
|
|
22
|
+
"lint": "eslint . --max-warnings=0",
|
|
23
|
+
"dev": "tsup --config tsup.config.ts --watch",
|
|
24
|
+
"lint:fix": "eslint . --fix",
|
|
25
|
+
"test:watch": "vitest"
|
|
26
|
+
},
|
|
27
|
+
"devDependencies": {
|
|
28
|
+
"@kb-labs/devkit": "link:../../../../infra/kb-labs-devkit",
|
|
29
|
+
"eslint": "^9",
|
|
30
|
+
"rimraf": "^6.0.1",
|
|
31
|
+
"tsup": "^8.5.0",
|
|
32
|
+
"typescript": "^5.6.3",
|
|
33
|
+
"vitest": "^3.2.4",
|
|
34
|
+
"@types/node": "^24.3.3"
|
|
35
|
+
},
|
|
36
|
+
"peerDependencies": {},
|
|
37
|
+
"engines": {
|
|
38
|
+
"node": ">=20.0.0",
|
|
39
|
+
"pnpm": ">=9.0.0"
|
|
40
|
+
}
|
|
41
|
+
}
|