@nebutra/ui 0.2.0 → 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.
- package/LICENSE +21 -676
- package/README.md +81 -86
- package/dist/agent/index.d.ts +119 -0
- package/dist/agent/index.js +135 -0
- package/dist/agent/index.js.map +1 -0
- package/dist/canonical-CrO71UPO.d.ts +4058 -0
- package/dist/components/index.d.ts +51 -56
- package/dist/components/index.js +1467 -1160
- package/dist/components/index.js.map +1 -1
- package/dist/hooks/index.d.ts +62 -15
- package/dist/hooks/index.js +56 -34
- package/dist/hooks/index.js.map +1 -1
- package/dist/index-CKLIGfiU.d.ts +19 -0
- package/dist/index-Dg4jRJV2.d.ts +57 -0
- package/dist/layout/index.d.ts +5 -1
- package/dist/layout/index.js +427 -533
- package/dist/layout/index.js.map +1 -1
- package/dist/layouts/index.js +11 -9
- package/dist/layouts/index.js.map +1 -1
- package/dist/patterns/index.d.ts +128 -2
- package/dist/patterns/index.js +1478 -786
- package/dist/patterns/index.js.map +1 -1
- package/dist/primitives/canonical.d.ts +25 -0
- package/dist/primitives/canonical.js +11903 -0
- package/dist/primitives/canonical.js.map +1 -0
- package/dist/primitives/index.d.ts +577 -3545
- package/dist/primitives/index.js +8002 -6159
- package/dist/primitives/index.js.map +1 -1
- package/dist/shared/animation/css/index.d.ts +1 -0
- package/dist/shared/animation/css/index.js +14 -0
- package/dist/shared/animation/css/index.js.map +1 -0
- package/dist/shared/animation/index.d.ts +6 -0
- package/dist/shared/animation/index.js +272 -0
- package/dist/shared/animation/index.js.map +1 -0
- package/dist/shared/animation/motion/index.d.ts +4 -0
- package/dist/shared/animation/motion/index.js +205 -0
- package/dist/shared/animation/motion/index.js.map +1 -0
- package/dist/styles/brand-override.css +11 -11
- package/dist/tailwind.preset.d.ts +10 -10
- package/dist/tailwind.preset.js +7 -4
- package/dist/tailwind.preset.js.map +1 -1
- package/dist/theme/index.d.ts +2 -2
- package/dist/tokens-EAC6uPem.d.ts +302 -0
- package/dist/typography/fonts.css +31 -12
- package/dist/typography/index.d.ts +27 -27
- package/dist/typography/index.js +24 -4
- package/dist/typography/index.js.map +1 -1
- package/dist/utils/index.d.ts +36 -14
- package/dist/utils/index.js +44 -10
- package/dist/utils/index.js.map +1 -1
- package/package.json +38 -12
- package/src/styles/brand-override.css +61 -0
- package/src/styles/preset.css +29 -0
- package/src/styles/sources.css +27 -0
- 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:
|
|
98
|
+
readonly sans: string;
|
|
99
99
|
readonly cn: "\"Noto Sans SC\", \"PingFang SC\", \"Microsoft YaHei\", \"vivo Sans\", sans-serif";
|
|
100
|
-
readonly display:
|
|
101
|
-
readonly mono:
|
|
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:
|
|
212
|
+
readonly sans: string;
|
|
213
213
|
readonly cn: "\"Noto Sans SC\", \"PingFang SC\", \"Microsoft YaHei\", \"vivo Sans\", sans-serif";
|
|
214
|
-
readonly display:
|
|
215
|
-
readonly mono:
|
|
214
|
+
readonly display: string;
|
|
215
|
+
readonly mono: string;
|
|
216
216
|
};
|
|
217
217
|
readonly fontSize: {
|
|
218
218
|
readonly xs: `${number}rem`;
|
package/dist/tailwind.preset.js
CHANGED
|
@@ -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",
|
|
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"]}
|
package/dist/theme/index.d.ts
CHANGED
|
@@ -109,8 +109,8 @@ declare const shadows: {
|
|
|
109
109
|
};
|
|
110
110
|
declare const typography: {
|
|
111
111
|
readonly fontFamily: {
|
|
112
|
-
readonly sans: "
|
|
113
|
-
readonly mono: "\"
|
|
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",
|
|
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
|
-
|
|
63
|
-
|
|
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
|
-
|
|
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
|
-
|
|
108
|
-
|
|
109
|
-
|
|
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.) */
|