sbuilder-mcp 0.65.0 → 0.66.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +27 -0
- package/CHANGELOG.vi.md +27 -0
- package/README.md +4 -4
- package/README.vi.md +4 -4
- package/dist/catalog/api.generated.js +10 -3
- package/dist/catalog/checkout.generated.js +159 -39
- package/dist/catalog/deadkeys.generated.js +3 -3
- package/dist/catalog/elements.generated.js +239 -16
- package/dist/catalog/overlays.generated.js +3193 -684
- package/dist/catalog/shapes.generated.js +9 -0
- package/dist/catalog/source.generated.js +2 -2
- package/dist/catalog/storepages.generated.js +201 -1
- package/dist/catalog/translations.generated.js +8 -3
- package/dist/core/patch.js +20 -0
- package/dist/domains/site/builder.js +69 -6
- package/dist/domains/site/ids.js +30 -7
- package/dist/domains/site/node.js +2 -2
- package/dist/domains/site/pagestate.js +16 -2
- package/dist/domains/site/patterns.js +10 -1
- package/dist/domains/site/readiness-fetch.js +15 -8
- package/dist/domains/site/readiness.js +78 -29
- package/dist/domains/site/review.js +12 -3
- package/dist/domains/site/storepage.js +5 -3
- package/dist/live/session.js +73 -8
- package/dist/tools/app.js +2 -1
- package/dist/tools/chrome.js +340 -21
- package/dist/tools/live.js +1 -0
- package/dist/tools/menu.js +24 -8
- package/dist/tools/overlay.js +64 -3
- package/dist/tools/page.js +351 -81
- package/dist/tools/store.js +23 -63
- package/dist/tools/theme.js +99 -4
- package/dist/transport/http.js +70 -1
- package/dist/transport/pages.js +16 -3
- package/dist/transport/socket.js +9 -2
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,33 @@ All notable changes to this project are documented in this file.
|
|
|
6
6
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
7
7
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
8
8
|
|
|
9
|
+
## [0.66.0] - 2026-09-25
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
- `sb_add` can now create a satellite on its host — such as the `cart-count` badge on a cart icon — instead of refusing it as a non-container, and `sb_remove` removes one and clears the host's reference to it; the `cartCount` readiness remedy now names `sb_add`.
|
|
13
|
+
- `sb_store` action `cart` now seeds the site's cart drawer in the site's own language, read from `settings.locale`, instead of always seeding English, falling back to English when no per-locale seed exists.
|
|
14
|
+
- `sb_store` action `chrome` now builds a real site menu and wires the header to it — a hover/dropdown desktop menu hidden on mobile, a hamburger drawer holding its own vertical menu on mobile, an account icon to `/account`, and a cart icon carrying `open_cart` badged by `cart-count` — replacing the row of buttons `sb_review` itself flagged as `handbuilt_menu`; it also creates the site's cart drawer when the header's cart icon would otherwise open nothing.
|
|
15
|
+
- `sb_review` warns once per site (`site_language`) when the page's copy doesn't match the site's `settings.locale`, and `sb_theme` gains a `locale` argument to set it.
|
|
16
|
+
- `sb_publish` lists other pages with unpublished drafts as `unpublished_drafts`, and `publish_drafts: true` publishes them in the same call.
|
|
17
|
+
- A page save now sends the draft's revision as `baseRev` and yields — re-pulling and rebasing — when the platform reports the draft moved underneath it (`source_stale`) or broadcasts a newer revision; it names the live peer on a save (`X-WB-Live-Peer`) only once every patch in that save is confirmed acknowledged by the room, so an editor tab with unsaved edits can adopt the save instead of quietly losing it later.
|
|
18
|
+
|
|
19
|
+
### Changed
|
|
20
|
+
- A page-document write that bypasses `sb_set` — a raw `sb_api_call` PUT, `sb_page_repair`, a version or history restore, or a `sb_store` flow — now reaches a live editor watching that page as ops and marks this session's own copy stale, instead of one side silently overwriting the other.
|
|
21
|
+
- The generated catalog was regenerated against the platform: 120 elements and per-locale cart drawer seeds.
|
|
22
|
+
|
|
23
|
+
### Fixed
|
|
24
|
+
- Closed several races in the save-and-rebase path that could lose an edit under concurrent access: a 409 rebase no longer republishes ops already sent to the room, a finishing save no longer clears another in-flight save's slot, a peer's edit landing mid-save is no longer discarded by that save, a source frame arriving during a re-read is judged against the revision it actually reports, and an editor's own change is no longer mistaken for this session's unsaved edit.
|
|
25
|
+
- Rejoining a live room no longer vouches for ops the previous room never acknowledged, and the auth/session frame is never reported as a snapshot provider (`noSnapshot`), closing two ways a stale save could be replayed under a peer's name.
|
|
26
|
+
- `sb_theme`'s locale write no longer partially applies: it validates the language tag and reads settings before the theme PUT, tries the full settings body with every credential before falling back to a locale-only body, and writes the locale only after the theme save and every other check succeed.
|
|
27
|
+
- `sb_store` action `chrome` no longer overwrites a merchant's fully-linked menu when a transient lookup failure makes it look unresolved, and now fills a reused placeholder menu (four `type:none` rows) in with real links instead of leaving it empty; its dry run now summarizes the cart drawer it would create instead of embedding the full seed document.
|
|
28
|
+
- A product card's image now shows as one square thumbnail instead of a strip of three empty ones, and a category tile now binds `category.image` instead of the product-image binding it inherited from the generic media pattern.
|
|
29
|
+
- `sb_review`'s `categoryScope` gap now fires only when the open page is the shared category template with every product repeater pinned to a named collection, not on every site with more than one category.
|
|
30
|
+
- `sb_review`'s `order_goes_nowhere` gap now judges only the checkout form, no longer flagging every login, register, forgot-password, and reset-password page because the cart drawer composed onto them also holds a cart total.
|
|
31
|
+
- A nested satellite given as part of a node spec is now seeded and attached correctly instead of being born bare or refused as a child of a non-container.
|
|
32
|
+
- Every page `sb_page_create` and `sb_store` create now mints fresh node ids instead of shipping the codegen placeholder ids verbatim, so two pages of the same type no longer share ids.
|
|
33
|
+
- `sb_page_state` now reports `canvas.minted_root` when a page's root node isn't called `ROOT`, warning that an older editor may paint it blank and autosave over it.
|
|
34
|
+
- The page a `sb_store` action `form` flow creates now wears the site's global header and footer, matching pages created by `sb_page_create`.
|
|
35
|
+
|
|
9
36
|
## [0.65.0] - 2026-09-25
|
|
10
37
|
|
|
11
38
|
### Added
|
package/CHANGELOG.vi.md
CHANGED
|
@@ -6,6 +6,33 @@ Mọi thay đổi đáng chú ý của dự án được ghi lại trong file n
|
|
|
6
6
|
Định dạng dựa trên [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
7
7
|
và dự án tuân theo [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
8
8
|
|
|
9
|
+
## [0.66.0] - 2026-09-25
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
- `sb_add` giờ có thể tạo một satellite trên host của nó — ví dụ badge `cart-count` trên icon giỏ hàng — thay vì từ chối vì host không phải container, và `sb_remove` xoá satellite đó và dọn tham chiếu trên host; remedy `cartCount` của readiness giờ chỉ đích danh `sb_add`.
|
|
13
|
+
- Action `cart` của `sb_store` giờ gieo cart drawer của site bằng đúng ngôn ngữ của site, đọc từ `settings.locale`, thay vì luôn gieo bằng tiếng Anh, và rơi về tiếng Anh khi không có seed theo locale.
|
|
14
|
+
- Action `chrome` của `sb_store` giờ tạo một site menu thật và nối header vào đó — menu desktop kiểu hover/dropdown ẩn trên mobile, một hamburger drawer chứa menu dọc riêng trên mobile, icon tài khoản trỏ tới `/account`, và icon giỏ hàng mang `open_cart` kèm badge `cart-count` — thay cho hàng nút bấm mà chính `sb_review` từng gắn cờ `handbuilt_menu`; nó cũng tạo cart drawer cho site khi icon giỏ hàng trên header sẽ mở ra không gì cả.
|
|
15
|
+
- `sb_review` cảnh báo một lần cho mỗi site (`site_language`) khi nội dung trang không khớp `settings.locale` của site, và `sb_theme` có thêm tham số `locale` để đặt nó.
|
|
16
|
+
- `sb_publish` liệt kê các trang khác đang có draft chưa publish dưới `unpublished_drafts`, và `publish_drafts: true` sẽ publish luôn các trang đó trong cùng lệnh gọi.
|
|
17
|
+
- Một lần lưu trang giờ gửi revision của draft dưới dạng `baseRev` và nhường bước — đọc lại và rebase — khi nền tảng báo draft đã thay đổi bên dưới nó (`source_stale`) hoặc phát ra một revision mới hơn; nó chỉ đích danh live peer khi lưu (`X-WB-Live-Peer`) khi mọi patch trong lần lưu đó đã được phòng xác nhận, để một tab editor còn thay đổi chưa lưu có thể nhận lấy lần lưu này thay vì âm thầm mất nó sau đó.
|
|
18
|
+
|
|
19
|
+
### Changed
|
|
20
|
+
- Một lần ghi tài liệu trang không đi qua `sb_set` — một PUT thô qua `sb_api_call`, `sb_page_repair`, khôi phục version hoặc history, hay một flow của `sb_store` — giờ đến được với editor đang xem trang đó dưới dạng ops và đánh dấu bản sao của session này là cũ, thay vì bên này âm thầm ghi đè bên kia.
|
|
21
|
+
- Catalog được sinh ra đã được làm mới dựa trên nền tảng: 120 element và cart drawer seed theo từng locale.
|
|
22
|
+
|
|
23
|
+
### Fixed
|
|
24
|
+
- Đã đóng một số race trong luồng lưu-và-rebase có thể làm mất một thay đổi khi truy cập đồng thời: một rebase sau lỗi 409 không còn gửi lại các ops đã gửi lên phòng, một lần lưu vừa hoàn tất không còn xoá slot in-flight của một lần lưu khác, một chỉnh sửa của peer đến giữa lúc đang lưu không còn bị lần lưu đó xoá mất, một source frame đến trong lúc đang đọc lại được xét đúng theo revision mà nó thực sự báo, và thay đổi của chính editor không còn bị nhầm là thay đổi cục bộ chưa lưu của session này.
|
|
25
|
+
- Rejoin vào một phòng live không còn vouch cho các ops mà phòng cũ chưa từng ack, và frame auth/session không bao giờ bị báo là nơi cung cấp snapshot (`noSnapshot`), đóng lại hai cách một lần lưu cũ có thể bị phát lại dưới tên một peer.
|
|
26
|
+
- Lần ghi locale của `sb_theme` không còn áp dụng nửa chừng: nó kiểm tra language tag và đọc settings trước khi PUT theme, thử toàn bộ settings body với từng credential trước khi rơi về body chỉ có locale, và chỉ ghi locale sau khi lần lưu theme và mọi kiểm tra khác thành công.
|
|
27
|
+
- Action `chrome` của `sb_store` không còn ghi đè menu đã liên kết đầy đủ của merchant khi một lỗi lookup tạm thời khiến nó trông như chưa được liên kết, và giờ điền các liên kết thật vào một menu placeholder được dùng lại (bốn dòng `type:none`) thay vì để trống; dry run của nó giờ tóm tắt cart drawer sẽ tạo thay vì nhúng nguyên tài liệu seed.
|
|
28
|
+
- Ảnh trên thẻ sản phẩm giờ hiển thị một thumbnail vuông duy nhất thay vì một dải ba ảnh trống, và ô category giờ bind `category.image` thay vì binding ảnh sản phẩm mà nó thừa hưởng từ pattern media chung.
|
|
29
|
+
- Gap `categoryScope` của `sb_review` giờ chỉ nổ ra khi trang đang mở là category template dùng chung với mọi product repeater được ghim vào một collection có tên, không còn nổ ra trên mọi site có hơn một category.
|
|
30
|
+
- Gap `order_goes_nowhere` của `sb_review` giờ chỉ xét form checkout, không còn gắn cờ mọi trang login, register, quên mật khẩu và đặt lại mật khẩu chỉ vì cart drawer được compose lên các trang đó cũng có cart total.
|
|
31
|
+
- Một satellite lồng bên trong một node spec giờ được seed và gắn đúng cách thay vì sinh ra trống trơn hoặc bị từ chối vì host không phải container.
|
|
32
|
+
- Mỗi lần tạo trang qua `sb_page_create` và `sb_store` giờ sinh id node mới thay vì dùng nguyên id placeholder từ codegen, nên hai trang cùng loại không còn trùng id.
|
|
33
|
+
- `sb_page_state` giờ báo `canvas.minted_root` khi node root của một trang không mang tên `ROOT`, cảnh báo rằng một editor cũ hơn có thể vẽ trang đó trắng trơn và autosave đè lên nó.
|
|
34
|
+
- Trang mà flow `form` của `sb_store` tạo ra giờ mang header và footer chung của site, khớp với các trang do `sb_page_create` tạo.
|
|
35
|
+
|
|
9
36
|
## [0.65.0] - 2026-09-25
|
|
10
37
|
|
|
11
38
|
### Added
|
package/README.md
CHANGED
|
@@ -98,7 +98,7 @@ in this client: one would put the very key the platform exists to hold back into
|
|
|
98
98
|
| `sb_template_use` | Instantiate a template into a page |
|
|
99
99
|
| `sb_page_list` | Every page on the site |
|
|
100
100
|
| `sb_page_create` | Create a page — a store type arrives with the editor's own starting document; `type` is the route for checkout, product, category, post, course |
|
|
101
|
-
| `sb_publish` | Compile the draft into the live page (cascades to shared globals), report which revision went live, and with `verify` check the origin is serving it |
|
|
101
|
+
| `sb_publish` | Compile the draft into the live page (cascades to shared globals), report which revision went live, and with `verify` check the origin is serving it; lists other pages with unpublished drafts (`publish_drafts` publishes them too) |
|
|
102
102
|
| `sb_page_state` | Which of a page's three copies is which — the DRAFT the editor canvas shows, the PUBLISHED row the storefront serves, and this session's — plus whether the editor will render the canvas BLANK, and where the recovery points are |
|
|
103
103
|
| `sb_page_repair` | Rename a page root that is not `ROOT` (left by older seeds) so every editor build draws it — one page or the whole site |
|
|
104
104
|
| `sb_review` | Every defect a visitor would see, each with its fix, plus the five gaps between this store and a paid order |
|
|
@@ -110,12 +110,12 @@ in this client: one would put the very key the platform exists to hold back into
|
|
|
110
110
|
| `sb_bind` | Bind a node's content to real store data, or make a button add to the cart |
|
|
111
111
|
| `sb_import` | Read a page from any public URL and add its structure and content to the open page as real elements, styled with THIS page's own tokens — a translation, not a clone |
|
|
112
112
|
| `sb_import_site` | Read a WHOLE site from one URL — its sitemap, or the links on that page — and give each page found its own draft page here, built from this site's tokens; the entry page's own colours and type scale also patch into this SITE'S theme, so it stops being purely a read |
|
|
113
|
-
| `sb_theme` | Read or patch the site's palette and type scale — the layer every style preset resolves from, so one token repaints every page |
|
|
114
|
-
| `sb_store` | Run a store flow that must happen in a fixed order — `checkout` (the four writes that make a working one), `form` (any of the platform's 17 templates with its own field document), `chrome` (one shared header or footer), `menu` (a menu node bound to the site's menu, its links resolved), `overlay_attach` (a pop-up or quick view on the open page) and `app` (a built-in app plus the pages it needs), `global_attach` / `global_detach` (put an EXISTING shared section on the open page, or take it off) |
|
|
113
|
+
| `sb_theme` | Read or patch the site's palette and type scale — the layer every style preset resolves from, so one token repaints every page; `locale` sets the site's language |
|
|
114
|
+
| `sb_store` | Run a store flow that must happen in a fixed order — `checkout` (the four writes that make a working one), `form` (any of the platform's 17 templates with its own field document), `chrome` (one shared header or footer on a real site menu — desktop menu, mobile drawer, cart and account icons), `menu` (a menu node bound to the site's menu, its links resolved), `overlay_attach` (a pop-up or quick view on the open page), `cart` (the site's cart drawer, when it has none) and `app` (a built-in app plus the pages it needs), `global_attach` / `global_detach` (put an EXISTING shared section on the open page, or take it off) |
|
|
115
115
|
| `sb_undo` | Put back what a PUT replaced. The SECOND answer for a page, not the only one: the platform has versions, history and restore (`sb_api_find` "page versions"), which outlive this process — reach for those first and use this for every other shaped PUT |
|
|
116
116
|
|
|
117
117
|
Twenty-eight tools, **568 API operations** (195 of the 253 writes carrying a body shape read
|
|
118
|
-
off the handler),
|
|
118
|
+
off the handler), 120 elements, 79 binding sources. `sb_api_find`
|
|
119
119
|
is an index rather than a tool per endpoint, so the tool list stays short while everything
|
|
120
120
|
the platform can do stays reachable — and operations added to the platform arrive with the
|
|
121
121
|
next `npm run codegen`.
|
package/README.vi.md
CHANGED
|
@@ -95,7 +95,7 @@ nhét ngược lại vào mọi bản cài.
|
|
|
95
95
|
| `sb_template_use` | Thả một template vào trang |
|
|
96
96
|
| `sb_page_list` | Mọi trang của site |
|
|
97
97
|
| `sb_page_create` | Tạo một trang — trang cửa hàng sinh ra đã có sẵn tài liệu như trong editor; `type` là đường đi cho checkout, product, category, post, course |
|
|
98
|
-
| `sb_publish` | Biên dịch bản nháp thành trang live (lan sang global dùng chung), báo bản nào đã lên live, và với `verify` kiểm origin đã phục vụ đúng bản đó chưa |
|
|
98
|
+
| `sb_publish` | Biên dịch bản nháp thành trang live (lan sang global dùng chung), báo bản nào đã lên live, và với `verify` kiểm origin đã phục vụ đúng bản đó chưa; liệt kê các trang khác còn nháp chưa publish (`publish_drafts` publish luôn) |
|
|
99
99
|
| `sb_page_state` | Ba bản sao của một trang, bản nào là bản nào — bản NHÁP canvas editor hiển thị, dòng PUBLISHED storefront phục vụ, và bản phiên này giữ — kèm dự báo editor có render canvas TRẮNG không, và các điểm phục hồi nằm ở đâu |
|
|
100
100
|
| `sb_page_repair` | Đổi gốc trang khác `ROOT` (do seed cũ để lại) về `ROOT` để mọi bản editor vẽ được — một trang hoặc cả site |
|
|
101
101
|
| `sb_review` | Mọi khiếm khuyết người xem sẽ thấy, kèm lệnh sửa từng cái, và năm khoảng trống chắn giữa cửa hàng với một đơn đã thanh toán |
|
|
@@ -107,12 +107,12 @@ nhét ngược lại vào mọi bản cài.
|
|
|
107
107
|
| `sb_bind` | Gắn nội dung một node vào dữ liệu cửa hàng thật, hoặc biến một nút thành nút thêm vào giỏ |
|
|
108
108
|
| `sb_import` | Đọc một trang từ URL công khai bất kỳ và thêm cấu trúc + nội dung của nó vào trang đang mở dưới dạng element thật, mang token của CHÍNH trang này — là dịch lại, không phải sao chép |
|
|
109
109
|
| `sb_import_site` | Đọc CẢ website từ một URL — sitemap của nó, hoặc các link trên trang đó — và tạo cho mỗi trang tìm được một trang nháp riêng ở đây, dựng bằng token của site này; màu và thang chữ của trang gốc cũng được vá vào THEME của site này, nên đây không còn thuần là đọc |
|
|
110
|
-
| `sb_theme` | Đọc hoặc vá bảng màu và thang chữ của site — tầng mà mọi style preset phân giải từ đó, nên một token thay áo cho mọi trang |
|
|
111
|
-
| `sb_store` | Chạy một luồng cửa hàng bắt buộc đúng thứ tự — `checkout` (bốn lệnh ghi tạo nên trang thanh toán), `form` (một trong 17 template của nền tảng kèm field document của nó), `chrome` (một header hoặc footer dùng chung), `menu` (một node menu bind vào menu của site, link đã phân giải), `overlay_attach` (một pop-up hay quick view trên trang đang mở) `app` (một app dựng sẵn kèm những trang nó cần), và `global_attach` / `global_detach` (đặt một section dùng chung ĐÃ CÓ lên trang đang mở, hoặc gỡ ra) |
|
|
110
|
+
| `sb_theme` | Đọc hoặc vá bảng màu và thang chữ của site — tầng mà mọi style preset phân giải từ đó, nên một token thay áo cho mọi trang; `locale` đặt ngôn ngữ của site |
|
|
111
|
+
| `sb_store` | Chạy một luồng cửa hàng bắt buộc đúng thứ tự — `checkout` (bốn lệnh ghi tạo nên trang thanh toán), `form` (một trong 17 template của nền tảng kèm field document của nó), `chrome` (một header hoặc footer dùng chung trên menu thật của site — menu desktop, drawer mobile, icon giỏ hàng và tài khoản), `menu` (một node menu bind vào menu của site, link đã phân giải), `overlay_attach` (một pop-up hay quick view trên trang đang mở), `cart` (ngăn giỏ hàng của site, khi chưa có), `app` (một app dựng sẵn kèm những trang nó cần), và `global_attach` / `global_detach` (đặt một section dùng chung ĐÃ CÓ lên trang đang mở, hoặc gỡ ra) |
|
|
112
112
|
| `sb_undo` | Trả lại thứ mà một lệnh PUT đã ghi đè. Với TRANG thì đây là đường về thứ hai chứ không phải duy nhất: nền tảng có version, history và restore (`sb_api_find` "page versions"), và chúng sống lâu hơn tiến trình này — hãy dùng chúng trước, còn tool này cho mọi PUT có hình dạng khác |
|
|
113
113
|
|
|
114
114
|
Hai mươi tám tool, **568 operation API** (195 trong 253 lệnh ghi có hình dạng body đọc thẳng
|
|
115
|
-
từ handler),
|
|
115
|
+
từ handler), 120 element, 79 nguồn binding. `sb_api_find` là
|
|
116
116
|
một chỉ mục chứ không phải mỗi endpoint một tool, nên danh sách tool vẫn ngắn trong khi mọi
|
|
117
117
|
thứ nền tảng làm được vẫn với tới — và operation mới thêm bên nền tảng sẽ tự có sau lần
|
|
118
118
|
`npm run codegen` kế tiếp.
|
|
@@ -676,9 +676,16 @@ export const API_OPERATIONS = [
|
|
|
676
676
|
{
|
|
677
677
|
"name": "courseId",
|
|
678
678
|
"in": "query",
|
|
679
|
-
"required":
|
|
679
|
+
"required": false,
|
|
680
680
|
"type": "string",
|
|
681
681
|
"description": "The course id"
|
|
682
|
+
},
|
|
683
|
+
{
|
|
684
|
+
"name": "slug",
|
|
685
|
+
"in": "query",
|
|
686
|
+
"required": false,
|
|
687
|
+
"type": "string",
|
|
688
|
+
"description": "The course slug, when no id is known"
|
|
682
689
|
}
|
|
683
690
|
],
|
|
684
691
|
"bodyDescribed": false,
|
|
@@ -16489,7 +16496,7 @@ export const API_OPERATIONS = [
|
|
|
16489
16496
|
"in": "query",
|
|
16490
16497
|
"required": false,
|
|
16491
16498
|
"type": "string",
|
|
16492
|
-
"description": "Filter by page type (page|product|category|blog|post|error|maintain|search|checkout|complete|account|course|about|contact|policy|faq|login|register)"
|
|
16499
|
+
"description": "Filter by page type (page|product|category|blog|post|error|maintain|search|checkout|complete|account|course|about|contact|policy|faq|login|register|forgot|reset)"
|
|
16493
16500
|
},
|
|
16494
16501
|
{
|
|
16495
16502
|
"name": "status",
|
|
@@ -16559,7 +16566,7 @@ export const API_OPERATIONS = [
|
|
|
16559
16566
|
"in": "query",
|
|
16560
16567
|
"required": false,
|
|
16561
16568
|
"type": "string",
|
|
16562
|
-
"description": "Filter by page type (page|product|category|blog|post|error|maintain|search|checkout|complete|account|course|about|contact|policy|faq|login|register)"
|
|
16569
|
+
"description": "Filter by page type (page|product|category|blog|post|error|maintain|search|checkout|complete|account|course|about|contact|policy|faq|login|register|forgot|reset)"
|
|
16563
16570
|
},
|
|
16564
16571
|
{
|
|
16565
16572
|
"name": "status",
|
|
@@ -491,8 +491,8 @@ export const CHECKOUT_FORM_DOCUMENT = {
|
|
|
491
491
|
"style": {
|
|
492
492
|
"width": "100%",
|
|
493
493
|
"padding": "10px 16px",
|
|
494
|
-
"backgroundColor": "#171717",
|
|
495
|
-
"color": "#ffffff",
|
|
494
|
+
"backgroundColor": "var(--wb-sc-buttonBg, #171717)",
|
|
495
|
+
"color": "var(--wb-sc-buttonText, #ffffff)",
|
|
496
496
|
"borderRadius": "6px"
|
|
497
497
|
},
|
|
498
498
|
"config": {
|
|
@@ -1092,8 +1092,8 @@ export const FORM_TEMPLATES = {
|
|
|
1092
1092
|
"style": {
|
|
1093
1093
|
"width": "100%",
|
|
1094
1094
|
"padding": "10px 16px",
|
|
1095
|
-
"backgroundColor": "#171717",
|
|
1096
|
-
"color": "#ffffff",
|
|
1095
|
+
"backgroundColor": "var(--wb-sc-buttonBg, #171717)",
|
|
1096
|
+
"color": "var(--wb-sc-buttonText, #ffffff)",
|
|
1097
1097
|
"borderRadius": "6px"
|
|
1098
1098
|
},
|
|
1099
1099
|
"config": {
|
|
@@ -1264,8 +1264,8 @@ export const FORM_TEMPLATES = {
|
|
|
1264
1264
|
"style": {
|
|
1265
1265
|
"width": "100%",
|
|
1266
1266
|
"padding": "10px 16px",
|
|
1267
|
-
"backgroundColor": "#171717",
|
|
1268
|
-
"color": "#ffffff",
|
|
1267
|
+
"backgroundColor": "var(--wb-sc-buttonBg, #171717)",
|
|
1268
|
+
"color": "var(--wb-sc-buttonText, #ffffff)",
|
|
1269
1269
|
"borderRadius": "6px"
|
|
1270
1270
|
},
|
|
1271
1271
|
"config": {
|
|
@@ -1659,8 +1659,8 @@ export const FORM_TEMPLATES = {
|
|
|
1659
1659
|
"style": {
|
|
1660
1660
|
"width": "100%",
|
|
1661
1661
|
"padding": "10px 16px",
|
|
1662
|
-
"backgroundColor": "#171717",
|
|
1663
|
-
"color": "#ffffff",
|
|
1662
|
+
"backgroundColor": "var(--wb-sc-buttonBg, #171717)",
|
|
1663
|
+
"color": "var(--wb-sc-buttonText, #ffffff)",
|
|
1664
1664
|
"borderRadius": "6px"
|
|
1665
1665
|
},
|
|
1666
1666
|
"config": {
|
|
@@ -2166,8 +2166,8 @@ export const FORM_TEMPLATES = {
|
|
|
2166
2166
|
"style": {
|
|
2167
2167
|
"width": "100%",
|
|
2168
2168
|
"padding": "10px 16px",
|
|
2169
|
-
"backgroundColor": "#171717",
|
|
2170
|
-
"color": "#ffffff",
|
|
2169
|
+
"backgroundColor": "var(--wb-sc-buttonBg, #171717)",
|
|
2170
|
+
"color": "var(--wb-sc-buttonText, #ffffff)",
|
|
2171
2171
|
"borderRadius": "6px"
|
|
2172
2172
|
},
|
|
2173
2173
|
"config": {
|
|
@@ -2915,8 +2915,8 @@ export const FORM_TEMPLATES = {
|
|
|
2915
2915
|
"style": {
|
|
2916
2916
|
"width": "100%",
|
|
2917
2917
|
"padding": "10px 16px",
|
|
2918
|
-
"backgroundColor": "#171717",
|
|
2919
|
-
"color": "#ffffff",
|
|
2918
|
+
"backgroundColor": "var(--wb-sc-buttonBg, #171717)",
|
|
2919
|
+
"color": "var(--wb-sc-buttonText, #ffffff)",
|
|
2920
2920
|
"borderRadius": "6px"
|
|
2921
2921
|
},
|
|
2922
2922
|
"config": {
|
|
@@ -3169,8 +3169,8 @@ export const FORM_TEMPLATES = {
|
|
|
3169
3169
|
"style": {
|
|
3170
3170
|
"width": "100%",
|
|
3171
3171
|
"padding": "10px 16px",
|
|
3172
|
-
"backgroundColor": "#171717",
|
|
3173
|
-
"color": "#ffffff",
|
|
3172
|
+
"backgroundColor": "var(--wb-sc-buttonBg, #171717)",
|
|
3173
|
+
"color": "var(--wb-sc-buttonText, #ffffff)",
|
|
3174
3174
|
"borderRadius": "6px"
|
|
3175
3175
|
},
|
|
3176
3176
|
"config": {
|
|
@@ -3466,8 +3466,8 @@ export const FORM_TEMPLATES = {
|
|
|
3466
3466
|
"style": {
|
|
3467
3467
|
"width": "100%",
|
|
3468
3468
|
"padding": "10px 16px",
|
|
3469
|
-
"backgroundColor": "#171717",
|
|
3470
|
-
"color": "#ffffff",
|
|
3469
|
+
"backgroundColor": "var(--wb-sc-buttonBg, #171717)",
|
|
3470
|
+
"color": "var(--wb-sc-buttonText, #ffffff)",
|
|
3471
3471
|
"borderRadius": "6px"
|
|
3472
3472
|
},
|
|
3473
3473
|
"config": {
|
|
@@ -3837,8 +3837,8 @@ export const FORM_TEMPLATES = {
|
|
|
3837
3837
|
"style": {
|
|
3838
3838
|
"width": "100%",
|
|
3839
3839
|
"padding": "10px 16px",
|
|
3840
|
-
"backgroundColor": "#171717",
|
|
3841
|
-
"color": "#ffffff",
|
|
3840
|
+
"backgroundColor": "var(--wb-sc-buttonBg, #171717)",
|
|
3841
|
+
"color": "var(--wb-sc-buttonText, #ffffff)",
|
|
3842
3842
|
"borderRadius": "6px"
|
|
3843
3843
|
},
|
|
3844
3844
|
"config": {
|
|
@@ -4060,8 +4060,8 @@ export const FORM_TEMPLATES = {
|
|
|
4060
4060
|
"style": {
|
|
4061
4061
|
"width": "100%",
|
|
4062
4062
|
"padding": "10px 16px",
|
|
4063
|
-
"backgroundColor": "#171717",
|
|
4064
|
-
"color": "#ffffff",
|
|
4063
|
+
"backgroundColor": "var(--wb-sc-buttonBg, #171717)",
|
|
4064
|
+
"color": "var(--wb-sc-buttonText, #ffffff)",
|
|
4065
4065
|
"borderRadius": "6px"
|
|
4066
4066
|
},
|
|
4067
4067
|
"config": {
|
|
@@ -4323,8 +4323,8 @@ export const FORM_TEMPLATES = {
|
|
|
4323
4323
|
"style": {
|
|
4324
4324
|
"width": "100%",
|
|
4325
4325
|
"padding": "10px 16px",
|
|
4326
|
-
"backgroundColor": "#171717",
|
|
4327
|
-
"color": "#ffffff",
|
|
4326
|
+
"backgroundColor": "var(--wb-sc-buttonBg, #171717)",
|
|
4327
|
+
"color": "var(--wb-sc-buttonText, #ffffff)",
|
|
4328
4328
|
"borderRadius": "6px"
|
|
4329
4329
|
},
|
|
4330
4330
|
"config": {
|
|
@@ -4591,8 +4591,8 @@ export const FORM_TEMPLATES = {
|
|
|
4591
4591
|
"style": {
|
|
4592
4592
|
"width": "100%",
|
|
4593
4593
|
"padding": "10px 16px",
|
|
4594
|
-
"backgroundColor": "#171717",
|
|
4595
|
-
"color": "#ffffff",
|
|
4594
|
+
"backgroundColor": "var(--wb-sc-buttonBg, #171717)",
|
|
4595
|
+
"color": "var(--wb-sc-buttonText, #ffffff)",
|
|
4596
4596
|
"borderRadius": "6px"
|
|
4597
4597
|
},
|
|
4598
4598
|
"config": {
|
|
@@ -4891,8 +4891,8 @@ export const FORM_TEMPLATES = {
|
|
|
4891
4891
|
"style": {
|
|
4892
4892
|
"width": "100%",
|
|
4893
4893
|
"padding": "10px 16px",
|
|
4894
|
-
"backgroundColor": "#171717",
|
|
4895
|
-
"color": "#ffffff",
|
|
4894
|
+
"backgroundColor": "var(--wb-sc-buttonBg, #171717)",
|
|
4895
|
+
"color": "var(--wb-sc-buttonText, #ffffff)",
|
|
4896
4896
|
"borderRadius": "6px"
|
|
4897
4897
|
},
|
|
4898
4898
|
"config": {
|
|
@@ -4927,7 +4927,9 @@ export const FORM_TEMPLATES = {
|
|
|
4927
4927
|
"flog_2",
|
|
4928
4928
|
"flog_3",
|
|
4929
4929
|
"flog_4",
|
|
4930
|
-
"flog_5"
|
|
4930
|
+
"flog_5",
|
|
4931
|
+
"flog_6",
|
|
4932
|
+
"flog_7"
|
|
4931
4933
|
],
|
|
4932
4934
|
"isCanvas": false,
|
|
4933
4935
|
"hidden": false,
|
|
@@ -5077,8 +5079,8 @@ export const FORM_TEMPLATES = {
|
|
|
5077
5079
|
"style": {
|
|
5078
5080
|
"width": "100%",
|
|
5079
5081
|
"padding": "10px 16px",
|
|
5080
|
-
"backgroundColor": "#171717",
|
|
5081
|
-
"color": "#ffffff",
|
|
5082
|
+
"backgroundColor": "var(--wb-sc-buttonBg, #171717)",
|
|
5083
|
+
"color": "var(--wb-sc-buttonText, #ffffff)",
|
|
5082
5084
|
"borderRadius": "6px"
|
|
5083
5085
|
},
|
|
5084
5086
|
"config": {
|
|
@@ -5093,6 +5095,64 @@ export const FORM_TEMPLATES = {
|
|
|
5093
5095
|
"responsive": {},
|
|
5094
5096
|
"events": [],
|
|
5095
5097
|
"bindings": []
|
|
5098
|
+
},
|
|
5099
|
+
"flog_6": {
|
|
5100
|
+
"id": "flog_6",
|
|
5101
|
+
"data": {
|
|
5102
|
+
"type": "form-link",
|
|
5103
|
+
"parent": "flog_1",
|
|
5104
|
+
"nodes": [],
|
|
5105
|
+
"isCanvas": false,
|
|
5106
|
+
"hidden": false,
|
|
5107
|
+
"custom": {}
|
|
5108
|
+
},
|
|
5109
|
+
"style": {
|
|
5110
|
+
"width": "100%",
|
|
5111
|
+
"height": "fit-content",
|
|
5112
|
+
"textAlign": "center",
|
|
5113
|
+
"lineHeight": "150%",
|
|
5114
|
+
"fontSize": "14px",
|
|
5115
|
+
"color": "#525252"
|
|
5116
|
+
},
|
|
5117
|
+
"config": {},
|
|
5118
|
+
"specials": {
|
|
5119
|
+
"text": "",
|
|
5120
|
+
"linkText": "Quên mật khẩu?",
|
|
5121
|
+
"linkTarget": "forgot",
|
|
5122
|
+
"href": ""
|
|
5123
|
+
},
|
|
5124
|
+
"responsive": {},
|
|
5125
|
+
"events": [],
|
|
5126
|
+
"bindings": []
|
|
5127
|
+
},
|
|
5128
|
+
"flog_7": {
|
|
5129
|
+
"id": "flog_7",
|
|
5130
|
+
"data": {
|
|
5131
|
+
"type": "form-link",
|
|
5132
|
+
"parent": "flog_1",
|
|
5133
|
+
"nodes": [],
|
|
5134
|
+
"isCanvas": false,
|
|
5135
|
+
"hidden": false,
|
|
5136
|
+
"custom": {}
|
|
5137
|
+
},
|
|
5138
|
+
"style": {
|
|
5139
|
+
"width": "100%",
|
|
5140
|
+
"height": "fit-content",
|
|
5141
|
+
"textAlign": "center",
|
|
5142
|
+
"lineHeight": "150%",
|
|
5143
|
+
"fontSize": "14px",
|
|
5144
|
+
"color": "#525252"
|
|
5145
|
+
},
|
|
5146
|
+
"config": {},
|
|
5147
|
+
"specials": {
|
|
5148
|
+
"text": "Chưa có tài khoản?",
|
|
5149
|
+
"linkText": "Đăng ký ngay",
|
|
5150
|
+
"linkTarget": "register",
|
|
5151
|
+
"href": ""
|
|
5152
|
+
},
|
|
5153
|
+
"responsive": {},
|
|
5154
|
+
"events": [],
|
|
5155
|
+
"bindings": []
|
|
5096
5156
|
}
|
|
5097
5157
|
}
|
|
5098
5158
|
}
|
|
@@ -5115,7 +5175,8 @@ export const FORM_TEMPLATES = {
|
|
|
5115
5175
|
"freg_4",
|
|
5116
5176
|
"freg_5",
|
|
5117
5177
|
"freg_6",
|
|
5118
|
-
"freg_7"
|
|
5178
|
+
"freg_7",
|
|
5179
|
+
"freg_8"
|
|
5119
5180
|
],
|
|
5120
5181
|
"isCanvas": false,
|
|
5121
5182
|
"hidden": false,
|
|
@@ -5345,8 +5406,8 @@ export const FORM_TEMPLATES = {
|
|
|
5345
5406
|
"style": {
|
|
5346
5407
|
"width": "100%",
|
|
5347
5408
|
"padding": "10px 16px",
|
|
5348
|
-
"backgroundColor": "#171717",
|
|
5349
|
-
"color": "#ffffff",
|
|
5409
|
+
"backgroundColor": "var(--wb-sc-buttonBg, #171717)",
|
|
5410
|
+
"color": "var(--wb-sc-buttonText, #ffffff)",
|
|
5350
5411
|
"borderRadius": "6px"
|
|
5351
5412
|
},
|
|
5352
5413
|
"config": {
|
|
@@ -5361,6 +5422,35 @@ export const FORM_TEMPLATES = {
|
|
|
5361
5422
|
"responsive": {},
|
|
5362
5423
|
"events": [],
|
|
5363
5424
|
"bindings": []
|
|
5425
|
+
},
|
|
5426
|
+
"freg_8": {
|
|
5427
|
+
"id": "freg_8",
|
|
5428
|
+
"data": {
|
|
5429
|
+
"type": "form-link",
|
|
5430
|
+
"parent": "freg_1",
|
|
5431
|
+
"nodes": [],
|
|
5432
|
+
"isCanvas": false,
|
|
5433
|
+
"hidden": false,
|
|
5434
|
+
"custom": {}
|
|
5435
|
+
},
|
|
5436
|
+
"style": {
|
|
5437
|
+
"width": "100%",
|
|
5438
|
+
"height": "fit-content",
|
|
5439
|
+
"textAlign": "center",
|
|
5440
|
+
"lineHeight": "150%",
|
|
5441
|
+
"fontSize": "14px",
|
|
5442
|
+
"color": "#525252"
|
|
5443
|
+
},
|
|
5444
|
+
"config": {},
|
|
5445
|
+
"specials": {
|
|
5446
|
+
"text": "Đã có tài khoản?",
|
|
5447
|
+
"linkText": "Đăng nhập",
|
|
5448
|
+
"linkTarget": "login",
|
|
5449
|
+
"href": ""
|
|
5450
|
+
},
|
|
5451
|
+
"responsive": {},
|
|
5452
|
+
"events": [],
|
|
5453
|
+
"bindings": []
|
|
5364
5454
|
}
|
|
5365
5455
|
}
|
|
5366
5456
|
}
|
|
@@ -5380,7 +5470,8 @@ export const FORM_TEMPLATES = {
|
|
|
5380
5470
|
"nodes": [
|
|
5381
5471
|
"ffor_2",
|
|
5382
5472
|
"ffor_3",
|
|
5383
|
-
"ffor_4"
|
|
5473
|
+
"ffor_4",
|
|
5474
|
+
"ffor_5"
|
|
5384
5475
|
],
|
|
5385
5476
|
"isCanvas": false,
|
|
5386
5477
|
"hidden": false,
|
|
@@ -5490,8 +5581,8 @@ export const FORM_TEMPLATES = {
|
|
|
5490
5581
|
"style": {
|
|
5491
5582
|
"width": "100%",
|
|
5492
5583
|
"padding": "10px 16px",
|
|
5493
|
-
"backgroundColor": "#171717",
|
|
5494
|
-
"color": "#ffffff",
|
|
5584
|
+
"backgroundColor": "var(--wb-sc-buttonBg, #171717)",
|
|
5585
|
+
"color": "var(--wb-sc-buttonText, #ffffff)",
|
|
5495
5586
|
"borderRadius": "6px"
|
|
5496
5587
|
},
|
|
5497
5588
|
"config": {
|
|
@@ -5506,6 +5597,35 @@ export const FORM_TEMPLATES = {
|
|
|
5506
5597
|
"responsive": {},
|
|
5507
5598
|
"events": [],
|
|
5508
5599
|
"bindings": []
|
|
5600
|
+
},
|
|
5601
|
+
"ffor_5": {
|
|
5602
|
+
"id": "ffor_5",
|
|
5603
|
+
"data": {
|
|
5604
|
+
"type": "form-link",
|
|
5605
|
+
"parent": "ffor_1",
|
|
5606
|
+
"nodes": [],
|
|
5607
|
+
"isCanvas": false,
|
|
5608
|
+
"hidden": false,
|
|
5609
|
+
"custom": {}
|
|
5610
|
+
},
|
|
5611
|
+
"style": {
|
|
5612
|
+
"width": "100%",
|
|
5613
|
+
"height": "fit-content",
|
|
5614
|
+
"textAlign": "center",
|
|
5615
|
+
"lineHeight": "150%",
|
|
5616
|
+
"fontSize": "14px",
|
|
5617
|
+
"color": "#525252"
|
|
5618
|
+
},
|
|
5619
|
+
"config": {},
|
|
5620
|
+
"specials": {
|
|
5621
|
+
"text": "Nhớ mật khẩu rồi?",
|
|
5622
|
+
"linkText": "Đăng nhập",
|
|
5623
|
+
"linkTarget": "login",
|
|
5624
|
+
"href": ""
|
|
5625
|
+
},
|
|
5626
|
+
"responsive": {},
|
|
5627
|
+
"events": [],
|
|
5628
|
+
"bindings": []
|
|
5509
5629
|
}
|
|
5510
5630
|
}
|
|
5511
5631
|
}
|
|
@@ -5676,8 +5796,8 @@ export const FORM_TEMPLATES = {
|
|
|
5676
5796
|
"style": {
|
|
5677
5797
|
"width": "100%",
|
|
5678
5798
|
"padding": "10px 16px",
|
|
5679
|
-
"backgroundColor": "#171717",
|
|
5680
|
-
"color": "#ffffff",
|
|
5799
|
+
"backgroundColor": "var(--wb-sc-buttonBg, #171717)",
|
|
5800
|
+
"color": "var(--wb-sc-buttonText, #ffffff)",
|
|
5681
5801
|
"borderRadius": "6px"
|
|
5682
5802
|
},
|
|
5683
5803
|
"config": {
|
|
@@ -5944,8 +6064,8 @@ export const FORM_TEMPLATES = {
|
|
|
5944
6064
|
"style": {
|
|
5945
6065
|
"width": "100%",
|
|
5946
6066
|
"padding": "10px 16px",
|
|
5947
|
-
"backgroundColor": "#171717",
|
|
5948
|
-
"color": "#ffffff",
|
|
6067
|
+
"backgroundColor": "var(--wb-sc-buttonBg, #171717)",
|
|
6068
|
+
"color": "var(--wb-sc-buttonText, #ffffff)",
|
|
5949
6069
|
"borderRadius": "6px"
|
|
5950
6070
|
},
|
|
5951
6071
|
"config": {
|