Skip to content

Add variable font settings support - #57815

Open
evankatz14 wants to merge 3 commits into
react:mainfrom
evankatz14:export-D114121940
Open

Add variable font settings support#57815
evankatz14 wants to merge 3 commits into
react:mainfrom
evankatz14:export-D114121940

Conversation

@evankatz14

Copy link
Copy Markdown

Summary:
Apply the existing fontVariationSettings text style prop when Fabric
constructs fonts on iOS. Parse CSS-compatible axis settings into CoreText
variation dictionaries while preserving absent, explicit-clear, and invalid
value semantics for nested text.

The parser supports quoted four-character OpenType tags and finite numeric
values, rejects malformed settings as a complete unit, and applies normalized
variations after the base font and feature settings are resolved. This shared
attributed-text path covers Fabric Text and TextInput.

Changelog:
[iOS][Added] - Add fontVariationSettings support for Fabric text

Differential Revision: D114121940

Evan Katz and others added 3 commits August 3, 2026 11:56
Summary:
Add a `fontVariationSettings` text style prop and carry it through Fabric text attributes into Android text rendering. Android now deserializes the prop for `<Text>`, applies it to `Paint`, and includes it in text measurement cache identity because variable axes can affect layout.

Preserve the distinction between an absent setting and an explicitly empty setting so nested text can inherit or clear the parent variation axes. Apply high-level font properties before low-level variation settings so explicit axes take precedence, matching CSS font realization order.

Settings syntax is intentionally forwarded unchanged through common text attributes and validated only by the Android font variation parser. This avoids narrowing the grammar Android accepts. As a result, malformed child settings are outside the supported inheritance contract: they replace an inherited value before Android validation and are not guaranteed to fall back to the parent settings. Android also accepts `normal` and the React Native empty-string convention as explicit resets.

Changelog:
[Android][Added] - Add `fontVariationSettings` support for `<Text>`

Differential Revision: D113580491

Reviewed By: Abbondanzo
Summary:
Extend Android `TextInput` support for the existing `fontVariationSettings` text style prop. Fabric now forwards changes and resets through `AndroidTextInputProps`, and `ReactTextInputManager` applies the normalized value to the underlying `ReactEditText` paint after typeface updates.

Using the `EditText` paint as the source of truth applies variable font axes consistently to placeholders, controlled values, and newly typed text. Equivalent `CustomStyleSpan`s are stripped while spans with different variation settings remain intact for attributed text ranges.

As with `<Text>`, common text attributes forward settings syntax unchanged and Android remains the validation authority. This avoids narrowing Android-compatible grammar; malformed settings are outside the supported inheritance contract. Both `normal` and the React Native empty-string convention explicitly reset variation settings.

Changelog:
[Android][Added] - Add `fontVariationSettings` support for `TextInput`

Differential Revision: D113580493
Summary:
Apply the existing `fontVariationSettings` text style prop when Fabric
constructs fonts on iOS. Parse CSS-compatible axis settings into CoreText
variation dictionaries while preserving absent, explicit-clear, and invalid
value semantics for nested text.

The parser supports quoted four-character OpenType tags and finite numeric
values, rejects malformed settings as a complete unit, and applies normalized
variations after the base font and feature settings are resolved. This shared
attributed-text path covers Fabric `Text` and `TextInput`.

Changelog:
[iOS][Added] - Add `fontVariationSettings` support for Fabric text

Differential Revision: D114121940
@meta-cla meta-cla Bot added the CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed. label Aug 4, 2026
@facebook-github-tools facebook-github-tools Bot added p: Facebook Partner: Facebook Partner labels Aug 4, 2026
@meta-codesync

meta-codesync Bot commented Aug 4, 2026

Copy link
Copy Markdown

@evankatz14 has exported this pull request. If you are a Meta employee, you can view the originating Diff in D114121940.

@github-actions

github-actions Bot commented Aug 4, 2026

Copy link
Copy Markdown

Warning

JavaScript API change detected

This PR commits an update to ReactNativeApi.d.ts, indicating a change to React Native's public JavaScript API.

  • Please include a clear changelog message.
  • This change will be subject to additional review.

This change was flagged as: POTENTIALLY_BREAKING

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

Labels

CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed. meta-exported p: Facebook Partner: Facebook Partner

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant