Aller au contenu

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.

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

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'

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éments
import '@streamline-pulse/formkrafter-wc/styles.css' // opt-in, 1,6 Ko gzippé

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, …

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.

Voir composants pour la référence complète des props, événements et méthodes.

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.

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.

Un projet de Streamline Pulse