Bỏ qua tới nội dung
Component / 064 / NEXOFRAME

HolderBar

Mẫu chuẩn

Thanh đầu cuộc trò chuyện nói ai đang phụ trách (nhân viên AI hay người), ở chế độ nào, và một nút để tiếp quản hoặc giao lại. Khi người giữ, nền chuyển sang tông brand nhẹ.

Composite tầng 2Dựng từ Avatar, Badge, Button2 holderCó trạng thái pending

Playground

LIVE PREVIEW
L

Linh đang phụ trách

Soạn nháp, bạn duyệt

Holder ai. Bấm nút để mô phỏng một lần commit.

import { HolderBar } from "@nexobox/ui";

<HolderBar
  holder="ai"
  title="Linh đang phụ trách"
  modeLine="Soạn nháp, bạn duyệt"
  initials="L"
  actionLabel="Tôi tiếp quản"
  pending={false}
  onAction={takeOverOrHandBack}
/>

Bài toán

Chủ shop phải luôn biết ai đang trả lời khách, và tiếp quản phải là một lần bấm ở ngay đó. Tông nền brand khi người giữ là tín hiệu êm và bền cho câu 'bạn đang chịu trách nhiệm'.

Khi nào sử dụng

Nên dùng

Đầu cuộc trò chuyện trong hộp thư, đầu trang chi tiết công việc, mọi nơi quyền giữ một việc có thể chuyển giữa AI và người.

Khi nào không dùng

Tránh dùng

Không dùng choDùng thay
Trạng thái chung của nhân viênBadge hoặc StatusDot trong hồ sơ nhân viên
Xác nhận trước khi giao lại có ghi chúPopover của host mở từ nút này
Cảnh báo xung đột tiếp quảnFormNotice ngay dưới thanh

Dựng từ

PrimitiveVai trong composite
AvatarChữ cái đại diện người giữ
BadgeTừ nói loại người giữ (Nhân viên AI, Người)
ButtonNút tiếp quản hoặc giao lại, có loading

Anatomy

#PhầnGhi chú
1Avatar + tiêu đềTiêu đề nói ai phụ trách; vùng aria-live polite nên đổi người giữ được đọc
2Dòng chế độVí dụ "Soạn nháp, bạn duyệt"
3BadgeẨn trên điện thoại hẹp để nhường chỗ
4Nút hành độngGhost khi AI giữ (tiếp quản), secondary khi người giữ (giao lại); độ rộng khoá giữa idle và pending
5Lớp tông brandLớp riêng, opacity 0 sang 1 trong duration-standard khi người giữ

Variants

VariantHiển thị
holder="ai"Nền trung tính, nút ghost Tôi tiếp quản
holder="human"Tông brand nhẹ, nút secondary Giao lại cho Linh

States

StateHành viTrợ năng
DefaultTheo holderVùng section có aria-label; tiêu đề aria-live="polite"
PendingNút loading, nhãn pending, độ rộng giữ nguyên; thanh chưa đổi holderNút aria-busy và disabled
DisabledNút mờ, không spinner (ví dụ khi mất quyền)disabled gốc
Chuyển holderTông brand fade opacity; host đổi holder sau khi server ghi—
Reduced motionDuration 0ms nên đổi tức thì—

Bàn phím & trợ năng

Tab tới nút, Enter hoặc Space kích hoạt; sau khi giao lại focus ở lại trên nút.
Người giữ được nói bằng chữ trong tiêu đề, không chỉ bằng tông màu.
Nút cao tối thiểu control-sm và có vùng chạm 44px trên con trỏ thô.

Seam — host sở hữu gì

Composite không đổi holder khi bấm. Host gửi lệnh, giữ pending cho đến khi server ghi, rồi mới đổi holder. Xung đột đồng thời là việc của host.

API & triển khai

PropMặc địnhQuy ước
holder—"ai" | "human".
title—Ai phụ trách, bằng câu hoàn chỉnh.
modeLineundefinedChế độ làm việc.
initials—Chữ trong avatar.
holderLabelundefinedTừ cho badge.
actionLabel—Nhãn nút khi rảnh.
pendingLabel"Đang xử lý…"Nhãn khi đang chờ server.
onAction / pending / disabled—Sự kiện bấm, đang chờ, vô hiệu.

Design tokens

--nf-semantic-brand-soft, --nf-semantic-brand-soft-border, --nf-semantic-surface-raised, --nf-semantic-border-subtle, --nf-component-card-radius, --nf-foundation-motion-duration-standard, --nf-foundation-motion-easing-standard, --nf-foundation-space-*.

Do / Don't

Nên dùng

Đổi holder chỉ sau khi server ghi. Giữ nút ở cùng chỗ để tiếp quản luôn là một lần bấm. Tiêu đề nói rõ ai.

Tránh dùng

Đổi thanh ngay khi bấm. Dùng màu cảnh báo cho trạng thái người giữ. Giấu nút tiếp quản trong menu.