components/formcompose
Saisie · 11 / 64

Form Composition

Input · Select · Button

Input, Select et Button mélangés à une même taille : une barre de filtres et un formulaire métier.

BEHAVIOR CONTRACT

Les trois partagent ControlSize (hauteur de boîte XS 20 / SM 24 / MD 32 / LG 40), si bien que hauteur, rayon, typographie, icônes et espacements s'alignent à chaque taille.

RECORDED INTERACTION

Le harness filtre par statut et responsable et saisit une recherche dans la barre, puis remplit le client, la région et le montant dans le formulaire.

examples/storybook/form_composition.zig:185
pub fn build(scope: *ui.Scope, cx: *ui.Cx) anyerror!*ui.Node {
    const a = cx.allocator;
    const root = try ui.box(cx, .{ .direction = .column, .gap = 16 }, .{});
    tag(root, "story.formcompose.root");

    try root.appendChild(a, try heading(cx, "Filter toolbar · same size"));
    try root.appendChild(a, try caption(cx, "Input / Select / Button share ControlSize: XS 20 · SM 24 · MD 32 · LG 40 px"));
    inline for (sizes) |spec| {
        try root.appendChild(a, try filterToolbar(spec, scope, cx));
    }

    try root.appendChild(a, try heading(cx, "Business form · MD"));
    try root.appendChild(a, try orderForm(scope, cx));
    return root;
}
Voir le code sur GitHubexamples/storybook/form_composition.zig:185

Le code source tel quel de la story dans le Storybook (zenit 5f9add5+wip 2026-09-30). W désigne ui.widgets ; col / row / label sont de petits helpers de mise en page du Storybook.

zenit · Double licenceGratuit pour les projets open source sous GPL-3.0-only ; les produits propriétaires ou commerciaux nécessitent une licence commerciale.Contacter l’auteur : zongyi.xzy#gmail.com (remplacez # par @)zenit 5f9add5+wip 2026-09-30