diff --git a/src/components/forms/TextField.tsx b/src/components/forms/TextField.tsx
index 2bbf054225..410cc654e9 100644
--- a/src/components/forms/TextField.tsx
+++ b/src/components/forms/TextField.tsx
@@ -11,7 +11,15 @@ import {
import {HITSLOP_20} from '#/lib/constants'
import {mergeRefs} from '#/lib/merge-refs'
-import {android, atoms as a, TextStyleProp, useTheme, web} from '#/alf'
+import {
+ android,
+ applyFonts,
+ atoms as a,
+ TextStyleProp,
+ useAlf,
+ useTheme,
+ web,
+} from '#/alf'
import {useInteractionState} from '#/components/hooks/useInteractionState'
import {Props as SVGIconProps} from '#/components/icons/common'
import {Text} from '#/components/Typography'
@@ -148,6 +156,7 @@ export function createInput(Component: typeof TextInput) {
...rest
}: InputProps) {
const t = useTheme()
+ const {fonts} = useAlf()
const ctx = React.useContext(Context)
const withinRoot = Boolean(ctx.inputRef)
@@ -171,6 +180,48 @@ export function createInput(Component: typeof TextInput) {
const refs = mergeRefs([ctx.inputRef, inputRef!].filter(Boolean))
+ const flattened = StyleSheet.flatten([
+ a.relative,
+ a.z_20,
+ a.flex_1,
+ a.text_md,
+ t.atoms.text,
+ a.px_xs,
+ {
+ // paddingVertical doesn't work w/multiline - esb
+ paddingTop: 12,
+ paddingBottom: 13,
+ lineHeight: a.text_md.fontSize * 1.1875,
+ textAlignVertical: rest.multiline ? 'top' : undefined,
+ minHeight: rest.multiline ? 80 : undefined,
+ minWidth: 0,
+ },
+ // fix for autofill styles covering border
+ web({
+ paddingTop: 10,
+ paddingBottom: 11,
+ marginTop: 2,
+ marginBottom: 2,
+ }),
+ android({
+ paddingTop: 8,
+ paddingBottom: 8,
+ }),
+ style,
+ ])
+
+ applyFonts(flattened, fonts.family)
+
+ // should always be defined on `typography`
+ // @ts-ignore
+ if (flattened.fontSize) {
+ // @ts-ignore
+ flattened.fontSize = Math.round(
+ // @ts-ignore
+ flattened.fontSize * fonts.scaleMultiplier,
+ )
+ }
+
return (
<>