Aller au contenu

Guides

Bricks

Une brick est un nœud d’un spec de formulaire — un champ, un conteneur de mise en page, ou un élément d’affichage. Trente sont livrées d’origine, et le registre qui les contient est ouvert : vos propres bricks s’enregistrent de la même façon et apparaissent dans la même palette.

id de brick Type de données Notes
text, textarea, password string text accepte les masques et les adornments
email, url, phone string à associer aux validateurs correspondants
number number min / max / step
date, time, datetime string sélecteurs natifs
select, radio string choix unique
multi-select, select-boxes, tags array choix multiple
checkbox boolean libellé en ligne
signature string canvas, stocké en data URL
address object champ composite
code string CodeMirror, chargé en lazy
id de brick Type Notes
file input / object upload pluggable, uploadUrl par brick, mode multiple
data-grid collection / array lignes répétées avec validation par ligne
hidden input / string porte une valeur sans rien afficher
id de brick Type Notes
group, row, column panel conteneurs fieldset et flex
stepper panel wizard avec validation par étape
tabs panel validation optionnelle avant de quitter l’onglet
nested-form panel référence un autre formulaire par specRef
content output texte riche statique
recap output résumé vivant de tout le formulaire

Un combobox avec recherche qui implémente le pattern WAI-ARIA complet — navigation clavier, gestion du focus, annonces aux lecteurs d’écran. Les options proviennent de cinq sources :

optionsSource D’où viennent les options
static une chaîne séparée par des retours à la ligne, ou des objets { label, value }
dataMap la valeur d’un autre champ du même formulaire
remote une URL, avec interpolation {key} et {a.b} depuis le contexte et les données, plus recherche côté serveur optionnelle
catalog une liste partagée résolue via optionSourceService
js un snippet sandboxé qui renvoie la liste

labelKey et valueKey acceptent les chemins pointés : name.common lit donc une propriété imbriquée de chaque objet option.

Le template de ligne s’édite comme n’importe quel panel ; au rendu, chaque ligne scope ses propres données. minItems / maxItems valident le nombre de lignes, les lignes se réordonnent avec des boutons haut/bas accessibles, et les erreurs sont rapportées sous la forme contacts[0].email.

Les deux conditionnent la navigation à la validation. stepper valide l’étape courante avant d’avancer et peut émettre formSubmit depuis un bouton Submit final. tabs propose la même chose en option, plus la navigation aux flèches entre onglets.

Adornments prefix / suffix optionnels, plus une config mask :

Jeton de masque Accepte
9 un chiffre
a une lettre
A une lettre, mise en majuscule
* alphanumérique

Tout autre caractère est un littéral et s’insère tout seul — avec le masque +229 99 99 99 99, l’utilisateur ne tape que les chiffres : le préfixe et les espaces apparaissent d’eux-mêmes.

Un résumé vivant, en lecture seule, de tout ce qui a été rempli jusqu’ici. groupBySections transforme les panels labellisés en sections titrées, et les collections se rendent en tableaux — pratique comme dernière étape d’un wizard.

createBrick renvoie une brick que le registre accepte. La fonction render reçoit les props de la brick et renvoie un nœud virtuel :

  1. Décrivez-la et rendez-la.

    rating-brick.tsx
    import { createBrick, h, registerBrick } from '@streamline-pulse/formkrafter-wc'
    export const ratingBrick = createBrick({
    type: 'input',
    dataType: 'number',
    id: 'rating',
    name: 'Rating',
    category: 'Inputs',
    defaultConfigs: { label: 'Note' },
    render: (props) =>
    h(
    'div',
    { class: { 'fk-field': true } },
    ...[1, 2, 3, 4, 5].map((star) =>
    h(
    'button',
    {
    type: 'button',
    'aria-label': `${star} étoiles`,
    onClick: () => props.onDataChange?.(star),
    },
    star <= Number(props.data ?? 0) ? '' : ''
    )
    )
    ),
    })
  2. Enregistrez-la une fois, avant le montage du builder.

    registerBrick(ratingBrick)
  3. Elle apparaît désormais dans la palette sous sa category, et se rend partout où un spec utilise "id": "rating".

Un projet de Streamline Pulse