Repository navigation
Component Guidelines vi
English: Component-Guidelines.
Luật đầy đủ và bắt buộc nằm ở Design.md. Trang này là
lối tắt khi bạn bắt tay vào làm.
- Mở / nhận một issue (
confirmed, hoặc ý tưởng đã thống nhất ở Discussions Ideas). -
src/components/ui/<Name>/<Name>.tsx— component dạng hàm có tên, nhậnrefnhư một prop (khôngforwardRef, khôngdisplayName),classNamecuối cùng trongcn(), JSDoc tiếng Việt. - Thêm
export * from "./<Name>/<Name>";vào đúng nhóm trongsrc/components/ui/index.ts. - Trang docs: thêm
ComponentDocvào một filesrc/docs/registry/*.tsx—slug,name,category,leadlà chuỗi literal;codecủa ví dụ phải chạy được khi chép ra (dùngsetupcho dữ liệu dùng chung). - Mô tả tiếng Anh:
<slug>: { lead: "…" }trongsrc/docs/i18n/en/components.ts(test bắt buộc). - Test:
<Name>.test.tsxcạnh component (hành vi, bàn phím, ARIA). Thêm case SSR vàosrc/test/ssrCases.tsxnếu có state phụ thuộc môi trường. -
npx changeset→ chọnminor(component mới) và viết một câu cho người dùng (tiếng Anh). - Chạy checklist ở Testing and Quality + axe cho trang của bạn:
npx playwright test e2e/a11y.spec.ts --project=a11y --grep "<slug>".
| Bước | Làm gì | File |
|---|---|---|
| 1 | Nhánh feat/quote-autocomplete từ next (tính năng mới → next) |
— |
| 2 | Component, tái dùng thứ có sẵn: SearchBox, listboxOptionClass, popoverSurfaceClass, normalizeSearchText, useSpinDelay
|
src/components/ui/Quote/, Autocomplete/
|
| 3 | Export vào đúng nhóm của barrel | src/components/ui/index.ts |
| 4 | Trang docs, code cắt bằng #region
|
src/docs/registry/content-search.tsx |
| 5 | Mô tả tiếng Anh cho 2 slug | src/docs/i18n/en/components.ts |
| 6 | Test: khớp không dấu, ↓/Enter/Esc, ARIA combobox, ngữ nghĩa <figure>
|
Autocomplete.test.tsx |
| 7 |
check:examples, check:props, axe theo slug → sửa vùng cuộn không focus được mà axe báo |
— |
| 8 | 2 changeset minor (mỗi component một file); sửa ví dụ SearchBox chỉ là docs → không cần changeset |
.changeset/*.md |
| 9 | PR vào next; maintainer phát hành 0.7.0-next.N khi muốn cho người dùng thử |
— |
Bài học rút ra: Radix Popover tự bắt Esc ở cấp document trước ô nhập — đóng popover qua onOpenChange, đừng chỉ nghe
onKeyDown; file có thể dùng CRLF — script sửa hàng loạt phải chuẩn hoá xuống dòng.
| Sai | Đúng |
|---|---|
bg-[#c2347a], p-[12px], duration-[200ms]
|
bg-brand-background, p-3, duration-normal
|
ml-2, left-0, text-left
|
ms-2, inset-s-0, text-start
|
start-4, data-[disabled]:, p-M
|
inset-s-4, data-disabled:, p-3 (npm run lint:classes -- --fix) |
outline-none không thay thế |
giữ focus ring focus-visible:outline-stroke-focus
|
| Icon chỉ hướng không lật | rtl:-scale-x-100 |
Đọc Date.now() / window / matchMedia khi render |
effect, hoặc useSyncExternalStore + server snapshot |
useLayoutEffect thẳng |
useIsomorphicLayoutEffect (_internal/) |
| Tự viết popup / menu | Radix primitive + usePortalThemeProps()
|
| Nút chỉ có icon không tên |
aria-label tiếng Việt |
| Đổi tên prop ngay | thêm prop mới + warnDeprecated(), xoá ở major — xem Phiên bản
|
Component vượt ngoài Fluent 2 (AI kit, Chart, Trace, DataGrid…) nằm trong nhóm Yugen Labs, có luật riêng ở Design.md §7.1 (ví dụ Chart: màu phân loại thứ tự cố định, một trục Y, luôn có bảng dữ liệu tương đương).
Yugen UI © trandat1114 · MIT · Inspired by Microsoft Fluent 2, not a Microsoft product · Edit the wiki through the wiki/ folder · Lấy cảm hứng từ Microsoft Fluent 2, không phải sản phẩm của Microsoft · Sửa wiki qua thư mục wiki/
Use
Develop
Project
Tiếng Việt
- Trang chủ
- Bắt đầu
- Theme & token
- Câu hỏi thường gặp
- Kiến trúc
- Viết component
- Kiểm thử & CI
- Viết nội dung
- Nhánh & kênh phát hành
- Phát hành
- Cộng đồng & phân loại
- Sổ tay vận hành
Links