@ark-ui/react/tags-input + Tailwind CSS v4
Ark Tags Input
Thành phần Tags Input được xây dựng trên nền tảng máy trạng thái Ark UI (Zag.js engine) và tạo kiểu với Tailwind CSS v4. Hỗ trợ 4 kích thước (xs, sm, md, lg) đồng bộ với input và button, 3 biến thể giao diện, clearable, delimiter, validation, max tags, max length, blur/paste behavior, sanitize value, controlled/uncontrolled, programmatic control và cả Convenience API lẫn Compound Component API.
1. Cơ bản (Basic)
Tags Input đơn giản với giá trị mặc định. Nhấn Enter để thêm tag mới, Backspace để xóa tag cuối.
React
Vue
2. Kích thước (Sizes)
4 kích thước đồng bộ với hệ thống control-size: xs, sm, md (mặc định), lg.
Size: xs
React
Vue
Size: sm
React
Vue
Size: md
React
Vue
Size: lg
React
Vue
3. Biến thể (Variants)
3 biến thể giao diện: default (viền + shadow), filled (nền xám), subtle (viền nhạt).
Variant: default
React
Vue
Variant: filled
React
Vue
Variant: subtle
React
Vue
4. Nút xóa tất cả (Clearable)
Hiển thị nút × để xóa toàn bộ tags cùng lúc.
React
Vue
Angular
5. Label, Helper & Error
Kết hợp label, helperText và errorText để hướng dẫn người dùng và hiển thị trạng thái lỗi.
SEO
Marketing
Nhấn Enter hoặc phím phẩy để thêm thẻ mới.
Lỗi
Cần ít nhất 2 thẻ.
6. Controlled
Quản lý giá trị tags từ bên ngoài bằng React state với value + onValueChange.
TypeScript
Rust
State:
["TypeScript","Rust"]7. Controlled Input Value
Kiểm soát giá trị ô nhập liệu riêng biệt với inputValue + onInputValueChange. Hữu ích cho việc đặt sẵn hoặc xóa input theo chương trình.
Input: ""
Vue
Solid
8. Điều khiển lập trình (RootProvider + useTagsInput)
Sử dụng hook useTagsInput() kết hợp RootProvider để gọi trực tiếp addValue(), setValue(), clearValue() từ bên ngoài.
State:
[]9. Giới hạn số tag (Max Tags)
Sử dụng prop max để giới hạn số lượng tag tối đa. Với allowOverflow, cho phép vượt quá nhưng đánh dấu data-invalid.
React
Vue
Khi đạt 3, không thể thêm tag mới.
React
Vue
Cho phép vượt quá 3, root nhận data-invalid.
10. Ký tự phân cách tùy chỉnh (Custom Delimiter)
Dùng prop delimiter với RegExp để chỉ định nhiều ký tự phân cách. Mặc định chỉ Enter tạo tag.
React
Gõ từ khóa rồi nhấn dấu phẩy (,), chấm phẩy (;) hoặc dấu cách để thêm tag.
11. Giới hạn độ dài tag (Max Length)
Dùng prop maxLength để giới hạn số ký tự tối đa cho mỗi tag. Input sẽ không cho phép gõ thêm khi đạt giới hạn.
React
Không thể gõ quá 10 ký tự cho mỗi tag.
12. Disabled
Trạng thái disabled không cho thêm, xóa hoặc chỉnh sửa tag.
React
Solid
Vue
13. Read-only
Trạng thái read-only cho phép xem tag nhưng không thể thêm, xóa hoặc chỉnh sửa.
React
Solid
Vue
14. Invalid
Đánh dấu trạng thái invalid cho mục đích validation form. Viền và ring chuyển sang màu danger.
React
Vui lòng thêm ít nhất 2 tag.
15. Validation tùy chỉnh
Dùng prop validate để kiểm tra trước khi thêm tag. Hữu ích cho việc ngăn trùng lặp hoặc kiểm tra định dạng.
React
Ít nhất 3 ký tự, chỉ chữ cái/số/gạch ngang, không trùng lặp.
16. Hành vi khi blur (Blur Behavior)
Cấu hình hành vi khi rời khỏi input: "add" tự thêm tag, "clear" xóa nội dung input.
React
Nhập giá trị rồi click ra ngoài sẽ tự thêm tag.
Vue
Nhập giá trị rồi click ra ngoài sẽ xóa input.
17. Paste hàng loạt (Paste Behavior)
Dùng addOnPaste kết hợp delimiter để tự tách và thêm nhiều tag khi dán (paste) chuỗi vào input.
React
Dán chuỗi "Vue,Solid,Svelte" sẽ tự tách thành 3 tag.
18. Tắt chỉnh sửa tag (Disable Editing)
Mặc định tag có thể chỉnh sửa bằng double-click hoặc Enter. Với editable={false}, tính năng này bị vô hiệu.
React
Vue
Angular
Mặc định, double-click hoặc Enter sẽ mở chỉnh sửa tag. Với editable={false}, chức năng này bị tắt.
19. Chuẩn hóa giá trị (Sanitize Value)
Dùng sanitizeValue để xử lý giá trị trước khi thêm: trim khoảng trắng, chuyển thành chữ thường, loại bỏ ký tự đặc biệt.
react
Mỗi tag được tự động trim khoảng trắng và chuyển thành chữ thường trước khi thêm.
20. Compound Component API
Sử dụng các sub-component ArkTagsInput.Root, Control, Item, ItemPreview, ItemText, ItemDeleteTrigger, Input, ClearTrigger, HiddenInput để tùy chỉnh chi tiết.
Compound
API