@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.
Files changed (51) hide show
  1. package/dist/animate-in-BlvjVh2S.d.ts +250 -0
  2. package/dist/{canonical-Drca5UMj.d.ts → canonical-DEhT4VfS.d.ts} +83 -369
  3. package/dist/card-DunB1gKE.d.ts +105 -0
  4. package/dist/chat/index.d.ts +1 -0
  5. package/dist/chat/index.js +3 -0
  6. package/dist/chat/index.js.map +1 -0
  7. package/dist/components/index.d.ts +90 -126
  8. package/dist/components/index.js +433 -182
  9. package/dist/components/index.js.map +1 -1
  10. package/dist/editorial/index.d.ts +404 -0
  11. package/dist/editorial/index.js +942 -0
  12. package/dist/editorial/index.js.map +1 -0
  13. package/dist/empty-state-bmfHCOuN.d.ts +86 -0
  14. package/dist/hooks/index.d.ts +18 -1
  15. package/dist/hooks/index.js +120 -5
  16. package/dist/hooks/index.js.map +1 -1
  17. package/dist/icons/index.d.ts +1 -0
  18. package/dist/index.d.ts +1 -1
  19. package/dist/layout/index.d.ts +17 -58
  20. package/dist/layout/index.js +368 -127
  21. package/dist/layout/index.js.map +1 -1
  22. package/dist/layouts/index.d.ts +1 -1
  23. package/dist/layouts/index.js +93 -28
  24. package/dist/layouts/index.js.map +1 -1
  25. package/dist/patterns/index.d.ts +39 -46
  26. package/dist/patterns/index.js +534 -323
  27. package/dist/patterns/index.js.map +1 -1
  28. package/dist/primitives/canonical.d.ts +5 -2
  29. package/dist/primitives/canonical.js +598 -288
  30. package/dist/primitives/canonical.js.map +1 -1
  31. package/dist/primitives/index.d.ts +165 -63
  32. package/dist/primitives/index.js +1251 -983
  33. package/dist/primitives/index.js.map +1 -1
  34. package/dist/tailwind.preset.d.ts +32 -32
  35. package/dist/tailwind.preset.js +24 -20
  36. package/dist/tailwind.preset.js.map +1 -1
  37. package/dist/theme/index.d.ts +1 -110
  38. package/dist/typography/fonts.css +8 -16
  39. package/dist/typography/index.d.ts +29 -45
  40. package/dist/typography/index.js +26 -14
  41. package/dist/typography/index.js.map +1 -1
  42. package/dist/utils/auth-surfaces.d.ts +33 -0
  43. package/dist/utils/auth-surfaces.js +9 -0
  44. package/dist/utils/auth-surfaces.js.map +1 -0
  45. package/dist/utils/index.d.ts +20 -16
  46. package/dist/utils/index.js +99 -20
  47. package/dist/utils/index.js.map +1 -1
  48. package/package.json +25 -11
  49. package/src/typography/fonts.css +8 -16
  50. package/dist/styles/brand-override.css +0 -61
  51. 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: "#0f172a";
43
+ readonly foreground: "#18191c";
44
44
  };
45
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";
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: "#22c55e";
59
- readonly warning: "#f59e0b";
60
- readonly error: "#ef4444";
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: "\"Noto Sans SC\", \"PingFang SC\", \"Microsoft YaHei\", \"vivo Sans\", sans-serif";
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: "#0f172a";
165
+ readonly foreground: "#18191c";
166
166
  };
167
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";
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: "#22c55e";
181
- readonly warning: "#f59e0b";
182
- readonly error: "#ef4444";
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: "\"Noto Sans SC\", \"PingFang SC\", \"Microsoft YaHei\", \"vivo Sans\", sans-serif";
213
+ readonly cn: string;
214
214
  readonly display: string;
215
215
  readonly mono: string;
216
216
  };
@@ -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 — VI: #0033FE
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 — VI: #0BF1C3
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
- // NOTE: info = brand blue (#0033FE), not sky/teal
46
- red500: "#ef4444",
47
- green500: "#22c55e",
48
- amber500: "#f59e0b",
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 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',
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: '"Geist", "Noto Sans SC", sans-serif',
95
- /** Code / monospace — Geist Mono pairs with Geist for full family coverage */
96
- mono: '"Geist Mono", ui-monospace, SFMono-Regular, "SF Mono", Menlo, monospace'
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 — VI: #0033FE
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 — VI: #0BF1C3
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
- // #22c55e — VI specifies this exact value
162
+ // --status-success
159
163
  warning: primitiveColors.amber500,
