sbuilder-mcp 0.54.0 → 0.56.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 +10 -0
- package/CHANGELOG.vi.md +10 -0
- package/dist/catalog/deadkeys.generated.js +2 -2
- package/dist/catalog/shapes.generated.js +1 -1
- package/dist/catalog/storepages.generated.js +1103 -0
- package/dist/domains/site/inventory.js +33 -5
- package/dist/domains/site/storepage.js +21 -1
- package/dist/tools/page.js +21 -5
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,16 @@ 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.56.0] - 2026-09-15
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
- `sb_page_create` now opens an articles-listing page (matched by name, the same as the other usual-page layouts) with a heading over a repeater already bound to `article.url`, `article.title`, `article.summary`, and `article.date`, plus an empty state, instead of a blank canvas; the `usually_also` advisory for a missing blog listing now names this as its fix.
|
|
13
|
+
|
|
14
|
+
## [0.55.0] - 2026-09-15
|
|
15
|
+
|
|
16
|
+
### Added
|
|
17
|
+
- `sb_page_create` now opens an About, policy, or FAQ page with a real layout instead of a blank canvas, matched from the page's `name` against the same keyword table `sb_page_list` already uses to flag a missing one; the result reports `would_open_as` (dry run) or `seeded: { layout, nodes }` (real run) when this applies, and `seed:false` still opts out.
|
|
18
|
+
|
|
9
19
|
## [0.54.0] - 2026-09-15
|
|
10
20
|
|
|
11
21
|
### Added
|
package/CHANGELOG.vi.md
CHANGED
|
@@ -6,6 +6,16 @@ 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.56.0] - 2026-09-15
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
- `sb_page_create` giờ mở trang danh sách bài viết (khớp theo tên, giống các layout trang thường dùng khác) với một tiêu đề trên một repeater đã gắn sẵn với `article.url`, `article.title`, `article.summary` và `article.date`, kèm trạng thái rỗng, thay vì một canvas trống; gợi ý `usually_also` khi thiếu trang danh sách blog giờ nêu đích danh đây là cách khắc phục.
|
|
13
|
+
|
|
14
|
+
## [0.55.0] - 2026-09-15
|
|
15
|
+
|
|
16
|
+
### Added
|
|
17
|
+
- `sb_page_create` giờ mở trang Giới thiệu, chính sách hoặc FAQ với một layout thực sự thay vì canvas trống, được xác định bằng cách so khớp `name` của trang với đúng bảng từ khoá mà `sb_page_list` đã dùng để báo thiếu trang; kết quả trả về `would_open_as` (khi dry run) hoặc `seeded: { layout, nodes }` (khi chạy thật) trong trường hợp này, và `seed:false` vẫn dùng để bỏ qua tính năng này.
|
|
18
|
+
|
|
9
19
|
## [0.54.0] - 2026-09-15
|
|
10
20
|
|
|
11
21
|
### Added
|
|
@@ -38,6 +38,1109 @@ export const COMPLETION_HEADLINE = {
|
|
|
38
38
|
* end up looking at the same thing. A type absent here starts blank, which is
|
|
39
39
|
* the right default for `page` itself.
|
|
40
40
|
*/
|
|
41
|
+
export const PAGE_LAYOUT_SEEDS = {
|
|
42
|
+
"about": {
|
|
43
|
+
"schema_version": 2,
|
|
44
|
+
"root_node_id": "plabo_1",
|
|
45
|
+
"nodes": {
|
|
46
|
+
"plabo_1": {
|
|
47
|
+
"id": "plabo_1",
|
|
48
|
+
"data": {
|
|
49
|
+
"type": "root",
|
|
50
|
+
"parent": null,
|
|
51
|
+
"nodes": [
|
|
52
|
+
"plabo_5"
|
|
53
|
+
],
|
|
54
|
+
"isCanvas": true,
|
|
55
|
+
"hidden": false,
|
|
56
|
+
"custom": {}
|
|
57
|
+
},
|
|
58
|
+
"style": {},
|
|
59
|
+
"config": {},
|
|
60
|
+
"specials": {},
|
|
61
|
+
"responsive": {},
|
|
62
|
+
"events": [],
|
|
63
|
+
"bindings": []
|
|
64
|
+
},
|
|
65
|
+
"plabo_2": {
|
|
66
|
+
"id": "plabo_2",
|
|
67
|
+
"data": {
|
|
68
|
+
"type": "heading",
|
|
69
|
+
"parent": "plabo_5",
|
|
70
|
+
"nodes": [],
|
|
71
|
+
"isCanvas": false,
|
|
72
|
+
"hidden": false,
|
|
73
|
+
"custom": {}
|
|
74
|
+
},
|
|
75
|
+
"style": {
|
|
76
|
+
"width": "100%",
|
|
77
|
+
"height": "fit-content"
|
|
78
|
+
},
|
|
79
|
+
"config": {
|
|
80
|
+
"textGlobalStyle": "heading-1"
|
|
81
|
+
},
|
|
82
|
+
"specials": {
|
|
83
|
+
"htmlTag": "h2",
|
|
84
|
+
"text": "Heading",
|
|
85
|
+
"stylePreset": "heading-default"
|
|
86
|
+
},
|
|
87
|
+
"responsive": {},
|
|
88
|
+
"events": [],
|
|
89
|
+
"bindings": []
|
|
90
|
+
},
|
|
91
|
+
"plabo_3": {
|
|
92
|
+
"id": "plabo_3",
|
|
93
|
+
"data": {
|
|
94
|
+
"type": "text",
|
|
95
|
+
"parent": "plabo_5",
|
|
96
|
+
"nodes": [],
|
|
97
|
+
"isCanvas": false,
|
|
98
|
+
"hidden": false,
|
|
99
|
+
"custom": {}
|
|
100
|
+
},
|
|
101
|
+
"style": {
|
|
102
|
+
"width": "100%",
|
|
103
|
+
"height": "fit-content"
|
|
104
|
+
},
|
|
105
|
+
"config": {
|
|
106
|
+
"textGlobalStyle": "text-1"
|
|
107
|
+
},
|
|
108
|
+
"specials": {
|
|
109
|
+
"htmlTag": "p",
|
|
110
|
+
"text": "Enter your text here",
|
|
111
|
+
"stylePreset": "text-default"
|
|
112
|
+
},
|
|
113
|
+
"responsive": {},
|
|
114
|
+
"events": [],
|
|
115
|
+
"bindings": []
|
|
116
|
+
},
|
|
117
|
+
"plabo_4": {
|
|
118
|
+
"id": "plabo_4",
|
|
119
|
+
"data": {
|
|
120
|
+
"type": "image",
|
|
121
|
+
"parent": "plabo_5",
|
|
122
|
+
"nodes": [],
|
|
123
|
+
"isCanvas": false,
|
|
124
|
+
"hidden": false,
|
|
125
|
+
"custom": {}
|
|
126
|
+
},
|
|
127
|
+
"style": {
|
|
128
|
+
"width": "100%",
|
|
129
|
+
"height": "fit-content"
|
|
130
|
+
},
|
|
131
|
+
"config": {
|
|
132
|
+
"imageRatio": "auto",
|
|
133
|
+
"customImageRatioWidth": 16,
|
|
134
|
+
"customImageRatioHeight": 9,
|
|
135
|
+
"imageEager": false
|
|
136
|
+
},
|
|
137
|
+
"specials": {
|
|
138
|
+
"src": "",
|
|
139
|
+
"alt": "",
|
|
140
|
+
"stylePreset": "image-default"
|
|
141
|
+
},
|
|
142
|
+
"responsive": {},
|
|
143
|
+
"events": [],
|
|
144
|
+
"bindings": []
|
|
145
|
+
},
|
|
146
|
+
"plabo_5": {
|
|
147
|
+
"id": "plabo_5",
|
|
148
|
+
"data": {
|
|
149
|
+
"type": "flex-section",
|
|
150
|
+
"parent": "plabo_1",
|
|
151
|
+
"nodes": [
|
|
152
|
+
"plabo_2",
|
|
153
|
+
"plabo_3",
|
|
154
|
+
"plabo_4"
|
|
155
|
+
],
|
|
156
|
+
"isCanvas": true,
|
|
157
|
+
"hidden": false,
|
|
158
|
+
"custom": {}
|
|
159
|
+
},
|
|
160
|
+
"style": {
|
|
161
|
+
"display": "flex",
|
|
162
|
+
"flexDirection": "column",
|
|
163
|
+
"width": "100%",
|
|
164
|
+
"height": "fit-content",
|
|
165
|
+
"gap": "24px",
|
|
166
|
+
"paddingTop": "48px",
|
|
167
|
+
"paddingBottom": "48px"
|
|
168
|
+
},
|
|
169
|
+
"config": {
|
|
170
|
+
"backgroundSceneSource": "",
|
|
171
|
+
"backgroundSceneEffect": "gradient-mesh",
|
|
172
|
+
"backgroundSceneGallery": "podium",
|
|
173
|
+
"backgroundSceneSpeed": "normal",
|
|
174
|
+
"backgroundSceneIntensity": "normal",
|
|
175
|
+
"backgroundSceneColors": "theme",
|
|
176
|
+
"backgroundSceneColor1": "#171717",
|
|
177
|
+
"backgroundSceneColor2": "#ffffff",
|
|
178
|
+
"backgroundSceneColor3": "#6b7280",
|
|
179
|
+
"backgroundSceneUrl": "",
|
|
180
|
+
"backgroundSceneModelUrl": "",
|
|
181
|
+
"backgroundSceneVeil": 0,
|
|
182
|
+
"backgroundSceneVeilColor": "#000000"
|
|
183
|
+
},
|
|
184
|
+
"specials": {
|
|
185
|
+
"stylePreset": "container-section"
|
|
186
|
+
},
|
|
187
|
+
"responsive": {},
|
|
188
|
+
"events": [],
|
|
189
|
+
"bindings": []
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
},
|
|
193
|
+
"policy": {
|
|
194
|
+
"schema_version": 2,
|
|
195
|
+
"root_node_id": "plpol_1",
|
|
196
|
+
"nodes": {
|
|
197
|
+
"plpol_1": {
|
|
198
|
+
"id": "plpol_1",
|
|
199
|
+
"data": {
|
|
200
|
+
"type": "root",
|
|
201
|
+
"parent": null,
|
|
202
|
+
"nodes": [
|
|
203
|
+
"plpol_4"
|
|
204
|
+
],
|
|
205
|
+
"isCanvas": true,
|
|
206
|
+
"hidden": false,
|
|
207
|
+
"custom": {}
|
|
208
|
+
},
|
|
209
|
+
"style": {},
|
|
210
|
+
"config": {},
|
|
211
|
+
"specials": {},
|
|
212
|
+
"responsive": {},
|
|
213
|
+
"events": [],
|
|
214
|
+
"bindings": []
|
|
215
|
+
},
|
|
216
|
+
"plpol_2": {
|
|
217
|
+
"id": "plpol_2",
|
|
218
|
+
"data": {
|
|
219
|
+
"type": "heading",
|
|
220
|
+
"parent": "plpol_4",
|
|
221
|
+
"nodes": [],
|
|
222
|
+
"isCanvas": false,
|
|
223
|
+
"hidden": false,
|
|
224
|
+
"custom": {}
|
|
225
|
+
},
|
|
226
|
+
"style": {
|
|
227
|
+
"width": "100%",
|
|
228
|
+
"height": "fit-content"
|
|
229
|
+
},
|
|
230
|
+
"config": {
|
|
231
|
+
"textGlobalStyle": "heading-1"
|
|
232
|
+
},
|
|
233
|
+
"specials": {
|
|
234
|
+
"htmlTag": "h2",
|
|
235
|
+
"text": "Heading",
|
|
236
|
+
"stylePreset": "heading-default"
|
|
237
|
+
},
|
|
238
|
+
"responsive": {},
|
|
239
|
+
"events": [],
|
|
240
|
+
"bindings": []
|
|
241
|
+
},
|
|
242
|
+
"plpol_3": {
|
|
243
|
+
"id": "plpol_3",
|
|
244
|
+
"data": {
|
|
245
|
+
"type": "text",
|
|
246
|
+
"parent": "plpol_4",
|
|
247
|
+
"nodes": [],
|
|
248
|
+
"isCanvas": false,
|
|
249
|
+
"hidden": false,
|
|
250
|
+
"custom": {}
|
|
251
|
+
},
|
|
252
|
+
"style": {
|
|
253
|
+
"width": "100%",
|
|
254
|
+
"height": "fit-content"
|
|
255
|
+
},
|
|
256
|
+
"config": {
|
|
257
|
+
"textGlobalStyle": "text-1"
|
|
258
|
+
},
|
|
259
|
+
"specials": {
|
|
260
|
+
"htmlTag": "p",
|
|
261
|
+
"text": "Enter your text here",
|
|
262
|
+
"stylePreset": "text-default"
|
|
263
|
+
},
|
|
264
|
+
"responsive": {},
|
|
265
|
+
"events": [],
|
|
266
|
+
"bindings": []
|
|
267
|
+
},
|
|
268
|
+
"plpol_4": {
|
|
269
|
+
"id": "plpol_4",
|
|
270
|
+
"data": {
|
|
271
|
+
"type": "flex-section",
|
|
272
|
+
"parent": "plpol_1",
|
|
273
|
+
"nodes": [
|
|
274
|
+
"plpol_2",
|
|
275
|
+
"plpol_3"
|
|
276
|
+
],
|
|
277
|
+
"isCanvas": true,
|
|
278
|
+
"hidden": false,
|
|
279
|
+
"custom": {}
|
|
280
|
+
},
|
|
281
|
+
"style": {
|
|
282
|
+
"display": "flex",
|
|
283
|
+
"flexDirection": "column",
|
|
284
|
+
"width": "100%",
|
|
285
|
+
"height": "fit-content",
|
|
286
|
+
"gap": "24px",
|
|
287
|
+
"paddingTop": "48px",
|
|
288
|
+
"paddingBottom": "48px"
|
|
289
|
+
},
|
|
290
|
+
"config": {
|
|
291
|
+
"backgroundSceneSource": "",
|
|
292
|
+
"backgroundSceneEffect": "gradient-mesh",
|
|
293
|
+
"backgroundSceneGallery": "podium",
|
|
294
|
+
"backgroundSceneSpeed": "normal",
|
|
295
|
+
"backgroundSceneIntensity": "normal",
|
|
296
|
+
"backgroundSceneColors": "theme",
|
|
297
|
+
"backgroundSceneColor1": "#171717",
|
|
298
|
+
"backgroundSceneColor2": "#ffffff",
|
|
299
|
+
"backgroundSceneColor3": "#6b7280",
|
|
300
|
+
"backgroundSceneUrl": "",
|
|
301
|
+
"backgroundSceneModelUrl": "",
|
|
302
|
+
"backgroundSceneVeil": 0,
|
|
303
|
+
"backgroundSceneVeilColor": "#000000"
|
|
304
|
+
},
|
|
305
|
+
"specials": {
|
|
306
|
+
"stylePreset": "container-section"
|
|
307
|
+
},
|
|
308
|
+
"responsive": {},
|
|
309
|
+
"events": [],
|
|
310
|
+
"bindings": []
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
},
|
|
314
|
+
"faq": {
|
|
315
|
+
"schema_version": 2,
|
|
316
|
+
"root_node_id": "plfaq_1",
|
|
317
|
+
"nodes": {
|
|
318
|
+
"plfaq_1": {
|
|
319
|
+
"id": "plfaq_1",
|
|
320
|
+
"data": {
|
|
321
|
+
"type": "root",
|
|
322
|
+
"parent": null,
|
|
323
|
+
"nodes": [
|
|
324
|
+
"plfaq_8"
|
|
325
|
+
],
|
|
326
|
+
"isCanvas": true,
|
|
327
|
+
"hidden": false,
|
|
328
|
+
"custom": {}
|
|
329
|
+
},
|
|
330
|
+
"style": {},
|
|
331
|
+
"config": {},
|
|
332
|
+
"specials": {},
|
|
333
|
+
"responsive": {},
|
|
334
|
+
"events": [],
|
|
335
|
+
"bindings": []
|
|
336
|
+
},
|
|
337
|
+
"plfaq_2": {
|
|
338
|
+
"id": "plfaq_2",
|
|
339
|
+
"data": {
|
|
340
|
+
"type": "heading",
|
|
341
|
+
"parent": "plfaq_8",
|
|
342
|
+
"nodes": [],
|
|
343
|
+
"isCanvas": false,
|
|
344
|
+
"hidden": false,
|
|
345
|
+
"custom": {}
|
|
346
|
+
},
|
|
347
|
+
"style": {
|
|
348
|
+
"width": "100%",
|
|
349
|
+
"height": "fit-content"
|
|
350
|
+
},
|
|
351
|
+
"config": {
|
|
352
|
+
"textGlobalStyle": "heading-1"
|
|
353
|
+
},
|
|
354
|
+
"specials": {
|
|
355
|
+
"htmlTag": "h2",
|
|
356
|
+
"text": "Heading",
|
|
357
|
+
"stylePreset": "heading-default"
|
|
358
|
+
},
|
|
359
|
+
"responsive": {},
|
|
360
|
+
"events": [],
|
|
361
|
+
"bindings": []
|
|
362
|
+
},
|
|
363
|
+
"plfaq_3": {
|
|
364
|
+
"id": "plfaq_3",
|
|
365
|
+
"data": {
|
|
366
|
+
"type": "accordion",
|
|
367
|
+
"parent": "plfaq_8",
|
|
368
|
+
"nodes": [
|
|
369
|
+
"plfaq_4",
|
|
370
|
+
"plfaq_5",
|
|
371
|
+
"plfaq_6"
|
|
372
|
+
],
|
|
373
|
+
"isCanvas": true,
|
|
374
|
+
"hidden": false,
|
|
375
|
+
"custom": {}
|
|
376
|
+
},
|
|
377
|
+
"style": {
|
|
378
|
+
"display": "block",
|
|
379
|
+
"width": "100%",
|
|
380
|
+
"height": "fit-content",
|
|
381
|
+
"padding": "0px",
|
|
382
|
+
"margin": "0px"
|
|
383
|
+
},
|
|
384
|
+
"config": {
|
|
385
|
+
"openItems": [
|
|
386
|
+
0
|
|
387
|
+
],
|
|
388
|
+
"accordionItemId": "plfaq_7"
|
|
389
|
+
},
|
|
390
|
+
"specials": {},
|
|
391
|
+
"responsive": {},
|
|
392
|
+
"events": [],
|
|
393
|
+
"bindings": []
|
|
394
|
+
},
|
|
395
|
+
"plfaq_4": {
|
|
396
|
+
"id": "plfaq_4",
|
|
397
|
+
"data": {
|
|
398
|
+
"type": "accordion-content",
|
|
399
|
+
"parent": "plfaq_3",
|
|
400
|
+
"nodes": [],
|
|
401
|
+
"isCanvas": true,
|
|
402
|
+
"hidden": false,
|
|
403
|
+
"custom": {}
|
|
404
|
+
},
|
|
405
|
+
"style": {
|
|
406
|
+
"display": "flex",
|
|
407
|
+
"flexDirection": "column",
|
|
408
|
+
"justifyContent": "flex-start",
|
|
409
|
+
"alignItems": "flex-start",
|
|
410
|
+
"minWidth": "0px",
|
|
411
|
+
"width": "100%",
|
|
412
|
+
"height": "fit-content",
|
|
413
|
+
"gap": "16px",
|
|
414
|
+
"padding": "16px",
|
|
415
|
+
"margin": "0px"
|
|
416
|
+
},
|
|
417
|
+
"config": {},
|
|
418
|
+
"specials": {
|
|
419
|
+
"label": "Accordion 1"
|
|
420
|
+
},
|
|
421
|
+
"responsive": {
|
|
422
|
+
"tablet": {
|
|
423
|
+
"style": {
|
|
424
|
+
"padding": "14px"
|
|
425
|
+
}
|
|
426
|
+
},
|
|
427
|
+
"mobile": {
|
|
428
|
+
"style": {
|
|
429
|
+
"padding": "12px"
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
},
|
|
433
|
+
"events": [],
|
|
434
|
+
"bindings": []
|
|
435
|
+
},
|
|
436
|
+
"plfaq_5": {
|
|
437
|
+
"id": "plfaq_5",
|
|
438
|
+
"data": {
|
|
439
|
+
"type": "accordion-content",
|
|
440
|
+
"parent": "plfaq_3",
|
|
441
|
+
"nodes": [],
|
|
442
|
+
"isCanvas": true,
|
|
443
|
+
"hidden": false,
|
|
444
|
+
"custom": {}
|
|
445
|
+
},
|
|
446
|
+
"style": {
|
|
447
|
+
"display": "flex",
|
|
448
|
+
"flexDirection": "column",
|
|
449
|
+
"justifyContent": "flex-start",
|
|
450
|
+
"alignItems": "flex-start",
|
|
451
|
+
"minWidth": "0px",
|
|
452
|
+
"width": "100%",
|
|
453
|
+
"height": "fit-content",
|
|
454
|
+
"gap": "16px",
|
|
455
|
+
"padding": "16px",
|
|
456
|
+
"margin": "0px"
|
|
457
|
+
},
|
|
458
|
+
"config": {},
|
|
459
|
+
"specials": {
|
|
460
|
+
"label": "Accordion 2"
|
|
461
|
+
},
|
|
462
|
+
"responsive": {
|
|
463
|
+
"tablet": {
|
|
464
|
+
"style": {
|
|
465
|
+
"padding": "14px"
|
|
466
|
+
}
|
|
467
|
+
},
|
|
468
|
+
"mobile": {
|
|
469
|
+
"style": {
|
|
470
|
+
"padding": "12px"
|
|
471
|
+
}
|
|
472
|
+
}
|
|
473
|
+
},
|
|
474
|
+
"events": [],
|
|
475
|
+
"bindings": []
|
|
476
|
+
},
|
|
477
|
+
"plfaq_6": {
|
|
478
|
+
"id": "plfaq_6",
|
|
479
|
+
"data": {
|
|
480
|
+
"type": "accordion-content",
|
|
481
|
+
"parent": "plfaq_3",
|
|
482
|
+
"nodes": [],
|
|
483
|
+
"isCanvas": true,
|
|
484
|
+
"hidden": false,
|
|
485
|
+
"custom": {}
|
|
486
|
+
},
|
|
487
|
+
"style": {
|
|
488
|
+
"display": "flex",
|
|
489
|
+
"flexDirection": "column",
|
|
490
|
+
"justifyContent": "flex-start",
|
|
491
|
+
"alignItems": "flex-start",
|
|
492
|
+
"minWidth": "0px",
|
|
493
|
+
"width": "100%",
|
|
494
|
+
"height": "fit-content",
|
|
495
|
+
"gap": "16px",
|
|
496
|
+
"padding": "16px",
|
|
497
|
+
"margin": "0px"
|
|
498
|
+
},
|
|
499
|
+
"config": {},
|
|
500
|
+
"specials": {
|
|
501
|
+
"label": "Accordion 3"
|
|
502
|
+
},
|
|
503
|
+
"responsive": {
|
|
504
|
+
"tablet": {
|
|
505
|
+
"style": {
|
|
506
|
+
"padding": "14px"
|
|
507
|
+
}
|
|
508
|
+
},
|
|
509
|
+
"mobile": {
|
|
510
|
+
"style": {
|
|
511
|
+
"padding": "12px"
|
|
512
|
+
}
|
|
513
|
+
}
|
|
514
|
+
},
|
|
515
|
+
"events": [],
|
|
516
|
+
"bindings": []
|
|
517
|
+
},
|
|
518
|
+
"plfaq_7": {
|
|
519
|
+
"id": "plfaq_7",
|
|
520
|
+
"data": {
|
|
521
|
+
"type": "accordion-item",
|
|
522
|
+
"parent": "plfaq_3",
|
|
523
|
+
"nodes": [],
|
|
524
|
+
"isCanvas": false,
|
|
525
|
+
"hidden": false,
|
|
526
|
+
"custom": {}
|
|
527
|
+
},
|
|
528
|
+
"style": {
|
|
529
|
+
"backgroundColor": "#f5f5f5",
|
|
530
|
+
"color": "#171717",
|
|
531
|
+
"textAlign": "left",
|
|
532
|
+
"fontFamily": "Inter",
|
|
533
|
+
"fontSize": "14px",
|
|
534
|
+
"padding": "12px 16px"
|
|
535
|
+
},
|
|
536
|
+
"config": {
|
|
537
|
+
"textGlobalStyle": "text-2"
|
|
538
|
+
},
|
|
539
|
+
"specials": {},
|
|
540
|
+
"responsive": {
|
|
541
|
+
"mobile": {
|
|
542
|
+
"style": {
|
|
543
|
+
"padding": "12px"
|
|
544
|
+
}
|
|
545
|
+
}
|
|
546
|
+
},
|
|
547
|
+
"states": {
|
|
548
|
+
"hover": {
|
|
549
|
+
"style": {
|
|
550
|
+
"backgroundColor": "#ebebeb"
|
|
551
|
+
}
|
|
552
|
+
}
|
|
553
|
+
},
|
|
554
|
+
"events": [],
|
|
555
|
+
"bindings": []
|
|
556
|
+
},
|
|
557
|
+
"plfaq_8": {
|
|
558
|
+
"id": "plfaq_8",
|
|
559
|
+
"data": {
|
|
560
|
+
"type": "flex-section",
|
|
561
|
+
"parent": "plfaq_1",
|
|
562
|
+
"nodes": [
|
|
563
|
+
"plfaq_2",
|
|
564
|
+
"plfaq_3"
|
|
565
|
+
],
|
|
566
|
+
"isCanvas": true,
|
|
567
|
+
"hidden": false,
|
|
568
|
+
"custom": {}
|
|
569
|
+
},
|
|
570
|
+
"style": {
|
|
571
|
+
"display": "flex",
|
|
572
|
+
"flexDirection": "column",
|
|
573
|
+
"width": "100%",
|
|
574
|
+
"height": "fit-content",
|
|
575
|
+
"gap": "24px",
|
|
576
|
+
"paddingTop": "48px",
|
|
577
|
+
"paddingBottom": "48px"
|
|
578
|
+
},
|
|
579
|
+
"config": {
|
|
580
|
+
"backgroundSceneSource": "",
|
|
581
|
+
"backgroundSceneEffect": "gradient-mesh",
|
|
582
|
+
"backgroundSceneGallery": "podium",
|
|
583
|
+
"backgroundSceneSpeed": "normal",
|
|
584
|
+
"backgroundSceneIntensity": "normal",
|
|
585
|
+
"backgroundSceneColors": "theme",
|
|
586
|
+
"backgroundSceneColor1": "#171717",
|
|
587
|
+
"backgroundSceneColor2": "#ffffff",
|
|
588
|
+
"backgroundSceneColor3": "#6b7280",
|
|
589
|
+
"backgroundSceneUrl": "",
|
|
590
|
+
"backgroundSceneModelUrl": "",
|
|
591
|
+
"backgroundSceneVeil": 0,
|
|
592
|
+
"backgroundSceneVeilColor": "#000000"
|
|
593
|
+
},
|
|
594
|
+
"specials": {
|
|
595
|
+
"stylePreset": "container-section"
|
|
596
|
+
},
|
|
597
|
+
"responsive": {},
|
|
598
|
+
"events": [],
|
|
599
|
+
"bindings": []
|
|
600
|
+
}
|
|
601
|
+
}
|
|
602
|
+
},
|
|
603
|
+
"articles": {
|
|
604
|
+
"schema_version": 2,
|
|
605
|
+
"root_node_id": "plart_1",
|
|
606
|
+
"nodes": {
|
|
607
|
+
"plart_1": {
|
|
608
|
+
"id": "plart_1",
|
|
609
|
+
"data": {
|
|
610
|
+
"type": "root",
|
|
611
|
+
"parent": null,
|
|
612
|
+
"nodes": [
|
|
613
|
+
"plart_13"
|
|
614
|
+
],
|
|
615
|
+
"isCanvas": true,
|
|
616
|
+
"hidden": false,
|
|
617
|
+
"custom": {}
|
|
618
|
+
},
|
|
619
|
+
"style": {},
|
|
620
|
+
"config": {},
|
|
621
|
+
"specials": {},
|
|
622
|
+
"responsive": {},
|
|
623
|
+
"events": [],
|
|
624
|
+
"bindings": []
|
|
625
|
+
},
|
|
626
|
+
"plart_2": {
|
|
627
|
+
"id": "plart_2",
|
|
628
|
+
"data": {
|
|
629
|
+
"type": "heading",
|
|
630
|
+
"parent": "plart_13",
|
|
631
|
+
"nodes": [],
|
|
632
|
+
"isCanvas": false,
|
|
633
|
+
"hidden": false,
|
|
634
|
+
"custom": {}
|
|
635
|
+
},
|
|
636
|
+
"style": {
|
|
637
|
+
"width": "100%",
|
|
638
|
+
"height": "fit-content"
|
|
639
|
+
},
|
|
640
|
+
"config": {
|
|
641
|
+
"textGlobalStyle": "heading-1"
|
|
642
|
+
},
|
|
643
|
+
"specials": {
|
|
644
|
+
"htmlTag": "h2",
|
|
645
|
+
"text": "Heading",
|
|
646
|
+
"stylePreset": "heading-default"
|
|
647
|
+
},
|
|
648
|
+
"responsive": {},
|
|
649
|
+
"events": [],
|
|
650
|
+
"bindings": []
|
|
651
|
+
},
|
|
652
|
+
"plart_3": {
|
|
653
|
+
"id": "plart_3",
|
|
654
|
+
"data": {
|
|
655
|
+
"type": "list-dataset",
|
|
656
|
+
"parent": "plart_13",
|
|
657
|
+
"nodes": [
|
|
658
|
+
"plart_4"
|
|
659
|
+
],
|
|
660
|
+
"isCanvas": true,
|
|
661
|
+
"hidden": false,
|
|
662
|
+
"custom": {}
|
|
663
|
+
},
|
|
664
|
+
"style": {
|
|
665
|
+
"width": "100%",
|
|
666
|
+
"gap": "24px"
|
|
667
|
+
},
|
|
668
|
+
"config": {
|
|
669
|
+
"datasetSource": "article",
|
|
670
|
+
"articleSourceType": "category",
|
|
671
|
+
"loadingMode": "none",
|
|
672
|
+
"layout": "grid",
|
|
673
|
+
"quantity": 4,
|
|
674
|
+
"itemsPerRow": 4,
|
|
675
|
+
"collectionType": "all_products",
|
|
676
|
+
"collectionId": "all_products",
|
|
677
|
+
"articleCategoryId": "all_articles",
|
|
678
|
+
"collectionListType": "all_collections",
|
|
679
|
+
"listNavIcon": "ArrowLeftSLine",
|
|
680
|
+
"listNavPosition": "inside",
|
|
681
|
+
"listNavIconSize": 16,
|
|
682
|
+
"listNavIconColor": "#171717",
|
|
683
|
+
"listNavButtonWidth": 32,
|
|
684
|
+
"listNavButtonHeight": 32,
|
|
685
|
+
"listNavButtonBg": "#ffffff",
|
|
686
|
+
"paginationItemWidth": 8,
|
|
687
|
+
"paginationItemHeight": 8,
|
|
688
|
+
"paginationItemGap": 4,
|
|
689
|
+
"paginationItemBg": "rgba(0,0,0,0.25)",
|
|
690
|
+
"paginationItemActiveBg": "rgba(0,0,0,0.8)",
|
|
691
|
+
"emptyStateId": "plart_9"
|
|
692
|
+
},
|
|
693
|
+
"specials": {
|
|
694
|
+
"loadMoreLabel": "Load more",
|
|
695
|
+
"collectionIds": []
|
|
696
|
+
},
|
|
697
|
+
"responsive": {
|
|
698
|
+
"tablet": {
|
|
699
|
+
"style": {
|
|
700
|
+
"gap": "20px"
|
|
701
|
+
},
|
|
702
|
+
"config": {
|
|
703
|
+
"itemsPerRow": 2
|
|
704
|
+
}
|
|
705
|
+
},
|
|
706
|
+
"mobile": {
|
|
707
|
+
"style": {
|
|
708
|
+
"gap": "16px"
|
|
709
|
+
},
|
|
710
|
+
"config": {
|
|
711
|
+
"itemsPerRow": 1
|
|
712
|
+
}
|
|
713
|
+
}
|
|
714
|
+
},
|
|
715
|
+
"events": [],
|
|
716
|
+
"bindings": [
|
|
717
|
+
{
|
|
718
|
+
"id": "bind-target",
|
|
719
|
+
"source": "",
|
|
720
|
+
"field": "",
|
|
721
|
+
"target": {
|
|
722
|
+
"type": "article",
|
|
723
|
+
"id": "",
|
|
724
|
+
"kind": "article_list"
|
|
725
|
+
}
|
|
726
|
+
}
|
|
727
|
+
]
|
|
728
|
+
},
|
|
729
|
+
"plart_4": {
|
|
730
|
+
"id": "plart_4",
|
|
731
|
+
"data": {
|
|
732
|
+
"type": "dataset-block",
|
|
733
|
+
"parent": "plart_3",
|
|
734
|
+
"nodes": [
|
|
735
|
+
"plart_5",
|
|
736
|
+
"plart_6",
|
|
737
|
+
"plart_7",
|
|
738
|
+
"plart_8"
|
|
739
|
+
],
|
|
740
|
+
"isCanvas": true,
|
|
741
|
+
"hidden": false,
|
|
742
|
+
"custom": {}
|
|
743
|
+
},
|
|
744
|
+
"style": {
|
|
745
|
+
"display": "flex",
|
|
746
|
+
"flexDirection": "column",
|
|
747
|
+
"gap": "24px",
|
|
748
|
+
"padding": "24px",
|
|
749
|
+
"backgroundColor": "#ffffff",
|
|
750
|
+
"width": "100%",
|
|
751
|
+
"height": "fit-content"
|
|
752
|
+
},
|
|
753
|
+
"config": {
|
|
754
|
+
"contentWidth": "fill_container",
|
|
755
|
+
"contentWidthCustom": 0,
|
|
756
|
+
"backgroundSceneSource": "",
|
|
757
|
+
"backgroundSceneEffect": "gradient-mesh",
|
|
758
|
+
"backgroundSceneGallery": "podium",
|
|
759
|
+
"backgroundSceneSpeed": "normal",
|
|
760
|
+
"backgroundSceneIntensity": "normal",
|
|
761
|
+
"backgroundSceneColors": "theme",
|
|
762
|
+
"backgroundSceneColor1": "#171717",
|
|
763
|
+
"backgroundSceneColor2": "#ffffff",
|
|
764
|
+
"backgroundSceneColor3": "#6b7280",
|
|
765
|
+
"backgroundSceneUrl": "",
|
|
766
|
+
"backgroundSceneModelUrl": "",
|
|
767
|
+
"backgroundSceneVeil": 0,
|
|
768
|
+
"backgroundSceneVeilColor": "#000000",
|
|
769
|
+
"datasetSource": "article"
|
|
770
|
+
},
|
|
771
|
+
"specials": {},
|
|
772
|
+
"responsive": {
|
|
773
|
+
"tablet": {
|
|
774
|
+
"style": {
|
|
775
|
+
"padding": "20px",
|
|
776
|
+
"gap": "20px"
|
|
777
|
+
}
|
|
778
|
+
},
|
|
779
|
+
"mobile": {
|
|
780
|
+
"style": {
|
|
781
|
+
"padding": "16px",
|
|
782
|
+
"gap": "16px"
|
|
783
|
+
}
|
|
784
|
+
}
|
|
785
|
+
},
|
|
786
|
+
"events": [],
|
|
787
|
+
"bindings": [
|
|
788
|
+
{
|
|
789
|
+
"id": "bind-href",
|
|
790
|
+
"source": "article.url",
|
|
791
|
+
"field": "specials.boundHref",
|
|
792
|
+
"target": {
|
|
793
|
+
"type": "article",
|
|
794
|
+
"id": "",
|
|
795
|
+
"kind": "article_general"
|
|
796
|
+
}
|
|
797
|
+
},
|
|
798
|
+
{
|
|
799
|
+
"id": "bind-href-label",
|
|
800
|
+
"source": "article.title",
|
|
801
|
+
"field": "specials.boundHrefLabel"
|
|
802
|
+
}
|
|
803
|
+
]
|
|
804
|
+
},
|
|
805
|
+
"plart_5": {
|
|
806
|
+
"id": "plart_5",
|
|
807
|
+
"data": {
|
|
808
|
+
"type": "collection-media",
|
|
809
|
+
"parent": "plart_4",
|
|
810
|
+
"nodes": [],
|
|
811
|
+
"isCanvas": false,
|
|
812
|
+
"hidden": false,
|
|
813
|
+
"custom": {}
|
|
814
|
+
},
|
|
815
|
+
"style": {
|
|
816
|
+
"width": "100%",
|
|
817
|
+
"overflow": "hidden"
|
|
818
|
+
},
|
|
819
|
+
"config": {
|
|
820
|
+
"imageRatio": "auto",
|
|
821
|
+
"customImageRatioWidth": 16,
|
|
822
|
+
"customImageRatioHeight": 9,
|
|
823
|
+
"datasetSource": "article"
|
|
824
|
+
},
|
|
825
|
+
"specials": {
|
|
826
|
+
"src": "",
|
|
827
|
+
"alt": ""
|
|
828
|
+
},
|
|
829
|
+
"responsive": {},
|
|
830
|
+
"events": [],
|
|
831
|
+
"bindings": [
|
|
832
|
+
{
|
|
833
|
+
"id": "bind-image",
|
|
834
|
+
"source": "article.image",
|
|
835
|
+
"field": "specials.boundImage",
|
|
836
|
+
"target": {
|
|
837
|
+
"type": "article",
|
|
838
|
+
"id": "",
|
|
839
|
+
"kind": "media"
|
|
840
|
+
}
|
|
841
|
+
}
|
|
842
|
+
]
|
|
843
|
+
},
|
|
844
|
+
"plart_6": {
|
|
845
|
+
"id": "plart_6",
|
|
846
|
+
"data": {
|
|
847
|
+
"type": "text-dataset",
|
|
848
|
+
"parent": "plart_4",
|
|
849
|
+
"nodes": [],
|
|
850
|
+
"isCanvas": false,
|
|
851
|
+
"hidden": false,
|
|
852
|
+
"custom": {}
|
|
853
|
+
},
|
|
854
|
+
"style": {
|
|
855
|
+
"fontSize": "20px"
|
|
856
|
+
},
|
|
857
|
+
"config": {
|
|
858
|
+
"datasetSource": "article",
|
|
859
|
+
"kind": "title",
|
|
860
|
+
"textValue": "Article title",
|
|
861
|
+
"descriptionDisplayType": "Full",
|
|
862
|
+
"descriptionLines": 3,
|
|
863
|
+
"moreText": "Show more",
|
|
864
|
+
"lessText": "Show less",
|
|
865
|
+
"icon": true,
|
|
866
|
+
"moreButtonColor": "#000000",
|
|
867
|
+
"textGlobalStyle": "text-1"
|
|
868
|
+
},
|
|
869
|
+
"specials": {
|
|
870
|
+
"htmlTag": "h4",
|
|
871
|
+
"moreButtonEnabled": false,
|
|
872
|
+
"stylePreset": "text-dataset-default"
|
|
873
|
+
},
|
|
874
|
+
"responsive": {},
|
|
875
|
+
"events": [],
|
|
876
|
+
"bindings": [
|
|
877
|
+
{
|
|
878
|
+
"id": "bind-text",
|
|
879
|
+
"source": "article.title",
|
|
880
|
+
"field": "specials.boundText",
|
|
881
|
+
"target": {
|
|
882
|
+
"type": "article",
|
|
883
|
+
"id": "",
|
|
884
|
+
"kind": "title"
|
|
885
|
+
}
|
|
886
|
+
}
|
|
887
|
+
]
|
|
888
|
+
},
|
|
889
|
+
"plart_7": {
|
|
890
|
+
"id": "plart_7",
|
|
891
|
+
"data": {
|
|
892
|
+
"type": "text-dataset",
|
|
893
|
+
"parent": "plart_4",
|
|
894
|
+
"nodes": [],
|
|
895
|
+
"isCanvas": false,
|
|
896
|
+
"hidden": false,
|
|
897
|
+
"custom": {}
|
|
898
|
+
},
|
|
899
|
+
"style": {},
|
|
900
|
+
"config": {
|
|
901
|
+
"datasetSource": "article",
|
|
902
|
+
"kind": "summary",
|
|
903
|
+
"textValue": "Article summary",
|
|
904
|
+
"descriptionDisplayType": "Full",
|
|
905
|
+
"descriptionLines": 3,
|
|
906
|
+
"moreText": "Show more",
|
|
907
|
+
"lessText": "Show less",
|
|
908
|
+
"icon": true,
|
|
909
|
+
"moreButtonColor": "#000000",
|
|
910
|
+
"textGlobalStyle": "text-1"
|
|
911
|
+
},
|
|
912
|
+
"specials": {
|
|
913
|
+
"htmlTag": "p",
|
|
914
|
+
"moreButtonEnabled": false,
|
|
915
|
+
"stylePreset": "text-dataset-default"
|
|
916
|
+
},
|
|
917
|
+
"responsive": {},
|
|
918
|
+
"events": [],
|
|
919
|
+
"bindings": [
|
|
920
|
+
{
|
|
921
|
+
"id": "bind-text",
|
|
922
|
+
"source": "article.summary",
|
|
923
|
+
"field": "specials.boundText",
|
|
924
|
+
"target": {
|
|
925
|
+
"type": "article",
|
|
926
|
+
"id": "",
|
|
927
|
+
"kind": "summary"
|
|
928
|
+
}
|
|
929
|
+
}
|
|
930
|
+
]
|
|
931
|
+
},
|
|
932
|
+
"plart_8": {
|
|
933
|
+
"id": "plart_8",
|
|
934
|
+
"data": {
|
|
935
|
+
"type": "text-dataset",
|
|
936
|
+
"parent": "plart_4",
|
|
937
|
+
"nodes": [],
|
|
938
|
+
"isCanvas": false,
|
|
939
|
+
"hidden": false,
|
|
940
|
+
"custom": {}
|
|
941
|
+
},
|
|
942
|
+
"style": {},
|
|
943
|
+
"config": {
|
|
944
|
+
"datasetSource": "article",
|
|
945
|
+
"kind": "date",
|
|
946
|
+
"textValue": "2026-08-13",
|
|
947
|
+
"descriptionDisplayType": "Full",
|
|
948
|
+
"descriptionLines": 3,
|
|
949
|
+
"moreText": "Show more",
|
|
950
|
+
"lessText": "Show less",
|
|
951
|
+
"icon": true,
|
|
952
|
+
"moreButtonColor": "#000000",
|
|
953
|
+
"textGlobalStyle": "text-1"
|
|
954
|
+
},
|
|
955
|
+
"specials": {
|
|
956
|
+
"htmlTag": "p",
|
|
957
|
+
"moreButtonEnabled": false,
|
|
958
|
+
"stylePreset": "text-dataset-default"
|
|
959
|
+
},
|
|
960
|
+
"responsive": {},
|
|
961
|
+
"events": [],
|
|
962
|
+
"bindings": [
|
|
963
|
+
{
|
|
964
|
+
"id": "bind-text",
|
|
965
|
+
"source": "article.date",
|
|
966
|
+
"field": "specials.boundText",
|
|
967
|
+
"target": {
|
|
968
|
+
"type": "article",
|
|
969
|
+
"id": "",
|
|
970
|
+
"kind": "date"
|
|
971
|
+
}
|
|
972
|
+
}
|
|
973
|
+
]
|
|
974
|
+
},
|
|
975
|
+
"plart_9": {
|
|
976
|
+
"id": "plart_9",
|
|
977
|
+
"data": {
|
|
978
|
+
"type": "list-empty",
|
|
979
|
+
"parent": "plart_3",
|
|
980
|
+
"nodes": [
|
|
981
|
+
"plart_10",
|
|
982
|
+
"plart_11",
|
|
983
|
+
"plart_12"
|
|
984
|
+
],
|
|
985
|
+
"isCanvas": true,
|
|
986
|
+
"hidden": false,
|
|
987
|
+
"custom": {}
|
|
988
|
+
},
|
|
989
|
+
"style": {
|
|
990
|
+
"display": "flex",
|
|
991
|
+
"flexDirection": "column",
|
|
992
|
+
"alignItems": "center",
|
|
993
|
+
"justifyContent": "center",
|
|
994
|
+
"gap": "12px",
|
|
995
|
+
"width": "100%",
|
|
996
|
+
"padding": "48px 24px 48px 24px"
|
|
997
|
+
},
|
|
998
|
+
"config": {},
|
|
999
|
+
"specials": {},
|
|
1000
|
+
"responsive": {},
|
|
1001
|
+
"events": [],
|
|
1002
|
+
"bindings": []
|
|
1003
|
+
},
|
|
1004
|
+
"plart_10": {
|
|
1005
|
+
"id": "plart_10",
|
|
1006
|
+
"data": {
|
|
1007
|
+
"type": "icon",
|
|
1008
|
+
"parent": "plart_9",
|
|
1009
|
+
"nodes": [],
|
|
1010
|
+
"isCanvas": false,
|
|
1011
|
+
"hidden": false,
|
|
1012
|
+
"custom": {}
|
|
1013
|
+
},
|
|
1014
|
+
"style": {
|
|
1015
|
+
"width": "fit-content",
|
|
1016
|
+
"height": "fit-content",
|
|
1017
|
+
"color": "#d4d4d4"
|
|
1018
|
+
},
|
|
1019
|
+
"config": {
|
|
1020
|
+
"iconSize": 32
|
|
1021
|
+
},
|
|
1022
|
+
"specials": {
|
|
1023
|
+
"name": "FileListLine",
|
|
1024
|
+
"stylePreset": "icon-default"
|
|
1025
|
+
},
|
|
1026
|
+
"responsive": {},
|
|
1027
|
+
"events": [],
|
|
1028
|
+
"bindings": []
|
|
1029
|
+
},
|
|
1030
|
+
"plart_11": {
|
|
1031
|
+
"id": "plart_11",
|
|
1032
|
+
"data": {
|
|
1033
|
+
"type": "heading",
|
|
1034
|
+
"parent": "plart_9",
|
|
1035
|
+
"nodes": [],
|
|
1036
|
+
"isCanvas": false,
|
|
1037
|
+
"hidden": false,
|
|
1038
|
+
"custom": {}
|
|
1039
|
+
},
|
|
1040
|
+
"style": {
|
|
1041
|
+
"width": "auto",
|
|
1042
|
+
"height": "fit-content",
|
|
1043
|
+
"fontSize": "20px",
|
|
1044
|
+
"fontWeight": "600",
|
|
1045
|
+
"color": "#171717",
|
|
1046
|
+
"textAlign": "center"
|
|
1047
|
+
},
|
|
1048
|
+
"config": {
|
|
1049
|
+
"textGlobalStyle": "heading-1"
|
|
1050
|
+
},
|
|
1051
|
+
"specials": {
|
|
1052
|
+
"htmlTag": "h3",
|
|
1053
|
+
"text": "No posts yet",
|
|
1054
|
+
"stylePreset": "heading-default"
|
|
1055
|
+
},
|
|
1056
|
+
"responsive": {},
|
|
1057
|
+
"events": [],
|
|
1058
|
+
"bindings": []
|
|
1059
|
+
},
|
|
1060
|
+
"plart_12": {
|
|
1061
|
+
"id": "plart_12",
|
|
1062
|
+
"data": {
|
|
1063
|
+
"type": "text",
|
|
1064
|
+
"parent": "plart_9",
|
|
1065
|
+
"nodes": [],
|
|
1066
|
+
"isCanvas": false,
|
|
1067
|
+
"hidden": false,
|
|
1068
|
+
"custom": {}
|
|
1069
|
+
},
|
|
1070
|
+
"style": {
|
|
1071
|
+
"width": "auto",
|
|
1072
|
+
"height": "fit-content",
|
|
1073
|
+
"fontSize": "14px",
|
|
1074
|
+
"color": "#737373",
|
|
1075
|
+
"textAlign": "center"
|
|
1076
|
+
},
|
|
1077
|
+
"config": {
|
|
1078
|
+
"textGlobalStyle": "text-1"
|
|
1079
|
+
},
|
|
1080
|
+
"specials": {
|
|
1081
|
+
"htmlTag": "p",
|
|
1082
|
+
"text": "New stories will show up here. Check back soon.",
|
|
1083
|
+
"stylePreset": "text-default"
|
|
1084
|
+
},
|
|
1085
|
+
"responsive": {},
|
|
1086
|
+
"events": [],
|
|
1087
|
+
"bindings": []
|
|
1088
|
+
},
|
|
1089
|
+
"plart_13": {
|
|
1090
|
+
"id": "plart_13",
|
|
1091
|
+
"data": {
|
|
1092
|
+
"type": "flex-section",
|
|
1093
|
+
"parent": "plart_1",
|
|
1094
|
+
"nodes": [
|
|
1095
|
+
"plart_2",
|
|
1096
|
+
"plart_3"
|
|
1097
|
+
],
|
|
1098
|
+
"isCanvas": true,
|
|
1099
|
+
"hidden": false,
|
|
1100
|
+
"custom": {}
|
|
1101
|
+
},
|
|
1102
|
+
"style": {
|
|
1103
|
+
"display": "flex",
|
|
1104
|
+
"flexDirection": "column",
|
|
1105
|
+
"width": "100%",
|
|
1106
|
+
"height": "fit-content",
|
|
1107
|
+
"gap": "24px",
|
|
1108
|
+
"paddingTop": "48px",
|
|
1109
|
+
"paddingBottom": "48px"
|
|
1110
|
+
},
|
|
1111
|
+
"config": {
|
|
1112
|
+
"backgroundSceneSource": "",
|
|
1113
|
+
"backgroundSceneEffect": "gradient-mesh",
|
|
1114
|
+
"backgroundSceneGallery": "podium",
|
|
1115
|
+
"backgroundSceneSpeed": "normal",
|
|
1116
|
+
"backgroundSceneIntensity": "normal",
|
|
1117
|
+
"backgroundSceneColors": "theme",
|
|
1118
|
+
"backgroundSceneColor1": "#171717",
|
|
1119
|
+
"backgroundSceneColor2": "#ffffff",
|
|
1120
|
+
"backgroundSceneColor3": "#6b7280",
|
|
1121
|
+
"backgroundSceneUrl": "",
|
|
1122
|
+
"backgroundSceneModelUrl": "",
|
|
1123
|
+
"backgroundSceneVeil": 0,
|
|
1124
|
+
"backgroundSceneVeilColor": "#000000"
|
|
1125
|
+
},
|
|
1126
|
+
"specials": {
|
|
1127
|
+
"stylePreset": "container-section"
|
|
1128
|
+
},
|
|
1129
|
+
"responsive": {},
|
|
1130
|
+
"events": [],
|
|
1131
|
+
"bindings": []
|
|
1132
|
+
}
|
|
1133
|
+
}
|
|
1134
|
+
}
|
|
1135
|
+
};
|
|
1136
|
+
/**
|
|
1137
|
+
* The document an ordinary page opens with for a chosen LAYOUT.
|
|
1138
|
+
*
|
|
1139
|
+
* Keyed by purpose, not by type: every content page is type `page`, so the
|
|
1140
|
+
* table above cannot tell an About page from a policy. Same palette cards, same
|
|
1141
|
+
* module, same reason — an author who picks the layout in the editor and an
|
|
1142
|
+
* agent that asks for it here must land on the same page.
|
|
1143
|
+
*/
|
|
41
1144
|
export const STORE_PAGE_SEEDS = {
|
|
42
1145
|
"product": {
|
|
43
1146
|
"schema_version": 2,
|
|
@@ -52,7 +52,9 @@ export const USUAL_PAGES = [
|
|
|
52
52
|
{
|
|
53
53
|
key: 'about',
|
|
54
54
|
match: ['about', 'gioi-thieu', 'giới thiệu', 've-chung-toi'],
|
|
55
|
-
why: 'Nothing says who the shop is, which is the page a first-time buyer opens before paying.'
|
|
55
|
+
why: 'Nothing says who the shop is, which is the page a first-time buyer opens before paying. ' +
|
|
56
|
+
'sb_page_create name:"Giới thiệu" opens it as a heading, a story and a picture.',
|
|
57
|
+
layout: 'about',
|
|
56
58
|
},
|
|
57
59
|
// TWO POLICIES, NOT ONE BUCKET. These were a single entry, and it read a shop
|
|
58
60
|
// carrying only "Chính sách giao hàng & đổi trả" as complete — which is
|
|
@@ -66,7 +68,9 @@ export const USUAL_PAGES = [
|
|
|
66
68
|
'shipping', 'van-chuyen', 'vận chuyển', 'giao-hang', 'giao hàng', 'delivery',
|
|
67
69
|
],
|
|
68
70
|
why: 'No delivery or return terms a shopper can read before paying. This is the page a buyer ' +
|
|
69
|
-
'looks for when the parcel is late and the one a dispute is settled against.'
|
|
71
|
+
'looks for when the parcel is late and the one a dispute is settled against. ' +
|
|
72
|
+
'sb_page_create with a name carrying "giao hàng" or "đổi trả" opens it as prose.',
|
|
73
|
+
layout: 'policy',
|
|
70
74
|
},
|
|
71
75
|
{
|
|
72
76
|
key: 'policy-privacy',
|
|
@@ -75,13 +79,17 @@ export const USUAL_PAGES = [
|
|
|
75
79
|
'quy-dinh', 'quy định',
|
|
76
80
|
],
|
|
77
81
|
why: 'No privacy policy or terms of use. Payment providers and marketplaces ask for both ' +
|
|
78
|
-
'before they will list a shop, and a checkout form collects personal data either way.'
|
|
82
|
+
'before they will list a shop, and a checkout form collects personal data either way. ' +
|
|
83
|
+
'sb_page_create with a name carrying "bảo mật" or "điều khoản" opens it as prose.',
|
|
84
|
+
layout: 'policy',
|
|
79
85
|
},
|
|
80
86
|
{
|
|
81
87
|
key: 'faq',
|
|
82
88
|
match: ['faq', 'cau-hoi', 'câu hỏi', 'hoi-dap', 'hỏi đáp', 'help', 'tro-giup', 'trợ giúp'],
|
|
83
89
|
why: 'The same handful of questions reach support one message at a time, with no page to link ' +
|
|
84
|
-
'an answer to.
|
|
90
|
+
'an answer to. sb_page_create name:"Câu hỏi thường gặp" opens it on the accordion, which ' +
|
|
91
|
+
'is the element this page is made of.',
|
|
92
|
+
layout: 'faq',
|
|
85
93
|
},
|
|
86
94
|
{
|
|
87
95
|
key: 'blog',
|
|
@@ -93,7 +101,9 @@ export const USUAL_PAGES = [
|
|
|
93
101
|
when: (pages) => pages.some((x) => x.type === 'post'),
|
|
94
102
|
match: ['blog', 'tin-tuc', 'tin tức', 'news', 'bai-viet', 'bài viết', 'kien-thuc', 'cẩm nang'],
|
|
95
103
|
why: 'This site has an article template, so /blog/{slug} works — but no page LISTS the ' +
|
|
96
|
-
'articles, so each one is reachable only by someone who already has its URL.'
|
|
104
|
+
'articles, so each one is reachable only by someone who already has its URL. ' +
|
|
105
|
+
'sb_page_create name:"Tin tức" opens it on a repeater already bound to them.',
|
|
106
|
+
layout: 'articles',
|
|
97
107
|
},
|
|
98
108
|
];
|
|
99
109
|
/**
|
|
@@ -113,3 +123,21 @@ export function missingUsualPages(pages) {
|
|
|
113
123
|
.join('\n');
|
|
114
124
|
return USUAL_PAGES.filter((u) => (u.when ? u.when(pages) : true) && !u.match.some((m) => hay.includes(m)));
|
|
115
125
|
}
|
|
126
|
+
/**
|
|
127
|
+
* The layout a page called `name` should open with, or undefined.
|
|
128
|
+
*
|
|
129
|
+
* READ OFF THE SAME KEYWORDS that decide a page is missing, so the two answers
|
|
130
|
+
* cannot drift: a name this module reads as "the about page" is the name that
|
|
131
|
+
* gets the about layout. That is the whole reason it lives here rather than in
|
|
132
|
+
* a second table beside sb_page_create.
|
|
133
|
+
*
|
|
134
|
+
* ONLY FOR TYPE `page`. Every other type already opens with the seed its own
|
|
135
|
+
* type describes, and a name-based guess on top of it would contradict a
|
|
136
|
+
* decision the platform has already made.
|
|
137
|
+
*/
|
|
138
|
+
export function layoutForPageName(name, type) {
|
|
139
|
+
if (type && type !== 'page')
|
|
140
|
+
return undefined;
|
|
141
|
+
const hay = name.toLowerCase();
|
|
142
|
+
return USUAL_PAGES.find((u) => u.layout && u.match.some((m) => hay.includes(m)))?.layout;
|
|
143
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { COMPLETION_HEADLINE, COMPLETION_HEADLINE_SENTINEL, STORE_PAGE_SEEDS, } from '../../catalog/storepages.generated.js';
|
|
1
|
+
import { COMPLETION_HEADLINE, COMPLETION_HEADLINE_SENTINEL, PAGE_LAYOUT_SEEDS, STORE_PAGE_SEEDS, } from '../../catalog/storepages.generated.js';
|
|
2
2
|
/**
|
|
3
3
|
* WHAT A NEW STORE PAGE OPENS WITH — for an agent, as for a merchant.
|
|
4
4
|
*
|
|
@@ -58,3 +58,23 @@ export function seedSummary(type) {
|
|
|
58
58
|
const seed = STORE_PAGE_SEEDS[type];
|
|
59
59
|
return seed ? { nodes: Object.keys(seed.nodes).length } : null;
|
|
60
60
|
}
|
|
61
|
+
/**
|
|
62
|
+
* The document an ordinary page opens with for a chosen LAYOUT, or null.
|
|
63
|
+
*
|
|
64
|
+
* Separate from `seedDocument` because the keys are different things: that one
|
|
65
|
+
* is keyed by the page TYPE the storefront routes by, this one by the PURPOSE an
|
|
66
|
+
* author picked. Every content page is type `page`, so the first table cannot
|
|
67
|
+
* tell an About page from a policy and this one can.
|
|
68
|
+
*
|
|
69
|
+
* Same palette cards, same editor module, read through the same codegen — so a
|
|
70
|
+
* merchant who picks the layout in the create dialog and an agent that lands on
|
|
71
|
+
* it here open the same page.
|
|
72
|
+
*/
|
|
73
|
+
export function layoutDocument(layout) {
|
|
74
|
+
const seed = PAGE_LAYOUT_SEEDS[layout];
|
|
75
|
+
return seed ? JSON.parse(JSON.stringify(seed)) : null;
|
|
76
|
+
}
|
|
77
|
+
/** The layouts this build carries. */
|
|
78
|
+
export function layoutNames() {
|
|
79
|
+
return Object.keys(PAGE_LAYOUT_SEEDS);
|
|
80
|
+
}
|
package/dist/tools/page.js
CHANGED
|
@@ -7,7 +7,7 @@ import { addSubtree, setMany, baseOnlyKeys, moveNode, removeNode, duplicateNode,
|
|
|
7
7
|
import { baseOnlyNote } from '../domains/site/baseonly.js';
|
|
8
8
|
import { detachNote, presetIdOf, presetLayer } from '../domains/site/theme.js';
|
|
9
9
|
import { inertHintsFor } from '../domains/site/inert.js';
|
|
10
|
-
import { hasSeed, seedDocument, seedSummary, seededTypes } from '../domains/site/storepage.js';
|
|
10
|
+
import { hasSeed, layoutDocument, seedDocument, seedSummary, seededTypes } from '../domains/site/storepage.js';
|
|
11
11
|
import { animationNote, deadKeyNote, unknownValueNote, unknownWriteNote, } from '../domains/site/vocabulary.js';
|
|
12
12
|
import { skinLevelNote } from '../domains/site/fieldskin.js';
|
|
13
13
|
import { siteTheme } from '../domains/site/theme-fetch.js';
|
|
@@ -20,7 +20,7 @@ import { readinessGaps, READINESS_NOTICE } from '../domains/site/readiness.js';
|
|
|
20
20
|
import { gatherReadiness } from '../domains/site/readiness-fetch.js';
|
|
21
21
|
import { globalWarning, restampPatches, RESPONSIVE_NOTICE } from '../domains/site/traps.js';
|
|
22
22
|
import { catalogBrowse, catalogMatches, traitsFor } from '../catalog/element-search.js';
|
|
23
|
-
import { missingUsualPages } from '../domains/site/inventory.js';
|
|
23
|
+
import { layoutForPageName, missingUsualPages } from '../domains/site/inventory.js';
|
|
24
24
|
import { LAYOUT_PATTERNS, PATTERN_BY_ID, THEME_TOKENS, } from '../domains/site/patterns.js';
|
|
25
25
|
import { tokensFromPage } from '../domains/site/importmap.js';
|
|
26
26
|
import { middleEnd } from '../domains/site/traps.js';
|
|
@@ -1231,6 +1231,19 @@ export function registerPageTools(server, ctx) {
|
|
|
1231
1231
|
// been seeding, so a caller planning a build needs to know before it
|
|
1232
1232
|
// commits whether it is about to hand-assemble a buy box that already
|
|
1233
1233
|
// exists.
|
|
1234
|
+
// AN ORDINARY PAGE OPENS AS SOMETHING TOO, decided from its NAME.
|
|
1235
|
+
//
|
|
1236
|
+
// `hasSeed` is keyed by page TYPE, and every content page is type "page",
|
|
1237
|
+
// so About, a policy and an FAQ all arrived blank — and were then
|
|
1238
|
+
// hand-assembled out of the same three primitives, which is why they all
|
|
1239
|
+
// came out looking the same.
|
|
1240
|
+
//
|
|
1241
|
+
// The name is the signal because it is the only one there is, and reusing
|
|
1242
|
+
// the keyword table that already decides a page is MISSING is what stops
|
|
1243
|
+
// the two answers drifting apart: a name sb_page_list reads as "the about
|
|
1244
|
+
// page" is the name that gets the about layout. `seed:false` opts out, as
|
|
1245
|
+
// it always has.
|
|
1246
|
+
const layout = seed !== false ? layoutForPageName(name, type) : undefined;
|
|
1234
1247
|
const willSeed = seed !== false && hasSeed(type);
|
|
1235
1248
|
const summary = willSeed && type ? seedSummary(type) : null;
|
|
1236
1249
|
// WHAT MAKES THE NEW PAGE PART OF THE SITE.
|
|
@@ -1327,6 +1340,7 @@ export function registerPageTools(server, ctx) {
|
|
|
1327
1340
|
would_post: path,
|
|
1328
1341
|
body: redact(body),
|
|
1329
1342
|
...(summary ? { would_seed: { type, ...summary } } : {}),
|
|
1343
|
+
...(layout ? { would_open_as: layout } : {}),
|
|
1330
1344
|
...(wear.header || wear.footer
|
|
1331
1345
|
? { would_wear: { ...(wear.header ? { header: wear.header } : {}), ...(wear.footer ? { footer: wear.footer } : {}) } }
|
|
1332
1346
|
: {}),
|
|
@@ -1355,8 +1369,8 @@ export function registerPageTools(server, ctx) {
|
|
|
1355
1369
|
// unwinding a page the caller asked for.
|
|
1356
1370
|
let seeded = null;
|
|
1357
1371
|
const newId = res.page?.id;
|
|
1358
|
-
if (willSeed
|
|
1359
|
-
const document = seedDocument(type, { locale, headline });
|
|
1372
|
+
if ((willSeed || layout) && typeof newId === 'string' && newId) {
|
|
1373
|
+
const document = layout ? layoutDocument(layout) : seedDocument(type ?? '', { locale, headline });
|
|
1360
1374
|
if (document) {
|
|
1361
1375
|
try {
|
|
1362
1376
|
await request({
|
|
@@ -1369,7 +1383,9 @@ export function registerPageTools(server, ctx) {
|
|
|
1369
1383
|
body: { document, schemaVersion: document.schema_version },
|
|
1370
1384
|
fetchImpl: ctx.fetchImpl,
|
|
1371
1385
|
});
|
|
1372
|
-
seeded =
|
|
1386
|
+
seeded = layout
|
|
1387
|
+
? { layout, nodes: Object.keys(document.nodes).length }
|
|
1388
|
+
: { type, nodes: Object.keys(document.nodes).length };
|
|
1373
1389
|
}
|
|
1374
1390
|
catch (e) {
|
|
1375
1391
|
seeded = {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sbuilder-mcp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.56.0",
|
|
4
4
|
"description": "MCP server that designs and operates a Store Builder site — pages, data, theme and publish — through the platform's own API and live-edit protocol.",
|
|
5
5
|
"mcpName": "io.github.vuluu2k/sbuilder-mcp",
|
|
6
6
|
"type": "module",
|