Files
cozsweet-frontend-nextjs/src/core/fonts.ts
T

57 lines
1.6 KiB
TypeScript

import { Geist, Geist_Mono } from "next/font/google";
import localFont from "next/font/local";
/**
* 全局字体配置(仅供服务端组件使用,例如 `src/app/layout.tsx`)。
*
* - `next/font/google` 与 `next/font/local` 在构建期完成 self-host、preload、
* subset、inline,浏览器不会向 Google 发送请求,也不会产生 layout shift。
* - 产出的 CSS 变量由 `globals.css` 桥接到 Tailwind(如 `font-sans`、`font-athelas`)。
*
* 注意:本文件不通过 `src/lib/index.ts` 桶导出,避免被误打进客户端 bundle。
* 引用方式:`import { geistSans, geistMono, athelas } from "@/core/fonts";`
*/
const geistSans = Geist({
variable: "--font-geist-sans",
subsets: ["latin"],
});
const geistMono = Geist_Mono({
variable: "--font-geist-mono",
subsets: ["latin"],
});
/**
* Athelas 本地字体。
*
* 原始资源:/Users/chase/Documents/cozsweet/fonts/Athelas-*.woff2
* 放置位置:/public/fonts/Athelas-*.woff2
*
* 路径计算(`next/font/local` 要求相对路径从调用文件出发):
* src/core/fonts.ts → ../../public/fonts/...
*/
const athelas = localFont({
src: [
{
path: "../../public/fonts/Athelas-Regular.woff2",
weight: "400",
style: "normal",
},
{
path: "../../public/fonts/Athelas-Bold.woff2",
weight: "700",
style: "normal",
},
{
path: "../../public/fonts/Athelas-BoldItalic.woff2",
weight: "700",
style: "italic",
},
],
variable: "--font-athelas",
display: "swap",
});
export { geistSans, geistMono, athelas };