BjInput
Champ React contrôlé avec libellé, aide, états de validation, variante textarea et champ avec icône Remix.
Utilisation
import { useState } from 'react'
import { BjInput } from '@flrxnt/dsbj/react'
export default function Example() {
const [name, setName] = useState('')
return (
<BjInput
value={name}
onChange={(e) => setName(e.target.value)}
label="Nom"
hint="Tel qu’indiqué sur vos documents"
placeholder="Dupont"
/>
)
}Aperçu
Votre nom complet tel qu’il apparaît sur vos documents officiels
section-states
desc-states
import { useState } from 'react'
import { BjInput } from '@flrxnt/dsbj/react'
export default function Example() {
const [a, setA] = useState('')
const [b, setB] = useState('ok@example.com')
const [c, setC] = useState('')
return (
<>
<BjInput value={a} onChange={(e) => setA(e.target.value)} label="Défaut" state="default" message="Message informatif" />
<BjInput value={b} onChange={(e) => setB(e.target.value)} label="Valide" state="valid" message="Format accepté" />
<BjInput value={c} onChange={(e) => setC(e.target.value)} label="Erreur" state="error" message="Champ obligatoire" />
</>
)
}section-sizes
desc-sizes
import { BjInput } from '@flrxnt/dsbj/react'
export default function Example() {
return (
<>
<BjInput size="sm" label="Petit" placeholder="sm" />
<BjInput size="md" label="Moyen (défaut)" placeholder="md" />
</>
)
}section-types
desc-types
import { useState } from 'react'
import { BjInput } from '@flrxnt/dsbj/react'
export default function Example() {
const [v, setV] = useState({ email: '', num: '', pass: '', tel: '', url: '' })
return (
<>
<BjInput type="email" label="E-mail" value={v.email} onChange={(e) => setV((s) => ({ ...s, email: e.target.value }))} />
<BjInput type="number" label="Nombre" value={v.num} onChange={(e) => setV((s) => ({ ...s, num: e.target.value }))} />
<BjInput type="password" label="Mot de passe" value={v.pass} onChange={(e) => setV((s) => ({ ...s, pass: e.target.value }))} />
<BjInput type="tel" label="Téléphone" value={v.tel} onChange={(e) => setV((s) => ({ ...s, tel: e.target.value }))} />
<BjInput type="url" label="URL" value={v.url} onChange={(e) => setV((s) => ({ ...s, url: e.target.value }))} />
</>
)
}section-textarea
desc-textarea
import { useState } from 'react'
import { BjInput } from '@flrxnt/dsbj/react'
export default function Example() {
const [text, setText] = useState('')
return (
<BjInput
textarea
rows={6}
value={text}
onChange={(e) => setText(e.target.value)}
label="Commentaire"
placeholder="Votre message…"
/>
)
}section-icon
desc-icon
import { useState } from 'react'
import { BjInput } from '@flrxnt/dsbj/react'
export default function Example() {
const [q, setQ] = useState('')
return (
<BjInput
icon="ri-mail-line"
type="email"
value={q}
onChange={(e) => setQ(e.target.value)}
label="Courriel"
placeholder="vous@exemple.com"
/>
)
}section-disabled
desc-disabled
import { BjInput } from '@flrxnt/dsbj/react'
export default function Example() {
return <BjInput label="Lecture seule" value="Non modifiable" disabled />
}section-combinations
desc-combinations
import { useState } from 'react'
import { BjInput } from '@flrxnt/dsbj/react'
export default function Example() {
const [v, setV] = useState('')
return (
<BjInput
size="sm"
icon="ri-user-line"
state="error"
message="Identifiant requis"
label="Identifiant"
value={v}
onChange={(e) => setV(e.target.value)}
placeholder="min. 3 caractères"
/>
)
}section-callbacks
desc-callbacks
import { useState, type ChangeEvent } from 'react'
import { BjInput } from '@flrxnt/dsbj/react'
export default function Example() {
const [value, setValue] = useState('')
function handleChange(e: ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) {
setValue(e.target.value)
}
return (
<BjInput id="login-field" value={value} onChange={handleChange} label="Login" hint="Sensible à la casse" />
)
}Props
| Prop | Description |
|---|---|
value | Valeur contrôlée du champ, chaîne. |
onChange | Gestionnaire de changement sur l’input ou la textarea. |
label | Libellé accessible au-dessus du champ. |
hint | Texte d’aide sous le libellé. |
state | État visuel : default, valid ou error. |
message | Message sous le champ (couleur selon l’état). |
size | Taille : sm ou md (défaut md). |
disabled | prop-disabled |
type | prop-type |
placeholder | prop-placeholder |
textarea | Si vrai, rend une textarea au lieu d’un input. |
rows | Nombre de lignes de la textarea (défaut 4). |
icon | Classe d’icône Remix ; enveloppe le input dans bj-input-wrap. |
id | Identifiant du champ ; sinon généré automatiquement. |
className | Classe CSS sur l’input ou la textarea. |
… | Autres attributs HTML natifs de input ou textarea (hors size, value, defaultValue, onChange et id réservés). |