開始使用 Lily

揀一個框架,複製單一倉庫,打開佢嘅無頭函式庫或範例應用程式,開始組合你自己嘅頁面。想要有人帶路?由 教學.

安裝

Lily 住喺一個 Git 單一倉庫入面,每個框架嘅無頭函式庫、輔助套件同範例應用程式都有一個目錄。最快試用嘅方法係複製單一倉庫並打開你技術棧嘅無頭函式庫:

git clone https://github.com/LilyDesignSystem/lily-design-system
cd lily-design-system/lily-design-system-react-headless
pnpm install

同一模式適用於其他框架:

  • @lilydesignsystem/html-headless — 唔使安裝;複製 .html 檔案
  • @lilydesignsystem/svelte-headless — pnpm install
  • @lilydesignsystem/react-headless — pnpm install
  • @lilydesignsystem/vue-headless — pnpm install
  • @lilydesignsystem/angular-headless — pnpm install
  • @lilydesignsystem/nunjucks-headless — pnpm install
  • lily-design-system-blazor-headless — dotnet build

無頭函式庫係設計成可以複製或 vendor 嘅 — 將原始碼當作真相來源,複製你需要嘅部分。 偏好輔助工具 另外亦以可安裝套件形式提供,附帶建置同發佈流程(JS 框架用 npm,Blazor 用 NuGet)。

使用無頭元件

無頭元件提供語義化 HTML、ARIA 同屬性 — 但冇 CSS。以下係各框架嘅 Button:

HTML

<button class="button" type="button" aria-label="Save">
  Save
</button>

Svelte

<script>
  import Button from "lily-design-system-svelte-headless/components/Button/Button.svelte";
</script>

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

React

import Button from "lily-design-system-react-headless/components/Button";

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

Vue

<script setup>
  import Button from "lily-design-system-vue-headless/components/Button.vue";
</script>

<Button @click="save">Save</Button>

Angular

import { Button } from "@lilydesignsystem/angular-headless";

@Component({
  imports: [Button],
  template: `<lily-button (click)="save()">Save</lily-button>`,
})

Blazor

<Button OnClick="Save">Save</Button>

Nunjucks

{% from "components/button/macro.njk" import button %}

{{ button({ text: "Save", type: "button" }) }}

使用有樣式嘅範例

範例應用程式包括 CSS、路由同完整示範頁面。最快嘅實驗方法係啟動 SvelteKit、Next、Nuxt、Analog 或 Eleventy 範例應用程式,並喺以下位置睇示範 /components.

git clone https://github.com/LilyDesignSystem/lily-design-system
cd lily-design-system/lily-design-system-svelte-sveltekit-examples
pnpm install
pnpm run dev

然後打開 http://localhost:5173 並瀏覽 /components.

樣式同設計令牌

每個元件喺佢嘅根元素上渲染一個 kebab-case 類別。例如, <Button> 渲染成 <button class="button">。隨你鍾意加樣式:

.button {
  background: var(--my-primary);
  color: #fff;
  padding: 0.75rem 1.5rem;
  border-radius: 0.5rem;
}
.button:hover { background: var(--my-primary-hover); }

預設嘅 Lily 配色(範例應用程式使用):

  • 主色: #2563eb
  • 危險: #dc2626
  • 警告: #f59e0b
  • 成功: #16a34a
  • 頁面背景: #f9fafb
  • 卡片背景: #ffffff

呢啲係建議,唔係要求。用你自己嘅品牌配色取代佢哋,Lily 會開心咁配合。

現成主題

唔想由零開始寫 CSS?Lily 附帶 57 個獨立參考主題 喺 themes/ 目錄入面。每個都係針對 Lily 類別掛鉤嘅一份樣式表 — 連結佢就有樣式:

<link rel="stylesheet" href="/assets/themes/united-kingdom-government-digital-service.css" />

呢組主題涵蓋:

  • 公共部門 — NHS England、NHS Scotland 同 NHS Wales(各有面向病人同面向從業員嘅版本)、GOV.UK GDS,同 U.S. Web Design System。
  • 受供應商啟發 — Adobe Spectrum、Mozilla Protocol。
  • 通用 — light、dark、nord、dracula、wireframe,仲有三十幾個。

主題選擇器使用 :where(...),所以你自己嘅 CSS 喺特異性上永遠勝出。將佢哋同下面嘅 theme-picker 輔助工具配對作執行時切換,或者跟隨 主題教學.

偏好輔助工具

