sbuilder-mcp 0.2.0 → 0.2.2
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 +29 -0
- package/CHANGELOG.vi.md +29 -0
- package/dist/catalog/elements.generated.js +569 -0
- package/dist/core/tree.js +26 -1
- package/dist/domains/site/builder.js +68 -4
- package/dist/domains/site/findings.js +58 -0
- package/dist/domains/site/node.js +90 -1
- package/dist/domains/site/review.js +67 -1
- package/dist/domains/site/traps.js +24 -0
- package/dist/domains/site/validate.js +31 -1
- package/dist/smoke.js +29 -0
- package/dist/tools/live.js +29 -14
- package/dist/tools/page.js +61 -4
- package/dist/transport/http.js +4 -2
- package/dist/transport/media.js +19 -10
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,35 @@ 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.2.2] - 2026-09-07
|
|
10
|
+
|
|
11
|
+
### Fixed
|
|
12
|
+
- sb_live_join now accepts an API key (SB_TOKEN) to join the live-edit room, instead of refusing it and requiring a session; the platform now gates the socket on the key's delegated member permission and its own site, so a key-only install can join like every other tool.
|
|
13
|
+
- sb_media_upload now accepts an API key, instead of refusing it and requiring a session; the platform's upload endpoint moved behind the same gate as sb_sites, and a 401 with a key present now reports that the key lacks the media permission or belongs to another site, rather than telling the caller to switch credentials.
|
|
14
|
+
|
|
15
|
+
## [0.2.1] - 2026-09-07
|
|
16
|
+
|
|
17
|
+
### Added
|
|
18
|
+
- sb_add and sb_move now seed the same content the editor gives an element at drop time: satellite nodes such as an accordion's item skin or a tab's shared button, and seeded subtrees for a list's empty state and for dropdown, select and popover, which render as an empty box without them.
|
|
19
|
+
- sb_page_open reports compose_warnings from the platform, including globalMissing, which means the server could not find a shared section's master and deleted the reference node from the document it handed back — saving from there makes the loss permanent.
|
|
20
|
+
- sb_page_create reports slug_renamed when the requested slug was already taken; the platform silently stores a suffixed slug and answers success, so every link authored to the requested slug would otherwise be dead.
|
|
21
|
+
- sb_publish reports not_published when a page has no saved draft, since the platform skips it and still answers success with whatever else did publish.
|
|
22
|
+
- sb_review reports unlinked_form when a form element names no form, since it composes nothing and publishes as an empty box with no warning from the platform.
|
|
23
|
+
- sb_review reports dead_menu_link when a menu has no entries or an entry has no href, since the renderer reads specials.menuItems and never menuId.
|
|
24
|
+
- sb_review reports extra_repeater_child when a repeater element (such as list-dataset) carries more than one child, since only the first is ever rendered per record.
|
|
25
|
+
|
|
26
|
+
### Changed
|
|
27
|
+
- sb_add and sb_move now refuse adding or moving a second child into a repeater element, since only the first child renders; a reorder within the same parent is still allowed.
|
|
28
|
+
- sb_duplicate now refuses duplicating into a repeater element for the same reason, and deep-copies satellite nodes (such as an accordion's skin) with the owner's pointer rewritten instead of aiming the copy at the original's satellite.
|
|
29
|
+
- sb_duplicate strips the composition stamps (globalId, globalRef, globalKind, globalRev) from a duplicated node instead of copying them, since two nodes sharing one stamp is refused by the platform on the next save.
|
|
30
|
+
- sb_publish now returns only the fields a caller acts on (pageId, slug, isHomepage) for each published page instead of the platform's full rendered document, html and css for every page the cascade touched.
|
|
31
|
+
- sb_page_create's dry_run preview and live response now redact settings the same way sb_api_call does, since it is a free-form object a caller can pass a credential inside.
|
|
32
|
+
- The internal tree walk used by sb_remove, sb_duplicate and save validation now follows satellite nodes (attached through config, not the child list) in addition to the child list, so removing or duplicating a node also handles its satellites correctly.
|
|
33
|
+
- Save validation now refuses a document where a composition stamp (globalId, overlayId) sits on a node that is not a direct child of ROOT, or is duplicated across two nodes, since the platform refuses both later and reports it as an opaque error.
|
|
34
|
+
|
|
35
|
+
### Fixed
|
|
36
|
+
- Reordering a node within the same repeater parent no longer trips the new second-child guard.
|
|
37
|
+
|
|
9
38
|
## [0.2.0] - 2026-09-07
|
|
10
39
|
|
|
11
40
|
### Added
|
package/CHANGELOG.vi.md
CHANGED
|
@@ -6,6 +6,35 @@ 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.2.2] - 2026-09-07
|
|
10
|
+
|
|
11
|
+
### Fixed
|
|
12
|
+
- sb_live_join giờ chấp nhận API key (SB_TOKEN) để vào phòng live-edit, thay vì từ chối và bắt buộc dùng session; nền tảng giờ kiểm soát socket dựa trên quyền member được ủy quyền qua key và site của chính key đó, nên một cài đặt chỉ dùng key có thể tham gia như mọi tool khác.
|
|
13
|
+
- sb_media_upload giờ chấp nhận API key, thay vì từ chối và bắt buộc dùng session; endpoint upload của nền tảng giờ nằm sau cùng một cổng chặn với sb_sites, và lỗi 401 khi có key giờ báo rằng key thiếu quyền media hoặc thuộc site khác, thay vì bảo caller đổi sang loại credential khác.
|
|
14
|
+
|
|
15
|
+
## [0.2.1] - 2026-09-07
|
|
16
|
+
|
|
17
|
+
### Added
|
|
18
|
+
- sb_add và sb_move giờ seed đúng nội dung mà editor gán cho một element lúc kéo-thả: các node vệ tinh như skin của từng mục accordion hay nút dùng chung của tab, và các subtree được seed sẵn cho trạng thái rỗng của list cũng như cho dropdown, select và popover — vốn render thành hộp trống nếu thiếu chúng.
|
|
19
|
+
- sb_page_open giờ báo cáo compose_warnings từ nền tảng, bao gồm globalMissing — nghĩa là server không tìm thấy bản gốc của một shared section và đã xóa node tham chiếu khỏi document trả về; lưu từ đây sẽ khiến việc mất đó thành vĩnh viễn.
|
|
20
|
+
- sb_page_create giờ báo cáo slug_renamed khi slug yêu cầu đã bị chiếm; nền tảng âm thầm lưu một slug có hậu tố khác và trả về thành công, nên mọi link được gán theo slug yêu cầu ban đầu sẽ chết nếu không có cảnh báo này.
|
|
21
|
+
- sb_publish giờ báo cáo not_published khi một trang chưa có draft đã lưu, vì nền tảng bỏ qua trang đó và vẫn trả về thành công kèm những trang khác đã publish được.
|
|
22
|
+
- sb_review giờ báo cáo unlinked_form khi một form element không trỏ tới form nào, vì nó không compose được gì và publish thành một hộp trống mà nền tảng không hề cảnh báo.
|
|
23
|
+
- sb_review giờ báo cáo dead_menu_link khi một menu không có entry nào hoặc một entry không có href, vì renderer chỉ đọc specials.menuItems chứ không đọc menuId.
|
|
24
|
+
- sb_review giờ báo cáo extra_repeater_child khi một repeater element (như list-dataset) có nhiều hơn một child, vì chỉ child đầu tiên được render cho mỗi record.
|
|
25
|
+
|
|
26
|
+
### Changed
|
|
27
|
+
- sb_add và sb_move giờ từ chối thêm hoặc di chuyển child thứ hai vào một repeater element, vì chỉ child đầu tiên được render; việc sắp xếp lại thứ tự trong cùng một parent vẫn được cho phép.
|
|
28
|
+
- sb_duplicate giờ cũng từ chối nhân bản vào một repeater element vì lý do tương tự, và deep-copy các node vệ tinh (như skin của accordion) kèm việc ghi lại con trỏ về đúng owner mới, thay vì để bản sao trỏ vào vệ tinh của bản gốc.
|
|
29
|
+
- sb_duplicate giờ loại bỏ các stamp composition (globalId, globalRef, globalKind, globalRev) khỏi node được nhân bản thay vì sao chép nguyên trạng, vì hai node dùng chung một stamp sẽ bị nền tảng từ chối ở lần lưu kế tiếp.
|
|
30
|
+
- sb_publish giờ chỉ trả về các trường mà caller thực sự dùng đến (pageId, slug, isHomepage) cho mỗi trang đã publish, thay vì toàn bộ document, html và css đã render của mọi trang mà cascade chạm tới.
|
|
31
|
+
- Bản xem trước dry_run và phản hồi thật của sb_page_create giờ redact settings giống cách sb_api_call làm, vì đây là một object tự do mà caller có thể lỡ truyền credential vào.
|
|
32
|
+
- Lượt duyệt cây nội bộ dùng bởi sb_remove, sb_duplicate và kiểm tra khi lưu giờ đi theo cả các node vệ tinh (gắn qua config, không qua child list) bên cạnh child list, nên việc xóa hoặc nhân bản một node giờ xử lý đúng cả các vệ tinh của nó.
|
|
33
|
+
- Kiểm tra khi lưu giờ từ chối một document có stamp composition (globalId, overlayId) nằm trên node không phải con trực tiếp của ROOT, hoặc bị lặp trên hai node, vì nền tảng cũng từ chối cả hai trường hợp này nhưng báo lỗi mơ hồ ở bước sau.
|
|
34
|
+
|
|
35
|
+
### Fixed
|
|
36
|
+
- Sắp xếp lại một node trong cùng parent của repeater không còn bị chặn nhầm bởi guard child thứ hai mới thêm.
|
|
37
|
+
|
|
9
38
|
## [0.2.0] - 2026-09-07
|
|
10
39
|
|
|
11
40
|
### Added
|
|
@@ -32969,3 +32969,572 @@ export const TRAIT_WRITES = {
|
|
|
32969
32969
|
]
|
|
32970
32970
|
}
|
|
32971
32971
|
};
|
|
32972
|
+
export const SATELLITE_RULES = {
|
|
32973
|
+
"tab": [
|
|
32974
|
+
{
|
|
32975
|
+
"type": "tab-item",
|
|
32976
|
+
"configKey": "tabItemId"
|
|
32977
|
+
}
|
|
32978
|
+
],
|
|
32979
|
+
"accordion": [
|
|
32980
|
+
{
|
|
32981
|
+
"type": "accordion-item",
|
|
32982
|
+
"configKey": "accordionItemId"
|
|
32983
|
+
}
|
|
32984
|
+
],
|
|
32985
|
+
"menu": [
|
|
32986
|
+
{
|
|
32987
|
+
"type": "menu-item",
|
|
32988
|
+
"configKey": "menuItemId"
|
|
32989
|
+
},
|
|
32990
|
+
{
|
|
32991
|
+
"type": "menu-dropdown",
|
|
32992
|
+
"configKey": "menuDropdownId"
|
|
32993
|
+
}
|
|
32994
|
+
],
|
|
32995
|
+
"cart-order": [
|
|
32996
|
+
{
|
|
32997
|
+
"type": "list-empty",
|
|
32998
|
+
"configKey": "emptyStateId",
|
|
32999
|
+
"seed": {
|
|
33000
|
+
"type": "list-empty",
|
|
33001
|
+
"children": [
|
|
33002
|
+
{
|
|
33003
|
+
"type": "icon",
|
|
33004
|
+
"style": {
|
|
33005
|
+
"color": "#d4d4d4"
|
|
33006
|
+
},
|
|
33007
|
+
"config": {
|
|
33008
|
+
"iconSize": 32
|
|
33009
|
+
},
|
|
33010
|
+
"specials": {
|
|
33011
|
+
"name": "ShoppingCartLine"
|
|
33012
|
+
}
|
|
33013
|
+
},
|
|
33014
|
+
{
|
|
33015
|
+
"type": "heading",
|
|
33016
|
+
"style": {
|
|
33017
|
+
"width": "auto",
|
|
33018
|
+
"fontSize": "20px",
|
|
33019
|
+
"fontWeight": "600",
|
|
33020
|
+
"color": "#171717",
|
|
33021
|
+
"textAlign": "center"
|
|
33022
|
+
},
|
|
33023
|
+
"specials": {
|
|
33024
|
+
"htmlTag": "h3",
|
|
33025
|
+
"text": "Your cart is empty"
|
|
33026
|
+
}
|
|
33027
|
+
},
|
|
33028
|
+
{
|
|
33029
|
+
"type": "text",
|
|
33030
|
+
"style": {
|
|
33031
|
+
"width": "auto",
|
|
33032
|
+
"fontSize": "14px",
|
|
33033
|
+
"color": "#737373",
|
|
33034
|
+
"textAlign": "center"
|
|
33035
|
+
},
|
|
33036
|
+
"specials": {
|
|
33037
|
+
"text": "Add something you like and it will show up here."
|
|
33038
|
+
}
|
|
33039
|
+
}
|
|
33040
|
+
]
|
|
33041
|
+
}
|
|
33042
|
+
}
|
|
33043
|
+
],
|
|
33044
|
+
"quantity-dataset": [
|
|
33045
|
+
{
|
|
33046
|
+
"type": "quantity-button",
|
|
33047
|
+
"configKey": "quantityButtonId"
|
|
33048
|
+
},
|
|
33049
|
+
{
|
|
33050
|
+
"type": "quantity-input",
|
|
33051
|
+
"configKey": "quantityInputId"
|
|
33052
|
+
}
|
|
33053
|
+
],
|
|
33054
|
+
"product-variants": [
|
|
33055
|
+
{
|
|
33056
|
+
"type": "product-variant-label",
|
|
33057
|
+
"configKey": "variantLabelId"
|
|
33058
|
+
},
|
|
33059
|
+
{
|
|
33060
|
+
"type": "product-variant-option",
|
|
33061
|
+
"configKey": "variantOptionId"
|
|
33062
|
+
}
|
|
33063
|
+
],
|
|
33064
|
+
"dataset-block": [
|
|
33065
|
+
{
|
|
33066
|
+
"type": "list-empty",
|
|
33067
|
+
"configKey": "emptyStateId",
|
|
33068
|
+
"seed": {
|
|
33069
|
+
"type": "list-empty",
|
|
33070
|
+
"children": [
|
|
33071
|
+
{
|
|
33072
|
+
"type": "icon",
|
|
33073
|
+
"style": {
|
|
33074
|
+
"color": "#d4d4d4"
|
|
33075
|
+
},
|
|
33076
|
+
"config": {
|
|
33077
|
+
"iconSize": 32
|
|
33078
|
+
},
|
|
33079
|
+
"specials": {
|
|
33080
|
+
"name": "ShoppingBag3Line"
|
|
33081
|
+
}
|
|
33082
|
+
},
|
|
33083
|
+
{
|
|
33084
|
+
"type": "heading",
|
|
33085
|
+
"style": {
|
|
33086
|
+
"width": "auto",
|
|
33087
|
+
"fontSize": "20px",
|
|
33088
|
+
"fontWeight": "600",
|
|
33089
|
+
"color": "#171717",
|
|
33090
|
+
"textAlign": "center"
|
|
33091
|
+
},
|
|
33092
|
+
"specials": {
|
|
33093
|
+
"htmlTag": "h3",
|
|
33094
|
+
"text": "This item is unavailable"
|
|
33095
|
+
}
|
|
33096
|
+
},
|
|
33097
|
+
{
|
|
33098
|
+
"type": "text",
|
|
33099
|
+
"style": {
|
|
33100
|
+
"width": "auto",
|
|
33101
|
+
"fontSize": "14px",
|
|
33102
|
+
"color": "#737373",
|
|
33103
|
+
"textAlign": "center"
|
|
33104
|
+
},
|
|
33105
|
+
"specials": {
|
|
33106
|
+
"text": "It may have been removed. Have a look at the rest of the shop."
|
|
33107
|
+
}
|
|
33108
|
+
}
|
|
33109
|
+
]
|
|
33110
|
+
}
|
|
33111
|
+
}
|
|
33112
|
+
],
|
|
33113
|
+
"list-dataset": [
|
|
33114
|
+
{
|
|
33115
|
+
"type": "list-empty",
|
|
33116
|
+
"configKey": "emptyStateId",
|
|
33117
|
+
"seedBySource": {
|
|
33118
|
+
"product": {
|
|
33119
|
+
"type": "list-empty",
|
|
33120
|
+
"children": [
|
|
33121
|
+
{
|
|
33122
|
+
"type": "icon",
|
|
33123
|
+
"style": {
|
|
33124
|
+
"color": "#d4d4d4"
|
|
33125
|
+
},
|
|
33126
|
+
"config": {
|
|
33127
|
+
"iconSize": 32
|
|
33128
|
+
},
|
|
33129
|
+
"specials": {
|
|
33130
|
+
"name": "ShoppingBag3Line"
|
|
33131
|
+
}
|
|
33132
|
+
},
|
|
33133
|
+
{
|
|
33134
|
+
"type": "heading",
|
|
33135
|
+
"style": {
|
|
33136
|
+
"width": "auto",
|
|
33137
|
+
"fontSize": "20px",
|
|
33138
|
+
"fontWeight": "600",
|
|
33139
|
+
"color": "#171717",
|
|
33140
|
+
"textAlign": "center"
|
|
33141
|
+
},
|
|
33142
|
+
"specials": {
|
|
33143
|
+
"htmlTag": "h3",
|
|
33144
|
+
"text": "No products yet"
|
|
33145
|
+
}
|
|
33146
|
+
},
|
|
33147
|
+
{
|
|
33148
|
+
"type": "text",
|
|
33149
|
+
"style": {
|
|
33150
|
+
"width": "auto",
|
|
33151
|
+
"fontSize": "14px",
|
|
33152
|
+
"color": "#737373",
|
|
33153
|
+
"textAlign": "center"
|
|
33154
|
+
},
|
|
33155
|
+
"specials": {
|
|
33156
|
+
"text": "New arrivals will show up here. Check back soon."
|
|
33157
|
+
}
|
|
33158
|
+
}
|
|
33159
|
+
]
|
|
33160
|
+
},
|
|
33161
|
+
"category": {
|
|
33162
|
+
"type": "list-empty",
|
|
33163
|
+
"children": [
|
|
33164
|
+
{
|
|
33165
|
+
"type": "icon",
|
|
33166
|
+
"style": {
|
|
33167
|
+
"color": "#d4d4d4"
|
|
33168
|
+
},
|
|
33169
|
+
"config": {
|
|
33170
|
+
"iconSize": 32
|
|
33171
|
+
},
|
|
33172
|
+
"specials": {
|
|
33173
|
+
"name": "ArchiveLine"
|
|
33174
|
+
}
|
|
33175
|
+
},
|
|
33176
|
+
{
|
|
33177
|
+
"type": "heading",
|
|
33178
|
+
"style": {
|
|
33179
|
+
"width": "auto",
|
|
33180
|
+
"fontSize": "20px",
|
|
33181
|
+
"fontWeight": "600",
|
|
33182
|
+
"color": "#171717",
|
|
33183
|
+
"textAlign": "center"
|
|
33184
|
+
},
|
|
33185
|
+
"specials": {
|
|
33186
|
+
"htmlTag": "h3",
|
|
33187
|
+
"text": "No collections yet"
|
|
33188
|
+
}
|
|
33189
|
+
},
|
|
33190
|
+
{
|
|
33191
|
+
"type": "text",
|
|
33192
|
+
"style": {
|
|
33193
|
+
"width": "auto",
|
|
33194
|
+
"fontSize": "14px",
|
|
33195
|
+
"color": "#737373",
|
|
33196
|
+
"textAlign": "center"
|
|
33197
|
+
},
|
|
33198
|
+
"specials": {
|
|
33199
|
+
"text": "Collections you create will show up here."
|
|
33200
|
+
}
|
|
33201
|
+
}
|
|
33202
|
+
]
|
|
33203
|
+
},
|
|
33204
|
+
"article": {
|
|
33205
|
+
"type": "list-empty",
|
|
33206
|
+
"children": [
|
|
33207
|
+
{
|
|
33208
|
+
"type": "icon",
|
|
33209
|
+
"style": {
|
|
33210
|
+
"color": "#d4d4d4"
|
|
33211
|
+
},
|
|
33212
|
+
"config": {
|
|
33213
|
+
"iconSize": 32
|
|
33214
|
+
},
|
|
33215
|
+
"specials": {
|
|
33216
|
+
"name": "FileListLine"
|
|
33217
|
+
}
|
|
33218
|
+
},
|
|
33219
|
+
{
|
|
33220
|
+
"type": "heading",
|
|
33221
|
+
"style": {
|
|
33222
|
+
"width": "auto",
|
|
33223
|
+
"fontSize": "20px",
|
|
33224
|
+
"fontWeight": "600",
|
|
33225
|
+
"color": "#171717",
|
|
33226
|
+
"textAlign": "center"
|
|
33227
|
+
},
|
|
33228
|
+
"specials": {
|
|
33229
|
+
"htmlTag": "h3",
|
|
33230
|
+
"text": "No posts yet"
|
|
33231
|
+
}
|
|
33232
|
+
},
|
|
33233
|
+
{
|
|
33234
|
+
"type": "text",
|
|
33235
|
+
"style": {
|
|
33236
|
+
"width": "auto",
|
|
33237
|
+
"fontSize": "14px",
|
|
33238
|
+
"color": "#737373",
|
|
33239
|
+
"textAlign": "center"
|
|
33240
|
+
},
|
|
33241
|
+
"specials": {
|
|
33242
|
+
"text": "New stories will show up here. Check back soon."
|
|
33243
|
+
}
|
|
33244
|
+
}
|
|
33245
|
+
]
|
|
33246
|
+
},
|
|
33247
|
+
"blogCategory": {
|
|
33248
|
+
"type": "list-empty",
|
|
33249
|
+
"children": [
|
|
33250
|
+
{
|
|
33251
|
+
"type": "icon",
|
|
33252
|
+
"style": {
|
|
33253
|
+
"color": "#d4d4d4"
|
|
33254
|
+
},
|
|
33255
|
+
"config": {
|
|
33256
|
+
"iconSize": 32
|
|
33257
|
+
},
|
|
33258
|
+
"specials": {
|
|
33259
|
+
"name": "InboxLine"
|
|
33260
|
+
}
|
|
33261
|
+
},
|
|
33262
|
+
{
|
|
33263
|
+
"type": "heading",
|
|
33264
|
+
"style": {
|
|
33265
|
+
"width": "auto",
|
|
33266
|
+
"fontSize": "20px",
|
|
33267
|
+
"fontWeight": "600",
|
|
33268
|
+
"color": "#171717",
|
|
33269
|
+
"textAlign": "center"
|
|
33270
|
+
},
|
|
33271
|
+
"specials": {
|
|
33272
|
+
"htmlTag": "h3",
|
|
33273
|
+
"text": "No topics yet"
|
|
33274
|
+
}
|
|
33275
|
+
},
|
|
33276
|
+
{
|
|
33277
|
+
"type": "text",
|
|
33278
|
+
"style": {
|
|
33279
|
+
"width": "auto",
|
|
33280
|
+
"fontSize": "14px",
|
|
33281
|
+
"color": "#737373",
|
|
33282
|
+
"textAlign": "center"
|
|
33283
|
+
},
|
|
33284
|
+
"specials": {
|
|
33285
|
+
"text": "Topics you create will show up here."
|
|
33286
|
+
}
|
|
33287
|
+
}
|
|
33288
|
+
]
|
|
33289
|
+
},
|
|
33290
|
+
"course": {
|
|
33291
|
+
"type": "list-empty",
|
|
33292
|
+
"children": [
|
|
33293
|
+
{
|
|
33294
|
+
"type": "icon",
|
|
33295
|
+
"style": {
|
|
33296
|
+
"color": "#d4d4d4"
|
|
33297
|
+
},
|
|
33298
|
+
"config": {
|
|
33299
|
+
"iconSize": 32
|
|
33300
|
+
},
|
|
33301
|
+
"specials": {
|
|
33302
|
+
"name": "GraduationCapLine"
|
|
33303
|
+
}
|
|
33304
|
+
},
|
|
33305
|
+
{
|
|
33306
|
+
"type": "heading",
|
|
33307
|
+
"style": {
|
|
33308
|
+
"width": "auto",
|
|
33309
|
+
"fontSize": "20px",
|
|
33310
|
+
"fontWeight": "600",
|
|
33311
|
+
"color": "#171717",
|
|
33312
|
+
"textAlign": "center"
|
|
33313
|
+
},
|
|
33314
|
+
"specials": {
|
|
33315
|
+
"htmlTag": "h3",
|
|
33316
|
+
"text": "No courses yet"
|
|
33317
|
+
}
|
|
33318
|
+
},
|
|
33319
|
+
{
|
|
33320
|
+
"type": "text",
|
|
33321
|
+
"style": {
|
|
33322
|
+
"width": "auto",
|
|
33323
|
+
"fontSize": "14px",
|
|
33324
|
+
"color": "#737373",
|
|
33325
|
+
"textAlign": "center"
|
|
33326
|
+
},
|
|
33327
|
+
"specials": {
|
|
33328
|
+
"text": "Courses you publish will show up here."
|
|
33329
|
+
}
|
|
33330
|
+
}
|
|
33331
|
+
]
|
|
33332
|
+
},
|
|
33333
|
+
"cart": {
|
|
33334
|
+
"type": "list-empty",
|
|
33335
|
+
"children": [
|
|
33336
|
+
{
|
|
33337
|
+
"type": "icon",
|
|
33338
|
+
"style": {
|
|
33339
|
+
"color": "#d4d4d4"
|
|
33340
|
+
},
|
|
33341
|
+
"config": {
|
|
33342
|
+
"iconSize": 32
|
|
33343
|
+
},
|
|
33344
|
+
"specials": {
|
|
33345
|
+
"name": "ShoppingCartLine"
|
|
33346
|
+
}
|
|
33347
|
+
},
|
|
33348
|
+
{
|
|
33349
|
+
"type": "heading",
|
|
33350
|
+
"style": {
|
|
33351
|
+
"width": "auto",
|
|
33352
|
+
"fontSize": "20px",
|
|
33353
|
+
"fontWeight": "600",
|
|
33354
|
+
"color": "#171717",
|
|
33355
|
+
"textAlign": "center"
|
|
33356
|
+
},
|
|
33357
|
+
"specials": {
|
|
33358
|
+
"htmlTag": "h3",
|
|
33359
|
+
"text": "Your cart is empty"
|
|
33360
|
+
}
|
|
33361
|
+
},
|
|
33362
|
+
{
|
|
33363
|
+
"type": "text",
|
|
33364
|
+
"style": {
|
|
33365
|
+
"width": "auto",
|
|
33366
|
+
"fontSize": "14px",
|
|
33367
|
+
"color": "#737373",
|
|
33368
|
+
"textAlign": "center"
|
|
33369
|
+
},
|
|
33370
|
+
"specials": {
|
|
33371
|
+
"text": "Add something you like and it will show up here."
|
|
33372
|
+
}
|
|
33373
|
+
}
|
|
33374
|
+
]
|
|
33375
|
+
},
|
|
33376
|
+
"item": {
|
|
33377
|
+
"type": "list-empty",
|
|
33378
|
+
"children": [
|
|
33379
|
+
{
|
|
33380
|
+
"type": "icon",
|
|
33381
|
+
"style": {
|
|
33382
|
+
"color": "#d4d4d4"
|
|
33383
|
+
},
|
|
33384
|
+
"config": {
|
|
33385
|
+
"iconSize": 32
|
|
33386
|
+
},
|
|
33387
|
+
"specials": {
|
|
33388
|
+
"name": "ShoppingBag3Line"
|
|
33389
|
+
}
|
|
33390
|
+
},
|
|
33391
|
+
{
|
|
33392
|
+
"type": "heading",
|
|
33393
|
+
"style": {
|
|
33394
|
+
"width": "auto",
|
|
33395
|
+
"fontSize": "20px",
|
|
33396
|
+
"fontWeight": "600",
|
|
33397
|
+
"color": "#171717",
|
|
33398
|
+
"textAlign": "center"
|
|
33399
|
+
},
|
|
33400
|
+
"specials": {
|
|
33401
|
+
"htmlTag": "h3",
|
|
33402
|
+
"text": "This item is unavailable"
|
|
33403
|
+
}
|
|
33404
|
+
},
|
|
33405
|
+
{
|
|
33406
|
+
"type": "text",
|
|
33407
|
+
"style": {
|
|
33408
|
+
"width": "auto",
|
|
33409
|
+
"fontSize": "14px",
|
|
33410
|
+
"color": "#737373",
|
|
33411
|
+
"textAlign": "center"
|
|
33412
|
+
},
|
|
33413
|
+
"specials": {
|
|
33414
|
+
"text": "It may have been removed. Have a look at the rest of the shop."
|
|
33415
|
+
}
|
|
33416
|
+
}
|
|
33417
|
+
]
|
|
33418
|
+
}
|
|
33419
|
+
}
|
|
33420
|
+
},
|
|
33421
|
+
{
|
|
33422
|
+
"type": "list-loading",
|
|
33423
|
+
"configKey": "loadingStateId",
|
|
33424
|
+
"optional": true
|
|
33425
|
+
}
|
|
33426
|
+
]
|
|
33427
|
+
};
|
|
33428
|
+
export const ELEMENT_SEEDS = {
|
|
33429
|
+
"dropdown": [
|
|
33430
|
+
{
|
|
33431
|
+
"type": "dropdown-trigger",
|
|
33432
|
+
"children": [
|
|
33433
|
+
{
|
|
33434
|
+
"type": "text",
|
|
33435
|
+
"style": {
|
|
33436
|
+
"width": "fit-content"
|
|
33437
|
+
},
|
|
33438
|
+
"specials": {
|
|
33439
|
+
"text": "Dropdown"
|
|
33440
|
+
}
|
|
33441
|
+
},
|
|
33442
|
+
{
|
|
33443
|
+
"type": "icon",
|
|
33444
|
+
"config": {
|
|
33445
|
+
"iconSize": 16
|
|
33446
|
+
},
|
|
33447
|
+
"specials": {
|
|
33448
|
+
"name": "ArrowDownSLine"
|
|
33449
|
+
}
|
|
33450
|
+
}
|
|
33451
|
+
]
|
|
33452
|
+
},
|
|
33453
|
+
{
|
|
33454
|
+
"type": "dropdown-panel",
|
|
33455
|
+
"children": [
|
|
33456
|
+
{
|
|
33457
|
+
"type": "text",
|
|
33458
|
+
"style": {
|
|
33459
|
+
"padding": "6px 8px"
|
|
33460
|
+
},
|
|
33461
|
+
"specials": {
|
|
33462
|
+
"text": "Option 1"
|
|
33463
|
+
}
|
|
33464
|
+
},
|
|
33465
|
+
{
|
|
33466
|
+
"type": "text",
|
|
33467
|
+
"style": {
|
|
33468
|
+
"padding": "6px 8px"
|
|
33469
|
+
},
|
|
33470
|
+
"specials": {
|
|
33471
|
+
"text": "Option 2"
|
|
33472
|
+
}
|
|
33473
|
+
},
|
|
33474
|
+
{
|
|
33475
|
+
"type": "text",
|
|
33476
|
+
"style": {
|
|
33477
|
+
"padding": "6px 8px"
|
|
33478
|
+
},
|
|
33479
|
+
"specials": {
|
|
33480
|
+
"text": "Option 3"
|
|
33481
|
+
}
|
|
33482
|
+
}
|
|
33483
|
+
]
|
|
33484
|
+
}
|
|
33485
|
+
],
|
|
33486
|
+
"select": [
|
|
33487
|
+
{
|
|
33488
|
+
"type": "dropdown-trigger"
|
|
33489
|
+
},
|
|
33490
|
+
{
|
|
33491
|
+
"type": "dropdown-panel"
|
|
33492
|
+
}
|
|
33493
|
+
],
|
|
33494
|
+
"popover": [
|
|
33495
|
+
{
|
|
33496
|
+
"type": "dropdown-trigger",
|
|
33497
|
+
"children": [
|
|
33498
|
+
{
|
|
33499
|
+
"type": "text",
|
|
33500
|
+
"style": {
|
|
33501
|
+
"width": "fit-content"
|
|
33502
|
+
},
|
|
33503
|
+
"specials": {
|
|
33504
|
+
"text": "Popover"
|
|
33505
|
+
}
|
|
33506
|
+
}
|
|
33507
|
+
]
|
|
33508
|
+
},
|
|
33509
|
+
{
|
|
33510
|
+
"type": "dropdown-panel",
|
|
33511
|
+
"style": {
|
|
33512
|
+
"padding": "12px 16px",
|
|
33513
|
+
"gap": "6px",
|
|
33514
|
+
"minWidth": "240px",
|
|
33515
|
+
"maxWidth": "320px"
|
|
33516
|
+
},
|
|
33517
|
+
"children": [
|
|
33518
|
+
{
|
|
33519
|
+
"type": "heading",
|
|
33520
|
+
"style": {
|
|
33521
|
+
"fontSize": "15px"
|
|
33522
|
+
},
|
|
33523
|
+
"specials": {
|
|
33524
|
+
"htmlTag": "h4",
|
|
33525
|
+
"text": "Tiêu đề"
|
|
33526
|
+
}
|
|
33527
|
+
},
|
|
33528
|
+
{
|
|
33529
|
+
"type": "text",
|
|
33530
|
+
"specials": {
|
|
33531
|
+
"text": "Một câu giải thích ngắn về thứ khách vừa bấm vào."
|
|
33532
|
+
}
|
|
33533
|
+
}
|
|
33534
|
+
]
|
|
33535
|
+
}
|
|
33536
|
+
]
|
|
33537
|
+
};
|
|
33538
|
+
export const FIRST_CHILD_ONLY = [
|
|
33539
|
+
"list-dataset"
|
|
33540
|
+
];
|