-
-
Notifications
You must be signed in to change notification settings - Fork 9.8k
Nextj.js: Support top-level weight/style in next/font/local with string src #32998
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Nextj.js: Support top-level weight/style in next/font/local with string src #32998
Conversation
- Add top-level weight and style to @font-face when src is a string - Exclude variable font weight ranges from className (only static weights) - Align with Next.js localFont behavior
📝 WalkthroughWalkthroughThe changes update font handling in Next.js webpack loader. The first adds conditional font-weight and font-style CSS declarations for local font paths. The second conditionalizes font-weight CSS generation and normalizes weight values by replacing spaces with dashes in class names. Changes
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~20 minutes
✨ Finishing touches
📜 Recent review detailsConfiguration used: CodeRabbit UI Review profile: CHILL Plan: Pro 📒 Files selected for processing (2)
🧰 Additional context used📓 Path-based instructions (4)**/*.{js,jsx,json,html,ts,tsx,mjs}📄 CodeRabbit inference engine (.github/copilot-instructions.md)
Files:
**/*.{ts,tsx,js,jsx,mjs}📄 CodeRabbit inference engine (.github/copilot-instructions.md)
Files:
code/**/*.{ts,tsx,js,jsx,mjs}📄 CodeRabbit inference engine (.github/copilot-instructions.md)
Files:
{code/**,scripts/**}/**/*.{ts,tsx,js,jsx,mjs}📄 CodeRabbit inference engine (.github/copilot-instructions.md)
Files:
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
🔇 Additional comments (4)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Package BenchmarksCommit: No significant changes detected, all good. 👏 |
|
Hi @Chiman2937 Thank you for contributing! LGTM! Would you be interested in fixing the bug also for |
Of course! |
Closes #32992
What I did
Fixed incorrect CSS generation when using
next/font/localwith top-levelweightandstyleproperties alongside a stringsrc.Problem
Storybook only processes
weightandstylewhen they are specified inside thesrcarray:✅ Works in Storybook (array-style):
❌ Broken in Storybook (top-level properties):
However, Next.js supports both patterns. When using top-level
weight/styleproperties with a stringsrc, Storybook generates incorrect CSS:Changes
getFontFaceCSSfunction: Addweightandstyleto@font-facewhensrcis a stringgetCSSMetafunction: Filter out variable font weight ranges from className (only apply static weights)getClassNamefunction: Replace spaces with hyphens in weight ranges to generate valid CSS class namesChecklist for Contributors
Testing
The changes in this PR are covered in the following automated tests:
Manual testing
This section is mandatory for all contributions. If you believe no manual test is necessary, please state so explicitly. Thanks!
1. Test environment:
@storybook/nextjsConfigure localFont with top-level weight (string src)
2. Verify the fix
<style id="font-face-...">tagfont-weightis missing from@font-facefont-weight: 45 920;is present in@font-face.classNamedoes NOT includefont-weight(correct for variable fonts)✔️ Test Results
All test cases now match Next.js behavior - variable fonts work correctly with top-level
weightproperty, and Storybook generates identical CSS output to Next.js App.Case 1: Variable font with top-level weight range
Result - Next.js App
Result - Storybook
Case 2: top-level static weight
Result - Next.js App
Result - Storybook
Case 3: Variable font with array-style src and weight range
Result - Next.js App
Result - Storybook
Case 4: Multiple static fonts with array-style src
Result - Next.js App
Result - Storybook
Case 5: Variable font with top-level weight range and style
Result - Next.js App
Result - Storybook
Documentation
MIGRATION.MD
Checklist for Maintainers
When this PR is ready for testing, make sure to add
ci:normal,ci:mergedorci:dailyGH label to it to run a specific set of sandboxes. The particular set of sandboxes can be found incode/lib/cli-storybook/src/sandbox-templates.tsMake sure this PR contains one of the labels below:
Available labels
bug: Internal changes that fixes incorrect behavior.maintenance: User-facing maintenance tasks.dependencies: Upgrading (sometimes downgrading) dependencies.build: Internal-facing build tooling & test updates. Will not show up in release changelog.cleanup: Minor cleanup style change. Will not show up in release changelog.documentation: Documentation only changes. Will not show up in release changelog.feature request: Introducing a new feature.BREAKING CHANGE: Changes that break compatibility in some way with current major version.other: Changes that don't fit in the above categories.🦋 Canary release
This PR does not have a canary release associated. You can request a canary release of this pull request by mentioning the
@storybookjs/coreteam here.core team members can create a canary release here or locally with
gh workflow run --repo storybookjs/storybook publish.yml --field pr=<PR_NUMBER>Summary by CodeRabbit