Aller au contenu
Vincle

Chargement…

    Adaptateurs

    L’adaptateur relie le rendu Flow au mécanisme qui met à jour le document.

    import {
    TurboAdapter, // Turbo Streams: <turbo-frame> / <turbo-stream>, morph on Turbo >= 8
    HtmxAdapter, // HTMX: hx-get / hx-swap-oob, morph on htmx >= 4
    NativeAdapter, // <template data-for> + inline polyfill, all 5 positions
    WebPlatformAdapter, // WICG declarative partial updates, native support required
    EsiAdapter, // CDN edge composition via esi:include
    } from "@vincle/flow/adapters";

    Choisir un adaptateur#

    Choisissez l’adaptateur selon les capacités du client et l’infrastructure, pas selon votre routeur serveur.

    NativeAdapter#

    NativeAdapter livre son polyfill automatiquement et prend en charge remplacement, ajout et insertion relative. Il fonctionne sans bibliothèque client supplémentaire.

    WebPlatformAdapter#

    WebPlatformAdapter utilise directement Fragment Include et DOM Patching. Ces API expérimentales exigent un navigateur compatible et sont limitées au remplacement.

    <?start name="comments">Loading comments…<?end>
    <!-- Later in the same HTML stream: -->
    <template for="comments"><p>First comment</p></template>
    <?start name="comments">Loading comments…<?end>
    <template for="comments" src="/fragments/comments.html"></template>

    TurboAdapter#

    TurboAdapter émet les éléments attendus par Turbo. Le mode morph exige Turbo 8 ou une version compatible plus récente.

    // Placeholder in shell:
    // <turbo-frame id="comments">Loading…</turbo-frame>
    // Patch:
    // <turbo-stream action="replace" target="comments">
    // <template>…</template>
    // </turbo-stream>
    // Patch, merge="morph" (Turbo >= 8):
    // <turbo-stream action="replace" method="morph" target="comments">
    // <template>…</template>
    // </turbo-stream>

    HtmxAdapter#

    HtmxAdapter émet les mises à jour HTMX. Le mode morph exige HTMX 4 ou une version compatible plus récente.

    // Placeholder in shell:
    // <div id="comments" hx-get="/_fragments/comments" hx-trigger="load" hx-swap="outerHTML">Loading…</div>
    // Patch:
    // <div id="comments" hx-swap-oob="outerHTML">…</div>
    // Patch, merge="morph" (htmx >= 4):
    // <div id="comments" hx-swap-oob="outerMorph">…</div>

    EsiAdapter#

    EsiAdapter émet des inclusions ESI pour le statique côté proxy ou CDN. Il prend uniquement en charge le remplacement.

    Adaptateurs personnalisés#

    Implémentez l’interface d’adaptateur pour une autre cible. Gardez la même représentation entre la page initiale, les fragments streamés et les fichiers statiques.

    import { createAdapter } from "@vincle/flow/adapters";
    const MyAdapter = createAdapter({
    Placeholder: ({ id, children }) => <div data-defer={id}>{children}</div>,
    Patch: ({ id, children, merge }) => (
    <div data-patch={id} data-merge={merge}>
    {children}
    </div>
    ),
    Frame: ({ id, children }) => <div data-frame={id}>{children}</div>,
    capabilities: { streaming: true, merges: ["replace", "append"] },
    });
    Export Rôle
    Placeholder Rend l’emplacement d’un fragment différé
    Patch Encadre un fragment prêt pour son insertion dans le DOM
    Frame Encadre le contenu d’un fichier de fragment statique
    capabilities Déclare les modes de fusion et le support du streaming
    transformShell Transforme facultativement la structure avant son émission