Giới thiệu

Comitor Design System là một gói npm, @comitor/ui, cùng site này — tài liệu tham chiếu cho việc mọi thứ trong gói trông ra sao, hoạt động thế nào và nên được dùng ra sao. Chính các sản phẩm của Comitor được dựng từ nó: Tasks, Chat, CRM, HR, bảng quản trị và site marketing.

Gói viết cho React 19 và Tailwind v4, chỉ ESM, kiểu chặt, và mặc định nói tiếng Anh — nên một app chẳng liên quan gì tới Comitor cũng cài và dùng nguyên như vậy được. Trang này giải thích gói được tổ chức ra sao và vài nguyên tắc mà mọi phần của nó tuân theo; hướng dẫn cài đặt đi từ một app trống tới component đầu tiên hiện lên màn hình.

Mới trong 2.1 và 3.0

tài liệu cho 3.17.3
  • 3.0.0 — mặc định tiếng Anh. Mọi component giờ hiện tiếng Anh, trừ khi một ComitorLocaleProvider nói khác; tiếng Việt là bảng chữ có sẵn, chọn một lần ở root. Đặt ngôn ngữ
  • 2.1.0 — mười tám component từ Dice UI, dựng lại trên primitive và token của chính gói, sửa luôn các lỗi của bản gốc trên đường chuyển sang:

Mọi thay đổi khác, kèm cách chuyển đổi cho từng thay đổi phá vỡ, có trong nhật ký thay đổi.

Gói có gì

Ba tầng, mỗi tầng chỉ dựng từ các tầng dưới nó, cộng với các quy tắc mà cả ba đứng trên, và những màn hình hoàn chỉnh cho thấy chúng chạy cùng nhau. Các mục của site này chia đúng theo cách đó.

Một gói, chín cửa

Gói được chia theo thứ mỗi phần cần cài, không theo chủ đề. Mọi thứ một app React thuần cần đều nằm sau entry chính, vốn không có peer tuỳ chọn nào; mỗi phần dựa vào thứ nặng hơn — Next, recharts, một engine bảng, một thư viện form, một client upload, một engine soạn thảo — có entry riêng, nên chỉ cài thứ mình import. Hướng dẫn cài đặt có bảng đầy đủ, cùng hai cái tên thật sự mang nghĩa khác nhau ở hai cửa khác nhau.

imports
// Tier 1 + Tier 2, the language provider, cn and the tokens — no optional peer
import { Button, DataTable, Kanban, ComitorLocaleProvider } from '@comitor/ui'

// Tier 3, the app frame — needs next, next-themes
import { AppShell, ThemeProvider } from '@comitor/ui/shell'

// Behind their own doors, one optional peer each
import { ComitorBarChart } from '@comitor/ui/chart'          // recharts
import { DataGrid } from '@comitor/ui/data-grid'             // @tanstack/react-table
import { Form, FormField } from '@comitor/ui/form'           // react-hook-form
import { ImageUploadField } from '@comitor/ui/uploader'      // @uppy/core, @uppy/xhr-upload
import { MarkdownEditor } from '@comitor/ui/editor'          // @tiptap/*, lowlight
import { ChatThread } from '@comitor/ui/chat'                // the editor's peers, nothing more

// Plain values for places with no Tailwind: canvas, PDF, email
import { semantic } from '@comitor/ui/tokens'

Nguyên tắc

Sáu quyết định mà mọi component tuân theo. Mỗi quyết định có mặt vì đã có lúc thiếu nó sinh ra một lỗi không gây tiếng động — các trang link bên dưới kể lại những chuyện đó.

Một nguồn chuẩn duy nhất

Gói là bản hiện thực; site này import gói đã phát hành và không chép thứ gì vào. Demo render được thì gói thật sự làm được điều đó — còn token thiếu thì sửa trong gói rồi phát hành, không bao giờ vá trong app.

Cài đặt →

Màu là một hợp đồng

Component không bao giờ gọi tên một màu thô. Fill đặc, chữ trên fill đó, và màu chữ dùng trên nền trang là ba token khác nhau — nhờ vậy cùng một component vẫn đúng ở theme sáng, theme tối và bảng tương phản cao.

Màu sắc →

Trợ năng ngay từ cấu tạo

Độ tương phản được đo, không ước bằng mắt; mọi điều khiển dùng được bằng bàn phím; mọi tên mà trình đọc màn hình đọc lên đều dịch được. Chỗ nào gói biết mình còn thiếu, trang của component đó nói rõ, kèm cách lách.

Trục hiển thị →

Tiếng Anh trước, tiếng Việt có sẵn

Từ 3.0.0 mọi chuỗi mặc định là tiếng Anh, và tiếng Việt chỉ cách một provider. Ngôn ngữ và vùng tách riêng: ngôn ngữ của người đọc không bao giờ quyết định tiền tệ hay quốc gia của một workspace.

Đặt ngôn ngữ →

Hợp với server

“use client” chỉ nằm trong những file cần nó, và mọi hằng số sống trong một module mà Server Component đọc được. Thứ không qua được ranh giới thì báo lỗi rõ ràng, chứ không lặng lẽ đến nơi thành undefined.

Server và client →

API ổn định

API đóng băng từ 1.0.0 và theo SemVer: thay đổi phá vỡ là một phiên bản major, và mỗi thay đổi phá vỡ đi kèm bước chuyển đổi mà app phải làm.

Nhật ký thay đổi →

Cách đọc site này

Các trang component cùng một khuôn: component dùng để làm gì, demo chạy thật, props, những gì nó chưa làm được, và những gì nó làm cho người dùng bàn phím và trình đọc màn hình — theo đúng thứ tự đó.

Xem trước, rồi tới Mã
Mỗi demo là component thật với state thật — gõ, kéo, chọn, và nó phản hồi. Tab Mã bên cạnh là chính demo đó dưới dạng mã nguồn, dán vào là dùng được.
Props, lấy từ kiểu
Bảng props viết theo khai báo kiểu đã phát hành của gói, và giá trị mặc định được đối chiếu với mã nguồn. Cố ý để chữ trơn: đọc thấy gì thì gõ đúng thế.
Vì sao, không chỉ là gì
Mã nguồn của gói ghi lại vì sao từng quyết định được đưa ra và đã đo những gì. Các trang chuyển tiếp điều đó — một tỉ lệ tương phản, lỗi mà một giá trị mặc định có mặt để ngăn — vì chính nó cho phép bất đồng với một mặc định mà vẫn an toàn.
Mỗi lần một phiên bản
Site mô tả đúng phiên bản ghi ở chân thanh bên, đọc từ gói đã cài lúc build. Hành vi cũ và mọi bước chuyển đổi nằm trong nhật ký thay đổi.

Bắt đầu từ đâu