Tutorial Svelte
Biblioteca Svelte a Lily este implementarea canonică: runes Svelte 5, props tipizate, distribuire a props rămase și legare bidirecțională cu
bind:value.
Ce vei construi
Un mic formular de contact — câmp cu etichetă, buton de trimitere, legare bidirecțională, comportament real al tastaturii și al cititorului de ecran — mai întâi simplu, apoi stilizat, în aproximativ 10 minute.
Înainte să începi
Ai nevoie de git, Node 22 sau mai nou și pnpm 10 sau mai nou. Orice proiect Svelte 5 merge — o aplicație npx sv create nouă este suficientă.
Pasul 1 — Obține codul
git clone https://github.com/LilyDesignSystem/lily-design-system
cd lily-design-system/lily-design-system-svelte-headless
pnpm install
pnpm test # vitest — thousands of component cases
pnpm run storybook # browse all 571 components
Componentele se află în src/lib/components/{Name}/, un director pe componentă cu fișierul .svelte , testele, story-urile și documentația sa alături. Copiază directoarele de care ai nevoie în aplicația ta sau depinde de depozit și importă direct.
Pasul 2 — Prima ta componentă
<script>
import Button from "#lib/components/Button/Button.svelte";
function save() { console.log("saved"); }
</script>
<Button onclick={save}>Save</Button>
Randează <button class="button" type="button">. Props sunt tipizate: type, disabled,
pressed (randează aria-pressed (randează label (un aria-label pentru butoane comutatoare),
Pasul 3 — Compune un formular mic
<script>
import Form from "#lib/components/Form/Form.svelte";
import Field from "#lib/components/Field/Field.svelte";
import TextInput from "#lib/components/TextInput/TextInput.svelte";
import Button from "#lib/components/Button/Button.svelte";
let name = $state("");
</script>
<Form label="Contact form" onsubmit={handleSubmit}>
<Field label="Full name" required>
<TextInput id="name" label="Full name" bind:value={name} required />
</Field>
<Button type="submit">Save</Button>
</Form>
Field primește label ca propriul prop, în loc de o componentă etichetă imbricată — transmite-o o singură dată, pe Fieldși TextInputcorespunzător din label oferă numele accesibil. TextInput's value pentru suprascriere), iar orice atribut suplimentar este distribuit pe rădăcină.
$bindable este un prop bind:value rune, deci
Verificat la 2026-08-29: îți oferă imediat legare bidirecțională. svelte/server acest fragment exact a fost compilat prin <label for> și verificat pentru o singură etichetă, legată corect Label în interiorul Field— o ciornă anterioară imbrica un
două etichete (una goală) deoarece Field randează deja propria etichetă din intrarea label separat în interior, ceea ce randa
Ruta compusă a formularului de contact
este același tipar, exersat cu teste e2e și axe reale.
Verifică-ți munca: rulează aplicația și formularul arată simplu — exact cum era intenționat: stilizarea urmează. Apasă Tab: focalizarea trece prin fiecare control, eticheta este anunțată, iar trimiterea funcționează. Comportamentul este gata; aspectul este al tău și urmează.
Pasul 4 — Stilizează-l
Tot ce e mai sus se randează ca structură pură, gata pentru stilurile tale. Stilizează cârligele de clasă —
.button, .text-input, .label,
.field — în foaia ta de stil globală sau leagă o temă gata făcută în app.html:
<link rel="stylesheet" href="/themes/dark.css" />
Ajustările pe instanță trec prin prop-ul class care se adaugă la cârligul de bază: <Button class="wide"> randează
class="button wide".
Pasul 5 — Vezi totul funcționând
Aplicația-exemplu SvelteKit este același catalog complet stilizat, cu demonstrații live, teste Playwright e2e și o linie de bază de accesibilitate axe-core:
git clone https://github.com/LilyDesignSystem/lily-design-system
cd lily-design-system/lily-design-system-svelte-sveltekit-examples
pnpm install && pnpm run dev
Pașii următori
- Teme — comutare în timpul rulării cu ajutorul theme-picker pentru Svelte.
- Ajutoare pentru preferințe — limbă și dimensiunea textului.
- Catalogul de componente — proprietăți, ARIA și tastatură pentru fiecare componentă.
Întrebări pe parcurs? Pagina de ajutor este plină de răspunsuri — iar dacă un pas poate fi mai clar, spune-ne și vom îmbunătăți cu plăcere tutorialul.