מדריך Svelte

ספריית ה-Svelte של Lily היא המימוש הקנוני: runes של Svelte 5, מאפיינים מוקלדים, פיזור rest-prop וקשירה דו-כיוונית עם bind:value.

מה תבנו

טופס יצירת קשר קטן — קלט עם תווית, כפתור שליחה, קשירה דו-כיוונית, התנהגות אמיתית של מקלדת וקורא מסך — קודם חשוף, אחר כך מעוצב, בכ-10 דקות.

לפני שמתחילים

אתם צריכים git, Node 22 ומעלה ו-pnpm 10 ומעלה. כל פרויקט Svelte 5 מתאים — אפליקציה חדשה npx sv create לגמרי מספיקה.

שלב 1 — קבלו את הקוד

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

הרכיבים חיים ב- src/lib/components/{Name}/, ספרייה אחת לכל רכיב עם קובץ ה- .svelte שלו, הבדיקות, ה-stories והתיעוד זה לצד זה. העתיקו את הספריות שאתם צריכים לאפליקציה שלכם, או תלו במאגר וייבאו ישירות.

שלב 2 — הרכיב הראשון שלכם

<script>
  import Button from "#lib/components/Button/Button.svelte";

  function save() { console.log("saved"); }
</script>

<Button onclick={save}>Save</Button>

מציג <button class="button" type="button">. המאפיינים מוקלדים: type, disabled, pressed (מציג aria-pressed עבור כפתורי החלפה), label ( aria-label עקיפה), וכל מאפיין נוסף מתפזר על השורש.

שלב 3 — הרכיבו טופס קטן

<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 לוקח את ה label כמאפיין משלו ולא כרכיב תווית מקונן — העבירו אותה פעם אחת, על Field, ו TextInputהתואם ב- label מספק את השם הנגיש. TextInput's value הוא $bindable מאפיין rune, ולכן bind:value נותן לכם קשירה דו-כיוונית מיד.

אומת ב-2026-08-29: הקטע המדויק הזה הועבר הידור דרך svelte/server ונבדק עבור <label for> אחד, מקושר נכון — טיוטה מוקדמת קיננה Label בתוך Fieldנפרד, מה שהציג שתי תוויות (אחת ריקה) משום ש- Field כבר מציג תווית משלו מתוך label מאפיין. ה- נתיב טופס יצירת הקשר המורכב הוא אותה תבנית, שנבדקה בבדיקות e2e ו-axe אמיתיות.

בדקו את העבודה שלכם: הריצו את האפליקציה והטופס נראה פשוט — בדיוק כמתוכנן: העיצוב עוד לפנינו. לחצו על Tab: המיקוד עובר בכל פקד, התווית מוכרזת והשליחה עובדת. ההתנהגות מוכנה; המראה שלכם והוא הבא בתור.

שלב 4 — עצבו אותו

כל מה שלמעלה מוצג כמבנה טהור, מוכן לעיצוב שלכם. עצבו את ווי המחלקה — .button, .text-input, .label, .field — בגיליון הסגנון הגלובלי שלכם, או קשרו ערכת נושא מוכנה ב- app.html:

<link rel="stylesheet" href="/themes/dark.css" />

התאמות לכל מופע עוברות דרך class המאפיין, שמצורף לוו הבסיס: <Button class="wide"> מציג class="button wide".

שלב 5 — ראו הכול עובד

אפליקציית הדוגמה SvelteKit היא אותו קטלוג מעוצב במלואו, עם הדגמות חיות, בדיקות e2e של Playwright וקו בסיס נגישות של 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

השלבים הבאים

שאלות בדרך? עמוד העזרה מלא בתשובות — ואם שלב יכול להיות ברור יותר, ספרו לנו ונשמח לשפר את המדריך.