Skip to content

feat: NucleusFonts#23

Open
Priva28 wants to merge 13 commits into
mainfrom
nucleusfonts
Open

feat: NucleusFonts#23
Priva28 wants to merge 13 commits into
mainfrom
nucleusfonts

Conversation

@Priva28
Copy link
Copy Markdown
Contributor

@Priva28 Priva28 commented May 4, 2026

This PR adds font styling definitions to Nucleus. It's designed to be flexible so it can work with multiple font families as well as with a range of configuration options.

The definitions for fonts live in tokens/definitions/font/fonts.json. This file should follow this format:

{
  "{{fontStyle}}": {
    "fontName": "WorldProMVP-LH",
    "size": 13,
    "weight": 325,
    "letterSpacing": 0.0,
    "lineHeight": 1.3,
    "dynamicTypeStyle": "caption2"
  },
  "b1": {
    ...
  }
}

Check https://developer.apple.com/design/human-interface-guidelines/typography#iOS-iPadOS-Dynamic-Type-sizes to set the right value for the dynamicTypeStyle.


The build script has been split into multiple files to handle generation for color and font. This will make it easier to expand upon moving forward.

On both iOS and Android we have the concept of a NucleusFont object. This is a simple object that provides the font styling values. It's the clients responsibility to actually render the font depending on these definitions.

@Priva28 Priva28 changed the title feat: NucleusFonts pt 1 feat: NucleusFonts May 5, 2026
import androidx.compose.ui.unit.sp

/**
* A nucleus design-token font.
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: uppercase Nucleus and not hyphenate design token

* Each value carries enough information to construct a Compose `TextStyle`. Nucleus stays unopinionated about how the font is loaded or applied. Pick the fields you need and pass them into your own `TextStyle` / `Typography` setup.
*/
data class NucleusFontStyle(
val fontName: String,
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

looks like we are exposing a fontName here but compose can't load the bundled res/font/world_pro_mvp.ttf froma postscript-name string. can we include a stable Android res ref or some FontFamily helper here?

we should mitigate requiring consumers to manually know and wire R.font.world_pro_mvp which defaeats the token abstraction

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants