# Switch
Công tắc bật/tắt cho các tuỳ chọn Cài đặt như Nhạc nền, Âm thanh, Rung.
## Khi nào dùng
- Một lựa chọn hai trạng thái có hiệu lực ngay khi gạt (không cần nút "Lưu").
- Không dùng cho lựa chọn một trong nhiều (dùng Chip / ThemePicker).
## Biến thể
| Biến thể | Lớp | Dùng khi |
|---|---|---|
| Mặc định | `tt-switch` | Công tắc đứng trong hàng bất kỳ |
| Hàng cài đặt | `tt-switch tt-switch--row` | Cả hàng là công tắc, cùng cỡ `tt-settings-row` (52px) |
## Cấu trúc
```html
```
Chữ "Bật/Tắt" đổi bằng CSS theo `aria-checked`, không cần JS; `aria-hidden` vì screen reader đã đọc trạng thái từ `role="switch"`.
## Trạng thái
| Trạng thái | Hiệu ứng |
|---|---|
| Tắt | Rãnh `fill-muted`, viền `line`, núm bên trái, chữ "Tắt" |
| Bật (`aria-checked="true"`) | Rãnh `mint`, núm trượt phải kèm dấu ✓, chữ "Bật" |
| `:disabled` | opacity .4 |
| Focus | Vòng `focus-ring` 3px |
## Hành vi JS
```js
var s = TTMU['switch'](el, { onChange: function (on) {} });
s.value; // true / false
s.set(false); // đặt từ code, không gọi onChange
```
- Gắn một lần (`data-tt-bound`); trả về `{ value, set(on), destroy() }`.
- **Quy ước `onChange`:** chỉ thao tác của người dùng mới gọi `onChange`, và chỉ khi giá trị thật sự đổi; `set()` im lặng.
## Token sử dụng
`fill-muted`, `line`, `panel`, `mint`, `ink`, `soft`, `bg`, `shadow-board`, `radius-pill`, `radius-round`, `radius-14`, `space-2/4/10/12/14`.
## Khả năng tiếp cận
- `