@nebutra/ui 0.1.0 → 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/dist/components/index.d.ts +380 -0
- package/dist/components/index.js +2398 -0
- package/dist/components/index.js.map +1 -0
- package/dist/hooks/index.d.ts +106 -0
- package/dist/hooks/index.js +182 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/icons/index.d.ts +3 -0
- package/dist/icons/index.js +5 -0
- package/dist/icons/index.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.js +31 -0
- package/dist/index.js.map +1 -0
- package/dist/layout/index.d.ts +296 -0
- package/dist/layout/index.js +1303 -0
- package/dist/layout/index.js.map +1 -0
- package/dist/layouts/index.d.ts +161 -0
- package/dist/layouts/index.js +611 -0
- package/dist/layouts/index.js.map +1 -0
- package/dist/patterns/index.d.ts +363 -0
- package/dist/patterns/index.js +3004 -0
- package/dist/patterns/index.js.map +1 -0
- package/dist/primitives/index.d.ts +9588 -0
- package/dist/primitives/index.js +26779 -0
- package/dist/primitives/index.js.map +1 -0
- package/dist/styles/brand-override.css +61 -0
- package/dist/tailwind.preset.d.ts +251 -0
- package/dist/tailwind.preset.js +273 -0
- package/dist/tailwind.preset.js.map +1 -0
- package/dist/theme/index.d.ts +150 -0
- package/dist/theme/index.js +28 -0
- package/dist/theme/index.js.map +1 -0
- package/dist/typography/fonts.css +110 -0
- package/dist/typography/index.d.ts +425 -0
- package/dist/typography/index.js +374 -0
- package/dist/typography/index.js.map +1 -0
- package/dist/utils/index.d.ts +61 -0
- package/dist/utils/index.js +55 -0
- package/dist/utils/index.js.map +1 -0
- package/package.json +16 -6
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* brand-override.css — Custom Brand Configuration
|
|
3
|
+
*
|
|
4
|
+
* Drop this file into your app's globals.css with:
|
|
5
|
+
* @import "@nebutra/ui/styles/brand-override.css";
|
|
6
|
+
*
|
|
7
|
+
* Then edit the two color scales below to match your brand.
|
|
8
|
+
*
|
|
9
|
+
* ────────────────────────────────────────────────────────────
|
|
10
|
+
* HOW THE CASCADE WORKS
|
|
11
|
+
*
|
|
12
|
+
* 1. You define: --your-primary-* (11 steps)
|
|
13
|
+
* 2. System maps: --blue-9 → --your-primary-500 (solid fill)
|
|
14
|
+
* --blue-3 → --your-primary-200 (component bg)
|
|
15
|
+
* ... etc
|
|
16
|
+
* 3. Every component automatically uses your brand color.
|
|
17
|
+
*
|
|
18
|
+
* QUICK START (2 minutes)
|
|
19
|
+
* Replace the hex values below with your brand colors.
|
|
20
|
+
* Use a tool like https://uicolors.app to generate 11 steps
|
|
21
|
+
* from a single hex value.
|
|
22
|
+
* ────────────────────────────────────────────────────────────
|
|
23
|
+
*/
|
|
24
|
+
|
|
25
|
+
:root {
|
|
26
|
+
/* ══════════════════════════════════════════════════════════
|
|
27
|
+
PRIMARY BRAND COLOR — replace #0033FE with your primary
|
|
28
|
+
════════════════════════════════════════════════════════ */
|
|
29
|
+
--nebutra-blue-50: #f0f4ff; /* lightest tint — backgrounds */
|
|
30
|
+
--nebutra-blue-100: #dbe4ff;
|
|
31
|
+
--nebutra-blue-200: #bac8ff;
|
|
32
|
+
--nebutra-blue-300: #91a7ff;
|
|
33
|
+
--nebutra-blue-400: #5c7cfa;
|
|
34
|
+
--nebutra-blue-500: #0033fe; /* ← YOUR PRIMARY COLOR HERE */
|
|
35
|
+
--nebutra-blue-600: #002ad4;
|
|
36
|
+
--nebutra-blue-700: #0021ab;
|
|
37
|
+
--nebutra-blue-800: #001882;
|
|
38
|
+
--nebutra-blue-900: #000f59;
|
|
39
|
+
--nebutra-blue-950: #000830; /* darkest — text */
|
|
40
|
+
|
|
41
|
+
/* ══════════════════════════════════════════════════════════
|
|
42
|
+
SECONDARY ACCENT COLOR — replace #0BF1C3 with your accent
|
|
43
|
+
════════════════════════════════════════════════════════ */
|
|
44
|
+
--nebutra-cyan-50: #e6fff8; /* lightest tint */
|
|
45
|
+
--nebutra-cyan-100: #b3ffec;
|
|
46
|
+
--nebutra-cyan-200: #80ffe0;
|
|
47
|
+
--nebutra-cyan-300: #4dfcd4;
|
|
48
|
+
--nebutra-cyan-400: #1af7c8;
|
|
49
|
+
--nebutra-cyan-500: #0bf1c3; /* ← YOUR ACCENT COLOR HERE */
|
|
50
|
+
--nebutra-cyan-600: #09c9a3;
|
|
51
|
+
--nebutra-cyan-700: #07a183;
|
|
52
|
+
--nebutra-cyan-800: #057963;
|
|
53
|
+
--nebutra-cyan-900: #035143;
|
|
54
|
+
--nebutra-cyan-950: #012923; /* darkest */
|
|
55
|
+
|
|
56
|
+
/* ══════════════════════════════════════════════════════════
|
|
57
|
+
OPTIONAL: Brand name tokens (used in metadata / docs only)
|
|
58
|
+
════════════════════════════════════════════════════════ */
|
|
59
|
+
/* --brand-name: "Your Brand"; */
|
|
60
|
+
/* --brand-domain: "yourbrand.com"; */
|
|
61
|
+
}
|
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @nebutra/ui — Tailwind CSS 4 Preset
|
|
3
|
+
*
|
|
4
|
+
* Consumes primitive design tokens from tokens/primitive.ts, which itself
|
|
5
|
+
* sources values from @nebutra/brand → @nebutra/design-tokens (SSOT).
|
|
6
|
+
*
|
|
7
|
+
* Usage (Tailwind CSS 4, CSS import — the runtime token source):
|
|
8
|
+
* @import "@nebutra/tokens/styles.css"
|
|
9
|
+
*
|
|
10
|
+
* Usage (legacy tailwind.config.js):
|
|
11
|
+
* import { nebutraPreset } from "@nebutra/ui/tailwind.preset"
|
|
12
|
+
* export default { presets: [nebutraPreset] }
|
|
13
|
+
*/
|
|
14
|
+
declare const nebutraColors: {
|
|
15
|
+
readonly blue: {
|
|
16
|
+
readonly 50: "#f0f4ff";
|
|
17
|
+
readonly 100: "#dbe4ff";
|
|
18
|
+
readonly 200: "#bac8ff";
|
|
19
|
+
readonly 300: "#91a7ff";
|
|
20
|
+
readonly 400: "#5c7cfa";
|
|
21
|
+
readonly 500: "#0033FE";
|
|
22
|
+
readonly 600: "#002ad4";
|
|
23
|
+
readonly 700: "#0021ab";
|
|
24
|
+
readonly 800: "#001882";
|
|
25
|
+
readonly 900: "#000f59";
|
|
26
|
+
readonly 950: "#000830";
|
|
27
|
+
readonly DEFAULT: "#0033FE";
|
|
28
|
+
readonly foreground: "#FFFFFF";
|
|
29
|
+
};
|
|
30
|
+
readonly cyan: {
|
|
31
|
+
readonly 50: "#e6fff8";
|
|
32
|
+
readonly 100: "#b3ffec";
|
|
33
|
+
readonly 200: "#80ffe0";
|
|
34
|
+
readonly 300: "#4dfcd4";
|
|
35
|
+
readonly 400: "#1af7c8";
|
|
36
|
+
readonly 500: "#0BF1C3";
|
|
37
|
+
readonly 600: "#09c9a3";
|
|
38
|
+
readonly 700: "#07a183";
|
|
39
|
+
readonly 800: "#057963";
|
|
40
|
+
readonly 900: "#035143";
|
|
41
|
+
readonly 950: "#012923";
|
|
42
|
+
readonly DEFAULT: "#0BF1C3";
|
|
43
|
+
readonly foreground: "#0f172a";
|
|
44
|
+
};
|
|
45
|
+
readonly neutral: {
|
|
46
|
+
readonly 50: "#f8fafc";
|
|
47
|
+
readonly 100: "#f1f5f9";
|
|
48
|
+
readonly 200: "#e2e8f0";
|
|
49
|
+
readonly 300: "#cbd5e1";
|
|
50
|
+
readonly 400: "#94a3b8";
|
|
51
|
+
readonly 500: "#64748b";
|
|
52
|
+
readonly 600: "#475569";
|
|
53
|
+
readonly 700: "#334155";
|
|
54
|
+
readonly 800: "#1e293b";
|
|
55
|
+
readonly 900: "#0f172a";
|
|
56
|
+
readonly 950: "#020617";
|
|
57
|
+
};
|
|
58
|
+
readonly success: "#22c55e";
|
|
59
|
+
readonly warning: "#f59e0b";
|
|
60
|
+
readonly error: "#ef4444";
|
|
61
|
+
readonly info: "#0033FE";
|
|
62
|
+
};
|
|
63
|
+
declare const nebutraGradients: {
|
|
64
|
+
readonly brand: "linear-gradient(135deg, #0033FE 0%, #0BF1C3 100%)";
|
|
65
|
+
readonly brandHover: "linear-gradient(135deg, #0BF1C3 0%, #0033FE 100%)";
|
|
66
|
+
readonly section: "linear-gradient(180deg, #0033FE 0%, #0BF1C3 100%)";
|
|
67
|
+
readonly glow: "radial-gradient(circle, #0BF1C3 0%, #0033FE 100%)";
|
|
68
|
+
readonly darkCard: "linear-gradient(135deg, #020617 0%, #0a1628 100%)";
|
|
69
|
+
};
|
|
70
|
+
declare const nebutraSpacing: {
|
|
71
|
+
readonly xs: "0.25rem";
|
|
72
|
+
readonly sm: "0.5rem";
|
|
73
|
+
readonly md: "1rem";
|
|
74
|
+
readonly lg: "1.5rem";
|
|
75
|
+
readonly xl: "2rem";
|
|
76
|
+
readonly "2xl": "3rem";
|
|
77
|
+
readonly "3xl": "4rem";
|
|
78
|
+
};
|
|
79
|
+
declare const nebutraBorderRadius: {
|
|
80
|
+
readonly none: "0";
|
|
81
|
+
readonly sm: `${number}rem`;
|
|
82
|
+
readonly md: `${number}rem`;
|
|
83
|
+
readonly lg: `${number}rem`;
|
|
84
|
+
readonly xl: `${number}rem`;
|
|
85
|
+
readonly "2xl": `${number}rem`;
|
|
86
|
+
readonly full: "9999px";
|
|
87
|
+
};
|
|
88
|
+
declare const nebutraShadows: {
|
|
89
|
+
readonly none: "none";
|
|
90
|
+
readonly sm: "0 1px 2px 0 rgb(0 0 0 / 0.05)";
|
|
91
|
+
readonly md: "0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)";
|
|
92
|
+
readonly lg: "0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)";
|
|
93
|
+
readonly xl: "0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)";
|
|
94
|
+
readonly brandGlow: "0 0 0 3px rgb(0 51 254 / 0.15)";
|
|
95
|
+
};
|
|
96
|
+
declare const nebutraTypography: {
|
|
97
|
+
readonly fontFamily: {
|
|
98
|
+
readonly sans: "\"Geist\", \"Noto Sans SC\", \"PingFang SC\", \"Microsoft YaHei\", -apple-system, BlinkMacSystemFont, system-ui, sans-serif";
|
|
99
|
+
readonly cn: "\"Noto Sans SC\", \"PingFang SC\", \"Microsoft YaHei\", \"vivo Sans\", sans-serif";
|
|
100
|
+
readonly display: "\"Geist\", \"Noto Sans SC\", sans-serif";
|
|
101
|
+
readonly mono: "\"Geist Mono\", \"Fira Code\", ui-monospace, Consolas, \"Courier New\", monospace";
|
|
102
|
+
};
|
|
103
|
+
readonly fontSize: {
|
|
104
|
+
readonly xs: `${number}rem`;
|
|
105
|
+
readonly sm: `${number}rem`;
|
|
106
|
+
readonly base: `${number}rem`;
|
|
107
|
+
readonly lg: `${number}rem`;
|
|
108
|
+
readonly xl: `${number}rem`;
|
|
109
|
+
readonly "2xl": `${number}rem`;
|
|
110
|
+
readonly "3xl": `${number}rem`;
|
|
111
|
+
readonly "4xl": `${number}rem`;
|
|
112
|
+
};
|
|
113
|
+
readonly fontWeight: {
|
|
114
|
+
readonly light: string;
|
|
115
|
+
readonly normal: string;
|
|
116
|
+
readonly medium: string;
|
|
117
|
+
readonly semibold: string;
|
|
118
|
+
readonly bold: string;
|
|
119
|
+
};
|
|
120
|
+
};
|
|
121
|
+
declare const nebutraAnimations: {
|
|
122
|
+
readonly "accordion-down": "accordion-down 0.2s ease-out";
|
|
123
|
+
readonly "accordion-up": "accordion-up 0.2s ease-out";
|
|
124
|
+
readonly "fade-in": "fade-in 0.15s ease-out";
|
|
125
|
+
readonly "fade-out": "fade-out 0.15s ease-out";
|
|
126
|
+
readonly "slide-in-from-top": "slide-in-from-top 0.3s ease-out";
|
|
127
|
+
readonly "slide-in-from-bottom": "slide-in-from-bottom 0.3s ease-out";
|
|
128
|
+
readonly "slide-in-from-left": "slide-in-from-left 0.3s ease-out";
|
|
129
|
+
readonly "slide-in-from-right": "slide-in-from-right 0.3s ease-out";
|
|
130
|
+
readonly spin: "spin 1s linear infinite";
|
|
131
|
+
readonly spinner: "spinner 0.6s linear infinite";
|
|
132
|
+
readonly pulse: "pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite";
|
|
133
|
+
readonly bounce: "bounce 1s infinite";
|
|
134
|
+
};
|
|
135
|
+
declare const nebutraPreset: {
|
|
136
|
+
readonly colors: {
|
|
137
|
+
readonly blue: {
|
|
138
|
+
readonly 50: "#f0f4ff";
|
|
139
|
+
readonly 100: "#dbe4ff";
|
|
140
|
+
readonly 200: "#bac8ff";
|
|
141
|
+
readonly 300: "#91a7ff";
|
|
142
|
+
readonly 400: "#5c7cfa";
|
|
143
|
+
readonly 500: "#0033FE";
|
|
144
|
+
readonly 600: "#002ad4";
|
|
145
|
+
readonly 700: "#0021ab";
|
|
146
|
+
readonly 800: "#001882";
|
|
147
|
+
readonly 900: "#000f59";
|
|
148
|
+
readonly 950: "#000830";
|
|
149
|
+
readonly DEFAULT: "#0033FE";
|
|
150
|
+
readonly foreground: "#FFFFFF";
|
|
151
|
+
};
|
|
152
|
+
readonly cyan: {
|
|
153
|
+
readonly 50: "#e6fff8";
|
|
154
|
+
readonly 100: "#b3ffec";
|
|
155
|
+
readonly 200: "#80ffe0";
|
|
156
|
+
readonly 300: "#4dfcd4";
|
|
157
|
+
readonly 400: "#1af7c8";
|
|
158
|
+
readonly 500: "#0BF1C3";
|
|
159
|
+
readonly 600: "#09c9a3";
|
|
160
|
+
readonly 700: "#07a183";
|
|
161
|
+
readonly 800: "#057963";
|
|
162
|
+
readonly 900: "#035143";
|
|
163
|
+
readonly 950: "#012923";
|
|
164
|
+
readonly DEFAULT: "#0BF1C3";
|
|
165
|
+
readonly foreground: "#0f172a";
|
|
166
|
+
};
|
|
167
|
+
readonly neutral: {
|
|
168
|
+
readonly 50: "#f8fafc";
|
|
169
|
+
readonly 100: "#f1f5f9";
|
|
170
|
+
readonly 200: "#e2e8f0";
|
|
171
|
+
readonly 300: "#cbd5e1";
|
|
172
|
+
readonly 400: "#94a3b8";
|
|
173
|
+
readonly 500: "#64748b";
|
|
174
|
+
readonly 600: "#475569";
|
|
175
|
+
readonly 700: "#334155";
|
|
176
|
+
readonly 800: "#1e293b";
|
|
177
|
+
readonly 900: "#0f172a";
|
|
178
|
+
readonly 950: "#020617";
|
|
179
|
+
};
|
|
180
|
+
readonly success: "#22c55e";
|
|
181
|
+
readonly warning: "#f59e0b";
|
|
182
|
+
readonly error: "#ef4444";
|
|
183
|
+
readonly info: "#0033FE";
|
|
184
|
+
};
|
|
185
|
+
readonly spacing: {
|
|
186
|
+
readonly xs: "0.25rem";
|
|
187
|
+
readonly sm: "0.5rem";
|
|
188
|
+
readonly md: "1rem";
|
|
189
|
+
readonly lg: "1.5rem";
|
|
190
|
+
readonly xl: "2rem";
|
|
191
|
+
readonly "2xl": "3rem";
|
|
192
|
+
readonly "3xl": "4rem";
|
|
193
|
+
};
|
|
194
|
+
readonly borderRadius: {
|
|
195
|
+
readonly none: "0";
|
|
196
|
+
readonly sm: `${number}rem`;
|
|
197
|
+
readonly md: `${number}rem`;
|
|
198
|
+
readonly lg: `${number}rem`;
|
|
199
|
+
readonly xl: `${number}rem`;
|
|
200
|
+
readonly "2xl": `${number}rem`;
|
|
201
|
+
readonly full: "9999px";
|
|
202
|
+
};
|
|
203
|
+
readonly boxShadow: {
|
|
204
|
+
readonly none: "none";
|
|
205
|
+
readonly sm: "0 1px 2px 0 rgb(0 0 0 / 0.05)";
|
|
206
|
+
readonly md: "0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)";
|
|
207
|
+
readonly lg: "0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)";
|
|
208
|
+
readonly xl: "0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)";
|
|
209
|
+
readonly brandGlow: "0 0 0 3px rgb(0 51 254 / 0.15)";
|
|
210
|
+
};
|
|
211
|
+
readonly fontFamily: {
|
|
212
|
+
readonly sans: "\"Geist\", \"Noto Sans SC\", \"PingFang SC\", \"Microsoft YaHei\", -apple-system, BlinkMacSystemFont, system-ui, sans-serif";
|
|
213
|
+
readonly cn: "\"Noto Sans SC\", \"PingFang SC\", \"Microsoft YaHei\", \"vivo Sans\", sans-serif";
|
|
214
|
+
readonly display: "\"Geist\", \"Noto Sans SC\", sans-serif";
|
|
215
|
+
readonly mono: "\"Geist Mono\", \"Fira Code\", ui-monospace, Consolas, \"Courier New\", monospace";
|
|
216
|
+
};
|
|
217
|
+
readonly fontSize: {
|
|
218
|
+
readonly xs: `${number}rem`;
|
|
219
|
+
readonly sm: `${number}rem`;
|
|
220
|
+
readonly base: `${number}rem`;
|
|
221
|
+
readonly lg: `${number}rem`;
|
|
222
|
+
readonly xl: `${number}rem`;
|
|
223
|
+
readonly "2xl": `${number}rem`;
|
|
224
|
+
readonly "3xl": `${number}rem`;
|
|
225
|
+
readonly "4xl": `${number}rem`;
|
|
226
|
+
};
|
|
227
|
+
readonly fontWeight: {
|
|
228
|
+
readonly light: string;
|
|
229
|
+
readonly normal: string;
|
|
230
|
+
readonly medium: string;
|
|
231
|
+
readonly semibold: string;
|
|
232
|
+
readonly bold: string;
|
|
233
|
+
};
|
|
234
|
+
readonly animation: {
|
|
235
|
+
readonly "accordion-down": "accordion-down 0.2s ease-out";
|
|
236
|
+
readonly "accordion-up": "accordion-up 0.2s ease-out";
|
|
237
|
+
readonly "fade-in": "fade-in 0.15s ease-out";
|
|
238
|
+
readonly "fade-out": "fade-out 0.15s ease-out";
|
|
239
|
+
readonly "slide-in-from-top": "slide-in-from-top 0.3s ease-out";
|
|
240
|
+
readonly "slide-in-from-bottom": "slide-in-from-bottom 0.3s ease-out";
|
|
241
|
+
readonly "slide-in-from-left": "slide-in-from-left 0.3s ease-out";
|
|
242
|
+
readonly "slide-in-from-right": "slide-in-from-right 0.3s ease-out";
|
|
243
|
+
readonly spin: "spin 1s linear infinite";
|
|
244
|
+
readonly spinner: "spinner 0.6s linear infinite";
|
|
245
|
+
readonly pulse: "pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite";
|
|
246
|
+
readonly bounce: "bounce 1s infinite";
|
|
247
|
+
};
|
|
248
|
+
};
|
|
249
|
+
type NebutraPreset = typeof nebutraPreset;
|
|
250
|
+
|
|
251
|
+
export { type NebutraPreset, nebutraPreset as default, nebutraAnimations, nebutraBorderRadius, nebutraColors, nebutraGradients, nebutraPreset, nebutraShadows, nebutraSpacing, nebutraTypography };
|
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
import { colors } from '@nebutra/brand';
|
|
2
|
+
|
|
3
|
+
// src/tokens/primitive.ts
|
|
4
|
+
var primitiveColors = {
|
|
5
|
+
// Nebutra Blue (云毓蓝) — technology & trust — VI: #0033FE
|
|
6
|
+
blue50: colors.primary[50],
|
|
7
|
+
blue100: colors.primary[100],
|
|
8
|
+
blue200: colors.primary[200],
|
|
9
|
+
blue300: colors.primary[300],
|
|
10
|
+
blue400: colors.primary[400],
|
|
11
|
+
blue500: colors.primary[500],
|
|
12
|
+
// brand primary
|
|
13
|
+
blue600: colors.primary[600],
|
|
14
|
+
blue700: colors.primary[700],
|
|
15
|
+
blue800: colors.primary[800],
|
|
16
|
+
blue900: colors.primary[900],
|
|
17
|
+
blue950: colors.primary[950],
|
|
18
|
+
// Nebutra Cyan (云毓青) — data flow & intelligence — VI: #0BF1C3
|
|
19
|
+
cyan50: colors.accent[50],
|
|
20
|
+
cyan100: colors.accent[100],
|
|
21
|
+
cyan200: colors.accent[200],
|
|
22
|
+
cyan300: colors.accent[300],
|
|
23
|
+
cyan400: colors.accent[400],
|
|
24
|
+
cyan500: colors.accent[500],
|
|
25
|
+
// brand secondary
|
|
26
|
+
cyan600: colors.accent[600],
|
|
27
|
+
cyan700: colors.accent[700],
|
|
28
|
+
cyan800: colors.accent[800],
|
|
29
|
+
cyan900: colors.accent[900],
|
|
30
|
+
cyan950: colors.accent[950],
|
|
31
|
+
// Neutral (blue-undertone gray scale)
|
|
32
|
+
neutral50: colors.neutral[50],
|
|
33
|
+
neutral100: colors.neutral[100],
|
|
34
|
+
neutral200: colors.neutral[200],
|
|
35
|
+
neutral300: colors.neutral[300],
|
|
36
|
+
neutral400: colors.neutral[400],
|
|
37
|
+
neutral500: colors.neutral[500],
|
|
38
|
+
neutral600: colors.neutral[600],
|
|
39
|
+
neutral700: colors.neutral[700],
|
|
40
|
+
neutral800: colors.neutral[800],
|
|
41
|
+
neutral900: colors.neutral[900],
|
|
42
|
+
neutral950: colors.neutral[950],
|
|
43
|
+
// deepest — used as dark background
|
|
44
|
+
// Semantic raw colors — VI §Color Specifications
|
|
45
|
+
// NOTE: info = brand blue (#0033FE), not sky/teal
|
|
46
|
+
red500: "#ef4444",
|
|
47
|
+
green500: "#22c55e",
|
|
48
|
+
amber500: "#f59e0b",
|
|
49
|
+
white: colors.white,
|
|
50
|
+
black: colors.black
|
|
51
|
+
};
|
|
52
|
+
var primitiveGradients = {
|
|
53
|
+
/** Hero sections, primary CTA buttons, logo fills — VI signature gradient */
|
|
54
|
+
primary: colors.gradient.primary,
|
|
55
|
+
/** Hover states, secondary gradient elements */
|
|
56
|
+
reverse: colors.gradient.primaryReverse,
|
|
57
|
+
/** Vertical layout dividers, page section separators */
|
|
58
|
+
vertical: colors.gradient.primaryVertical,
|
|
59
|
+
/** Background halos, focus glow effects, radial emphasis */
|
|
60
|
+
radial: colors.gradient.primaryRadial,
|
|
61
|
+
/** Dark mode card surfaces — deep brand-blue tinted */
|
|
62
|
+
darkCard: "linear-gradient(135deg, #020617 0%, #0a1628 100%)"
|
|
63
|
+
};
|
|
64
|
+
var primitiveRadius = {
|
|
65
|
+
sm: 4,
|
|
66
|
+
md: 6,
|
|
67
|
+
// Geist default — slightly more rounded than 4px
|
|
68
|
+
lg: 8,
|
|
69
|
+
xl: 12,
|
|
70
|
+
"2xl": 16};
|
|
71
|
+
var primitiveFontSize = {
|
|
72
|
+
xs: 12,
|
|
73
|
+
sm: 14,
|
|
74
|
+
base: 16,
|
|
75
|
+
lg: 18,
|
|
76
|
+
xl: 20,
|
|
77
|
+
"2xl": 24,
|
|
78
|
+
"3xl": 30,
|
|
79
|
+
"4xl": 36
|
|
80
|
+
};
|
|
81
|
+
var primitiveFontWeight = {
|
|
82
|
+
light: 300,
|
|
83
|
+
normal: 400,
|
|
84
|
+
medium: 500,
|
|
85
|
+
semibold: 600,
|
|
86
|
+
bold: 700
|
|
87
|
+
};
|
|
88
|
+
var primitiveFontFamily = {
|
|
89
|
+
/** Default body/UI stack — Geist with CJK auto-fallbacks */
|
|
90
|
+
sans: '"Geist", "Noto Sans SC", "PingFang SC", "Microsoft YaHei", -apple-system, BlinkMacSystemFont, system-ui, sans-serif',
|
|
91
|
+
/** Chinese body/UI stack */
|
|
92
|
+
cnSans: '"Noto Sans SC", "PingFang SC", "Microsoft YaHei", "vivo Sans", sans-serif',
|
|
93
|
+
/** Display / hero headlines */
|
|
94
|
+
display: '"Geist", "Noto Sans SC", sans-serif',
|
|
95
|
+
/** Code / monospace — Geist Mono pairs with Geist for full family coverage */
|
|
96
|
+
mono: '"Geist Mono", "Fira Code", ui-monospace, Consolas, "Courier New", monospace'
|
|
97
|
+
};
|
|
98
|
+
var primitiveShadow = {
|
|
99
|
+
none: "none",
|
|
100
|
+
sm: "0 1px 2px 0 rgb(0 0 0 / 0.05)",
|
|
101
|
+
md: "0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)",
|
|
102
|
+
lg: "0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)",
|
|
103
|
+
xl: "0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)",
|
|
104
|
+
/** Brand glow — blue tone for focus/highlight states */
|
|
105
|
+
brandGlow: "0 0 0 3px rgb(0 51 254 / 0.15)"
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
// src/tailwind.preset.ts
|
|
109
|
+
var nebutraColors = {
|
|
110
|
+
// 云毓蓝 (Nebutra Blue) — primary brand color — VI: #0033FE
|
|
111
|
+
blue: {
|
|
112
|
+
50: primitiveColors.blue50,
|
|
113
|
+
100: primitiveColors.blue100,
|
|
114
|
+
200: primitiveColors.blue200,
|
|
115
|
+
300: primitiveColors.blue300,
|
|
116
|
+
400: primitiveColors.blue400,
|
|
117
|
+
500: primitiveColors.blue500,
|
|
118
|
+
600: primitiveColors.blue600,
|
|
119
|
+
700: primitiveColors.blue700,
|
|
120
|
+
800: primitiveColors.blue800,
|
|
121
|
+
900: primitiveColors.blue900,
|
|
122
|
+
950: primitiveColors.blue950,
|
|
123
|
+
DEFAULT: primitiveColors.blue500,
|
|
124
|
+
foreground: primitiveColors.white
|
|
125
|
+
},
|
|
126
|
+
// 云毓青 (Nebutra Cyan) — secondary brand color — VI: #0BF1C3
|
|
127
|
+
cyan: {
|
|
128
|
+
50: primitiveColors.cyan50,
|
|
129
|
+
100: primitiveColors.cyan100,
|
|
130
|
+
200: primitiveColors.cyan200,
|
|
131
|
+
300: primitiveColors.cyan300,
|
|
132
|
+
400: primitiveColors.cyan400,
|
|
133
|
+
500: primitiveColors.cyan500,
|
|
134
|
+
600: primitiveColors.cyan600,
|
|
135
|
+
700: primitiveColors.cyan700,
|
|
136
|
+
800: primitiveColors.cyan800,
|
|
137
|
+
900: primitiveColors.cyan900,
|
|
138
|
+
950: primitiveColors.cyan950,
|
|
139
|
+
DEFAULT: primitiveColors.cyan500,
|
|
140
|
+
foreground: primitiveColors.neutral900
|
|
141
|
+
},
|
|
142
|
+
// Neutral (blue-undertone gray scale)
|
|
143
|
+
neutral: {
|
|
144
|
+
50: primitiveColors.neutral50,
|
|
145
|
+
100: primitiveColors.neutral100,
|
|
146
|
+
200: primitiveColors.neutral200,
|
|
147
|
+
300: primitiveColors.neutral300,
|
|
148
|
+
400: primitiveColors.neutral400,
|
|
149
|
+
500: primitiveColors.neutral500,
|
|
150
|
+
600: primitiveColors.neutral600,
|
|
151
|
+
700: primitiveColors.neutral700,
|
|
152
|
+
800: primitiveColors.neutral800,
|
|
153
|
+
900: primitiveColors.neutral900,
|
|
154
|
+
950: primitiveColors.neutral950
|
|
155
|
+
},
|
|
156
|
+
// Semantic colors — VI §Color Specifications
|
|
157
|
+
success: primitiveColors.green500,
|
|
158
|
+
// #22c55e — VI specifies this exact value
|
|
159
|
+
warning: primitiveColors.amber500,
|
|
160
|
+
// #f59e0b
|
|
161
|
+
error: primitiveColors.red500,
|
|
162
|
+
// #ef4444
|
|
163
|
+
info: primitiveColors.blue500
|
|
164
|
+
// #0033FE — VI: Info = Brand Blue
|
|
165
|
+
};
|
|
166
|
+
var nebutraGradients = {
|
|
167
|
+
brand: primitiveGradients.primary,
|
|
168
|
+
brandHover: primitiveGradients.reverse,
|
|
169
|
+
section: primitiveGradients.vertical,
|
|
170
|
+
glow: primitiveGradients.radial,
|
|
171
|
+
darkCard: primitiveGradients.darkCard
|
|
172
|
+
};
|
|
173
|
+
var nebutraSpacing = {
|
|
174
|
+
xs: "0.25rem",
|
|
175
|
+
// 4px
|
|
176
|
+
sm: "0.5rem",
|
|
177
|
+
// 8px
|
|
178
|
+
md: "1rem",
|
|
179
|
+
// 16px
|
|
180
|
+
lg: "1.5rem",
|
|
181
|
+
// 24px
|
|
182
|
+
xl: "2rem",
|
|
183
|
+
// 32px
|
|
184
|
+
"2xl": "3rem",
|
|
185
|
+
// 48px
|
|
186
|
+
"3xl": "4rem"
|
|
187
|
+
// 64px
|
|
188
|
+
};
|
|
189
|
+
var nebutraBorderRadius = {
|
|
190
|
+
none: "0",
|
|
191
|
+
sm: `${primitiveRadius.sm / 16}rem`,
|
|
192
|
+
// 4px → 0.25rem
|
|
193
|
+
md: `${primitiveRadius.md / 16}rem`,
|
|
194
|
+
// 6px → 0.375rem
|
|
195
|
+
lg: `${primitiveRadius.lg / 16}rem`,
|
|
196
|
+
// 8px → 0.5rem
|
|
197
|
+
xl: `${primitiveRadius.xl / 16}rem`,
|
|
198
|
+
// 12px → 0.75rem
|
|
199
|
+
"2xl": `${primitiveRadius["2xl"] / 16}rem`,
|
|
200
|
+
// 16px → 1rem
|
|
201
|
+
full: "9999px"
|
|
202
|
+
};
|
|
203
|
+
var nebutraShadows = {
|
|
204
|
+
none: primitiveShadow.none,
|
|
205
|
+
sm: primitiveShadow.sm,
|
|
206
|
+
md: primitiveShadow.md,
|
|
207
|
+
lg: primitiveShadow.lg,
|
|
208
|
+
xl: primitiveShadow.xl,
|
|
209
|
+
brandGlow: primitiveShadow.brandGlow
|
|
210
|
+
};
|
|
211
|
+
var nebutraTypography = {
|
|
212
|
+
fontFamily: {
|
|
213
|
+
sans: primitiveFontFamily.sans,
|
|
214
|
+
cn: primitiveFontFamily.cnSans,
|
|
215
|
+
display: primitiveFontFamily.display,
|
|
216
|
+
mono: primitiveFontFamily.mono
|
|
217
|
+
},
|
|
218
|
+
fontSize: {
|
|
219
|
+
xs: `${primitiveFontSize.xs / 16}rem`,
|
|
220
|
+
// 12px
|
|
221
|
+
sm: `${primitiveFontSize.sm / 16}rem`,
|
|
222
|
+
// 14px
|
|
223
|
+
base: `${primitiveFontSize.base / 16}rem`,
|
|
224
|
+
// 16px
|
|
225
|
+
lg: `${primitiveFontSize.lg / 16}rem`,
|
|
226
|
+
// 18px
|
|
227
|
+
xl: `${primitiveFontSize.xl / 16}rem`,
|
|
228
|
+
// 20px
|
|
229
|
+
"2xl": `${primitiveFontSize["2xl"] / 16}rem`,
|
|
230
|
+
// 24px
|
|
231
|
+
"3xl": `${primitiveFontSize["3xl"] / 16}rem`,
|
|
232
|
+
// 30px
|
|
233
|
+
"4xl": `${primitiveFontSize["4xl"] / 16}rem`
|
|
234
|
+
// 36px
|
|
235
|
+
},
|
|
236
|
+
fontWeight: {
|
|
237
|
+
light: String(primitiveFontWeight.light),
|
|
238
|
+
normal: String(primitiveFontWeight.normal),
|
|
239
|
+
medium: String(primitiveFontWeight.medium),
|
|
240
|
+
semibold: String(primitiveFontWeight.semibold),
|
|
241
|
+
bold: String(primitiveFontWeight.bold)
|
|
242
|
+
}
|
|
243
|
+
};
|
|
244
|
+
var nebutraAnimations = {
|
|
245
|
+
"accordion-down": "accordion-down 0.2s ease-out",
|
|
246
|
+
"accordion-up": "accordion-up 0.2s ease-out",
|
|
247
|
+
"fade-in": "fade-in 0.15s ease-out",
|
|
248
|
+
"fade-out": "fade-out 0.15s ease-out",
|
|
249
|
+
"slide-in-from-top": "slide-in-from-top 0.3s ease-out",
|
|
250
|
+
"slide-in-from-bottom": "slide-in-from-bottom 0.3s ease-out",
|
|
251
|
+
"slide-in-from-left": "slide-in-from-left 0.3s ease-out",
|
|
252
|
+
"slide-in-from-right": "slide-in-from-right 0.3s ease-out",
|
|
253
|
+
spin: "spin 1s linear infinite",
|
|
254
|
+
spinner: "spinner 0.6s linear infinite",
|
|
255
|
+
// Button loading state
|
|
256
|
+
pulse: "pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite",
|
|
257
|
+
bounce: "bounce 1s infinite"
|
|
258
|
+
};
|
|
259
|
+
var nebutraPreset = {
|
|
260
|
+
colors: nebutraColors,
|
|
261
|
+
spacing: nebutraSpacing,
|
|
262
|
+
borderRadius: nebutraBorderRadius,
|
|
263
|
+
boxShadow: nebutraShadows,
|
|
264
|
+
fontFamily: nebutraTypography.fontFamily,
|
|
265
|
+
fontSize: nebutraTypography.fontSize,
|
|
266
|
+
fontWeight: nebutraTypography.fontWeight,
|
|
267
|
+
animation: nebutraAnimations
|
|
268
|
+
};
|
|
269
|
+
var tailwind_preset_default = nebutraPreset;
|
|
270
|
+
|
|
271
|
+
export { tailwind_preset_default as default, nebutraAnimations, nebutraBorderRadius, nebutraColors, nebutraGradients, nebutraPreset, nebutraShadows, nebutraSpacing, nebutraTypography };
|
|
272
|
+
//# sourceMappingURL=tailwind.preset.js.map
|
|
273
|
+
//# sourceMappingURL=tailwind.preset.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/tokens/primitive.ts","../src/tailwind.preset.ts"],"names":[],"mappings":"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","file":"tailwind.preset.js","sourcesContent":["/**\n * Primitive Design Tokens — Layer 1\n *\n * Raw values only. No CSS variable references, no semantic meaning.\n * These are the \"atoms\" of the design system.\n *\n * Color source: @nebutra/brand `colors` → @nebutra/design-tokens `tokens/core.json` (SSOT).\n * Typography: Geist + Geist Mono (Vercel) with Noto Sans SC + PingFang SC + Microsoft YaHei CJK fallbacks.\n * Aligned with @nebutra/design-tokens SSOT.\n */\n\nimport { colors } from \"@nebutra/brand\";\n\n// ─── Color Palette ────────────────────────────────────────────────────────────\n\nexport const primitiveColors = {\n // Nebutra Blue (云毓蓝) — technology & trust — VI: #0033FE\n blue50: colors.primary[50],\n blue100: colors.primary[100],\n blue200: colors.primary[200],\n blue300: colors.primary[300],\n blue400: colors.primary[400],\n blue500: colors.primary[500], // brand primary\n blue600: colors.primary[600],\n blue700: colors.primary[700],\n blue800: colors.primary[800],\n blue900: colors.primary[900],\n blue950: colors.primary[950],\n\n // Nebutra Cyan (云毓青) — data flow & intelligence — VI: #0BF1C3\n cyan50: colors.accent[50],\n cyan100: colors.accent[100],\n cyan200: colors.accent[200],\n cyan300: colors.accent[300],\n cyan400: colors.accent[400],\n cyan500: colors.accent[500], // brand secondary\n cyan600: colors.accent[600],\n cyan700: colors.accent[700],\n cyan800: colors.accent[800],\n cyan900: colors.accent[900],\n cyan950: colors.accent[950],\n\n // Neutral (blue-undertone gray scale)\n neutral50: colors.neutral[50],\n neutral100: colors.neutral[100],\n neutral200: colors.neutral[200],\n neutral300: colors.neutral[300],\n neutral400: colors.neutral[400],\n neutral500: colors.neutral[500],\n neutral600: colors.neutral[600],\n neutral700: colors.neutral[700],\n neutral800: colors.neutral[800],\n neutral900: colors.neutral[900],\n neutral950: colors.neutral[950], // deepest — used as dark background\n\n // Semantic raw colors — VI §Color Specifications\n // NOTE: info = brand blue (#0033FE), not sky/teal\n red500: \"#ef4444\",\n red600: \"#dc2626\",\n green500: \"#22c55e\", // VI manual specifies this exact value for success\n green600: \"#16a34a\",\n amber500: \"#f59e0b\",\n amber600: \"#d97706\",\n\n white: colors.white,\n black: colors.black,\n} as const;\n\nexport type PrimitiveColor = keyof typeof primitiveColors;\n\n// ─── Brand Gradients — VI §Brand Gradients (first-class design assets) ────────\n\nexport const primitiveGradients = {\n /** Hero sections, primary CTA buttons, logo fills — VI signature gradient */\n primary: colors.gradient.primary,\n /** Hover states, secondary gradient elements */\n reverse: colors.gradient.primaryReverse,\n /** Vertical layout dividers, page section separators */\n vertical: colors.gradient.primaryVertical,\n /** Background halos, focus glow effects, radial emphasis */\n radial: colors.gradient.primaryRadial,\n /** Dark mode card surfaces — deep brand-blue tinted */\n darkCard: \"linear-gradient(135deg, #020617 0%, #0a1628 100%)\",\n} as const;\n\nexport type PrimitiveGradient = keyof typeof primitiveGradients;\n\n// ─── Spacing Scale (px values) ────────────────────────────────────────────────\n\nexport const primitiveSpacing = {\n 0: 0,\n 1: 4,\n 2: 8,\n 3: 12,\n 4: 16,\n 5: 20,\n 6: 24,\n 8: 32,\n 10: 40,\n 12: 48,\n 14: 56,\n 16: 64,\n 20: 80,\n 24: 96,\n} as const;\n\nexport type PrimitiveSpacing = keyof typeof primitiveSpacing;\n\n// ─── Layout Containers (px) — max-width standards ────────────────────────────\n// Use `text` for text-heavy sections (hero copy, CTA), `content` for general\n// sections, and `wide` for full-bleed feature bento grids.\n\nexport const primitiveContainer = {\n /** Text-focused: hero headlines, CTA copy, FAQ — optimized for reading */\n text: 896, // ~56rem / max-w-4xl\n /** Standard content sections: pricing, architecture, blog */\n content: 1152, // ~72rem / max-w-6xl\n /** Wide sections: feature bento, testimonials, product demos */\n wide: 1400, // ~87.5rem — Vercel/Supabase standard\n} as const;\n\nexport type PrimitiveContainer = keyof typeof primitiveContainer;\n\n// ─── Sizing Scale — component heights (px) ────────────────────────────────────\n\nexport const primitiveSizing = {\n xs: 20,\n /** Geist button-specific size (24px). Larger than xs by design. */\n tiny: 24,\n sm: 32,\n md: 40,\n lg: 48,\n xl: 56,\n \"2xl\": 80,\n} as const;\n\nexport type PrimitiveSizing = keyof typeof primitiveSizing;\n\n// ─── Border Radius (px) ───────────────────────────────────────────────────────\n\nexport const primitiveRadius = {\n none: 0,\n sm: 4,\n md: 6, // Geist default — slightly more rounded than 4px\n lg: 8,\n xl: 12,\n \"2xl\": 16,\n full: 9999,\n} as const;\n\nexport type PrimitiveRadius = keyof typeof primitiveRadius;\n\n// ─── Font Sizes (px) ──────────────────────────────────────────────────────────\n\nexport const primitiveFontSize = {\n xs: 12,\n sm: 14,\n base: 16,\n lg: 18,\n xl: 20,\n \"2xl\": 24,\n \"3xl\": 30,\n \"4xl\": 36,\n} as const;\n\nexport type PrimitiveFontSize = keyof typeof primitiveFontSize;\n\n// ─── Font Weights ─────────────────────────────────────────────────────────────\n\nexport const primitiveFontWeight = {\n light: 300,\n normal: 400,\n medium: 500,\n semibold: 600,\n bold: 700,\n} as const;\n\nexport type PrimitiveFontWeight = keyof typeof primitiveFontWeight;\n\n// ─── Font Families — VI §Typography ──────────────────────────────────────────\n// Aligned with @nebutra/design-tokens SSOT (tokens/core.json fontFamily.*).\n// EN primary: Geist (Vercel variable, 100–900)\n// EN mono: Geist Mono\n// CN primary: Noto Sans SC → PingFang SC → Microsoft YaHei → vivo Sans (print)\n\nexport const primitiveFontFamily = {\n /** Default body/UI stack — Geist with CJK auto-fallbacks */\n sans: '\"Geist\", \"Noto Sans SC\", \"PingFang SC\", \"Microsoft YaHei\", -apple-system, BlinkMacSystemFont, system-ui, sans-serif',\n /** Chinese body/UI stack */\n cnSans: '\"Noto Sans SC\", \"PingFang SC\", \"Microsoft YaHei\", \"vivo Sans\", sans-serif',\n /** Display / hero headlines */\n display: '\"Geist\", \"Noto Sans SC\", sans-serif',\n /** Heading (alias of display) */\n heading: '\"Geist\", \"Noto Sans SC\", sans-serif',\n /** Code / monospace — Geist Mono pairs with Geist for full family coverage */\n mono: '\"Geist Mono\", \"Fira Code\", ui-monospace, Consolas, \"Courier New\", monospace',\n} as const;\n\nexport type PrimitiveFontFamily = keyof typeof primitiveFontFamily;\n\n// ─── Shadows ──────────────────────────────────────────────────────────────────\n\nexport const primitiveShadow = {\n none: \"none\",\n sm: \"0 1px 2px 0 rgb(0 0 0 / 0.05)\",\n md: \"0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)\",\n lg: \"0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)\",\n xl: \"0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)\",\n /** Brand glow — blue tone for focus/highlight states */\n brandGlow: \"0 0 0 3px rgb(0 51 254 / 0.15)\",\n} as const;\n\nexport type PrimitiveShadow = keyof typeof primitiveShadow;\n\n// ─── Transition ───────────────────────────────────────────────────────────────\n\n/**\n * Primitive transition tokens — aligned with the four-rail motion scale\n * (SSOT: @nebutra/design-tokens core.json → duration.*).\n * Keys mirror semantic.json motion.duration.*; values are in ms.\n */\nexport const primitiveTransition = {\n duration: {\n micro: 100, // hover, focus, small state changes\n flow: 200, // standard state transitions (default)\n reveal: 300, // larger motion (accordion, modal, drawer)\n cinematic: 500, // hero entrance, big delight moments\n },\n easing: {\n default: \"ease-out\",\n spring: \"cubic-bezier(0.34, 1.56, 0.64, 1)\",\n inOut: \"cubic-bezier(0.4, 0, 0.2, 1)\",\n },\n} as const;\n\n// ─── Focus Ring ───────────────────────────────────────────────────────────────\n\nexport const primitiveFocusRing = {\n width: 2, // px\n offset: 2, // px — gap between element and ring\n} as const;\n","/**\n * @nebutra/ui — Tailwind CSS 4 Preset\n *\n * Consumes primitive design tokens from tokens/primitive.ts, which itself\n * sources values from @nebutra/brand → @nebutra/design-tokens (SSOT).\n *\n * Usage (Tailwind CSS 4, CSS import — the runtime token source):\n * @import \"@nebutra/tokens/styles.css\"\n *\n * Usage (legacy tailwind.config.js):\n * import { nebutraPreset } from \"@nebutra/ui/tailwind.preset\"\n * export default { presets: [nebutraPreset] }\n */\n\nimport {\n primitiveColors,\n primitiveFontFamily,\n primitiveFontSize,\n primitiveFontWeight,\n primitiveGradients,\n primitiveRadius,\n primitiveShadow,\n} from \"./tokens/primitive\";\n\n// ─── Brand Color Palette ──────────────────────────────────────────────────────\n// Source: 云毓智能 VI 手册 — these are the correct Nebutra values, NOT generic\n// blue (#3B82F6) or purple (#A855F7) which were incorrectly present before.\n\nexport const nebutraColors = {\n // 云毓蓝 (Nebutra Blue) — primary brand color — VI: #0033FE\n blue: {\n 50: primitiveColors.blue50,\n 100: primitiveColors.blue100,\n 200: primitiveColors.blue200,\n 300: primitiveColors.blue300,\n 400: primitiveColors.blue400,\n 500: primitiveColors.blue500,\n 600: primitiveColors.blue600,\n 700: primitiveColors.blue700,\n 800: primitiveColors.blue800,\n 900: primitiveColors.blue900,\n 950: primitiveColors.blue950,\n DEFAULT: primitiveColors.blue500,\n foreground: primitiveColors.white,\n },\n\n // 云毓青 (Nebutra Cyan) — secondary brand color — VI: #0BF1C3\n cyan: {\n 50: primitiveColors.cyan50,\n 100: primitiveColors.cyan100,\n 200: primitiveColors.cyan200,\n 300: primitiveColors.cyan300,\n 400: primitiveColors.cyan400,\n 500: primitiveColors.cyan500,\n 600: primitiveColors.cyan600,\n 700: primitiveColors.cyan700,\n 800: primitiveColors.cyan800,\n 900: primitiveColors.cyan900,\n 950: primitiveColors.cyan950,\n DEFAULT: primitiveColors.cyan500,\n foreground: primitiveColors.neutral900,\n },\n\n // Neutral (blue-undertone gray scale)\n neutral: {\n 50: primitiveColors.neutral50,\n 100: primitiveColors.neutral100,\n 200: primitiveColors.neutral200,\n 300: primitiveColors.neutral300,\n 400: primitiveColors.neutral400,\n 500: primitiveColors.neutral500,\n 600: primitiveColors.neutral600,\n 700: primitiveColors.neutral700,\n 800: primitiveColors.neutral800,\n 900: primitiveColors.neutral900,\n 950: primitiveColors.neutral950,\n },\n\n // Semantic colors — VI §Color Specifications\n success: primitiveColors.green500, // #22c55e — VI specifies this exact value\n warning: primitiveColors.amber500, // #f59e0b\n error: primitiveColors.red500, // #ef4444\n info: primitiveColors.blue500, // #0033FE — VI: Info = Brand Blue\n} as const;\n\n// ─── Brand Gradients ──────────────────────────────────────────────────────────\n// VI §Brand Gradients — these are first-class brand assets\n\nexport const nebutraGradients = {\n brand: primitiveGradients.primary,\n brandHover: primitiveGradients.reverse,\n section: primitiveGradients.vertical,\n glow: primitiveGradients.radial,\n darkCard: primitiveGradients.darkCard,\n} as const;\n\n// ─── Spacing ──────────────────────────────────────────────────────────────────\n\nexport const nebutraSpacing = {\n xs: \"0.25rem\", // 4px\n sm: \"0.5rem\", // 8px\n md: \"1rem\", // 16px\n lg: \"1.5rem\", // 24px\n xl: \"2rem\", // 32px\n \"2xl\": \"3rem\", // 48px\n \"3xl\": \"4rem\", // 64px\n} as const;\n\n// ─── Border Radius ────────────────────────────────────────────────────────────\n// Consumed directly from primitive tokens (px → rem conversion)\n\nexport const nebutraBorderRadius = {\n none: \"0\",\n sm: `${primitiveRadius.sm / 16}rem`, // 4px → 0.25rem\n md: `${primitiveRadius.md / 16}rem`, // 6px → 0.375rem\n lg: `${primitiveRadius.lg / 16}rem`, // 8px → 0.5rem\n xl: `${primitiveRadius.xl / 16}rem`, // 12px → 0.75rem\n \"2xl\": `${primitiveRadius[\"2xl\"] / 16}rem`, // 16px → 1rem\n full: \"9999px\",\n} as const;\n\n// ─── Shadows ──────────────────────────────────────────────────────────────────\n\nexport const nebutraShadows = {\n none: primitiveShadow.none,\n sm: primitiveShadow.sm,\n md: primitiveShadow.md,\n lg: primitiveShadow.lg,\n xl: primitiveShadow.xl,\n brandGlow: primitiveShadow.brandGlow,\n} as const;\n\n// ─── Typography — VI §Typography ─────────────────────────────────────────────\n\nexport const nebutraTypography = {\n fontFamily: {\n sans: primitiveFontFamily.sans,\n cn: primitiveFontFamily.cnSans,\n display: primitiveFontFamily.display,\n mono: primitiveFontFamily.mono,\n },\n fontSize: {\n xs: `${primitiveFontSize.xs / 16}rem`, // 12px\n sm: `${primitiveFontSize.sm / 16}rem`, // 14px\n base: `${primitiveFontSize.base / 16}rem`, // 16px\n lg: `${primitiveFontSize.lg / 16}rem`, // 18px\n xl: `${primitiveFontSize.xl / 16}rem`, // 20px\n \"2xl\": `${primitiveFontSize[\"2xl\"] / 16}rem`, // 24px\n \"3xl\": `${primitiveFontSize[\"3xl\"] / 16}rem`, // 30px\n \"4xl\": `${primitiveFontSize[\"4xl\"] / 16}rem`, // 36px\n },\n fontWeight: {\n light: String(primitiveFontWeight.light),\n normal: String(primitiveFontWeight.normal),\n medium: String(primitiveFontWeight.medium),\n semibold: String(primitiveFontWeight.semibold),\n bold: String(primitiveFontWeight.bold),\n },\n} as const;\n\n// ─── Animations ───────────────────────────────────────────────────────────────\n\nexport const nebutraAnimations = {\n \"accordion-down\": \"accordion-down 0.2s ease-out\",\n \"accordion-up\": \"accordion-up 0.2s ease-out\",\n \"fade-in\": \"fade-in 0.15s ease-out\",\n \"fade-out\": \"fade-out 0.15s ease-out\",\n \"slide-in-from-top\": \"slide-in-from-top 0.3s ease-out\",\n \"slide-in-from-bottom\": \"slide-in-from-bottom 0.3s ease-out\",\n \"slide-in-from-left\": \"slide-in-from-left 0.3s ease-out\",\n \"slide-in-from-right\": \"slide-in-from-right 0.3s ease-out\",\n spin: \"spin 1s linear infinite\",\n spinner: \"spinner 0.6s linear infinite\", // Button loading state\n pulse: \"pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite\",\n bounce: \"bounce 1s infinite\",\n} as const;\n\n// ─── Full Preset ──────────────────────────────────────────────────────────────\n\nexport const nebutraPreset = {\n colors: nebutraColors,\n spacing: nebutraSpacing,\n borderRadius: nebutraBorderRadius,\n boxShadow: nebutraShadows,\n fontFamily: nebutraTypography.fontFamily,\n fontSize: nebutraTypography.fontSize,\n fontWeight: nebutraTypography.fontWeight,\n animation: nebutraAnimations,\n} as const;\n\nexport type NebutraPreset = typeof nebutraPreset;\n\nexport default nebutraPreset;\n"]}
|