@nebutra/ui 0.2.1 → 0.2.2

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 (55) hide show
  1. package/LICENSE +21 -676
  2. package/README.md +81 -86
  3. package/dist/agent/index.d.ts +119 -0
  4. package/dist/agent/index.js +135 -0
  5. package/dist/agent/index.js.map +1 -0
  6. package/dist/canonical-CrO71UPO.d.ts +4058 -0
  7. package/dist/components/index.d.ts +51 -56
  8. package/dist/components/index.js +1467 -1160
  9. package/dist/components/index.js.map +1 -1
  10. package/dist/hooks/index.d.ts +62 -15
  11. package/dist/hooks/index.js +56 -34
  12. package/dist/hooks/index.js.map +1 -1
  13. package/dist/index-CKLIGfiU.d.ts +19 -0
  14. package/dist/index-Dg4jRJV2.d.ts +57 -0
  15. package/dist/layout/index.d.ts +5 -1
  16. package/dist/layout/index.js +427 -533
  17. package/dist/layout/index.js.map +1 -1
  18. package/dist/layouts/index.js +11 -9
  19. package/dist/layouts/index.js.map +1 -1
  20. package/dist/patterns/index.d.ts +128 -2
  21. package/dist/patterns/index.js +1478 -786
  22. package/dist/patterns/index.js.map +1 -1
  23. package/dist/primitives/canonical.d.ts +25 -0
  24. package/dist/primitives/canonical.js +11903 -0
  25. package/dist/primitives/canonical.js.map +1 -0
  26. package/dist/primitives/index.d.ts +577 -3545
  27. package/dist/primitives/index.js +8002 -6159
  28. package/dist/primitives/index.js.map +1 -1
  29. package/dist/shared/animation/css/index.d.ts +1 -0
  30. package/dist/shared/animation/css/index.js +14 -0
  31. package/dist/shared/animation/css/index.js.map +1 -0
  32. package/dist/shared/animation/index.d.ts +6 -0
  33. package/dist/shared/animation/index.js +272 -0
  34. package/dist/shared/animation/index.js.map +1 -0
  35. package/dist/shared/animation/motion/index.d.ts +4 -0
  36. package/dist/shared/animation/motion/index.js +205 -0
  37. package/dist/shared/animation/motion/index.js.map +1 -0
  38. package/dist/styles/brand-override.css +11 -11
  39. package/dist/tailwind.preset.d.ts +10 -10
  40. package/dist/tailwind.preset.js +7 -4
  41. package/dist/tailwind.preset.js.map +1 -1
  42. package/dist/theme/index.d.ts +2 -2
  43. package/dist/tokens-EAC6uPem.d.ts +302 -0
  44. package/dist/typography/fonts.css +31 -12
  45. package/dist/typography/index.d.ts +27 -27
  46. package/dist/typography/index.js +24 -4
  47. package/dist/typography/index.js.map +1 -1
  48. package/dist/utils/index.d.ts +36 -14
  49. package/dist/utils/index.js +44 -10
  50. package/dist/utils/index.js.map +1 -1
  51. package/package.json +38 -12
  52. package/src/styles/brand-override.css +61 -0
  53. package/src/styles/preset.css +29 -0
  54. package/src/styles/sources.css +27 -0
  55. package/src/typography/fonts.css +129 -0
@@ -61,10 +61,10 @@ declare const nebutraColors: {
61
61
  readonly info: "#0033FE";
62
62
  };
63
63
  declare const nebutraGradients: {
64
- readonly brand: "linear-gradient(135deg, #0033FE 0%, #0BF1C3 100%)";
65
- readonly brandHover: "linear-gradient(135deg, #0BF1C3 0%, #0033FE 100%)";
66
- readonly section: "linear-gradient(180deg, #0033FE 0%, #0BF1C3 100%)";
67
- readonly glow: "radial-gradient(circle, #0BF1C3 0%, #0033FE 100%)";
64
+ readonly brand: "linear-gradient(135deg, #0033FE 0%, #00A2E9 50%, #0BF1C3 100%)";
65
+ readonly brandHover: "linear-gradient(135deg, #0BF1C3 0%, #00A2E9 50%, #0033FE 100%)";
66
+ readonly section: "linear-gradient(180deg, #0033FE 0%, #00A2E9 50%, #0BF1C3 100%)";
67
+ readonly glow: "radial-gradient(circle, #0BF1C3 0%, #00A2E9 50%, #0033FE 100%)";
68
68
  readonly darkCard: "linear-gradient(135deg, #020617 0%, #0a1628 100%)";
69
69
  };
