# Có gì mới

Thay đổi của SDK POS Apps (`@pancake-pos/ui-extensions`, `@pancake-pos/ui`, `@pancake-pos/app-cli`, `@pancake-pos/eslint-plugin`, `create-pos-app`). Các gói phát hành cùng số phiên bản.

- **App đã deploy không cần làm gì:** runtime do POS phục vụ nên sửa lỗi và element mới có hiệu lực ngay. Mọi thay đổi trong `api_version` `2026-01` chỉ thêm, không phá code cũ.
- **Dự án đang viết nên cập nhật** để có type, luật kiểm tra, tài liệu và ví dụ mới cho MCP. CLI tự nhắc khi có bản mới ([Cập nhật SDK](/developers/apps/sdk#cap-nhat-sdk)):

```bash
npm i @pancake-pos/ui@latest @pancake-pos/ui-extensions@latest
npm i -D @pancake-pos/app-cli@latest @pancake-pos/eslint-plugin@latest
```

Dùng MCP thì khởi động lại MCP server sau khi cập nhật.

## 2026.1.9

- CLI nhắc khi có SDK mới: `npm run check`, `build`, `deploy`, `dev` in lệnh cập nhật; kết quả `--json` và tool MCP (`check_app`, `deploy`, `get_errors`) có trường `update` để AI đề nghị cập nhật. Tắt bằng `POS_APP_NO_UPDATE_CHECK=1`.
- Luật `pos-app/valid-elements`: element, thuộc tính hay sự kiện lạ mà không giống tên nào thì gợi ý cập nhật SDK (thường do code viết theo tài liệu mới hơn).
- Trang Có gì mới này.

## 2026.1.8

**Component**

- Mới: [`pos-switch`](/developers/apps/components#pos-switch), [`pos-radio-group`](/developers/apps/components#pos-radio-group), [`pos-time-picker`](/developers/apps/components#pos-time-picker), [`pos-file-input`](/developers/apps/components#pos-file-input) (POS đọc CSV/Excel thành bảng cho app).
- [`pos-table`](/developers/apps/components#pos-table): `rows` nhận thẳng bản ghi Open API, `key` của cột là đường dẫn (`customer.name`, `items.0.sku`); cột "Thao tác" `rowActions` với `onRowAction`; cột `copyable`.
- `pos-select`: tìm qua API bằng `onSearch` và `loading`. `pos-date-picker`: `time` để chọn cả giờ.
- `pos-modal`: `width` (520, 720, 1000 px). Footer của `pos-modal`, `pos-drawer` nhận thêm `pos-menu-button`, `pos-link`.

**API** ([runtime-api](/developers/apps/runtime-api))

- `pos.api.paginate` tải nhiều trang song song trong giới hạn tần suất; `pos.api.get(path, { cache })` nhớ danh mục.
- `pos.download({ sheet })`: POS dựng file `.xlsx` hoặc `.csv` từ cột và dòng.
- `pos.navigate({ resource: 'order', id })` mở đơn ở tab mới. `pos.format` định dạng số, tiền, ngày như POS. `pos.clipboard.copy`.

**Runtime và công cụ**

- Giá trị sai schema (kiểu sai, element đặt sai chỗ, chữ quá dài) không còn dừng extension: POS bỏ phần sai và ghi vào nhật ký lỗi.
- Chế độ phát triển ghi cảnh báo "Màn hình chuẩn" (`standard_screen`) vào nhật ký, đọc bằng `get_errors`.
- Tool MCP `get_example`: app mẫu hoàn chỉnh (báo cáo, danh sách có panel chi tiết, nhập từ file, block trong form đơn, mẫu in, hook).

## 2026.1.7

- Element cho màn báo cáo và danh sách: `pos-stat`, `pos-date-range`, `pos-menu-button`, `pos-description-list`, `pos-timeline`, `pos-progress`, `pos-empty`, `pos-drawer`.
- `pos-table`: cột `format` badge, link, percent, `tones`, `subtitle`, `sortable`, `fixed`, `ellipsis`; `sort`, `summary`, `selectable`, `selected`; sự kiện `onSortChange`, `onSelectionChange`, `onCellClick`.
- `pos-chart`: kết hợp cột và đường, biểu đồ ngang, phần trăm. `pos-button`: `icon`, `tooltip`.
- `pos.download` tải file app tạo.
- Luật `pos-app/standard-screen` (cảnh báo) theo [Màn hình chuẩn](/developers/apps/components#man-hinh-chuan); template `create-pos-app` có trang báo cáo mẫu.
- Tool MCP `search_api`, `get_api` tra endpoint Open API.
- Sửa: chế độ phát triển không tải được dữ liệu khi POS gọi API qua `pos.pancake.vn`.

## 2026.1.6

- Tài liệu và template chạy CLI qua `npm run …` hoặc `npx @pancake-pos/app-cli …` (gói `pos-app` trên npm không phải của Pancake).

## 2026.1.5

- Target khách hàng: `customer.details.action`, `customer.index.action`, `customer.index.selection-action`, `customer.index.column`.

## 2026.1.4

- Trang Worker UI (`app.page` với `render: "worker"`) và element trang: `pos-page`, `pos-tabs`, `pos-filter-bar`, `pos-chart`.
- Cột trong danh sách (`<resource>.index.column`), mẫu in của app (`<resource>.print-action`), khối hồ sơ khách hàng (`customer.details.block`).