160
- // #f59e0b
164
+ // --status-warning
161
165
  error: primitiveColors.red500,
162
- // #ef4444
166
+ // --status-danger
163
167
  info: primitiveColors.blue500
164
- // #0033FE — VI: Info = Brand Blue
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":";;;AAeO,IAAM,eAAA,GAAkB;AAAA;AAAA,EAE7B,MAAA,EAAQ,MAAA,CAAO,OAAA,CAAQ,EAAE,CAAA;AAAA,EACzB,OAAA,EAAS,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA;AAAA,EAC3B,OAAA,EAAS,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA;AAAA,EAC3B,OAAA,EAAS,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA;AAAA,EAC3B,OAAA,EAAS,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA;AAAA,EAC3B,OAAA,EAAS,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA;AAAA;AAAA,EAC3B,OAAA,EAAS,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA;AAAA,EAC3B,OAAA,EAAS,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA;AAAA,EAC3B,OAAA,EAAS,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA;AAAA,EAC3B,OAAA,EAAS,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA;AAAA,EAC3B,OAAA,EAAS,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA;AAAA;AAAA,EAG3B,MAAA,EAAQ,MAAA,CAAO,MAAA,CAAO,EAAE,CAAA;AAAA,EACxB,OAAA,EAAS,MAAA,CAAO,MAAA,CAAO,GAAG,CAAA;AAAA,EAC1B,OAAA,EAAS,MAAA,CAAO,MAAA,CAAO,GAAG,CAAA;AAAA,EAC1B,OAAA,EAAS,MAAA,CAAO,MAAA,CAAO,GAAG,CAAA;AAAA,EAC1B,OAAA,EAAS,MAAA,CAAO,MAAA,CAAO,GAAG,CAAA;AAAA,EAC1B,OAAA,EAAS,MAAA,CAAO,MAAA,CAAO,GAAG,CAAA;AAAA;AAAA,EAC1B,OAAA,EAAS,MAAA,CAAO,MAAA,CAAO,GAAG,CAAA;AAAA,EAC1B,OAAA,EAAS,MAAA,CAAO,MAAA,CAAO,GAAG,CAAA;AAAA,EAC1B,OAAA,EAAS,MAAA,CAAO,MAAA,CAAO,GAAG,CAAA;AAAA,EAC1B,OAAA,EAAS,MAAA,CAAO,MAAA,CAAO,GAAG,CAAA;AAAA,EAC1B,OAAA,EAAS,MAAA,CAAO,MAAA,CAAO,GAAG,CAAA;AAAA;AAAA,EAG1B,SAAA,EAAW,MAAA,CAAO,OAAA,CAAQ,EAAE,CAAA;AAAA,EAC5B,UAAA,EAAY,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA;AAAA,EAC9B,UAAA,EAAY,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA;AAAA,EAC9B,UAAA,EAAY,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA;AAAA,EAC9B,UAAA,EAAY,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA;AAAA,EAC9B,UAAA,EAAY,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA;AAAA,EAC9B,UAAA,EAAY,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA;AAAA,EAC9B,UAAA,EAAY,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA;AAAA,EAC9B,UAAA,EAAY,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA;AAAA,EAC9B,UAAA,EAAY,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA;AAAA,EAC9B,UAAA,EAAY,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA;AAAA;AAAA;AAAA;AAAA,EAI9B,MAAA,EAAQ,SAAA;AAAA,EAER,QAAA,EAAU,SAAA;AAAA,EAEV,QAAA,EAAU,SAAA;AAAA,EAGV,OAAO,MAAA,CAAO,KAAA;AAAA,EACd,OAAO,MAAA,CAAO;AAChB,CAAA;AAMO,IAAM,kBAAA,GAAqB;AAAA;AAAA,EAEhC,OAAA,EAAS,OAAO,QAAA,CAAS,OAAA;AAAA;AAAA,EAEzB,OAAA,EAAS,OAAO,QAAA,CAAS,cAAA;AAAA;AAAA,EAEzB,QAAA,EAAU,OAAO,QAAA,CAAS,eAAA;AAAA;AAAA,EAE1B,MAAA,EAAQ,OAAO,QAAA,CAAS,aAAA;AAAA;AAAA,EAExB,QAAA,EAAU;AACZ,CAAA;AAyDO,IAAM,eAAA,GAAkB;AAAA,EAE7B,EAAA,EAAI,CAAA;AAAA,EACJ,EAAA,EAAI,CAAA;AAAA;AAAA,EACJ,EAAA,EAAI,CAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,KAAA,EAAO,EAET,CAAA;AAMO,IAAM,iBAAA,GAAoB;AAAA,EAC/B,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,IAAA,EAAM,EAAA;AAAA,EACN,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,KAAA,EAAO,EAAA;AAAA,EACP,KAAA,EAAO,EAAA;AAAA,EACP,KAAA,EAAO;AACT,CAAA;AAMO,IAAM,mBAAA,GAAsB;AAAA,EACjC,KAAA,EAAO,GAAA;AAAA,EACP,MAAA,EAAQ,GAAA;AAAA,EACR,MAAA,EAAQ,GAAA;AAAA,EACR,QAAA,EAAU,GAAA;AAAA,EACV,IAAA,EAAM;AACR,CAAA;AAUO,IAAM,mBAAA,GAAsB;AAAA;AAAA,EAEjC,IAAA,EAAM,qHAAA;AAAA;AAAA,EAEN,MAAA,EAAQ,2EAAA;AAAA;AAAA,EAER,OAAA,EAAS,qCAAA;AAAA,EAEA;AAAA,EAET,IAAA,EAAM;AACR,CAAA;AAMO,IAAM,eAAA,GAAkB;AAAA,EAC7B,IAAA,EAAM,MAAA;AAAA,EACN,EAAA,EAAI,+BAAA;AAAA,EACJ,EAAA,EAAI,kEAAA;AAAA,EACJ,EAAA,EAAI,oEAAA;AAAA,EACJ,EAAA,EAAI,qEAAA;AAAA;AAAA,EAEJ,SAAA,EAAW;AACb,CAAA;;;ACtLO,IAAM,aAAA,GAAgB;AAAA;AAAA,EAE3B,IAAA,EAAM;AAAA,IACJ,IAAI,eAAA,CAAgB,MAAA;AAAA,IACpB,KAAK,eAAA,CAAgB,OAAA;AAAA,IACrB,KAAK,eAAA,CAAgB,OAAA;AAAA,IACrB,KAAK,eAAA,CAAgB,OAAA;AAAA,IACrB,KAAK,eAAA,CAAgB,OAAA;AAAA,IACrB,KAAK,eAAA,CAAgB,OAAA;AAAA,IACrB,KAAK,eAAA,CAAgB,OAAA;AAAA,IACrB,KAAK,eAAA,CAAgB,OAAA;AAAA,IACrB,KAAK,eAAA,CAAgB,OAAA;AAAA,IACrB,KAAK,eAAA,CAAgB,OAAA;AAAA,IACrB,KAAK,eAAA,CAAgB,OAAA;AAAA,IACrB,SAAS,eAAA,CAAgB,OAAA;AAAA,IACzB,YAAY,eAAA,CAAgB;AAAA,GAC9B;AAAA;AAAA,EAGA,IAAA,EAAM;AAAA,IACJ,IAAI,eAAA,CAAgB,MAAA;AAAA,IACpB,KAAK,eAAA,CAAgB,OAAA;AAAA,IACrB,KAAK,eAAA,CAAgB,OAAA;AAAA,IACrB,KAAK,eAAA,CAAgB,OAAA;AAAA,IACrB,KAAK,eAAA,CAAgB,OAAA;AAAA,IACrB,KAAK,eAAA,CAAgB,OAAA;AAAA,IACrB,KAAK,eAAA,CAAgB,OAAA;AAAA,IACrB,KAAK,eAAA,CAAgB,OAAA;AAAA,IACrB,KAAK,eAAA,CAAgB,OAAA;AAAA,IACrB,KAAK,eAAA,CAAgB,OAAA;AAAA,IACrB,KAAK,eAAA,CAAgB,OAAA;AAAA,IACrB,SAAS,eAAA,CAAgB,OAAA;AAAA,IACzB,YAAY,eAAA,CAAgB;AAAA,GAC9B;AAAA;AAAA,EAGA,OAAA,EAAS;AAAA,IACP,IAAI,eAAA,CAAgB,SAAA;AAAA,IACpB,KAAK,eAAA,CAAgB,UAAA;AAAA,IACrB,KAAK,eAAA,CAAgB,UAAA;AAAA,IACrB,KAAK,eAAA,CAAgB,UAAA;AAAA,IACrB,KAAK,eAAA,CAAgB,UAAA;AAAA,IACrB,KAAK,eAAA,CAAgB,UAAA;AAAA,IACrB,KAAK,eAAA,CAAgB,UAAA;AAAA,IACrB,KAAK,eAAA,CAAgB,UAAA;AAAA,IACrB,KAAK,eAAA,CAAgB,UAAA;AAAA,IACrB,KAAK,eAAA,CAAgB,UAAA;AAAA,IACrB,KAAK,eAAA,CAAgB;AAAA,GACvB;AAAA;AAAA,EAGA,SAAS,eAAA,CAAgB,QAAA;AAAA;AAAA,EACzB,SAAS,eAAA,CAAgB,QAAA;AAAA;AAAA,EACzB,OAAO,eAAA,CAAgB,MAAA;AAAA;AAAA,EACvB,MAAM,eAAA,CAAgB;AAAA;AACxB;AAKO,IAAM,gBAAA,GAAmB;AAAA,EAC9B,OAAO,kBAAA,CAAmB,OAAA;AAAA,EAC1B,YAAY,kBAAA,CAAmB,OAAA;AAAA,EAC/B,SAAS,kBAAA,CAAmB,QAAA;AAAA,EAC5B,MAAM,kBAAA,CAAmB,MAAA;AAAA,EACzB,UAAU,kBAAA,CAAmB;AAC/B;AAIO,IAAM,cAAA,GAAiB;AAAA,EAC5B,EAAA,EAAI,SAAA;AAAA;AAAA,EACJ,EAAA,EAAI,QAAA;AAAA;AAAA,EACJ,EAAA,EAAI,MAAA;AAAA;AAAA,EACJ,EAAA,EAAI,QAAA;AAAA;AAAA,EACJ,EAAA,EAAI,MAAA;AAAA;AAAA,EACJ,KAAA,EAAO,MAAA;AAAA;AAAA,EACP,KAAA,EAAO;AAAA;AACT;AAKO,IAAM,mBAAA,GAAsB;AAAA,EACjC,IAAA,EAAM,GAAA;AAAA,EACN,EAAA,EAAI,CAAA,EAAG,eAAA,CAAgB,EAAA,GAAK,EAAE,CAAA,GAAA,CAAA;AAAA;AAAA,EAC9B,EAAA,EAAI,CAAA,EAAG,eAAA,CAAgB,EAAA,GAAK,EAAE,CAAA,GAAA,CAAA;AAAA;AAAA,EAC9B,EAAA,EAAI,CAAA,EAAG,eAAA,CAAgB,EAAA,GAAK,EAAE,CAAA,GAAA,CAAA;AAAA;AAAA,EAC9B,EAAA,EAAI,CAAA,EAAG,eAAA,CAAgB,EAAA,GAAK,EAAE,CAAA,GAAA,CAAA;AAAA;AAAA,EAC9B,KAAA,EAAO,CAAA,EAAG,eAAA,CAAgB,KAAK,IAAI,EAAE,CAAA,GAAA,CAAA;AAAA;AAAA,EACrC,IAAA,EAAM;AACR;AAIO,IAAM,cAAA,GAAiB;AAAA,EAC5B,MAAM,eAAA,CAAgB,IAAA;AAAA,EACtB,IAAI,eAAA,CAAgB,EAAA;AAAA,EACpB,IAAI,eAAA,CAAgB,EAAA;AAAA,EACpB,IAAI,eAAA,CAAgB,EAAA;AAAA,EACpB,IAAI,eAAA,CAAgB,EAAA;AAAA,EACpB,WAAW,eAAA,CAAgB;AAC7B;AAIA,SAAS,OAAA,CAAQ,QAAA,EAAkB,gBAAA,EAA0B,QAAA,EAA0B;AACrF,EAAA,OAAO,CAAA,IAAA,EAAO,QAAQ,CAAA,MAAA,EAAS,gBAAgB,KAAK,QAAQ,CAAA,EAAA,CAAA;AAC9D;AAEO,IAAM,iBAAA,GAAoB;AAAA,EAC/B,UAAA,EAAY;AAAA,IACV,IAAA,EAAM,OAAA,CAAQ,aAAA,EAAe,mBAAA,EAAqB,oBAAoB,IAAI,CAAA;AAAA,IAC1E,IAAI,mBAAA,CAAoB,MAAA;AAAA,IACxB,OAAA,EAAS,OAAA,CAAQ,gBAAA,EAAkB,mBAAA,EAAqB,oBAAoB,OAAO,CAAA;AAAA,IACnF,IAAA,EAAM,OAAA,CAAQ,aAAA,EAAe,mBAAA,EAAqB,oBAAoB,IAAI;AAAA,GAC5E;AAAA,EACA,QAAA,EAAU;AAAA,IACR,EAAA,EAAI,CAAA,EAAG,iBAAA,CAAkB,EAAA,GAAK,EAAE,CAAA,GAAA,CAAA;AAAA;AAAA,IAChC,EAAA,EAAI,CAAA,EAAG,iBAAA,CAAkB,EAAA,GAAK,EAAE,CAAA,GAAA,CAAA;AAAA;AAAA,IAChC,IAAA,EAAM,CAAA,EAAG,iBAAA,CAAkB,IAAA,GAAO,EAAE,CAAA,GAAA,CAAA;AAAA;AAAA,IACpC,EAAA,EAAI,CAAA,EAAG,iBAAA,CAAkB,EAAA,GAAK,EAAE,CAAA,GAAA,CAAA;AAAA;AAAA,IAChC,EAAA,EAAI,CAAA,EAAG,iBAAA,CAAkB,EAAA,GAAK,EAAE,CAAA,GAAA,CAAA;AAAA;AAAA,IAChC,KAAA,EAAO,CAAA,EAAG,iBAAA,CAAkB,KAAK,IAAI,EAAE,CAAA,GAAA,CAAA;AAAA;AAAA,IACvC,KAAA,EAAO,CAAA,EAAG,iBAAA,CAAkB,KAAK,IAAI,EAAE,CAAA,GAAA,CAAA;AAAA;AAAA,IACvC,KAAA,EAAO,CAAA,EAAG,iBAAA,CAAkB,KAAK,IAAI,EAAE,CAAA,GAAA;AAAA;AAAA,GACzC;AAAA,EACA,UAAA,EAAY;AAAA,IACV,KAAA,EAAO,MAAA,CAAO,mBAAA,CAAoB,KAAK,CAAA;AAAA,IACvC,MAAA,EAAQ,MAAA,CAAO,mBAAA,CAAoB,MAAM,CAAA;AAAA,IACzC,MAAA,EAAQ,MAAA,CAAO,mBAAA,CAAoB,MAAM,CAAA;AAAA,IACzC,QAAA,EAAU,MAAA,CAAO,mBAAA,CAAoB,QAAQ,CAAA;AAAA,IAC7C,IAAA,EAAM,MAAA,CAAO,mBAAA,CAAoB,IAAI;AAAA;AAEzC;AAIO,IAAM,iBAAA,GAAoB;AAAA,EAC/B,gBAAA,EAAkB,8BAAA;AAAA,EAClB,cAAA,EAAgB,4BAAA;AAAA,EAChB,SAAA,EAAW,wBAAA;AAAA,EACX,UAAA,EAAY,yBAAA;AAAA,EACZ,mBAAA,EAAqB,iCAAA;AAAA,EACrB,sBAAA,EAAwB,oCAAA;AAAA,EACxB,oBAAA,EAAsB,kCAAA;AAAA,EACtB,qBAAA,EAAuB,mCAAA;AAAA,EACvB,IAAA,EAAM,yBAAA;AAAA,EACN,OAAA,EAAS,8BAAA;AAAA;AAAA,EACT,KAAA,EAAO,gDAAA;AAAA,EACP,MAAA,EAAQ;AACV;AAIO,IAAM,aAAA,GAAgB;AAAA,EAC3B,MAAA,EAAQ,aAAA;AAAA,EACR,OAAA,EAAS,cAAA;AAAA,EACT,YAAA,EAAc,mBAAA;AAAA,EACd,SAAA,EAAW,cAAA;AAAA,EACX,YAAY,iBAAA,CAAkB,UAAA;AAAA,EAC9B,UAAU,iBAAA,CAAkB,QAAA;AAAA,EAC5B,YAAY,iBAAA,CAAkB,UAAA;AAAA,EAC9B,SAAA,EAAW;AACb;AAIA,IAAO,uBAAA,GAAQ","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"]}
@@ -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 NebutraTokens, type ThemeMode };
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-vivo-sans-sc (@nebutra/fonts/next/cjk) CJK
10
- * and the token stacks reference those variables in that order, so Geist keeps
11
- * Latin and only CJK falls through to vivo Sans SC.
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), "Noto Sans SC", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", sans-serif;
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
- h1,
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,