Référence
Packages
Les cinq packages sont publiés sous le scope @streamline-pulse avec des
versions synchronisées — une release les incrémente ensemble, vous n’avez
donc jamais à réfléchir à un mélange de versions.
Lesquels me faut-il ?
Section intitulée « Lesquels me faut-il ? »| Je construis… | À installer |
|---|---|
| Une application React | formkrafter-react |
| Une application Vue 3 | formkrafter-vue |
| Du HTML pur, ou un autre framework | formkrafter-wc |
| Une application React Native ou Expo | formkrafter-react-native |
| Un backend qui valide les soumissions | formkrafter-core |
formkrafter-core
Section intitulée « formkrafter-core »Du TypeScript headless : pas de DOM, pas de framework. Tourne en navigateur, Node, Bun et workers.
| Domaine | Exports |
|---|---|
| Ops sur les specs | addBrick, removeBrick, moveBrick, duplicateBrick, updateBrickConfigs, updateBrickStyles, updateBrickValidations, updateBrickRules, SpecHistory |
| Adressage | getBrickAt, pointerFromPath, iterateBricks, iterateSchemaBricks |
| Validation | validateFormData, validateBrickSpecData, validateBrickSpecDataDetailed, buildValidationSchema, registerValidationMessages, defaultValidationMessage |
| Santé des specs | lintSpec, SpecIssue, SpecIssueCode |
| Bricks personnalisées | getBrickData, wrapBrickData, normalizeOptions, interpolateTemplate, parseHeaderLines, appendSearchParam |
| Règles | runSandboxed, evalBrickCode, getAffectedProperties, SandboxJsRunnerService, UnsafeEvalJsRunnerService |
| Services | services, FetchDataSourceService, Base64FileUploadService, UrlFileUploadService, FetchSpecSourceService, FetchOptionSourceService |
| Formulaires imbriqués | expandSpec, hasNestedForms |
| Form.io | convertFormioForm |
| Aides i18n | resolveLocalizedText, resolveLocalizedRecord, isLocalizedObject |
| Types | BrickSpec, BrickType, Validation, Validator, Rule, Effect, ValidationResult, SpecUpdate, Operation |
import { validateFormData, expandSpec } from '@streamline-pulse/formkrafter-core'formkrafter-wc
Section intitulée « formkrafter-wc »L’UI en Web Components Stencil. Le point d’entrée du package est le build custom elements — tree-shakeable et ESM uniquement :
import '@streamline-pulse/formkrafter-wc' // enregistre les élémentsimport '@streamline-pulse/formkrafter-wc/styles.css' // opt-in, 1,6 Ko gzippé<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@streamline-pulse/formkrafter-wc@0.21.0/dist/formkrafter-wc/formkrafter-wc.css"/><script type="module" src="https://cdn.jsdelivr.net/npm/@streamline-pulse/formkrafter-wc@0.21.0/dist/formkrafter-wc/formkrafter-wc.esm.js"></script>Un bundle à chargement paresseux qui enregistre les éléments à la demande. Épinglez une version : une URL CDN non épinglée pointe vers la dernière version publiée, donc un changement majeur atteindrait votre page sans prévenir. La démo HTML pur est construite exactement ainsi.
Au-delà des composants, il exporte aussi le registre de bricks et les traductions du chrome :
| Domaine | Exports |
|---|---|
| Registre | registerBrick, registerBricks, getBrick, getBrickMolds, getBrickMoldsGroupedByCategory, newBrickSpec, createBrick, h |
| Bricks intégrées | registerDefaultBricks, plus les 30 instances de bricks (textInputBrick, selectBrick, dataGridBrick, …) |
| i18n | setFkTranslations, frFkTranslations, fkT, fkTOr |
| Types d’événements | SpecChangeDetail, DataChangeDetail, BrickConfigsChangeDetail, … |
formkrafter-react et formkrafter-vue
Section intitulée « formkrafter-react et formkrafter-vue »De fins wrappers générés à partir des mêmes Web Components, avec props et
événements typés. Ils n’exportent que les composants — les types viennent de
-core, les styles de -wc.
import { FkFormBuilder, FkFormRender } from '@streamline-pulse/formkrafter-react'Les props sont en camelCase ; les événements sont onSpecChange,
onFormDataChange, onFormSubmit.
import { FkFormBuilder, FkFormRender } from '@streamline-pulse/formkrafter-vue'Vue 3 camélise les noms d’événements, donc @spec-change et @specChange
fonctionnent tous les deux.
Voir composants pour la référence complète des props, événements et méthodes.
formkrafter-react-native
Section intitulée « formkrafter-react-native »Un package renderer uniquement pour React Native et Expo — pas de Web Components, donc pas de builder non plus. Il partage avec le renderer web la validation, le moteur de règles et le parsing d’options de core, et rend les bricks avec des primitives natives.
| Domaine | Exports |
|---|---|
| Rendu | FormRenderer (avec validate()/submit() via une ref), BrickRenderer |
| Moteur | FormEngine, useFormEngine — la machine à états du renderer, utilisable seule |
| Registre | createNativeBrick, registerNativeBrick, registerNativeBricks, getNativeBrick, registerDefaultNativeBricks, Field |
| Theming | FkThemeProvider, useFkTheme, fkLightTheme, fkDarkTheme |
Couverture des bricks : variantes texte, nombre, case à cocher, select et
sélection multiple avec les mêmes sources d’options que le web (statique, HTTP
distant avec recherche et interpolation {token}, catalogue, dataMap, JS
sandboxé), boutons radio, cases à cocher multiples, étiquettes, adresse,
contenu, champ caché, la grille de données (lignes en cartes, validation par
ligne), le récapitulatif (même parcours collectRecapItems que la brick web)
le wizard à étapes avec validation par étape et le layout à onglets avec sa
garde de validation avant de quitter, plus les layouts colonne/ligne/groupe —
et les lignes de grille comptent dans le verdict global de validate(). Deux
points d’entrée portent les bricks qui exigent un module natif, donc les
applications optent et les autres ne le résolvent jamais :
formkrafter-react-native/date (@react-native-community/datetimepicker,
registerNativeDateBricks()) et formkrafter-react-native/file
(expo-document-picker, registerNativeFileBrick(), upload via le
fileUploadService de core). Encore web uniquement : signature et code. Les
bricks sans renderer natif affichent un placeholder explicite au lieu
d’échouer.
Versionnage et releases
Section intitulée « Versionnage et releases »Les releases sont automatisées avec Changesets : une PR par release, tous les packages incrémentés ensemble, publication depuis la CI. Le changelog de chaque package liste exactement ce qui est parti dans sa version.
Étapes suivantes
Section intitulée « Étapes suivantes »Un projet de Streamline Pulse