每個框架有八個細細個嘅選擇器,各自喺佢自己嘅 lily-design-system-{framework}-{package} 套件入面(同埋 picker-bar 將佢哋組裝埋一齊)。每個都係打開彈出視窗嘅無頭圖示按鈕 — 清單方塊、連結清單、搜尋表單,或者(date-time-picker)嘅日期選擇器對話框 — 唔係原生嘅 <select>;SSR 安全;而且冇附帶 CSS:

  • theme-picker — 透過替換受管理嘅 <link>喺執行時載入主題樣式表,喺文件上設定 data-theme ,並可選擇性咁持久化到 localStorage.
  • locale-picker — 設定 lang 同 dir (附自動 RTL 偵測)等你嘅 i18n 函式庫可以跟隨;佢本身唔做翻譯。
  • text-size-picker — 設定 data-text-size 喺文件上;你嘅 CSS 將每個值對應到字體大細。
  • motion-picker — 設定 data-motion 喺文件上,由訪客嘅減少動態設定開始;你嘅 CSS 同腳本決定壓抑啲乜。
  • search-picker — 打開搜尋欄位嘅圖示按鈕;提交會導航去搜尋頁面。擁有一個動作,而唔係偏好。
  • link-picker — 打開選單嘅主頁圖示,選單入面係你應用程式定義嘅頁面連結(主頁、關於我哋、聯絡我哋、私隱政策⋯⋯)。擁有一個動作,而唔係偏好。
  • share-picker — 打開原生分享表或者消費者提供嘅目的地清單,另外加複製網址。擁有一個動作,而唔係偏好:唔套用任何嘢,唔持久化任何嘢。
  • date-time-picker — 文字欄位加 APG 日期選擇器對話框,用於日期、時間,或者兩者。擁有一個表單值,而唔係偏好:ISO 字串來回往返去 <input type="date">.
git clone https://github.com/LilyDesignSystem/lily-design-system
cd lily-design-system/lily-design-system-svelte-theme-picker

Svelte 目錄係標準參考;React、Vue、Angular、HTML、Nunjucks、Web Components 同 Blazor 移植版逐個合約同佢對應。參見 輔助工具教學.

無障礙

元件嘅目標係 WCAG 2.2 AAA。佢哋跟隨以下模式:

  • 語義化 HTML 元素多過通用嘅 <div>s.
  • <label for="id"> 將標籤連結到輸入欄位。
  • aria-labelledby / aria-describedby 用於交叉引用。
  • aria-invalid + aria-errormessage 用於錯誤狀態。
  • role="alert" 同 aria-live 用於動態內容。
  • aria-pressed, aria-expanded, aria-current 用於狀態。
  • Roving tabindex 用於網格。

焦點指示器特意由使用者提供 — Lily 從來唔會畫一個同你設計衝突嘅預設焦點環。範例應用程式喺佢哋嘅路由上保持乾淨嘅 axe-core 基線。

國際化

每個標籤、佔位文字、錯誤訊息同按鈕文字都係屬性。冇寫死嘅字串。放入你揀嘅翻譯框架 — Paraglide、i18next、vue-i18n、react-intl、.resx 檔案,咩都得。

對於日期、數字同貨幣,元件接受預先格式化嘅字串:你用 Intl.DateTimeFormat / Intl.NumberFormat / 你偏好嘅函式庫格式化,然後傳入結果。

輔助工具 locale-picker 透過設定 lang 同 dir 喺文件根部,向你嘅 i18n 函式庫發出所選地區設定嘅訊號。

測試

每個框架子項目都用佢自己慣用嘅技術棧附帶自己嘅測試:

  • HTML:WebDriverIO 運行真實瀏覽器。
  • Svelte:Vitest + @testing-library/svelte.
  • React:Vitest + @testing-library/react.
  • Vue:Vitest + @testing-library/vue.
  • Angular:Vitest + TestBed(透過 Analog Vite 外掛)。
  • Nunjucks:Vitest 配合渲染輔助函式。
  • Blazor:bUnit。

測試使用 Vitest 內置嘅匹配器 — 從不使用 jest-dom 匹配器。咁樣令測試套件保持可移植。範例應用程式加入咗 Playwright 端對端套件、axe-core 無障礙基線,同響應式視口掃描。

AI 代理

呢個網站發佈 llms.txt 同 llms.json 喺佢嘅根部 — 一份策劃好嘅最重要頁面地圖,供任何遵循 llms.txt 慣例.

標準單一倉庫另外附帶兩個 Claude Skills: lily-design-system-skill,一個涵蓋 Lily 概念、術語同組合模式嘅通用技能,供任何用呢套系統構建嘅人使用,以及 lily-design-system-maintainer-skill,一個涵蓋單一倉庫必要檔案佈局同工具嘅技術技能,供任何喺度工作嘅人使用。兩者都喺 標準單一倉庫.

