From 8ba3d50d7dcc4b54c0b3ba75bc42ceb2572aa11d Mon Sep 17 00:00:00 2001 From: shadcn Date: Thu, 5 Mar 2026 10:02:45 +0400 Subject: [PATCH] feat: add selector to fonts --- apps/v4/content/docs/registry/examples.mdx | 22 +++ .../public/r/templates/astro-monorepo.tar.gz | Bin 7598 -> 7607 bytes .../public/r/templates/next-monorepo.tar.gz | Bin 20567 -> 20558 bytes .../r/templates/react-router-monorepo.tar.gz | Bin 9456 -> 9468 bytes .../public/r/templates/start-monorepo.tar.gz | Bin 12626 -> 12642 bytes .../public/r/templates/vite-monorepo.tar.gz | Bin 9392 -> 9407 bytes apps/v4/public/schema/registry-item.json | 4 + packages/shadcn/src/commands/build.ts | 3 +- packages/shadcn/src/commands/info.ts | 2 +- packages/shadcn/src/commands/init.ts | 2 +- .../shadcn/src/commands/registry/build.ts | 3 +- packages/shadcn/src/registry/schema.ts | 1 + packages/shadcn/src/utils/get-project-info.ts | 2 +- .../src/utils/updaters/update-fonts.test.ts | 136 +++++++++++++++++- .../shadcn/src/utils/updaters/update-fonts.ts | 52 ++++--- .../apps/web/src/pages/index.astro | 2 +- templates/next-monorepo/apps/web/app/page.tsx | 4 +- .../apps/web/app/routes/home.tsx | 2 +- .../apps/web/src/routes/index.tsx | 2 +- templates/vite-monorepo/apps/web/src/App.tsx | 4 +- 20 files changed, 206 insertions(+), 35 deletions(-) diff --git a/apps/v4/content/docs/registry/examples.mdx b/apps/v4/content/docs/registry/examples.mdx index fc434564ff..bbd58686ef 100644 --- a/apps/v4/content/docs/registry/examples.mdx +++ b/apps/v4/content/docs/registry/examples.mdx @@ -365,6 +365,28 @@ A `registry:font` item installs a Google Font. The `font` field is required and } ``` +### Font with custom selector + +Use the `selector` field to apply a font to specific CSS selectors instead of globally on `html`. This is useful for heading fonts or other targeted font applications. + +```json title="font-playfair-display.json" showLineNumbers +{ + "$schema": "https://ui.shadcn.com/schema/registry-item.json", + "name": "font-playfair-display", + "type": "registry:font", + "font": { + "family": "'Playfair Display Variable', serif", + "provider": "google", + "import": "Playfair_Display", + "variable": "--font-heading", + "subsets": ["latin"], + "selector": "h1, h2, h3, h4, h5, h6" + } +} +``` + +When `selector` is set, the font utility class (e.g. `font-heading`) is applied via CSS `@apply` on the specified selector within `@layer base`, instead of being added to the `` element. The CSS variable is still injected on `` so it's available globally. + ## registry:base ### Custom base diff --git a/apps/v4/public/r/templates/astro-monorepo.tar.gz b/apps/v4/public/r/templates/astro-monorepo.tar.gz index dc44ccd91167266f50fd61a2a0abd24d8b21f884..fd68348bf1beee0e2dfbe2696132e94cb5001dd6 100644 GIT binary patch delta 6333 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 No9lnl5L^ck{{!0fSo;6~ delta 6304 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 QS^#z7mQfkS2`Y;J0wf}ACIA2c diff --git a/apps/v4/public/r/templates/next-monorepo.tar.gz b/apps/v4/public/r/templates/next-monorepo.tar.gz index 14f4a5203f559753dd74d2fd7a3b823b1a92a701..7f63743f2d04df99a38c30d1af3c2a4a3a46d76b 100644 GIT binary patch delta 17619 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 delta 17595 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 ZH-CFJDU*x~E6RS@=Y(8SXRu*r001=1=3)Q< diff --git a/apps/v4/public/r/templates/react-router-monorepo.tar.gz b/apps/v4/public/r/templates/react-router-monorepo.tar.gz index 51dfd96a6ba7b159081e197700c2e4dee2ce806d..67304d048c17d36fc061c2c6d1f5280dd0041c81 100644 GIT binary patch literal 9468 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 literal 9456 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 diff --git a/apps/v4/public/r/templates/start-monorepo.tar.gz b/apps/v4/public/r/templates/start-monorepo.tar.gz index f564b0ab5d52164ab6272612271f1bda6de9cd01..03508e50e5e068a2f53df11b355e292606c828b7 100644 GIT binary patch delta 7479 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 delta 7463 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 delta 4576 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 diff --git a/apps/v4/public/schema/registry-item.json b/apps/v4/public/schema/registry-item.json index da2aab51a7..772b1212ff 100644 --- a/apps/v4/public/schema/registry-item.json +++ b/apps/v4/public/schema/registry-item.json @@ -246,6 +246,10 @@ "type": "string" }, "description": "Array of font subsets to include (e.g., ['latin', 'latin-ext'])." + }, + "selector": { + "type": "string", + "description": "CSS selector to apply the font utility class to (e.g., 'h1, h2, h3'). Defaults to 'html'." } }, "required": ["family", "provider", "import", "variable"] diff --git a/packages/shadcn/src/commands/build.ts b/packages/shadcn/src/commands/build.ts index 6116d92426..5515f94689 100644 --- a/packages/shadcn/src/commands/build.ts +++ b/packages/shadcn/src/commands/build.ts @@ -57,7 +57,8 @@ export const build = new Command() buildSpinner.start(`Building ${registryItem.name}...`) // Add the schema to the registry item. - registryItem["$schema"] = `${SHADCN_URL}/schema/registry-item.json` + registryItem["$schema"] = + "https://ui.shadcn.com/schema/registry-item.json" // Loop through each file in the files array. for (const file of registryItem.files ?? []) { diff --git a/packages/shadcn/src/commands/info.ts b/packages/shadcn/src/commands/info.ts index 849e2561bf..ab5afddd31 100644 --- a/packages/shadcn/src/commands/info.ts +++ b/packages/shadcn/src/commands/info.ts @@ -148,7 +148,7 @@ function collectInfo( components: `${SHADCN_URL}/docs/components/${base}/[component].md`, ui: `${GITHUB_RAW_BASE}/${base}/ui/[component].tsx`, examples: `${GITHUB_RAW_BASE}/${base}/examples/[component]-example.tsx`, - schema: `${SHADCN_URL}/schema.json`, + schema: "https://ui.shadcn.com/schema.json", }, } } diff --git a/packages/shadcn/src/commands/init.ts b/packages/shadcn/src/commands/init.ts index 3a0e9da9bd..d29db83e4d 100644 --- a/packages/shadcn/src/commands/init.ts +++ b/packages/shadcn/src/commands/init.ts @@ -815,7 +815,7 @@ async function promptForConfig(defaultConfig: Config | null = null) { } return rawConfigSchema.parse({ - $schema: `${SHADCN_URL}/schema.json`, + $schema: "https://ui.shadcn.com/schema.json", style: options.style, tailwind: { config: options.tailwindConfig, diff --git a/packages/shadcn/src/commands/registry/build.ts b/packages/shadcn/src/commands/registry/build.ts index c3ab9d0eb6..942640684d 100644 --- a/packages/shadcn/src/commands/registry/build.ts +++ b/packages/shadcn/src/commands/registry/build.ts @@ -121,7 +121,8 @@ async function buildRegistry(opts: z.infer) { buildSpinner.start(`Building ${registryItem.name}...`) // Add the schema to the registry item. - registryItem["$schema"] = `${SHADCN_URL}/schema/registry-item.json` + registryItem["$schema"] = + "https://ui.shadcn.com/schema/registry-item.json" for (const file of registryItem.files) { const absPath = path.resolve(resolvePaths.cwd, file.path) diff --git a/packages/shadcn/src/registry/schema.ts b/packages/shadcn/src/registry/schema.ts index c6e51da81a..5ed646627d 100644 --- a/packages/shadcn/src/registry/schema.ts +++ b/packages/shadcn/src/registry/schema.ts @@ -142,6 +142,7 @@ export const registryItemFontSchema = z.object({ variable: z.string(), weight: z.array(z.string()).optional(), subsets: z.array(z.string()).optional(), + selector: z.string().optional(), }) // Common fields shared by all registry items. diff --git a/packages/shadcn/src/utils/get-project-info.ts b/packages/shadcn/src/utils/get-project-info.ts index f4c4df30c3..affc185ef3 100644 --- a/packages/shadcn/src/utils/get-project-info.ts +++ b/packages/shadcn/src/utils/get-project-info.ts @@ -385,7 +385,7 @@ export async function getProjectConfig( } const config: z.infer = { - $schema: `${SHADCN_URL}/schema.json`, + $schema: "https://ui.shadcn.com/schema.json", rsc: projectInfo.isRSC, tsx: projectInfo.isTsx, style: "new-york", diff --git a/packages/shadcn/src/utils/updaters/update-fonts.test.ts b/packages/shadcn/src/utils/updaters/update-fonts.test.ts index bbcb16ee59..98a6f59c74 100644 --- a/packages/shadcn/src/utils/updaters/update-fonts.test.ts +++ b/packages/shadcn/src/utils/updaters/update-fonts.test.ts @@ -1163,6 +1163,59 @@ export default function RootLayout({ expect(firstRun).toContain("inter.variable") expect(firstRun).toContain("merriweather.variable") }) + + it("should add .variable but not utility class for custom selector font", async () => { + const input = ` +import type { Metadata } from "next" +import "./globals.css" + +export default function RootLayout({ + children, +}: { + children: React.ReactNode +}) { + return ( + + {children} + + ) +} +` + const fonts = [ + { + name: "font-inter", + type: "registry:font" as const, + font: { + family: "'Inter Variable', sans-serif", + provider: "google" as const, + import: "Inter", + variable: "--font-sans", + subsets: ["latin"], + }, + }, + { + name: "font-playfair-display", + type: "registry:font" as const, + font: { + family: "'Playfair Display Variable', serif", + provider: "google" as const, + import: "Playfair_Display", + variable: "--font-heading", + subsets: ["latin"], + selector: "h1, h2, h3, h4, h5, h6", + }, + }, + ] + + const result = await transformLayoutFonts(input, fonts, mockConfig) + + // .variable should be on for both fonts. + expect(result).toContain("inter.variable") + expect(result).toContain("playfairDisplay.variable") + // Only font-sans utility class should be on , not font-heading. + expect(result).toContain('"font-sans"') + expect(result).not.toContain('"font-heading"') + }) }) vi.mock("@/src/utils/get-project-info", () => ({ @@ -1174,7 +1227,7 @@ vi.mock("@/src/utils/get-project-info", () => ({ })) describe("massageTreeForFonts", () => { - it("should add font @apply to body when no existing css", async () => { + it("should add font @apply to html when no existing css", async () => { const tree = { fonts: [ { @@ -1195,12 +1248,12 @@ describe("massageTreeForFonts", () => { resolvedPaths: { cwd: "/test" }, } as any) - expect(result.css!["@layer base"].body).toEqual({ + expect(result.css!["@layer base"].html).toEqual({ "@apply font-sans": {}, }) }) - it("should preserve existing body css rules when adding font classes", async () => { + it("should preserve existing html css rules when adding font classes", async () => { const tree = { fonts: [ { @@ -1220,7 +1273,7 @@ describe("massageTreeForFonts", () => { }, css: { "@layer base": { - body: { + html: { "@apply bg-background text-foreground": {}, }, }, @@ -1231,7 +1284,7 @@ describe("massageTreeForFonts", () => { resolvedPaths: { cwd: "/test" }, } as any) - expect(result.css!["@layer base"].body).toEqual({ + expect(result.css!["@layer base"].html).toEqual({ "@apply bg-background text-foreground font-sans": {}, }) }) @@ -1264,7 +1317,7 @@ describe("massageTreeForFonts", () => { ], css: { "@layer base": { - body: { + html: { "@apply bg-background text-foreground": {}, }, }, @@ -1275,8 +1328,77 @@ describe("massageTreeForFonts", () => { resolvedPaths: { cwd: "/test" }, } as any) - expect(result.css!["@layer base"].body).toEqual({ + expect(result.css!["@layer base"].html).toEqual({ "@apply bg-background text-foreground font-sans font-serif": {}, }) }) + + it("should apply font to custom selector", async () => { + const tree = { + fonts: [ + { + name: "font-playfair-display", + type: "registry:font" as const, + font: { + family: "'Playfair Display Variable', serif", + provider: "google" as const, + import: "Playfair_Display", + variable: "--font-heading", + subsets: ["latin"], + selector: "h1, h2, h3, h4, h5, h6", + }, + }, + ], + } as any + + const result = await massageTreeForFonts(tree, { + resolvedPaths: { cwd: "/test" }, + } as any) + + expect(result.css!["@layer base"]["h1, h2, h3, h4, h5, h6"]).toEqual({ + "@apply font-heading": {}, + }) + expect(result.css!["@layer base"].html).toBeUndefined() + }) + + it("should handle mixed selectors (default html + custom)", async () => { + const tree = { + fonts: [ + { + name: "font-inter", + type: "registry:font" as const, + font: { + family: "'Inter Variable', sans-serif", + provider: "google" as const, + import: "Inter", + variable: "--font-sans", + subsets: ["latin"], + }, + }, + { + name: "font-playfair-display", + type: "registry:font" as const, + font: { + family: "'Playfair Display Variable', serif", + provider: "google" as const, + import: "Playfair_Display", + variable: "--font-heading", + subsets: ["latin"], + selector: "h1, h2, h3, h4, h5, h6", + }, + }, + ], + } as any + + const result = await massageTreeForFonts(tree, { + resolvedPaths: { cwd: "/test" }, + } as any) + + expect(result.css!["@layer base"].html).toEqual({ + "@apply font-sans": {}, + }) + expect(result.css!["@layer base"]["h1, h2, h3, h4, h5, h6"]).toEqual({ + "@apply font-heading": {}, + }) + }) }) diff --git a/packages/shadcn/src/utils/updaters/update-fonts.ts b/packages/shadcn/src/utils/updaters/update-fonts.ts index 5ce4243af0..1ec26cfe9d 100644 --- a/packages/shadcn/src/utils/updaters/update-fonts.ts +++ b/packages/shadcn/src/utils/updaters/update-fonts.ts @@ -53,23 +53,37 @@ export async function massageTreeForFonts( } } - // Apply font utility classes to body. + // Apply font utility classes grouped by selector. if (tree.fonts.length > 0) { - const fontClasses = tree.fonts - .map((f) => f.font.variable.replace("--", "")) - .join(" ") + // Group fonts by their CSS selector (default to "html"). + const groups = new Map() + for (const font of tree.fonts) { + const selector = font.font.selector ?? "html" + const cls = font.font.variable.replace("--", "") + if (!groups.has(selector)) { + groups.set(selector, []) + } + groups.get(selector)!.push(cls) + } + tree.css ??= {} tree.css["@layer base"] ??= {} - tree.css["@layer base"].body ??= {} - // Find existing @apply key and merge, or create new. - const existingApplyKey = Object.keys(tree.css["@layer base"].body).find( - (key) => key.startsWith("@apply ") - ) - if (existingApplyKey) { - delete tree.css["@layer base"].body[existingApplyKey] - tree.css["@layer base"].body[`${existingApplyKey} ${fontClasses}`] = {} - } else { - tree.css["@layer base"].body[`@apply ${fontClasses}`] = {} + + for (const [selector, classes] of groups) { + const fontClasses = classes.join(" ") + tree.css["@layer base"][selector] ??= {} + // Find existing @apply key and merge, or create new. + const existingApplyKey = Object.keys( + tree.css["@layer base"][selector] + ).find((key) => key.startsWith("@apply ")) + if (existingApplyKey) { + delete tree.css["@layer base"][selector][existingApplyKey] + tree.css["@layer base"][selector][ + `${existingApplyKey} ${fontClasses}` + ] = {} + } else { + tree.css["@layer base"][selector][`@apply ${fontClasses}`] = {} + } } } @@ -206,7 +220,10 @@ export async function transformLayoutFonts( ) if (existingVarDecl) { fontVariableNames.push(existingVarDecl.getName()) - fontUtilityClasses.push(font.font.variable.replace("--", "")) + // Only add utility class to if font has no custom selector. + if (!font.font.selector) { + fontUtilityClasses.push(font.font.variable.replace("--", "")) + } } continue } @@ -259,7 +276,10 @@ export async function transformLayoutFonts( } fontVariableNames.push(varName) - fontUtilityClasses.push(font.font.variable.replace("--", "")) + // Only add utility class to if font has no custom selector. + if (!font.font.selector) { + fontUtilityClasses.push(font.font.variable.replace("--", "")) + } } // Only keep one font-family class (font-sans, font-serif, font-mono) on . diff --git a/templates/astro-monorepo/apps/web/src/pages/index.astro b/templates/astro-monorepo/apps/web/src/pages/index.astro index a14300aacc..25e624863c 100644 --- a/templates/astro-monorepo/apps/web/src/pages/index.astro +++ b/templates/astro-monorepo/apps/web/src/pages/index.astro @@ -1,6 +1,6 @@ --- import "@workspace/ui/globals.css" -import { Button } from "@workspace/ui/components/ui/button" +import { Button } from "@workspace/ui/components/button" --- diff --git a/templates/next-monorepo/apps/web/app/page.tsx b/templates/next-monorepo/apps/web/app/page.tsx index 8231c83fb9..88765bf926 100644 --- a/templates/next-monorepo/apps/web/app/page.tsx +++ b/templates/next-monorepo/apps/web/app/page.tsx @@ -1,4 +1,4 @@ -import { Button } from "@workspace/ui/components/ui/button" +import { Button } from "@workspace/ui/components/button" export default function Page() { return ( @@ -10,7 +10,7 @@ export default function Page() {

