# XiDachSeat Ghế của một khách quen ở bàn Xì Dách: avatar, tên, tiền góp vui, tay bài, trạng thái (đang suy nghĩ, đã dừng, quá chén, thắng, thua) và nút "So điểm". ## Khi nào dùng - Mỗi khách ngồi bàn là một ghế trong `tt-xidach__players` của `XiDachTable` (lưới `auto-fit` cột tối thiểu 95px). - Cho nhà cái (người chơi) thấy ai đang rút, ai đã dừng, ai quá chén và bấm so điểm từng người. - Ghế chỉ hiển thị; chọn trạng thái và số tiền là việc của code. ## Biến thể | Trạng thái ghế | Lớp | Dùng khi | |---|---|---| | Đang suy nghĩ… / Đã dừng | `tt-xdseat` | Mặc định (trạng thái đã dừng chỉ khác chữ trạng thái) | | Đang suy nghĩ | `tt-xdseat is-drawing` | Viền và quầng `gold`, nền vàng nhạt (`.active-turn`) | | Quá chén | `tt-xdseat is-busted` | Viền `warn` | | Thắng | `tt-xdseat is-win` | Viền `mint`, nền xanh nhạt (`.settled-win`) | | Thua | `tt-xdseat is-lose` | Viền `warn`, nền đỏ nhạt (`.settled-lose`) | | Hoà | `tt-xdseat is-draw` | Giữ viền và nền trung tính | ## Cấu trúc ```html
Bé Mèo Con Góp vui: 20k
…

Đang suy nghĩ...

``` Avatar dùng `tt-avatar` (ảnh `assets/Avatars/b07.png` với `alt=""`, hoặc emoji `aria-hidden`); tay bài là `CardHand`. Tên dài tự cắt bằng dấu "…". ## Trạng thái | `setState` | Chữ mặc định | Biểu tượng | Nút So điểm | |---|---|---|---| | `idle` | Chờ chia bài | 🧋 | theo `setCanSettle` | | `drawing` | Đang suy nghĩ... | 🤔 | theo `setCanSettle` | | `standing` | Đã dừng | 🤫 | theo `setCanSettle` | | `busted` | Quá chén | 💥 | theo `setCanSettle` | | `win` · `lose` · `draw` | Thắng · Thua · Hoà | ✓ · ✗ · = | tự ẩn (đã xét) | Chữ thay thế truyền vào `setState(name, text)`, ví dụ "Thua −10k" hoặc "Đã dừng (2 thẻ)". ## Hành vi JS `TTMU.xiDachSeat(el, { onSettle })` gắn một lần (gắn lần hai trả về `null`) và trả về `{ state, setState(name, text), setBet(n), setCanSettle(flag), destroy() }`. ```js var seat = TTMU.xiDachSeat(el, { onSettle: function (seatEl) { /* nhà cái bấm So điểm */ } }); seat.setBet(50000); // "Góp vui: 50k" (TTMU.formatMoney) seat.setState('lose', 'Thua −50k'); seat.setCanSettle(false); ``` `onSettle(el)` chỉ gọi khi người dùng bấm nút `[data-xet]` đang hiện; ghế đã xét (`win` / `lose` / `draw`) bỏ qua mọi cú bấm. Các hàm `set*` từ code không gọi callback. Nút nên mang lớp `tt-xdseat__xet`; thuộc tính `hidden` ẩn được nó vì luật nền `[hidden]` của `00-base.css`. ## Token sử dụng `panel`, `line`, `fill-muted`, `ink`, `soft`, `gold`, `mint`, `warn`, `radius-10/12`, `space-4/6`, cùng token của `tt-avatar`, `tt-button`, `CardHand`. ## Khả năng tiếp cận - Ghế là `role="group"` có `aria-label` là tên khách; nút So điểm có `aria-label` "So điểm " để các nút giống nhau không bị đọc trùng. - Trạng thái luôn có chữ ("Đang suy nghĩ...", "Thắng", "Thua") và biểu tượng ✓ ✗; viền và nền chỉ là phần thêm. Chữ trạng thái `ink` đạt 7:1 ở Tương phản cao. - Nút So điểm là `