疑難排解

元件有渲染但睇落冇樣式

呢個就係無頭按預期運作 — 元件唔會附帶 CSS。你可以針對元件嘅 kebab-case 類別寫 CSS(每個 目錄頁面都有顯示),或者連結其中一個 57 個現成主題.

我嘅 CSS 好似冇套用喺主題之上

佢應該會 — 主題選擇器包喺 :where(...)入面,特異性係零。如果規則仍然輸咗,檢查你嘅樣式表係咪喺主題嘅樣式表之後載入 <link> 以及選擇器係咪真係配對到元件嘅類別掛鉤。

pnpm install 因 peer 或版本錯誤而失敗

用現時嘅 pnpm(v10+)同 Node 22+。每個子項目喺佢自己嘅 package.json入面釘住框架版本;如果你嘅全域工具鏈較舊, pnpm env use --global lts 係最快嘅解決方法。

螢幕閱讀器讀出控制項嘅名稱錯誤

檢查元件必要嘅 label 屬性 — 冇可見文字嘅元件需要一個,而且經 rest-props 傳入嘅使用者提供嘅 aria-label / aria-labelledby 特意優先於內置接線。每個目錄頁面都記錄元件嘅 ARIA 合約。

theme-picker 輔助工具冇切換樣式表

確認 themesUrl 指向瀏覽器可以擷取嘅目錄(將 themes/ 檔案當作靜態資產提供),同埋你 themes 屬性入面嘅主題 slug 同檔案名稱配對。輔助工具會替換一個受管理 href 嘅 <link data-lily-theme-picker> — 喺 devtools 檢查,睇吓請求緊嘅網址。

有其他嘢壞咗

喺以下位置開一個附最小重現嘅 issue github.com/LilyDesignSystem/lily-design-system — 或者睇 社群同支援.

貢獻

Lily 仲年輕,歡迎協作。而家最有用嘅貢獻係:

  • 新元件(尤其係來自成熟設計系統嘅模式)。
  • 新主題 — 每個都係一份獨立樣式表,範圍清晰嘅第一個 PR。
  • 更好嘅範例樣式 — 展示有咩可能。
  • 範例應用程式字串嘅翻譯。
  • 附最小重現嘅錯誤報告。
  • 用螢幕閱讀器同輔助科技進行嘅無障礙審核。

喺以下位置開 issue 同 PR github.com/LilyDesignSystem/lily-design-system.

社群同支援

常見問題

點解要無頭而唔係有樣式?

預先加咗樣式嘅元件好方便 — 直到佢哋同你嘅品牌唔配。無頭元件一開始要多做少少,但畀你完全控制視覺設計。範例應用程式同 57 個主題展示咗加樣式嘅方法;你可以採用或者完全取代。更詳細嘅論點喺 點解揀 Lily.

點解有咁多元件?

Lily 旨在覆蓋大部分應用程式需要嘅模式,而唔使你由零開始搭建 — 包括國民識別碼輸入同編輯式捲動敘事呢類冷門嘢。目錄汲取自十幾個成熟設計系統,再加原創工作 — 參見 關於.

我可以用 Lily 配 Tailwind 嗎?

可以。每個元件公開一個 kebab-case 根類別,加上使用者提供嘅 className / class。喺上面隨意疊加 Tailwind 工具類。

我可以用 Lily 配 DaisyUI 呢類語義化 CSS 框架嗎?

可以。根元素上嘅 kebab-case 類別名可以當作語義化 CSS 掛鉤。將 Lily 同語義化框架配對,你就會有預先加咗樣式、但仍然尊重 ARIA 同 i18n 嘅元件。

有 npm 套件嗎?

輔助工具 偏好輔助工具 以套件形式發佈,附帶 npm/NuGet 發佈流程。無頭元件函式庫係設計成可以複製或 vendor 嘅 — 原始碼就係交付物,等你可以閱讀、修剪同擁有你發佈嘅準確內容。無頭函式庫嘅註冊表發佈仍然喺路線圖上。

點解要多重授權?

唔同項目有唔同嘅授權需要。BSD 同 MIT 係寬鬆嘅,Apache-2.0 有專利授權,而 GPL 選項支持 copyleft。揀啱你情況嘅。

我點樣回報錯誤或者要求功能?

喺 GitHub 倉庫開一個 issue,或者電郵至 joel@joelparkerhenderson.com.