Phiên bản & chính sách thay đổi
Yugen UI theo Semantic Versioning. Thay đổi phá vỡ luôn được báo trước bằng cảnh báo deprecate, ghi trong CHANGELOG và trang Có gì mới — để bạn nâng cấp có kế hoạch, không bất ngờ.
Semantic Versioning
MAJOR.MINOR.PATCH — đọc số phiên bản là biết mức rủi ro khi nâng cấp.
| Phần tăng | Ý nghĩa | Ví dụ |
|---|---|---|
| PATCH 1.2.3 → 1.2.4 | Sửa lỗi, cải thiện a11y / hiệu năng; không đổi API. | Sửa focus ring bị cắt trong Dialog |
| MINOR 1.2.3 → 1.3.0 | Thêm component, prop, token, biến thể; đánh dấu deprecate. | Thêm prop presets cho DateRangePicker |
| MAJOR 1.2.3 → 2.0.0 | Xoá API đã deprecate hoặc thay đổi phá vỡ khác. | Bỏ appearance="transparent" |
Quy tắc cho từng số
Phần lớn thay đổi ra ở bản patch. Minor và major chỉ tăng khi có lý do.
| Số | Tăng khi | Không tăng cho | Nhịp phát hành |
|---|---|---|---|
| PATCH x.y.Z | Sửa lỗi (kể cả lỗi do bản trước gây ra), a11y, hiệu năng, kiểu TypeScript sai, tinh chỉnh giao diện nhỏ. | API mới, thay đổi phá vỡ. | Không giới hạn. Các sửa lỗi gần nhau ra chung một bản. |
| MINOR x.Y.0 | Có ít nhất một API mới: component, prop, giá trị prop, token, export, template. Đánh dấu deprecate. Trước 1.0: cả thay đổi phá vỡ. | Chỉ sửa lỗi hoặc tinh chỉnh. | Mỗi milestone một bản, cách bản minor trước ít nhất 14 ngày. |
| MAJOR X.0.0 | Thay đổi phá vỡ, từ 1.0. Mọi API đã deprecate được xoá cùng lúc, kèm hướng dẫn chuyển đổi. | Tính năng không phá vỡ. | Cách bản major trước ít nhất 180 ngày. Trước 1.0 số này là 0. |
- Không nhảy số: sau 0.12.0 là 0.12.1 hoặc 0.13.0.
- Chỉ đổi trang docs, test hoặc CI thì không ra bản mới. Docs được deploy riêng.
mainvàrelease/X.Ychỉ ra bản patch. Tính năng vàonextvà phát hành theo milestone.- Bản thử nghiệm (
-next.N, canary) không tính. - @yugen-ui/cli theo cùng quy tắc với số riêng. create-yugen-ui lên minor cùng @yugen-ui/cli.
Áp dụng cho các bản phát hành sau 0.12.0.
Thế nào là thay đổi phá vỡ
Mọi thứ khiến mã đang chạy đúng phải sửa mới chạy tiếp, hoặc đổi giao diện ngoài ý muốn.
| Phá vỡ (chỉ ở major) | Không phá vỡ (minor / patch) |
|---|---|
| Xoá / đổi tên component, prop, giá trị prop, export, hook | Thêm component, prop tuỳ chọn, giá trị mới cho union |
| Đổi tên hoặc xoá token / utility (text-foreground-2, p-M…) | Thêm token, utility, brand, gradient |
| Đổi giá trị mặc định làm thay đổi hành vi (vd. modal mặc định) | Tinh chỉnh màu / bóng nhỏ trong ngưỡng tương phản đã cam kết |
| Đổi cấu trúc DOM mà người dùng nhắm tới qua slot / data-* | Đổi DOM nội bộ không được ghi trong docs |
| Nâng yêu cầu tối thiểu (React, Tailwind, trình duyệt) | Hỗ trợ thêm phiên bản mới (React 19…) |
Quy trình deprecate
Không có API nào biến mất mà không báo trước ít nhất một bản minor.
- Bản minor thêm thay thế và đánh dấu API cũ bằng JSDoc
@deprecated(gạch ngang trong editor) cùng cảnh báowarnDeprecated()— chỉ ở môi trường phát triển, mỗi API một lần, bị loại khỏi bản build production. - CHANGELOG và trang Có gì mới ghi mục “Thay đổi lớn” với cách chuyển đổi cụ thể.
- API cũ vẫn chạy đúng cho tới bản major tiếp theo (tối thiểu một bản minor sau khi deprecate).
- Bản major xoá API và giữ hướng dẫn chuyển đổi trong docs.
import { warnDeprecated } from "@/lib/deprecate";
/** @deprecated Dùng `appearance="subtle"`. Sẽ xoá ở v2.0.0. */
if (appearance === "transparent") {
warnDeprecated("Button.appearance.transparent", 'use appearance="subtle"', "2.0.0");
}Cảnh báo trong console trông như sau:
[yugen-ui] "Button.appearance.transparent" is deprecated and will be removed in v2.0.0:
use appearance="subtle". See https://trandat1114.github.io/Yugen-UI/concepts/versioningYugen Labs
Component thử nghiệm, nằm ngoài SemVer.
Component trong nhóm Yugen Labs còn đang hoàn thiện, và trang của chúng có ghi rõ. API có thể đổi ở một bản minor; CHANGELOG và trang Có gì mới ghi lại thay đổi. Component rời Labs khi đã có test, được một template dùng và API không cần đổi thêm. Từ đó nó theo các quy tắc ở trên.
Phạm vi hỗ trợ
| Hạng mục | Hỗ trợ | Ghi chú |
|---|---|---|
| React | 18 và 19 | CI chạy typecheck, unit test và build trên cả hai |
| Tailwind CSS | v4 | Không cần Tailwind nếu dùng styles.css biên dịch sẵn |
| TypeScript | 5.x, strict | Kiểu được kiểm tra với @types/react 19 |
| Next.js | App Router & Pages Router | Mọi file component có "use client" |
| Trình duyệt | Evergreen (Chrome, Edge, Firefox, Safari 2 bản gần nhất) | Xem trang Trình duyệt & nền tảng |
Nâng cấp an toàn
- Đọc trang Có gì mới từ phiên bản hiện tại tới bản mới, chú ý mục “Thay đổi lớn”.
- Chạy ứng dụng ở chế độ phát triển và xử lý mọi cảnh báo
[yugen-ui]trong console trước khi lên major. - Chép mã bằng @yugen-ui/cli hoặc shadcn CLI? Commit trước, chạy lại
add --overwriterồi xem diff của git.npx @yugen-ui/cli doctorbáo bảnyugen-uiđã cũ.
# Giữ trong một dòng minor khi cần ổn định tuyệt đối (giai đoạn 0.x)
npm install yugen-ui@~0.6.0
# Từ 1.0: nhận mọi bản minor / patch, không bao giờ tự lên major
npm install yugen-ui@^1.0.0