Ark UI Primitives@ark-ui/react/accordionTailwind CSS v4Zag.js Engine
Ark Accordion
Thành phần hiển thị danh sách các mục có thể thu gọn / mở rộng linh hoạt, xây dựng trên nền tảng State Machine Zag.js. Hỗ trợ animation chiều cao 100% bằng CSS Keyframes mượt mà, điều hướng bàn phím đầy đủ theo chuẩn WAI-ARIA và hỗ trợ cả Shorthand API lẫn Compound Components.
Chuẩn WAI-ARIA Accordion Pattern
4 Kích cỡ chuẩn (xs, sm, md, lg)
6 Kiểu dáng giao diện (Variants)
Single & Multiple Expansion
1. Phương thức sử dụng: Shorthand API vs Compound Components
Hai phong cách APIArkAccordion hỗ trợ cả cú pháp 1 dòng tiện ích (truyền mảng items) lẫn cấu trúc Compound Components để tùy biến sâu.
Cách 1: Shorthand APINhanh & Tiện ích
Truyền mảng items trực tiếp. Mỗi item hỗ trợ title, description, icon, badge và content.
ChillCMS tích hợp kiến trúc Server-Side Rendering thông qua React Router v7, phân tách bundle thông minh và asset caching đa tầng với Redis và CDN Cloudflare.
Mô hình CASL Ability với chính sách typed ownership code-owned tại app/config/permission/ownership.ts cho phép bảo vệ chặt chẽ các aggregate mutations.
Background jobs được quản lý độc lập với worker pool, tự động phục hồi khi gặp sự cố, kèm giao diện giám sát Bull-Board bảo vệ an toàn.
Code mẫu Shorthand
<ArkAccordion
variant="card"
defaultValue={['item-1']}
items={items}
/>Cách 2: Compound ComponentsTùy biến tối đa
Dùng ArkAccordion.Root, .Item, .ItemTrigger, .ItemContent để làm chủ layout 100%.
Sử dụng Prisma 7 adapter-pg với connection pool chuẩn Enterprise, kết hợp migration bất biến tự động version hóa.
Hỗ trợ các scripts tiện ích như
pnpm db:migrate, pnpm tokens:check.Code mẫu Compound
<ArkAccordion.Root variant="separated">
<ArkAccordion.Item value="1">
<ArkAccordion.Trigger icon={<Icon />}>
Tiêu đề
</ArkAccordion.Trigger>
<ArkAccordion.Content>
Nội dung
</ArkAccordion.Content>
</ArkAccordion.Item>
</ArkAccordion.Root>2. Ma trận kiểu dáng (Variants Matrix)
6 Variants6 kiểu dáng giao diện phong phú, đáp ứng từ các trang FAQ, Card cài đặt đến danh sách tác vụ độc lập.
Separated: Mỗi mục là một chiếc thẻ độc lập, viền đổi màu highlight khi mở.
React Router v7 kết hợp loader/action chạy độc quyền trên server, đảm bảo không rò rỉ bí mật API key và giảm thiểu tối đa bundle size tải về máy khách.
Toàn bộ màu sắc, kích thước control height và spacing scale được định nghĩa tập trung, tương thích trọn vẹn cả Dark Mode và Light Mode.
Worker tiến trình nền độc lập đảm bảo ứng dụng chính không bị nghẽn CPU khi xử lý các tác vụ nặng như nén ảnh hay gửi email hàng loạt.
3. Bốn kích thước tiêu chuẩn (Control Sizes)
xs | sm | md | lgĐồng bộ chính xác với ControlSize của ChillCMS (Button, Input, Switch, Badge), đảm bảo căn chỉnh thẳng hàng hoàn hảo.
Khoảng cách padding, độ cao tối thiểu của dòng tiêu đề (min-height), kích thước chữ và biểu tượng chevron indicator đều tự động co giãn theo giá trị md.
Nội dung mục thứ hai kiểm tra khoảng cách chia dòng khi đóng/mở.
4. Chế độ mở: Đơn lẻ (Single) vs Đồng thời (Multiple)
multiple & collapsibleCấu hình cho phép chỉ mở một mục duy nhất (kiểu FAQ truyền thống) hoặc mở nhiều mục cùng lúc tùy nhu cầu trải nghiệm.
collapsible: true)Có, ChillCMS hỗ trợ kiến trúc phân tách dữ liệu đa người dùng hoặc đa tổ chức linh hoạt thông qua các bộ lọc query toàn cục và CASL Ability scopes.
Hỗ trợ tiêu chuẩn TOTP (Google Authenticator, Microsoft Authenticator) với mã QR kèm mã dự phòng phục hồi tài khoản được mã hóa bằng AES-256-GCM.
Dự án sử dụng lệnh non-interactive với migration name tường minh:
pnpm db:migrate --name migration_name, đảm bảo không bị treo tiến trình hoặc giữ advisory lock database.5. Điều khiển trạng thái theo ý muốn (Controlled State)
Controlled APIKiểm soát danh sách các mục mở/đóng hoàn toàn bằng React State thông qua prop value và onValueChange.
Active values:["tab-1"]
Các mã API secret key được mã hóa bằng thuật toán hashing chuẩn và chỉ hiển thị một lần duy nhất lúc tạo mới.
Hỗ trợ đồng bộ đa vùng (Multi-region S3, MinIO hoặc Local File System) với cơ chế presigned URL tải tệp nhanh chóng.
Backup snapshot toàn diện cơ sở dữ liệu hàng ngày vào lúc 02:00 AM UTC, lưu trữ dự phòng 30 ngày an toàn.
6. Các ca sử dụng thực tế (Real-World Use Cases)
Rich UIMô hình kết hợp linh hoạt giữa Accordion và các components khác như Switch, Form Fields, Timeline và Badges.
Bảng cài đặt hệ thống (Settings Accordion)
Gửi thông báo đơn hàng mới
Tự động báo ngay khi có giao dịch
Cảnh báo đăng nhập lạ
Bảo vệ tài khoản quản trị
Đã kết nối webhook cổng thanh toán PayOS và Stripe Checkout an toàn.
Lịch trình đơn hàng (Order History)
Đơn hàng #ORD-88231 đã được hệ thống ghi nhận lúc 10:30 AM ngày 18/09/2026.
Giao dịch thanh toán 1,450,000 VND qua mã QR ngân hàng hợp lệ.
Bưu kiện đang trên xe vận chuyển tới kho trung chuyển TP. Hồ Chí Minh. Dự kiến giao trong ngày mai.
7. Tùy biến chỉ báo đóng/mở (Custom Indicators)
Custom SlotsCó thể thay thế biểu tượng mũi tên Chevron mặc định bằng dấu Cộng/Trừ (+ / -), biểu tượng mũi tên ngang hoặc ẩn chỉ báo.
Chỉ báo Dấu Cộng / Trừ (+ / -)Anatomy
Sử dụng
ArkAccordion.ItemContext để nhận biết trạng thái expanded và render icon tùy ý mà không cần rotate mặc định.Chỉ báo có thể tùy biến độc lập từng item hoặc định nghĩa xuyên suốt cả danh sách.
Chỉ báo Mũi tên ngang (Arrow Right)Rotate 90deg
Tận dụng data attribute
group-data-[state=open] của trigger để tạo bất kỳ hiệu ứng chuyển đổi nào mong muốn.Linh hoạt hoàn toàn từ Tailwind CSS v4 class utilities.