Qwik
npm install @kadal/deck-qwik @qwik.dev/coreimport { deckQwikDefine, deckQwikFiles } from "@kadal/deck-qwik/build";
export default defineConfig({ plugins: [deck({ entry: "deck.mdx" }), react({ exclude: [...deckQwikFiles] })], define: { ...deckQwikDefine },});/** @jsxImportSource @qwik.dev/core */import { component$, useSignal, useTask$ } from "@qwik.dev/core";import { deckQwik } from "@kadal/deck-qwik";
export const Counter = deckQwik( component$((props: { step: { value: number } }) => { /* … */ }),);registerLazyRenderer("qwik", () => import("@kadal/deck-qwik").then((m) => m.qwikRenderer));Three things to know
Section titled “Three things to know”component$()is not optional. An inline component — a plain function returning JSX — renders exactly once and is then inert: its signals change and the DOM never moves, with no error. Wrapped incomponent$()it works, optimizer or not.deckQwikDefine. The runtime references__EXPERIMENTAL__in many unguarded places that Qwik’s optimizer would substitute; without the define, the first render throws before anything reaches the slide.useTask$, neveruseVisibleTask$. The visible variant waits for an event fired by Qwik’s loader, which is not present — and an island is only alive while its slide is up, so it is already visible.
Resumability does not apply here. Qwik resumes server-rendered HTML without hydration; an island
has no server-rendered HTML — it exists only once its slide is shown. What remains is a good
fine-grained reactive framework, and that is what the renderer drives. Props arrive as signals, so
a component reads props.step.value.