We've already added the button component for you.

-
+
(Press d to toggle dark mode)
diff --git a/templates/react-router-monorepo/apps/web/app/routes/home.tsx b/templates/react-router-monorepo/apps/web/app/routes/home.tsx index c4b7fe6d30..c93be941da 100644 --- a/templates/react-router-monorepo/apps/web/app/routes/home.tsx +++ b/templates/react-router-monorepo/apps/web/app/routes/home.tsx @@ -1,4 +1,4 @@ -import { Button } from "@workspace/ui/components/ui/button" +import { Button } from "@workspace/ui/components/button" export default function Home() { return ( diff --git a/templates/start-monorepo/apps/web/src/routes/index.tsx b/templates/start-monorepo/apps/web/src/routes/index.tsx index 806cdde062..4a2709124e 100644 --- a/templates/start-monorepo/apps/web/src/routes/index.tsx +++ b/templates/start-monorepo/apps/web/src/routes/index.tsx @@ -1,5 +1,5 @@ import { createFileRoute } from "@tanstack/react-router" -import { Button } from "@workspace/ui/components/ui/button" +import { Button } from "@workspace/ui/components/button" export const Route = createFileRoute("/")({ component: App }) diff --git a/templates/vite-monorepo/apps/web/src/App.tsx b/templates/vite-monorepo/apps/web/src/App.tsx index 9e8103760b..55a08a929b 100644 --- a/templates/vite-monorepo/apps/web/src/App.tsx +++ b/templates/vite-monorepo/apps/web/src/App.tsx @@ -1,4 +1,4 @@ -import { Button } from "@workspace/ui/components/ui/button" +import { Button } from "@workspace/ui/components/button" export function App() { return ( @@ -10,7 +10,7 @@ export function App() {

We've already added the button component for you.

-
+
(Press d to toggle dark mode)