Closed
Description
Describe the bug
FormControl.Label
is causing Layout Shift on page load (see gif below)
To Reproduce
- Create a page using
FormControl
with aFormControl.Label
component. For example:
<FormControl>
<FormControl.Label>Username</FormControl.Label>
<TextInput />
</FormControl>
- Refresh the page.
Expected behavior
<FormControl.Label>
should not flash on page load.
Screenshots
Gif of the page being refreshed
Static image showing the exact frame where <FormControl.Label>
is invisible
Desktop (please complete the following information):
- OS: macOS
- Browser tested on Chrome (latest) and Safari (latest)
Additional context
There's no logic applied to the <FormControl.Label>
component. Here's the code from the gif above:
return (
<form style={{ width: '100%' }} onSubmit={handleSubmit}>
<Box sx={{ display: 'flex', flexDirection: 'column', gap: 3 }}>
{globalErrorMessage && <Flash variant="danger">{globalErrorMessage}</Flash>}
<FormControl id="username">
<FormControl.Label>Nome de usuário</FormControl.Label>
<TextInput
ref={usernameRef}
onChange={clearErrors}
name="username"
size="large"
autoCorrect="off"
autoCapitalize="off"
spellCheck={false}
aria-label="Seu nome de usuário"
/>
{errorObject?.key === 'username' && (
<FormControl.Validation variant="error">{errorObject.message}</FormControl.Validation>
)}
{errorObject?.type === 'string.alphanum' && (
<FormControl.Caption>Dica: use somente letras e números, por exemplo: nomeSobrenome4 </FormControl.Caption>
)}
</FormControl>
<FormControl id="email">
<FormControl.Label>Email</FormControl.Label>
<TextInput
ref={emailRef}
onChange={clearErrors}
name="email"
size="large"
autoCorrect="off"
autoCapitalize="off"
spellCheck={false}
aria-label="Seu email"
/>
{errorObject?.key === 'email' && (
<FormControl.Validation variant="error">{errorObject.message}</FormControl.Validation>
)}
</FormControl>
<FormControl id="password">
<FormControl.Label>Senha</FormControl.Label>
<TextInput
ref={passwordRef}
onChange={clearErrors}
name="password"
type="password"
autoCorrect="off"
autoCapitalize="off"
spellCheck={false}
size="large"
aria-label="Sua senha"
/>
{errorObject?.key === 'password' && (
<FormControl.Validation variant="error">{errorObject.message}</FormControl.Validation>
)}
</FormControl>
<FormControl>
<FormControl.Label visuallyHidden>Criar cadastro</FormControl.Label>
<Button variant="primary" size="large" type="submit" disabled={isLoading} aria-label="Criar cadastro">
Criar cadastro
</Button>
</FormControl>
</Box>
</form>
);
Additional context (bonus)
I'm in love with Primer. It's been a long time since I've been this happy developing interfaces.
To everyone involved in this project: you are amazing 🤝