@nebutra/ui 0.2.3 → 3.0.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/animate-in-BlvjVh2S.d.ts +250 -0
- package/dist/{canonical-Drca5UMj.d.ts → canonical-DEhT4VfS.d.ts} +83 -369
- package/dist/card-DunB1gKE.d.ts +105 -0
- package/dist/chat/index.d.ts +1 -0
- package/dist/chat/index.js +3 -0
- package/dist/chat/index.js.map +1 -0
- package/dist/components/index.d.ts +90 -126
- package/dist/components/index.js +433 -182
- package/dist/components/index.js.map +1 -1
- package/dist/editorial/index.d.ts +404 -0
- package/dist/editorial/index.js +942 -0
- package/dist/editorial/index.js.map +1 -0
- package/dist/empty-state-bmfHCOuN.d.ts +86 -0
- package/dist/hooks/index.d.ts +18 -1
- package/dist/hooks/index.js +120 -5
- package/dist/hooks/index.js.map +1 -1
- package/dist/icons/index.d.ts +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/layout/index.d.ts +17 -58
- package/dist/layout/index.js +368 -127
- package/dist/layout/index.js.map +1 -1
- package/dist/layouts/index.d.ts +1 -1
- package/dist/layouts/index.js +93 -28
- package/dist/layouts/index.js.map +1 -1
- package/dist/patterns/index.d.ts +39 -46
- package/dist/patterns/index.js +534 -323
- package/dist/patterns/index.js.map +1 -1
- package/dist/primitives/canonical.d.ts +5 -2
- package/dist/primitives/canonical.js +598 -288
- package/dist/primitives/canonical.js.map +1 -1
- package/dist/primitives/index.d.ts +165 -63
- package/dist/primitives/index.js +1251 -983
- package/dist/primitives/index.js.map +1 -1
- package/dist/tailwind.preset.d.ts +32 -32
- package/dist/tailwind.preset.js +24 -20
- package/dist/tailwind.preset.js.map +1 -1
- package/dist/theme/index.d.ts +1 -110
- package/dist/typography/fonts.css +8 -16
- package/dist/typography/index.d.ts +29 -45
- package/dist/typography/index.js +26 -14
- package/dist/typography/index.js.map +1 -1
- package/dist/utils/auth-surfaces.d.ts +33 -0
- package/dist/utils/auth-surfaces.js +9 -0
- package/dist/utils/auth-surfaces.js.map +1 -0
- package/dist/utils/index.d.ts +20 -16
- package/dist/utils/index.js +99 -20
- package/dist/utils/index.js.map +1 -1
- package/package.json +25 -11
- package/src/typography/fonts.css +8 -16
- package/dist/styles/brand-override.css +0 -61
- package/src/styles/brand-override.css +0 -61
|
@@ -40,24 +40,24 @@ declare const nebutraColors: {
|
|
|
40
40
|
readonly 900: "#035143";
|
|
41
41
|
readonly 950: "#012923";
|
|
42
42
|
readonly DEFAULT: "#0BF1C3";
|
|
43
|
-
readonly foreground: "#
|
|
43
|
+
readonly foreground: "#18191c";
|
|
44
44
|
};
|
|
45
45
|
readonly neutral: {
|
|
46
|
-
readonly 50: "#
|
|
47
|
-
readonly 100: "#
|
|
48
|
-
readonly 200: "#
|
|
49
|
-
readonly 300: "#
|
|
50
|
-
readonly 400: "#
|
|
51
|
-
readonly 500: "#
|
|
52
|
-
readonly 600: "#
|
|
53
|
-
readonly 700: "#
|
|
54
|
-
readonly 800: "#
|
|
55
|
-
readonly 900: "#
|
|
56
|
-
readonly 950: "#
|
|
46
|
+
readonly 50: "#f9fafb";
|
|
47
|
+
readonly 100: "#f3f4f6";
|
|
48
|
+
readonly 200: "#e4e5e8";
|
|
49
|
+
readonly 300: "#d2d4d8";
|
|
50
|
+
readonly 400: "#9fa1a5";
|
|
51
|
+
readonly 500: "#717377";
|
|
52
|
+
readonly 600: "#515357";
|
|
53
|
+
readonly 700: "#3f4044";
|
|
54
|
+
readonly 800: "#26272a";
|
|
55
|
+
readonly 900: "#18191c";
|
|
56
|
+
readonly 950: "#0b0c0d";
|
|
57
57
|
};
|
|
58
|
-
readonly success:
|
|
59
|
-
readonly warning:
|
|
60
|
-
readonly error:
|
|
58
|
+
readonly success: string;
|
|
59
|
+
readonly warning: string;
|
|
60
|
+
readonly error: string;
|
|
61
61
|
readonly info: "#0033FE";
|
|
62
62
|
};
|
|
63
63
|
declare const nebutraGradients: {
|
|
@@ -96,7 +96,7 @@ declare const nebutraShadows: {
|
|
|
96
96
|
declare const nebutraTypography: {
|
|
97
97
|
readonly fontFamily: {
|
|
98
98
|
readonly sans: string;
|
|
99
|
-
readonly cn:
|
|
99
|
+
readonly cn: string;
|
|
100
100
|
readonly display: string;
|
|
101
101
|
readonly mono: string;
|
|
102
102
|
};
|
|
@@ -162,24 +162,24 @@ declare const nebutraPreset: {
|
|
|
162
162
|
readonly 900: "#035143";
|
|
163
163
|
readonly 950: "#012923";
|
|
164
164
|
readonly DEFAULT: "#0BF1C3";
|
|
165
|
-
readonly foreground: "#
|
|
165
|
+
readonly foreground: "#18191c";
|
|
166
166
|
};
|
|
167
167
|
readonly neutral: {
|
|
168
|
-
readonly 50: "#
|
|
169
|
-
readonly 100: "#
|
|
170
|
-
readonly 200: "#
|
|
171
|
-
readonly 300: "#
|
|
172
|
-
readonly 400: "#
|
|
173
|
-
readonly 500: "#
|
|
174
|
-
readonly 600: "#
|
|
175
|
-
readonly 700: "#
|
|
176
|
-
readonly 800: "#
|
|
177
|
-
readonly 900: "#
|
|
178
|
-
readonly 950: "#
|
|
168
|
+
readonly 50: "#f9fafb";
|
|
169
|
+
readonly 100: "#f3f4f6";
|
|
170
|
+
readonly 200: "#e4e5e8";
|
|
171
|
+
readonly 300: "#d2d4d8";
|
|
172
|
+
readonly 400: "#9fa1a5";
|
|
173
|
+
readonly 500: "#717377";
|
|
174
|
+
readonly 600: "#515357";
|
|
175
|
+
readonly 700: "#3f4044";
|
|
176
|
+
readonly 800: "#26272a";
|
|
177
|
+
readonly 900: "#18191c";
|
|
178
|
+
readonly 950: "#0b0c0d";
|
|
179
179
|
};
|
|
180
|
-
readonly success:
|
|
181
|
-
readonly warning:
|
|
182
|
-
readonly error:
|
|
180
|
+
readonly success: string;
|
|
181
|
+
readonly warning: string;
|
|
182
|
+
readonly error: string;
|
|
183
183
|
readonly info: "#0033FE";
|
|
184
184
|
};
|
|
185
185
|
readonly spacing: {
|
|
@@ -210,7 +210,7 @@ declare const nebutraPreset: {
|
|
|
210
210
|
};
|
|
211
211
|
readonly fontFamily: {
|
|
212
212
|
readonly sans: string;
|
|
213
|
-
readonly cn:
|
|
213
|
+
readonly cn: string;
|
|
214
214
|
readonly display: string;
|
|
215
215
|
readonly mono: string;
|
|
216
216
|
};
|
package/dist/tailwind.preset.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { colors } from '@nebutra/brand';
|
|
2
|
+
import { tokenColor, fontStack } from '@nebutra/tokens/values';
|
|
2
3
|
|
|
3
4
|
// src/tokens/primitive.ts
|
|
4
5
|
var primitiveColors = {
|
|
5
|
-
// Nebutra Blue (云毓蓝) — technology & trust
|
|
6
|
+
// Nebutra Blue (云毓蓝) — technology & trust
|
|
6
7
|
blue50: colors.primary[50],
|
|
7
8
|
blue100: colors.primary[100],
|
|
8
9
|
blue200: colors.primary[200],
|
|
@@ -15,7 +16,7 @@ var primitiveColors = {
|
|
|
15
16
|
blue800: colors.primary[800],
|
|
16
17
|
blue900: colors.primary[900],
|
|
17
18
|
blue950: colors.primary[950],
|
|
18
|
-
// Nebutra Cyan (云毓青) — data flow & intelligence
|
|
19
|
+
// Nebutra Cyan (云毓青) — data flow & intelligence
|
|
19
20
|
cyan50: colors.accent[50],
|
|
20
21
|
cyan100: colors.accent[100],
|
|
21
22
|
cyan200: colors.accent[200],
|
|
@@ -41,11 +42,12 @@ var primitiveColors = {
|
|
|
41
42
|
neutral900: colors.neutral[900],
|
|
42
43
|
neutral950: colors.neutral[950],
|
|
43
44
|
// deepest — used as dark background
|
|
44
|
-
// Semantic raw colors — VI §Color Specifications
|
|
45
|
-
//
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
45
|
+
// Semantic raw colors — VI §Color Specifications. The 500s are the status
|
|
46
|
+
// tokens; the 600 hover steps have no token of their own.
|
|
47
|
+
// NOTE: info = brand blue, not sky/teal
|
|
48
|
+
red500: tokenColor("--status-danger"),
|
|
49
|
+
green500: tokenColor("--status-success"),
|
|
50
|
+
amber500: tokenColor("--status-warning"),
|
|
49
51
|
white: colors.white,
|
|
50
52
|
black: colors.black
|
|
51
53
|
};
|
|
@@ -86,14 +88,16 @@ var primitiveFontWeight = {
|
|
|
86
88
|
bold: 700
|
|
87
89
|
};
|
|
88
90
|
var primitiveFontFamily = {
|
|
89
|
-
/** Default body/UI stack — Geist with CJK
|
|
90
|
-
sans:
|
|
91
|
-
/**
|
|
92
|
-
cnSans:
|
|
91
|
+
/** Default body/UI stack — Geist with CJK falling through to MiSans */
|
|
92
|
+
sans: fontStack("--font-sans"),
|
|
93
|
+
/** CJK-locale stack (same order as sans, minus Latin-only system faces) */
|
|
94
|
+
cnSans: fontStack("--font-cn"),
|
|
93
95
|
/** Display / hero headlines */
|
|
94
|
-
display:
|
|
95
|
-
/**
|
|
96
|
-
|
|
96
|
+
display: fontStack("--font-display"),
|
|
97
|
+
/** Headings */
|
|
98
|
+
heading: fontStack("--font-heading"),
|
|
99
|
+
/** Code / monospace */
|
|
100
|
+
mono: fontStack("--font-mono")
|
|
97
101
|
};
|
|
98
102
|
var primitiveShadow = {
|
|
99
103
|
none: "none",
|
|
@@ -107,7 +111,7 @@ var primitiveShadow = {
|
|
|
107
111
|
|
|
108
112
|
// src/tailwind.preset.ts
|
|
109
113
|
var nebutraColors = {
|
|
110
|
-
// 云毓蓝 (Nebutra Blue) — primary brand color
|
|
114
|
+
// 云毓蓝 (Nebutra Blue) — primary brand color
|
|
111
115
|
blue: {
|
|
112
116
|
50: primitiveColors.blue50,
|
|
113
117
|
100: primitiveColors.blue100,
|
|
@@ -123,7 +127,7 @@ var nebutraColors = {
|
|
|
123
127
|
DEFAULT: primitiveColors.blue500,
|
|
124
128
|
foreground: primitiveColors.white
|
|
125
129
|
},
|
|
126
|
-
// 云毓青 (Nebutra Cyan) — secondary brand color
|
|
130
|
+
// 云毓青 (Nebutra Cyan) — secondary brand color
|
|
127
131
|
cyan: {
|
|
128
132
|
50: primitiveColors.cyan50,
|
|
129
133
|
100: primitiveColors.cyan100,
|
|
@@ -155,13 +159,13 @@ var nebutraColors = {
|
|
|
155
159
|
},
|
|
156
160
|
// Semantic colors — VI §Color Specifications
|
|
157
161
|
success: primitiveColors.green500,
|
|
158
|
-
//
|
|
162
|
+
// --status-success
|
|
159
163
|
warning: primitiveColors.amber500,
|
|
160
|
-
//
|
|
164
|
+
// --status-warning
|
|
161
165
|
error: primitiveColors.red500,
|
|
162
|
-
//
|
|
166
|
+
// --status-danger
|
|
163
167
|
info: primitiveColors.blue500
|
|
164
|
-
//
|
|
168
|
+
// VI: Info = Brand Blue
|
|
165
169
|
};
|
|
166
170
|
var nebutraGradients = {
|
|
167
171
|
brand: primitiveGradients.primary,
|
|
@@ -1 +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\", ui-monospace, SFMono-Regular, \"SF Mono\", Menlo, 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\nfunction fontVar(variable: string, registryVariable: string, fallback: string): string {\n return `var(${variable}, var(${registryVariable}, ${fallback}))`;\n}\n\nexport const nebutraTypography = {\n fontFamily: {\n sans: fontVar(\"--font-sans\", \"--font-geist-sans\", primitiveFontFamily.sans),\n cn: primitiveFontFamily.cnSans,\n display: fontVar(\"--font-display\", \"--font-geist-sans\", primitiveFontFamily.display),\n mono: fontVar(\"--font-mono\", \"--font-geist-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"]}
|
|
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 body/UI, DM Sans headings, MiSans for CJK (PingFang SC / Microsoft YaHei fallbacks).\n * Aligned with @nebutra/design-tokens SSOT.\n */\n\nimport { colors } from \"@nebutra/brand\";\nimport { fontStack, tokenColor } from \"@nebutra/tokens/values\";\n\n// ─── Color Palette ────────────────────────────────────────────────────────────\n\nexport const primitiveColors = {\n // Nebutra Blue (云毓蓝) — technology & trust\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\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. The 500s are the status\n // tokens; the 600 hover steps have no token of their own.\n // NOTE: info = brand blue, not sky/teal\n red500: tokenColor(\"--status-danger\"),\n red600: \"#dc2626\",\n green500: tokenColor(\"--status-success\"),\n green600: \"#16a34a\",\n amber500: tokenColor(\"--status-warning\"),\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// Read from @nebutra/tokens/values (generated from the styles.css apps import);\n// the faces are chosen in design-tokens core.json:fontFamily. next/font\n// variables are dropped here — these are the literal stacks.\n\nexport const primitiveFontFamily = {\n /** Default body/UI stack — Geist with CJK falling through to MiSans */\n sans: fontStack(\"--font-sans\"),\n /** CJK-locale stack (same order as sans, minus Latin-only system faces) */\n cnSans: fontStack(\"--font-cn\"),\n /** Display / hero headlines */\n display: fontStack(\"--font-display\"),\n /** Headings */\n heading: fontStack(\"--font-heading\"),\n /** Code / monospace */\n mono: fontStack(\"--font-mono\"),\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: \"var(--ease-brand)\",\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\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\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, // --status-success\n warning: primitiveColors.amber500, // --status-warning\n error: primitiveColors.red500, // --status-danger\n info: primitiveColors.blue500, // 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\nfunction fontVar(variable: string, registryVariable: string, fallback: string): string {\n return `var(${variable}, var(${registryVariable}, ${fallback}))`;\n}\n\nexport const nebutraTypography = {\n fontFamily: {\n sans: fontVar(\"--font-sans\", \"--font-geist-sans\", primitiveFontFamily.sans),\n cn: primitiveFontFamily.cnSans,\n display: fontVar(\"--font-display\", \"--font-geist-sans\", primitiveFontFamily.display),\n mono: fontVar(\"--font-mono\", \"--font-geist-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"]}
|
package/dist/theme/index.d.ts
CHANGED
|
@@ -22,115 +22,6 @@ interface NebutraThemeProviderProps {
|
|
|
22
22
|
*/
|
|
23
23
|
declare function NebutraThemeProvider({ children, appearance, defaultAppearance, }: NebutraThemeProviderProps): react_jsx_runtime.JSX.Element;
|
|
24
24
|
|
|
25
|
-
/**
|
|
26
|
-
* @internal — Lobe UI Ant Design Token Bridge
|
|
27
|
-
*
|
|
28
|
-
* These hex color values exist ONLY to configure Lobe UI's `customTheme` prop,
|
|
29
|
-
* which requires JS-level token values (not CSS variables).
|
|
30
|
-
*
|
|
31
|
-
* ⚠️ DO NOT import these tokens in app code.
|
|
32
|
-
* App code should use CSS variables from `@nebutra/tokens/styles.css`
|
|
33
|
-
* (e.g., `var(--color-primary)`, `bg-primary`, `text-neutral-12`)
|
|
34
|
-
*
|
|
35
|
-
* Token hierarchy:
|
|
36
|
-
* @nebutra/brand → brand primitives (source data)
|
|
37
|
-
* @nebutra/tokens → runtime CSS variables (light/dark, 12-step scales)
|
|
38
|
-
* @nebutra/theme → multi-theme presets (oklch, 6 variants)
|
|
39
|
-
* @nebutra/ui/theme → THIS FILE: Lobe UI bridge (internal only)
|
|
40
|
-
*/
|
|
41
|
-
declare const colors: {
|
|
42
|
-
readonly primary: {
|
|
43
|
-
readonly 50: "#EFF6FF";
|
|
44
|
-
readonly 100: "#DBEAFE";
|
|
45
|
-
readonly 200: "#BFDBFE";
|
|
46
|
-
readonly 300: "#93C5FD";
|
|
47
|
-
readonly 400: "#60A5FA";
|
|
48
|
-
readonly 500: "#3B82F6";
|
|
49
|
-
readonly 600: "#2563EB";
|
|
50
|
-
readonly 700: "#1D4ED8";
|
|
51
|
-
readonly 800: "#1E40AF";
|
|
52
|
-
readonly 900: "#1E3A8A";
|
|
53
|
-
readonly 950: "#172554";
|
|
54
|
-
};
|
|
55
|
-
readonly secondary: {
|
|
56
|
-
readonly 50: "#FAF5FF";
|
|
57
|
-
readonly 100: "#F3E8FF";
|
|
58
|
-
readonly 200: "#E9D5FF";
|
|
59
|
-
readonly 300: "#D8B4FE";
|
|
60
|
-
readonly 400: "#C084FC";
|
|
61
|
-
readonly 500: "#A855F7";
|
|
62
|
-
readonly 600: "#9333EA";
|
|
63
|
-
readonly 700: "#7C3AED";
|
|
64
|
-
readonly 800: "#6B21A8";
|
|
65
|
-
readonly 900: "#581C87";
|
|
66
|
-
readonly 950: "#3B0764";
|
|
67
|
-
};
|
|
68
|
-
readonly neutral: {
|
|
69
|
-
readonly 50: "#F8FAFC";
|
|
70
|
-
readonly 100: "#F1F5F9";
|
|
71
|
-
readonly 200: "#E2E8F0";
|
|
72
|
-
readonly 300: "#CBD5E1";
|
|
73
|
-
readonly 400: "#94A3B8";
|
|
74
|
-
readonly 500: "#64748B";
|
|
75
|
-
readonly 600: "#475569";
|
|
76
|
-
readonly 700: "#334155";
|
|
77
|
-
readonly 800: "#1E293B";
|
|
78
|
-
readonly 900: "#0F172A";
|
|
79
|
-
readonly 950: "#020617";
|
|
80
|
-
};
|
|
81
|
-
readonly success: "#10B981";
|
|
82
|
-
readonly warning: "#F59E0B";
|
|
83
|
-
readonly error: "#EF4444";
|
|
84
|
-
readonly info: "#3B82F6";
|
|
85
|
-
};
|
|
86
|
-
declare const spacing: {
|
|
87
|
-
readonly xs: "0.25rem";
|
|
88
|
-
readonly sm: "0.5rem";
|
|
89
|
-
readonly md: "1rem";
|
|
90
|
-
readonly lg: "1.5rem";
|
|
91
|
-
readonly xl: "2rem";
|
|
92
|
-
readonly "2xl": "3rem";
|
|
93
|
-
readonly "3xl": "4rem";
|
|
94
|
-
};
|
|
95
|
-
declare const borderRadius: {
|
|
96
|
-
readonly none: "0";
|
|
97
|
-
readonly sm: "0.25rem";
|
|
98
|
-
readonly md: "0.375rem";
|
|
99
|
-
readonly lg: "0.5rem";
|
|
100
|
-
readonly xl: "0.75rem";
|
|
101
|
-
readonly "2xl": "1rem";
|
|
102
|
-
readonly full: "9999px";
|
|
103
|
-
};
|
|
104
|
-
declare const shadows: {
|
|
105
|
-
readonly sm: "0 1px 2px 0 rgb(0 0 0 / 0.05)";
|
|
106
|
-
readonly md: "0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)";
|
|
107
|
-
readonly lg: "0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)";
|
|
108
|
-
readonly xl: "0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)";
|
|
109
|
-
};
|
|
110
|
-
declare const typography: {
|
|
111
|
-
readonly fontFamily: {
|
|
112
|
-
readonly sans: "var(--font-sans, var(--font-geist-sans, \"Geist\", system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif))";
|
|
113
|
-
readonly mono: "var(--font-mono, var(--font-geist-mono, \"Geist Mono\", ui-monospace, SFMono-Regular, \"SF Mono\", Menlo, monospace))";
|
|
114
|
-
};
|
|
115
|
-
readonly fontSize: {
|
|
116
|
-
readonly xs: "0.75rem";
|
|
117
|
-
readonly sm: "0.875rem";
|
|
118
|
-
readonly base: "1rem";
|
|
119
|
-
readonly lg: "1.125rem";
|
|
120
|
-
readonly xl: "1.25rem";
|
|
121
|
-
readonly "2xl": "1.5rem";
|
|
122
|
-
readonly "3xl": "1.875rem";
|
|
123
|
-
readonly "4xl": "2.25rem";
|
|
124
|
-
};
|
|
125
|
-
};
|
|
126
|
-
type NebutraTokens = {
|
|
127
|
-
colors: typeof colors;
|
|
128
|
-
spacing: typeof spacing;
|
|
129
|
-
borderRadius: typeof borderRadius;
|
|
130
|
-
shadows: typeof shadows;
|
|
131
|
-
typography: typeof typography;
|
|
132
|
-
};
|
|
133
|
-
|
|
134
25
|
/**
|
|
135
26
|
* @nebutra/ui/theme — Lobe UI theme integration
|
|
136
27
|
*
|
|
@@ -147,4 +38,4 @@ type NebutraTokens = {
|
|
|
147
38
|
*/
|
|
148
39
|
type ThemeMode = "light" | "dark" | "system";
|
|
149
40
|
|
|
150
|
-
export { NebutraThemeProvider, type NebutraThemeProviderProps, type
|
|
41
|
+
export { NebutraThemeProvider, type NebutraThemeProviderProps, type ThemeMode };
|
|
@@ -6,9 +6,11 @@
|
|
|
6
6
|
* Font loading (Next.js apps): each app's layout.tsx applies the loader classes
|
|
7
7
|
* GeistSans → --font-geist-sans (variable, 100–900) Latin + numerals
|
|
8
8
|
* GeistMono → --font-geist-mono (variable, 100–900) code
|
|
9
|
-
* cjkFontClassName → --font-
|
|
10
|
-
*
|
|
11
|
-
*
|
|
9
|
+
* cjkFontClassName → --font-dm-sans (@nebutra/fonts/next/cjk) Latin headings
|
|
10
|
+
* <CjkFontFace /> → MiSans @font-face, CDN-hosted (licence forbids shipping
|
|
11
|
+
* the file in this public repo) CJK
|
|
12
|
+
* and the token stacks reference those in order, so Geist keeps Latin body and
|
|
13
|
+
* numerals, DM Sans takes headings, and only CJK falls through to MiSans.
|
|
12
14
|
*
|
|
13
15
|
* IMPORT ORDER MATTERS: this file must come AFTER @nebutra/tokens/styles.css
|
|
14
16
|
* (see ../styles/preset.css). It used to re-declare --font-sans / --font-heading /
|
|
@@ -29,7 +31,7 @@
|
|
|
29
31
|
token already leads with the self-hosted face; the system families repeat
|
|
30
32
|
here so this alias still degrades on its own. */
|
|
31
33
|
--font-cjk:
|
|
32
|
-
var(--font-cn), "
|
|
34
|
+
var(--font-cn), "MiSans", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", sans-serif;
|
|
33
35
|
|
|
34
36
|
/* Not a token: no Nebutra surface uses a serif, this exists for shadcn parity. */
|
|
35
37
|
--font-serif: Georgia, Cambria, "Times New Roman", Times, serif;
|
|
@@ -79,18 +81,8 @@ body {
|
|
|
79
81
|
font-weight: 400;
|
|
80
82
|
}
|
|
81
83
|
|
|
82
|
-
/* Headings
|
|
83
|
-
|
|
84
|
-
h2,
|
|
85
|
-
h3,
|
|
86
|
-
h4,
|
|
87
|
-
h5,
|
|
88
|
-
h6 {
|
|
89
|
-
font-family: var(--font-heading), var(--font-cjk);
|
|
90
|
-
/* Theme/DESIGN can lighten headings via fontWeight.heading; default 600. */
|
|
91
|
-
font-weight: var(--font-weight-heading, 600);
|
|
92
|
-
line-height: 1.25;
|
|
93
|
-
}
|
|
84
|
+
/* Headings: one rule, in @nebutra/design-tokens static/base.css
|
|
85
|
+
(--font-heading at --font-weight-heading). Not re-declared here. */
|
|
94
86
|
|
|
95
87
|
/* Code */
|
|
96
88
|
code,
|