70
70
  declare const nebutraSpacing: {
@@ -95,10 +95,10 @@ declare const nebutraShadows: {
95
95
  };
96
96
  declare const nebutraTypography: {
97
97
  readonly fontFamily: {
98
- readonly sans: "\"Geist\", \"Noto Sans SC\", \"PingFang SC\", \"Microsoft YaHei\", -apple-system, BlinkMacSystemFont, system-ui, sans-serif";
98
+ readonly sans: string;
99
99
  readonly cn: "\"Noto Sans SC\", \"PingFang SC\", \"Microsoft YaHei\", \"vivo Sans\", sans-serif";
100
- readonly display: "\"Geist\", \"Noto Sans SC\", sans-serif";
101
- readonly mono: "\"Geist Mono\", \"Fira Code\", ui-monospace, Consolas, \"Courier New\", monospace";
100
+ readonly display: string;
101
+ readonly mono: string;
102
102
  };
103
103
  readonly fontSize: {
104
104
  readonly xs: `${number}rem`;
@@ -209,10 +209,10 @@ declare const nebutraPreset: {
209
209
  readonly brandGlow: "0 0 0 3px rgb(0 51 254 / 0.15)";
210
210
  };
211
211
  readonly fontFamily: {
212
- readonly sans: "\"Geist\", \"Noto Sans SC\", \"PingFang SC\", \"Microsoft YaHei\", -apple-system, BlinkMacSystemFont, system-ui, sans-serif";
212
+ readonly sans: string;
213
213
  readonly cn: "\"Noto Sans SC\", \"PingFang SC\", \"Microsoft YaHei\", \"vivo Sans\", sans-serif";
214
- readonly display: "\"Geist\", \"Noto Sans SC\", sans-serif";
215
- readonly mono: "\"Geist Mono\", \"Fira Code\", ui-monospace, Consolas, \"Courier New\", monospace";
214
+ readonly display: string;
215
+ readonly mono: string;
216
216
  };
217
217
  readonly fontSize: {
218
218
  readonly xs: `${number}rem`;
@@ -93,7 +93,7 @@ var primitiveFontFamily = {
93
93
  /** Display / hero headlines */
94
94
  display: '"Geist", "Noto Sans SC", sans-serif',
95
95
  /** Code / monospace — Geist Mono pairs with Geist for full family coverage */
96
- mono: '"Geist Mono", "Fira Code", ui-monospace, Consolas, "Courier New", monospace'
96
+ mono: '"Geist Mono", ui-monospace, SFMono-Regular, "SF Mono", Menlo, monospace'
97
97
  };
98
98
  var primitiveShadow = {
99
99
  none: "none",
@@ -208,12 +208,15 @@ var nebutraShadows = {
208
208
  xl: primitiveShadow.xl,
209
209
  brandGlow: primitiveShadow.brandGlow
210
210
  };
211
+ function fontVar(variable, registryVariable, fallback) {
212
+ return `var(${variable}, var(${registryVariable}, ${fallback}))`;
213
+ }
211
214
  var nebutraTypography = {
212
215
  fontFamily: {
213
- sans: primitiveFontFamily.sans,
216
+ sans: fontVar("--font-sans", "--font-geist-sans", primitiveFontFamily.sans),
214
217
  cn: primitiveFontFamily.cnSans,
215
- display: primitiveFontFamily.display,
216
- mono: primitiveFontFamily.mono
218
+ display: fontVar("--font-display", "--font-geist-sans", primitiveFontFamily.display),
219
+ mono: fontVar("--font-mono", "--font-geist-mono", primitiveFontFamily.mono)
217
220
  },
218
221
  fontSize: {
219
222
  xs: `${primitiveFontSize.xs / 16}rem`,
@@ -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\", \"Fira Code\", ui-monospace, Consolas, \"Courier New\", monospace',\n} as const;\n\nexport type PrimitiveFontFamily = keyof typeof primitiveFontFamily;\n\n// ─── Shadows ──────────────────────────────────────────────────────────────────\n\nexport const primitiveShadow = {\n none: \"none\",\n sm: \"0 1px 2px 0 rgb(0 0 0 / 0.05)\",\n md: \"0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)\",\n lg: \"0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)\",\n xl: \"0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)\",\n /** Brand glow — blue tone for focus/highlight states */\n brandGlow: \"0 0 0 3px rgb(0 51 254 / 0.15)\",\n} as const;\n\nexport type PrimitiveShadow = keyof typeof primitiveShadow;\n\n// ─── Transition ───────────────────────────────────────────────────────────────\n\n/**\n * Primitive transition tokens — aligned with the four-rail motion scale\n * (SSOT: @nebutra/design-tokens core.json → duration.*).\n * Keys mirror semantic.json motion.duration.*; values are in ms.\n */\nexport const primitiveTransition = {\n duration: {\n micro: 100, // hover, focus, small state changes\n flow: 200, // standard state transitions (default)\n reveal: 300, // larger motion (accordion, modal, drawer)\n cinematic: 500, // hero entrance, big delight moments\n },\n easing: {\n default: \"ease-out\",\n spring: \"cubic-bezier(0.34, 1.56, 0.64, 1)\",\n inOut: \"cubic-bezier(0.4, 0, 0.2, 1)\",\n },\n} as const;\n\n// ─── Focus Ring ───────────────────────────────────────────────────────────────\n\nexport const primitiveFocusRing = {\n width: 2, // px\n offset: 2, // px — gap between element and ring\n} as const;\n","/**\n * @nebutra/ui — Tailwind CSS 4 Preset\n *\n * Consumes primitive design tokens from tokens/primitive.ts, which itself\n * sources values from @nebutra/brand → @nebutra/design-tokens (SSOT).\n *\n * Usage (Tailwind CSS 4, CSS import — the runtime token source):\n * @import \"@nebutra/tokens/styles.css\"\n *\n * Usage (legacy tailwind.config.js):\n * import { nebutraPreset } from \"@nebutra/ui/tailwind.preset\"\n * export default { presets: [nebutraPreset] }\n */\n\nimport {\n primitiveColors,\n primitiveFontFamily,\n primitiveFontSize,\n primitiveFontWeight,\n primitiveGradients,\n primitiveRadius,\n primitiveShadow,\n} from \"./tokens/primitive\";\n\n// ─── Brand Color Palette ──────────────────────────────────────────────────────\n// Source: 云毓智能 VI 手册 — these are the correct Nebutra values, NOT generic\n// blue (#3B82F6) or purple (#A855F7) which were incorrectly present before.\n\nexport const nebutraColors = {\n // 云毓蓝 (Nebutra Blue) — primary brand color — VI: #0033FE\n blue: {\n 50: primitiveColors.blue50,\n 100: primitiveColors.blue100,\n 200: primitiveColors.blue200,\n 300: primitiveColors.blue300,\n 400: primitiveColors.blue400,\n 500: primitiveColors.blue500,\n 600: primitiveColors.blue600,\n 700: primitiveColors.blue700,\n 800: primitiveColors.blue800,\n 900: primitiveColors.blue900,\n 950: primitiveColors.blue950,\n DEFAULT: primitiveColors.blue500,\n foreground: primitiveColors.white,\n },\n\n // 云毓青 (Nebutra Cyan) — secondary brand color — VI: #0BF1C3\n cyan: {\n 50: primitiveColors.cyan50,\n 100: primitiveColors.cyan100,\n 200: primitiveColors.cyan200,\n 300: primitiveColors.cyan300,\n 400: primitiveColors.cyan400,\n 500: primitiveColors.cyan500,\n 600: primitiveColors.cyan600,\n 700: primitiveColors.cyan700,\n 800: primitiveColors.cyan800,\n 900: primitiveColors.cyan900,\n 950: primitiveColors.cyan950,\n DEFAULT: primitiveColors.cyan500,\n foreground: primitiveColors.neutral900,\n },\n\n // Neutral (blue-undertone gray scale)\n neutral: {\n 50: primitiveColors.neutral50,\n 100: primitiveColors.neutral100,\n 200: primitiveColors.neutral200,\n 300: primitiveColors.neutral300,\n 400: primitiveColors.neutral400,\n 500: primitiveColors.neutral500,\n 600: primitiveColors.neutral600,\n 700: primitiveColors.neutral700,\n 800: primitiveColors.neutral800,\n 900: primitiveColors.neutral900,\n 950: primitiveColors.neutral950,\n },\n\n // Semantic colors — VI §Color Specifications\n success: primitiveColors.green500, // #22c55e — VI specifies this exact value\n warning: primitiveColors.amber500, // #f59e0b\n error: primitiveColors.red500, // #ef4444\n info: primitiveColors.blue500, // #0033FE — VI: Info = Brand Blue\n} as const;\n\n// ─── Brand Gradients ──────────────────────────────────────────────────────────\n// VI §Brand Gradients — these are first-class brand assets\n\nexport const nebutraGradients = {\n brand: primitiveGradients.primary,\n brandHover: primitiveGradients.reverse,\n section: primitiveGradients.vertical,\n glow: primitiveGradients.radial,\n darkCard: primitiveGradients.darkCard,\n} as const;\n\n// ─── Spacing ──────────────────────────────────────────────────────────────────\n\nexport const nebutraSpacing = {\n xs: \"0.25rem\", // 4px\n sm: \"0.5rem\", // 8px\n md: \"1rem\", // 16px\n lg: \"1.5rem\", // 24px\n xl: \"2rem\", // 32px\n \"2xl\": \"3rem\", // 48px\n \"3xl\": \"4rem\", // 64px\n} as const;\n\n// ─── Border Radius ────────────────────────────────────────────────────────────\n// Consumed directly from primitive tokens (px → rem conversion)\n\nexport const nebutraBorderRadius = {\n none: \"0\",\n sm: `${primitiveRadius.sm / 16}rem`, // 4px → 0.25rem\n md: `${primitiveRadius.md / 16}rem`, // 6px → 0.375rem\n lg: `${primitiveRadius.lg / 16}rem`, // 8px → 0.5rem\n xl: `${primitiveRadius.xl / 16}rem`, // 12px → 0.75rem\n \"2xl\": `${primitiveRadius[\"2xl\"] / 16}rem`, // 16px → 1rem\n full: \"9999px\",\n} as const;\n\n// ─── Shadows ──────────────────────────────────────────────────────────────────\n\nexport const nebutraShadows = {\n none: primitiveShadow.none,\n sm: primitiveShadow.sm,\n md: primitiveShadow.md,\n lg: primitiveShadow.lg,\n xl: primitiveShadow.xl,\n brandGlow: primitiveShadow.brandGlow,\n} as const;\n\n// ─── Typography — VI §Typography ─────────────────────────────────────────────\n\nexport const nebutraTypography = {\n fontFamily: {\n sans: primitiveFontFamily.sans,\n cn: primitiveFontFamily.cnSans,\n display: primitiveFontFamily.display,\n mono: primitiveFontFamily.mono,\n },\n fontSize: {\n xs: `${primitiveFontSize.xs / 16}rem`, // 12px\n sm: `${primitiveFontSize.sm / 16}rem`, // 14px\n base: `${primitiveFontSize.base / 16}rem`, // 16px\n lg: `${primitiveFontSize.lg / 16}rem`, // 18px\n xl: `${primitiveFontSize.xl / 16}rem`, // 20px\n \"2xl\": `${primitiveFontSize[\"2xl\"] / 16}rem`, // 24px\n \"3xl\": `${primitiveFontSize[\"3xl\"] / 16}rem`, // 30px\n \"4xl\": `${primitiveFontSize[\"4xl\"] / 16}rem`, // 36px\n },\n fontWeight: {\n light: String(primitiveFontWeight.light),\n normal: String(primitiveFontWeight.normal),\n medium: String(primitiveFontWeight.medium),\n semibold: String(primitiveFontWeight.semibold),\n bold: String(primitiveFontWeight.bold),\n },\n} as const;\n\n// ─── Animations ───────────────────────────────────────────────────────────────\n\nexport const nebutraAnimations = {\n \"accordion-down\": \"accordion-down 0.2s ease-out\",\n \"accordion-up\": \"accordion-up 0.2s ease-out\",\n \"fade-in\": \"fade-in 0.15s ease-out\",\n \"fade-out\": \"fade-out 0.15s ease-out\",\n \"slide-in-from-top\": \"slide-in-from-top 0.3s ease-out\",\n \"slide-in-from-bottom\": \"slide-in-from-bottom 0.3s ease-out\",\n \"slide-in-from-left\": \"slide-in-from-left 0.3s ease-out\",\n \"slide-in-from-right\": \"slide-in-from-right 0.3s ease-out\",\n spin: \"spin 1s linear infinite\",\n spinner: \"spinner 0.6s linear infinite\", // Button loading state\n pulse: \"pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite\",\n bounce: \"bounce 1s infinite\",\n} as const;\n\n// ─── Full Preset ──────────────────────────────────────────────────────────────\n\nexport const nebutraPreset = {\n colors: nebutraColors,\n spacing: nebutraSpacing,\n borderRadius: nebutraBorderRadius,\n boxShadow: nebutraShadows,\n fontFamily: nebutraTypography.fontFamily,\n fontSize: nebutraTypography.fontSize,\n fontWeight: nebutraTypography.fontWeight,\n animation: nebutraAnimations,\n} as const;\n\nexport type NebutraPreset = typeof nebutraPreset;\n\nexport default nebutraPreset;\n"]}
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"]}
@@ -109,8 +109,8 @@ declare const shadows: {
109
109
  };
110
110
  declare const typography: {
111
111
  readonly fontFamily: {
112
- readonly sans: "Inter, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif";
113
- readonly mono: "\"JetBrains Mono\", ui-monospace, SFMono-Regular, Menlo, Monaco, monospace";
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
114
  };
115
115
  readonly fontSize: {
116
116
  readonly xs: "0.75rem";
@@ -0,0 +1,302 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { Variants, HTMLMotionProps } from 'framer-motion';
3
+ import { ReactNode } from 'react';
4
+
5
+ declare const fadeIn: Variants;
6
+ declare const scaleIn: Variants;
7
+ declare const slideIn: {
8
+ readonly up: {
9
+ readonly initial: {
10
+ readonly opacity: 0;
11
+ readonly y: 16;
12
+ };
13
+ readonly animate: {
14
+ readonly opacity: 1;
15
+ readonly y: 0;
16
+ readonly transition: {
17
+ readonly duration: 0.3;
18
+ readonly ease: [number, number, number, number];
19
+ };
20
+ };
21
+ readonly exit: {
22
+ readonly opacity: 0;
23
+ readonly y: 8;
24
+ readonly transition: {
25
+ readonly duration: 0.1;
26
+ readonly ease: [number, number, number, number];
27
+ };
28
+ };
29
+ };
30
+ readonly down: {
31
+ readonly initial: {
32
+ readonly opacity: 0;
33
+ readonly y: number;
34
+ };
35
+ readonly animate: {
36
+ readonly opacity: 1;
37
+ readonly y: 0;
38
+ readonly transition: {
39
+ readonly duration: 0.3;
40
+ readonly ease: [number, number, number, number];
41
+ };
42
+ };
43
+ readonly exit: {
44
+ readonly opacity: 0;
45
+ readonly y: number;
46
+ readonly transition: {
47
+ readonly duration: 0.1;
48
+ readonly ease: [number, number, number, number];
49
+ };
50
+ };
51
+ };
52
+ readonly left: {
53
+ readonly initial: {
54
+ readonly opacity: 0;
55
+ readonly x: 16;
56
+ };
57
+ readonly animate: {
58
+ readonly opacity: 1;
59
+ readonly x: 0;
60
+ readonly transition: {
61
+ readonly duration: 0.3;
62
+ readonly ease: [number, number, number, number];
63
+ };
64
+ };
65
+ readonly exit: {
66
+ readonly opacity: 0;
67
+ readonly x: 8;
68
+ readonly transition: {
69
+ readonly duration: 0.1;
70
+ readonly ease: [number, number, number, number];
71
+ };
72
+ };
73
+ };
74
+ readonly right: {
75
+ readonly initial: {
76
+ readonly opacity: 0;
77
+ readonly x: number;
78
+ };
79
+ readonly animate: {
80
+ readonly opacity: 1;
81
+ readonly x: 0;
82
+ readonly transition: {
83
+ readonly duration: 0.3;
84
+ readonly ease: [number, number, number, number];
85
+ };
86
+ };
87
+ readonly exit: {
88
+ readonly opacity: 0;
89
+ readonly x: number;
90
+ readonly transition: {
91
+ readonly duration: 0.1;
92
+ readonly ease: [number, number, number, number];
93
+ };
94
+ };
95
+ };
96
+ };
97
+ declare const animatedList: Variants;
98
+ declare const animatedListItem: Variants;
99
+ declare const modalSurface: Variants;
100
+ declare const drawerSurface: {
101
+ readonly left: {
102
+ readonly initial: {
103
+ readonly opacity: 0;
104
+ readonly x: "-100%";
105
+ };
106
+ readonly animate: {
107
+ readonly opacity: 1;
108
+ readonly x: 0;
109
+ readonly transition: {
110
+ readonly type: "spring";
111
+ readonly stiffness: 320;
112
+ readonly damping: 36;
113
+ readonly mass: 1;
114
+ };
115
+ };
116
+ readonly exit: {
117
+ readonly opacity: 0;
118
+ readonly x: "-100%";
119
+ readonly transition: {
120
+ readonly duration: 0.1;
121
+ readonly ease: [number, number, number, number];
122
+ };
123
+ };
124
+ };
125
+ readonly right: {
126
+ readonly initial: {
127
+ readonly opacity: 0;
128
+ readonly x: "100%";
129
+ };
130
+ readonly animate: {
131
+ readonly opacity: 1;
132
+ readonly x: 0;
133
+ readonly transition: {
134
+ readonly type: "spring";
135
+ readonly stiffness: 320;
136
+ readonly damping: 36;
137
+ readonly mass: 1;
138
+ };
139
+ };
140
+ readonly exit: {
141
+ readonly opacity: 0;
142
+ readonly x: "100%";
143
+ readonly transition: {
144
+ readonly duration: 0.1;
145
+ readonly ease: [number, number, number, number];
146
+ };
147
+ };
148
+ };
149
+ readonly top: {
150
+ readonly initial: {
151
+ readonly opacity: 0;
152
+ readonly y: "-100%";
153
+ };
154
+ readonly animate: {
155
+ readonly opacity: 1;
156
+ readonly y: 0;
157
+ readonly transition: {
158
+ readonly type: "spring";
159
+ readonly stiffness: 320;
160
+ readonly damping: 36;
161
+ readonly mass: 1;
162
+ };
163
+ };
164
+ readonly exit: {
165
+ readonly opacity: 0;
166
+ readonly y: "-100%";
167
+ readonly transition: {
168
+ readonly duration: 0.1;
169
+ readonly ease: [number, number, number, number];
170
+ };
171
+ };
172
+ };
173
+ readonly bottom: {
174
+ readonly initial: {
175
+ readonly opacity: 0;
176
+ readonly y: "100%";
177
+ };
178
+ readonly animate: {
179
+ readonly opacity: 1;
180
+ readonly y: 0;
181
+ readonly transition: {
182
+ readonly type: "spring";
183
+ readonly stiffness: 320;
184
+ readonly damping: 36;
185
+ readonly mass: 1;
186
+ };
187
+ };
188
+ readonly exit: {
189
+ readonly opacity: 0;
190
+ readonly y: "100%";
191
+ readonly transition: {
192
+ readonly duration: 0.1;
193
+ readonly ease: [number, number, number, number];
194
+ };
195
+ };
196
+ };
197
+ };
198
+ declare const popoverSurface: Variants;
199
+ declare const pageTransition: Variants;
200
+ declare const reducedMotionVariants: Variants;
201
+
202
+ type AnimatedDivProps = HTMLMotionProps<"div"> & {
203
+ children: ReactNode;
204
+ };
205
+ declare function FadeIn({ children, ...props }: AnimatedDivProps): react_jsx_runtime.JSX.Element;
206
+ declare function SlideIn({ children, direction, ...props }: AnimatedDivProps & {
207
+ direction?: keyof typeof slideIn;
208
+ }): react_jsx_runtime.JSX.Element;
209
+ declare function ScaleIn({ children, ...props }: AnimatedDivProps): react_jsx_runtime.JSX.Element;
210
+ declare function AnimatedCard({ children, ...props }: AnimatedDivProps): react_jsx_runtime.JSX.Element;
211
+ declare function AnimatedList({ children, ...props }: AnimatedDivProps): react_jsx_runtime.JSX.Element;
212
+ declare function AnimatedModal({ children, open, ...props }: AnimatedDivProps & {
213
+ open: boolean;
214
+ }): react_jsx_runtime.JSX.Element;
215
+ declare function AnimatedDrawer({ children, open, side, ...props }: AnimatedDivProps & {
216
+ open: boolean;
217
+ side?: keyof typeof drawerSurface;
218
+ }): react_jsx_runtime.JSX.Element;
219
+ declare function AnimatedPopover({ children, open, ...props }: AnimatedDivProps & {
220
+ open: boolean;
221
+ }): react_jsx_runtime.JSX.Element;
222
+ declare function PageTransition({ children, ...props }: AnimatedDivProps): react_jsx_runtime.JSX.Element;
223
+
224
+ declare const animationDurations: {
225
+ readonly instant: 0;
226
+ readonly micro: 0.1;
227
+ readonly fast: 0.16;
228
+ readonly standard: 0.2;
229
+ readonly reveal: 0.3;
230
+ readonly page: 0.44;
231
+ };
232
+ declare const animationEasings: {
233
+ readonly linear: "linear";
234
+ readonly enter: [number, number, number, number];
235
+ readonly exit: [number, number, number, number];
236
+ readonly standard: [number, number, number, number];
237
+ readonly emphasized: [number, number, number, number];
238
+ };
239
+ declare const animationSprings: {
240
+ readonly interactive: {
241
+ readonly type: "spring";
242
+ readonly stiffness: 380;
243
+ readonly damping: 34;
244
+ readonly mass: 0.8;
245
+ };
246
+ readonly layout: {
247
+ readonly type: "spring";
248
+ readonly stiffness: 480;
249
+ readonly damping: 42;
250
+ readonly mass: 1;
251
+ };
252
+ readonly panel: {
253
+ readonly type: "spring";
254
+ readonly stiffness: 320;
255
+ readonly damping: 36;
256
+ readonly mass: 1;
257
+ };
258
+ };
259
+ declare const animationDistances: {
260
+ readonly xs: 4;
261
+ readonly sm: 8;
262
+ readonly md: 16;
263
+ readonly lg: 24;
264
+ readonly panel: 32;
265
+ };
266
+ declare const animationTransitions: {
267
+ readonly instant: {
268
+ readonly duration: 0;
269
+ };
270
+ readonly micro: {
271
+ readonly duration: 0.1;
272
+ readonly ease: [number, number, number, number];
273
+ };
274
+ readonly standard: {
275
+ readonly duration: 0.2;
276
+ readonly ease: [number, number, number, number];
277
+ };
278
+ readonly reveal: {
279
+ readonly duration: 0.3;
280
+ readonly ease: [number, number, number, number];
281
+ };
282
+ readonly page: {
283
+ readonly duration: 0.44;
284
+ readonly ease: [number, number, number, number];
285
+ };
286
+ readonly layout: {
287
+ readonly type: "spring";
288
+ readonly stiffness: 480;
289
+ readonly damping: 42;
290
+ readonly mass: 1;
291
+ };
292
+ readonly panel: {
293
+ readonly type: "spring";
294
+ readonly stiffness: 320;
295
+ readonly damping: 36;
296
+ readonly mass: 1;
297
+ };
298
+ };
299
+ type AnimationDuration = keyof typeof animationDurations;
300
+ type AnimationTransition = keyof typeof animationTransitions;
301
+
302
+ export { AnimatedCard as A, FadeIn as F, PageTransition as P, ScaleIn as S, AnimatedDrawer as a, AnimatedList as b, AnimatedModal as c, AnimatedPopover as d, type AnimationDuration as e, type AnimationTransition as f, SlideIn as g, animatedList as h, animatedListItem as i, animationDistances as j, animationDurations as k, animationEasings as l, animationSprings as m, animationTransitions as n, drawerSurface as o, fadeIn as p, modalSurface as q, pageTransition as r, popoverSurface as s, reducedMotionVariants as t, scaleIn as u, slideIn as v };
@@ -29,8 +29,7 @@
29
29
 
30
30
  /* Monospace — Geist Mono */
31
31
  --font-mono:
32
- var(--font-geist-mono), "Geist Mono", "Fira Code", ui-monospace, SFMono-Regular, "SF Mono",
33
- Menlo, Consolas, "Liberation Mono", monospace;
32
+ var(--font-geist-mono), "Geist Mono", ui-monospace, SFMono-Regular, "SF Mono", Menlo, monospace;
34
33
 
35
34
  /* CJK — local/system fallback, no build-time font fetch */
36
35
  --font-cjk:
@@ -52,6 +51,16 @@ html {
52
51
  font-feature-settings:
53
52
  "calt" 1,
54
53
  "liga" 1;
54
+ /* Variable-font polish: */
55
+ /* - font-synthesis: none → forbid faux-bold / faux-italic synthesis;
56
+ variable fonts already ship every weight/style, synthesised faces
57
+ look fuzzy at sub-pixel boundaries.
58
+ - font-optical-sizing: auto → tells the engine to use the opsz axis
59
+ on fonts that ship one (Geist Sans, Geist Mono, Inter, Playfair),
60
+ so glyphs are rendered with weights tuned to their display size
61
+ instead of being scaled uniformly. */
62
+ font-synthesis: none;
63
+ font-optical-sizing: auto;
55
64
  }
56
65
 
57
66
  /* ============================================
@@ -59,8 +68,18 @@ html {
59
68
  ============================================ */
60
69
 
61
70
  body {
62
- font-family: var(--font-sans);
63
- font-size: 1rem;
71
+ /* Font precedence in ONE place: explicit user choice (--user-ui-font) →
72
+ active theme/DESIGN font (--font-sans) → default; the CJK stack is always
73
+ appended as a fallback so Chinese/Japanese/Korean glyphs render regardless
74
+ of the (often Latin-only) theme font. This replaces a blanket :lang(zh)
75
+ override that used to discard the theme font entirely. */
76
+ font-family: var(--user-ui-font, var(--font-sans)), var(--font-cjk);
77
+ /* An explicit user size (--user-ui-font-size) wins; otherwise the active
78
+ theme/DESIGN type-scale (--text-base); otherwise the 1rem default. This is
79
+ backward-compatible — with neither var set it resolves to exactly 1rem.
80
+ (Previously this was a hardcoded 1rem that, being unlayered, silently
81
+ overrode the app's --user-ui-font-size font-size control.) */
82
+ font-size: var(--user-ui-font-size, var(--text-base, 1rem));
64
83
  line-height: 1.5;
65
84
  font-weight: 400;
66
85
  }
@@ -72,8 +91,9 @@ h3,
72
91
  h4,
73
92
  h5,
74
93
  h6 {
75
- font-family: var(--font-heading);
76
- font-weight: 600;
94
+ font-family: var(--font-heading), var(--font-cjk);
95
+ /* Theme/DESIGN can lighten headings via fontWeight.heading; default 600. */
96
+ font-weight: var(--font-weight-heading, 600);
77
97
  line-height: 1.25;
78
98
  }
79
99
 
@@ -82,7 +102,7 @@ code,
82
102
  kbd,
83
103
  pre,
84
104
  samp {
85
- font-family: var(--font-mono);
105
+ font-family: var(--user-code-font, var(--font-mono)), var(--font-cjk);
86
106
  }
87
107
 
88
108
  /* ============================================
@@ -103,8 +123,7 @@ samp {
103
123
  CJK Support
104
124
  ============================================ */
105
125
 
106
- :lang(zh),
107
- :lang(ja),
108
- :lang(ko) {
109
- font-family: var(--font-cjk);
110
- }
126
+ /* No blanket :lang(zh) font-family override here. The CJK stack is appended as
127
+ a fallback on the body / heading / code rules above, so the active theme or
128
+ DESIGN.md font drives Latin text on every locale while CJK glyphs still fall
129
+ back to --font-cjk. (A blanket override would discard the theme font.) */