@repobit/dex-system-design 0.23.11 → 0.23.12

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 CHANGED
@@ -3,6 +3,14 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [0.23.12](https://github.com/bitdefender/dex-core/compare/@repobit/dex-system-design@0.23.11...@repobit/dex-system-design@0.23.12) (2026-04-03)
7
+
8
+ **Note:** Version bump only for package @repobit/dex-system-design
9
+
10
+
11
+
12
+
13
+
6
14
  ## [0.23.11](https://github.com/bitdefender/dex-core/compare/@repobit/dex-system-design@0.23.10...@repobit/dex-system-design@0.23.11) (2026-04-01)
7
15
 
8
16
  ### Bug Fixes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@repobit/dex-system-design",
3
- "version": "0.23.11",
3
+ "version": "0.23.12",
4
4
  "description": "Design system based on Web Components.",
5
5
  "author": "Iordache Matei Cezar <miordache@bitdefender.com>",
6
6
  "homepage": "https://github.com/bitdefender/dex-core#readme",
@@ -11,11 +11,14 @@
11
11
  },
12
12
  "files": [
13
13
  "src",
14
+ "schemas",
14
15
  "README.md",
15
16
  "CHANGELOG.md",
16
17
  "LICENSE"
17
18
  ],
18
19
  "exports": {
20
+ "./component-manifest": "./schemas/component-manifest.json",
21
+ "./page-schema": "./schemas/page-schema.json",
19
22
  "./accordion-bg": "./src/components/accordion/accordion-bg.js",
20
23
  "./accordion": "./src/components/accordion/accordion.js",
21
24
  "./anchor": "./src/components/anchor/anchor-nav.js",
@@ -86,5 +89,5 @@
86
89
  "volta": {
87
90
  "node": "24.14.0"
88
91
  },
89
- "gitHead": "d585162a40165e7aa8f96463433be03d5aef2f05"
92
+ "gitHead": "86f179bab0198a14589c7297b74c8c045120c13d"
90
93
  }
@@ -0,0 +1,33 @@
1
+ # Dex System Design Schemas
2
+
3
+ These files are the machine-readable contract for page generation:
4
+
5
+ - `component-manifest.json`
6
+ - Catalog of public tags, import entrypoints, and public props.
7
+ - `page-schema.json`
8
+ - Recursive JSON schema for a generated page tree.
9
+
10
+ Recommended n8n flow:
11
+
12
+ 1. Load `component-manifest.json`.
13
+ 2. Give the manifest plus a content brief to an LLM.
14
+ 3. Ask the model to return JSON that validates against `page-schema.json`.
15
+ 4. Validate the result.
16
+ 5. Render the validated tree to HTML or a Lit template.
17
+
18
+ Suggested prompt shape:
19
+
20
+ ```text
21
+ You are generating a page using only the components from component-manifest.json.
22
+ Return valid JSON matching page-schema.json.
23
+ Use only tags and props present in the manifest.
24
+ Only include imports that are required by the selected components.
25
+ Prefer simple, valid compositions over speculative props.
26
+ ```
27
+
28
+ Important constraints:
29
+
30
+ - Treat `props` as component property names.
31
+ - If `attributeName` exists in the manifest, the renderer should emit that HTML attribute when serializing to markup.
32
+ - `children` may contain plain text or nested component nodes.
33
+ - The manifest is intentionally conservative. If a prop is not listed, the generator should not invent it.
@@ -0,0 +1,695 @@
1
+ {
2
+ "manifestVersion": 1,
3
+ "package": "@repobit/dex-system-design",
4
+ "packageVersion": "0.23.11",
5
+ "generatedFrom": [
6
+ "package.json exports",
7
+ "Lit static properties",
8
+ "selected Storybook argTypes"
9
+ ],
10
+ "notes": [
11
+ "Import the package export once, then any tag registered by that module can be used in the rendered page.",
12
+ "Props are expressed as component property names. When attributeName exists, a string-to-HTML renderer should emit that explicit attribute name.",
13
+ "Private or state-only Lit properties were intentionally omitted."
14
+ ],
15
+ "components": [
16
+ {
17
+ "tag": "bd-h",
18
+ "packageExport": "./heading",
19
+ "module": "./src/components/heading/heading.js",
20
+ "role": "content",
21
+ "contentModel": "text-or-children",
22
+ "props": [
23
+ { "name": "as", "type": "string", "enum": ["h1", "h2", "h3", "h4", "h5", "h6"] },
24
+ { "name": "ariaLevel", "type": "number", "attributeName": "aria-level" },
25
+ { "name": "padding", "type": "string" },
26
+ { "name": "paddingBottom", "type": "string" },
27
+ { "name": "fontWeight", "type": "string", "enum": ["", "100", "200", "300", "400", "500", "600", "700", "800", "900", "normal", "bold", "lighter", "bolder"] },
28
+ { "name": "color", "type": "string" }
29
+ ]
30
+ },
31
+ {
32
+ "tag": "bd-p",
33
+ "packageExport": "./paragraph",
34
+ "module": "./src/components/paragraph/paragraph.js",
35
+ "role": "content",
36
+ "contentModel": "text-or-children",
37
+ "props": [
38
+ { "name": "kind", "type": "string" }
39
+ ]
40
+ },
41
+ {
42
+ "tag": "bd-button",
43
+ "packageExport": "./button",
44
+ "module": "./src/components/Button/Button.js",
45
+ "role": "action",
46
+ "contentModel": "text-or-children",
47
+ "events": ["custom-click"],
48
+ "props": [
49
+ { "name": "label", "type": "string" },
50
+ { "name": "size", "type": "string", "enum": ["sm", "md", "lg"] },
51
+ { "name": "kind", "type": "string", "enum": ["primary", "primary-outline", "outline", "secondary", "danger"] },
52
+ { "name": "customClass", "type": "string" },
53
+ { "name": "fullWidth", "type": "boolean" },
54
+ { "name": "strong", "type": "boolean" },
55
+ { "name": "fontSize", "type": "string", "attributeName": "font-size" },
56
+ { "name": "fontWeight", "type": "string", "attributeName": "font-weight" }
57
+ ]
58
+ },
59
+ {
60
+ "tag": "bd-button-link",
61
+ "packageExport": "./button",
62
+ "module": "./src/components/Button/Button.js",
63
+ "role": "action",
64
+ "contentModel": "text-or-children",
65
+ "events": ["custom-click"],
66
+ "props": [
67
+ { "name": "label", "type": "string" },
68
+ { "name": "href", "type": "string" },
69
+ { "name": "size", "type": "string", "enum": ["sm", "md", "lg"] },
70
+ { "name": "kind", "type": "string", "enum": ["primary", "primary-outline", "outline", "secondary", "danger"] },
71
+ { "name": "customClass", "type": "string" },
72
+ { "name": "fullWidth", "type": "boolean" },
73
+ { "name": "strong", "type": "boolean" },
74
+ { "name": "fontSize", "type": "string", "attributeName": "font-size" },
75
+ { "name": "fontWeight", "type": "string", "attributeName": "font-weight" },
76
+ { "name": "buyLink", "type": "boolean" },
77
+ { "name": "shadow", "type": "boolean" }
78
+ ]
79
+ },
80
+ {
81
+ "tag": "bd-contact-button",
82
+ "packageExport": "./button",
83
+ "module": "./src/components/Button/Button.js",
84
+ "role": "action",
85
+ "contentModel": "none",
86
+ "props": [
87
+ { "name": "label", "type": "string" },
88
+ { "name": "href", "type": "string" }
89
+ ]
90
+ },
91
+ {
92
+ "tag": "bd-link",
93
+ "packageExport": "./link",
94
+ "module": "./src/components/link/link.js",
95
+ "role": "content",
96
+ "contentModel": "text-or-children",
97
+ "props": [
98
+ { "name": "href", "type": "string" },
99
+ { "name": "target", "type": "string" },
100
+ { "name": "kind", "type": "string" },
101
+ { "name": "underline", "type": "boolean" },
102
+ { "name": "disabled", "type": "boolean" },
103
+ { "name": "fontSize", "type": "string", "attributeName": "font-size" },
104
+ { "name": "color", "type": "string" }
105
+ ]
106
+ },
107
+ {
108
+ "tag": "bd-img",
109
+ "packageExport": "./image",
110
+ "module": "./src/components/image/image.js",
111
+ "role": "media",
112
+ "contentModel": "none",
113
+ "props": [
114
+ { "name": "src", "type": "string" },
115
+ { "name": "alt", "type": "string" },
116
+ { "name": "width", "type": "number" },
117
+ { "name": "height", "type": "number" },
118
+ { "name": "loading", "type": "string" },
119
+ { "name": "fit", "type": "string" },
120
+ { "name": "radius", "type": "string" },
121
+ { "name": "shadow", "type": "string" }
122
+ ]
123
+ },
124
+ {
125
+ "tag": "bd-picture",
126
+ "packageExport": "./picture",
127
+ "module": "./src/components/picture/picture.js",
128
+ "role": "media",
129
+ "contentModel": "none",
130
+ "props": [
131
+ { "name": "sources", "type": "array" },
132
+ { "name": "fallbackSrc", "type": "string" },
133
+ { "name": "alt", "type": "string" },
134
+ { "name": "width", "type": "number" },
135
+ { "name": "height", "type": "number" },
136
+ { "name": "loading", "type": "string" },
137
+ { "name": "fit", "type": "string" },
138
+ { "name": "radius", "type": "string" }
139
+ ]
140
+ },
141
+ {
142
+ "tag": "bd-grid",
143
+ "packageExport": "./grid",
144
+ "module": "./src/components/grid/grid.js",
145
+ "role": "layout",
146
+ "contentModel": "children",
147
+ "props": [
148
+ { "name": "cols", "type": "number" },
149
+ { "name": "colsSm", "type": "number" },
150
+ { "name": "colsMd", "type": "number" },
151
+ { "name": "colsLg", "type": "number" },
152
+ { "name": "gap", "type": "string" },
153
+ { "name": "align", "type": "string" },
154
+ { "name": "justify", "type": "string" },
155
+ { "name": "padding", "type": "string" }
156
+ ]
157
+ },
158
+ {
159
+ "tag": "bd-list",
160
+ "packageExport": "./list",
161
+ "module": "./src/components/list/list.js",
162
+ "role": "content",
163
+ "contentModel": "children",
164
+ "props": [
165
+ { "name": "type", "type": "string" },
166
+ { "name": "spacing", "type": "string" },
167
+ { "name": "variant", "type": "string" },
168
+ { "name": "start", "type": "number" },
169
+ { "name": "orientation", "type": "string" }
170
+ ]
171
+ },
172
+ {
173
+ "tag": "bd-li",
174
+ "packageExport": "./list-item",
175
+ "module": "./src/components/list/list-item/list-item.js",
176
+ "role": "content",
177
+ "contentModel": "text-or-children",
178
+ "props": [
179
+ { "name": "kind", "type": "string" },
180
+ { "name": "size", "type": "string" },
181
+ { "name": "icon", "type": "string" }
182
+ ]
183
+ },
184
+ {
185
+ "tag": "bd-badge",
186
+ "packageExport": "./badge",
187
+ "module": "./src/components/badge/badge.js",
188
+ "role": "content",
189
+ "contentModel": "text-or-children",
190
+ "props": [
191
+ { "name": "color", "type": "string" },
192
+ { "name": "variant", "type": "string" },
193
+ { "name": "size", "type": "string" },
194
+ { "name": "fontsize", "type": "string" },
195
+ { "name": "icon", "type": "string" }
196
+ ]
197
+ },
198
+ {
199
+ "tag": "bd-checkbox",
200
+ "packageExport": "./checkbox",
201
+ "module": "./src/components/checkbox/checkbox.js",
202
+ "role": "form",
203
+ "contentModel": "none",
204
+ "props": [
205
+ { "name": "name", "type": "string" },
206
+ { "name": "value", "type": "string" },
207
+ { "name": "checked", "type": "boolean" },
208
+ { "name": "disabled", "type": "boolean" },
209
+ { "name": "label", "type": "string" }
210
+ ]
211
+ },
212
+ {
213
+ "tag": "bd-radio",
214
+ "packageExport": "./radio",
215
+ "module": "./src/components/radio/radio.js",
216
+ "role": "form",
217
+ "contentModel": "none",
218
+ "events": ["change"],
219
+ "props": [
220
+ { "name": "name", "type": "string" },
221
+ { "name": "value", "type": "string" },
222
+ { "name": "checked", "type": "boolean" },
223
+ { "name": "disabled", "type": "boolean" },
224
+ { "name": "label", "type": "string" }
225
+ ]
226
+ },
227
+ {
228
+ "tag": "bd-toggle-radio",
229
+ "packageExport": "./radio",
230
+ "module": "./src/components/radio/radio.js",
231
+ "role": "form",
232
+ "contentModel": "none",
233
+ "events": ["change"],
234
+ "props": [
235
+ { "name": "name", "type": "string" },
236
+ { "name": "value", "type": "string" },
237
+ { "name": "checked", "type": "boolean" },
238
+ { "name": "disabled", "type": "boolean" },
239
+ { "name": "label", "type": "string" }
240
+ ]
241
+ },
242
+ {
243
+ "tag": "bd-custom-input",
244
+ "packageExport": "./input",
245
+ "module": "./src/components/input/input.js",
246
+ "role": "form",
247
+ "contentModel": "none",
248
+ "props": [
249
+ { "name": "label", "type": "string" },
250
+ { "name": "type", "type": "string" },
251
+ { "name": "kind", "type": "string" },
252
+ { "name": "placeholder", "type": "string" },
253
+ { "name": "required", "type": "boolean" },
254
+ { "name": "focused", "type": "boolean" },
255
+ { "name": "tooltip", "type": "string" },
256
+ { "name": "invalid", "type": "boolean" },
257
+ { "name": "validated", "type": "boolean" },
258
+ { "name": "disabled", "type": "boolean" }
259
+ ]
260
+ },
261
+ {
262
+ "tag": "bd-custom-dropdown",
263
+ "packageExport": "./dropdown",
264
+ "module": "./src/components/dropdown/dropdown.js",
265
+ "role": "form",
266
+ "contentModel": "none",
267
+ "props": [
268
+ { "name": "label", "type": "string" },
269
+ { "name": "options", "type": "array" },
270
+ { "name": "kind", "type": "string" },
271
+ { "name": "required", "type": "boolean" },
272
+ { "name": "tooltip", "type": "string" },
273
+ { "name": "invalid", "type": "boolean" },
274
+ { "name": "validated", "type": "boolean" },
275
+ { "name": "disabled", "type": "boolean" }
276
+ ]
277
+ },
278
+ {
279
+ "tag": "bd-modal",
280
+ "packageExport": "./modal",
281
+ "module": "./src/components/modal/modal.js",
282
+ "role": "overlay",
283
+ "contentModel": "children",
284
+ "props": [
285
+ { "name": "open", "type": "boolean" },
286
+ { "name": "title", "type": "string" },
287
+ { "name": "icon", "type": "string" },
288
+ { "name": "modalText", "type": "string" }
289
+ ]
290
+ },
291
+ {
292
+ "tag": "bd-divider-horizontal",
293
+ "packageExport": "./divider-horizontal",
294
+ "module": "./src/components/divider/divider-horizontal.js",
295
+ "role": "layout",
296
+ "contentModel": "none",
297
+ "props": [
298
+ { "name": "width", "type": "string" },
299
+ { "name": "color", "type": "string" },
300
+ { "name": "opacity", "type": "string" }
301
+ ]
302
+ },
303
+ {
304
+ "tag": "bd-divider-vertical",
305
+ "packageExport": "./divider-vertical",
306
+ "module": "./src/components/divider/divider-vertical.js",
307
+ "role": "layout",
308
+ "contentModel": "none",
309
+ "props": [
310
+ { "name": "height", "type": "string" },
311
+ { "name": "thickness", "type": "string" },
312
+ { "name": "color", "type": "string" },
313
+ { "name": "opacity", "type": "string" }
314
+ ]
315
+ },
316
+ {
317
+ "tag": "bd-accordion-section",
318
+ "packageExport": "./accordion",
319
+ "module": "./src/components/accordion/accordion.js",
320
+ "role": "container",
321
+ "contentModel": "children",
322
+ "children": ["bd-accordion-item"],
323
+ "props": [
324
+ { "name": "title", "type": "string" },
325
+ { "name": "variant", "type": "string" },
326
+ { "name": "guideIcon", "type": "string" },
327
+ { "name": "guideLabel", "type": "string" },
328
+ { "name": "guideHref", "type": "string" }
329
+ ]
330
+ },
331
+ {
332
+ "tag": "bd-accordion-item",
333
+ "packageExport": "./accordion",
334
+ "module": "./src/components/accordion/accordion.js",
335
+ "role": "item",
336
+ "contentModel": "children",
337
+ "props": [
338
+ { "name": "title", "type": "string" },
339
+ { "name": "open", "type": "boolean" }
340
+ ]
341
+ },
342
+ {
343
+ "tag": "bd-accordion-bg",
344
+ "packageExport": "./accordion-bg",
345
+ "module": "./src/components/accordion/accordion-bg.js",
346
+ "role": "container",
347
+ "contentModel": "children",
348
+ "children": ["bd-accordion-bg-item"],
349
+ "props": [
350
+ { "name": "title", "type": "string" },
351
+ { "name": "noBg", "type": "boolean" }
352
+ ]
353
+ },
354
+ {
355
+ "tag": "bd-accordion-bg-item",
356
+ "packageExport": "./accordion-bg",
357
+ "module": "./src/components/accordion/accordion-bg.js",
358
+ "role": "item",
359
+ "contentModel": "children",
360
+ "props": [
361
+ { "name": "title", "type": "string" },
362
+ { "name": "open", "type": "boolean" },
363
+ { "name": "noBg", "type": "boolean" }
364
+ ]
365
+ },
366
+ {
367
+ "tag": "bd-header",
368
+ "packageExport": "./header",
369
+ "module": "./src/components/header/header.js",
370
+ "role": "section",
371
+ "contentModel": "none",
372
+ "props": [
373
+ { "name": "title", "type": "string" },
374
+ { "name": "subtitle", "type": "string" },
375
+ { "name": "description", "type": "string" },
376
+ { "name": "fullPrice", "type": "string" },
377
+ { "name": "discount", "type": "string" },
378
+ { "name": "finalPrice", "type": "string" },
379
+ { "name": "productId", "type": "string" },
380
+ { "name": "devices", "type": "string" },
381
+ { "name": "subscription", "type": "string" },
382
+ { "name": "shadow", "type": "boolean" },
383
+ { "name": "dataLayerEvent", "type": "string" }
384
+ ]
385
+ },
386
+ {
387
+ "tag": "bd-footer",
388
+ "packageExport": "./footer",
389
+ "module": "./src/components/footer/footer.js",
390
+ "role": "section",
391
+ "contentModel": "children",
392
+ "props": [
393
+ { "name": "currentLocale", "type": "string" },
394
+ { "name": "maxColumnsPerRow", "type": "number" }
395
+ ]
396
+ },
397
+ {
398
+ "tag": "bd-footer-lp",
399
+ "packageExport": "./footer-lp",
400
+ "module": "./src/components/footer/footer-lp.js",
401
+ "role": "section",
402
+ "contentModel": "children",
403
+ "props": [
404
+ { "name": "currentLocale", "type": "string" }
405
+ ]
406
+ },
407
+ {
408
+ "tag": "bd-footer-links-group",
409
+ "packageExport": "./footer-links-group",
410
+ "module": "./src/components/footer/footer-links-group.js",
411
+ "role": "item",
412
+ "contentModel": "children",
413
+ "props": [
414
+ { "name": "title", "type": "string" }
415
+ ]
416
+ },
417
+ {
418
+ "tag": "bd-footer-nav",
419
+ "packageExport": "./footer-nav-menu",
420
+ "module": "./src/components/footer/footer-nav-menu.js",
421
+ "role": "item",
422
+ "contentModel": "children",
423
+ "props": [
424
+ { "name": "bold", "type": "boolean" }
425
+ ]
426
+ },
427
+ {
428
+ "tag": "bd-highlight",
429
+ "packageExport": "./highlight",
430
+ "module": "./src/components/highlight/highlight.js",
431
+ "role": "section",
432
+ "contentModel": "children",
433
+ "props": [
434
+ { "name": "highlightText", "type": "string", "attributeName": "highlight-text" },
435
+ { "name": "subTitle", "type": "string", "attributeName": "sub-title" }
436
+ ]
437
+ },
438
+ {
439
+ "tag": "bd-anchor-nav",
440
+ "packageExport": "./anchor",
441
+ "module": "./src/components/anchor/anchor-nav.js",
442
+ "role": "navigation",
443
+ "contentModel": "children",
444
+ "children": ["bd-anchor-nav-item"],
445
+ "props": [
446
+ { "name": "navLabel", "type": "string", "attributeName": "aria-label" }
447
+ ]
448
+ },
449
+ {
450
+ "tag": "bd-anchor-nav-item",
451
+ "packageExport": "./anchor",
452
+ "module": "./src/components/anchor/anchor-nav.js",
453
+ "role": "item",
454
+ "contentModel": "text-or-children",
455
+ "props": []
456
+ },
457
+ {
458
+ "tag": "bd-carousel-section",
459
+ "packageExport": "./carousel",
460
+ "module": "./src/components/carousel/carousel.js",
461
+ "role": "container",
462
+ "contentModel": "children",
463
+ "children": ["bd-carousel-item"],
464
+ "props": [
465
+ { "name": "title", "type": "string" },
466
+ { "name": "selectedItem", "type": "object" }
467
+ ]
468
+ },
469
+ {
470
+ "tag": "bd-carousel-item",
471
+ "packageExport": "./carousel",
472
+ "module": "./src/components/carousel/carousel.js",
473
+ "role": "item",
474
+ "contentModel": "children",
475
+ "props": [
476
+ { "name": "icon", "type": "string" },
477
+ { "name": "title", "type": "string" },
478
+ { "name": "modalText", "type": "string" }
479
+ ]
480
+ },
481
+ {
482
+ "tag": "bd-light-carousel-section",
483
+ "packageExport": "./light-carousel",
484
+ "module": "./src/components/light-carousel/light-carousel.js",
485
+ "role": "container",
486
+ "contentModel": "children",
487
+ "children": ["bd-light-carousel-item"],
488
+ "props": [
489
+ { "name": "title", "type": "string" }
490
+ ]
491
+ },
492
+ {
493
+ "tag": "bd-light-carousel-item",
494
+ "packageExport": "./light-carousel",
495
+ "module": "./src/components/light-carousel/light-carousel.js",
496
+ "role": "item",
497
+ "contentModel": "children",
498
+ "props": [
499
+ { "name": "title", "type": "string" },
500
+ { "name": "badge", "type": "string" },
501
+ { "name": "icon", "type": "string" }
502
+ ]
503
+ },
504
+ {
505
+ "tag": "bd-compare-section",
506
+ "packageExport": "./compare",
507
+ "module": "./src/components/compare/compare.js",
508
+ "role": "container",
509
+ "contentModel": "children",
510
+ "children": ["compare-card", "compare-bar"],
511
+ "props": [
512
+ { "name": "title", "type": "string" },
513
+ { "name": "subtitle", "type": "string" },
514
+ { "name": "columns", "type": "number" },
515
+ { "name": "gap", "type": "string" }
516
+ ]
517
+ },
518
+ {
519
+ "tag": "compare-card",
520
+ "packageExport": "./compare",
521
+ "module": "./src/components/compare/compare.js",
522
+ "role": "item",
523
+ "contentModel": "children",
524
+ "props": [
525
+ { "name": "title", "type": "string" },
526
+ { "name": "description", "type": "string" },
527
+ { "name": "footnote", "type": "string" },
528
+ { "name": "footnoteHref", "type": "string", "attributeName": "footnote-href" },
529
+ { "name": "iconSrc", "type": "string", "attributeName": "icon-src" },
530
+ { "name": "barStretch", "type": "boolean", "attributeName": "bar-stretch" },
531
+ { "name": "barFillMin", "type": "number", "attributeName": "bar-fill-min" },
532
+ { "name": "barStretchGamma", "type": "number", "attributeName": "bar-stretch-gamma" },
533
+ { "name": "chartScale", "type": "number", "attributeName": "chart-scale" }
534
+ ]
535
+ },
536
+ {
537
+ "tag": "compare-bar",
538
+ "packageExport": "./compare",
539
+ "module": "./src/components/compare/compare.js",
540
+ "role": "item",
541
+ "contentModel": "none",
542
+ "props": [
543
+ { "name": "label", "type": "string" },
544
+ { "name": "score", "type": "number" },
545
+ { "name": "maxScore", "type": "number", "attributeName": "max-score" },
546
+ { "name": "variant", "type": "string" },
547
+ { "name": "scoreLabel", "type": "string", "attributeName": "score-label" },
548
+ { "name": "referenceScore", "type": "number", "attributeName": "reference-score" },
549
+ { "name": "scale", "type": "number" }
550
+ ]
551
+ },
552
+ {
553
+ "tag": "bd-tabs-component",
554
+ "packageExport": "./tabs",
555
+ "module": "./src/components/tabs/tabs.js",
556
+ "role": "navigation",
557
+ "contentModel": "children",
558
+ "props": [
559
+ { "name": "selectedTab", "type": "number" }
560
+ ]
561
+ },
562
+ {
563
+ "tag": "bd-terms-section",
564
+ "packageExport": "./terms",
565
+ "module": "./src/components/termsOfUse/terms.js",
566
+ "role": "section",
567
+ "contentModel": "none",
568
+ "props": [
569
+ { "name": "faqs", "type": "array" }
570
+ ]
571
+ },
572
+ {
573
+ "tag": "bd-pricing-container",
574
+ "packageExport": "./pricing-cards",
575
+ "module": "./src/components/pricing-cards/pricing-card.js",
576
+ "role": "container",
577
+ "contentModel": "children",
578
+ "children": ["pricing-switch", "pricing-card", "pricing-card-family"],
579
+ "props": [
580
+ { "name": "planType", "type": "string" },
581
+ { "name": "locale", "type": "string" },
582
+ { "name": "currency", "type": "string" },
583
+ { "name": "shadow", "type": "boolean" }
584
+ ]
585
+ },
586
+ {
587
+ "tag": "pricing-switch",
588
+ "packageExport": "./pricing-cards",
589
+ "module": "./src/components/pricing-cards/pricing-card.js",
590
+ "role": "control",
591
+ "contentModel": "none",
592
+ "props": [
593
+ { "name": "planType", "type": "string" },
594
+ { "name": "shadow", "type": "boolean" }
595
+ ]
596
+ },
597
+ {
598
+ "tag": "pricing-card",
599
+ "packageExport": "./pricing-cards",
600
+ "module": "./src/components/pricing-cards/pricing-card.js",
601
+ "role": "item",
602
+ "contentModel": "children",
603
+ "props": [
604
+ { "name": "title", "type": "string" },
605
+ { "name": "features", "type": "boolean" },
606
+ { "name": "privacy", "type": "boolean" },
607
+ { "name": "highlight", "type": "boolean" },
608
+ { "name": "identity", "type": "boolean" },
609
+ { "name": "identityExtended", "type": "boolean" },
610
+ { "name": "parentalControl", "type": "boolean" },
611
+ { "name": "planType", "type": "string" },
612
+ { "name": "productId", "type": "string", "attributeName": "product-id" },
613
+ { "name": "locale", "type": "string" },
614
+ { "name": "currency", "type": "string" },
615
+ { "name": "shadow", "type": "boolean" }
616
+ ]
617
+ },
618
+ {
619
+ "tag": "pricing-card-family",
620
+ "packageExport": "./pricing-cards",
621
+ "module": "./src/components/pricing-cards/pricing-card.js",
622
+ "role": "item",
623
+ "contentModel": "children",
624
+ "props": [
625
+ { "name": "title", "type": "string" },
626
+ { "name": "features", "type": "boolean" },
627
+ { "name": "privacy", "type": "boolean" },
628
+ { "name": "highlight", "type": "boolean" },
629
+ { "name": "identity", "type": "boolean" },
630
+ { "name": "identityExtended", "type": "boolean" },
631
+ { "name": "parentalControl", "type": "boolean" },
632
+ { "name": "planType", "type": "string" },
633
+ { "name": "productId", "type": "string", "attributeName": "product-id" },
634
+ { "name": "locale", "type": "string" },
635
+ { "name": "currency", "type": "string" },
636
+ { "name": "shadow", "type": "boolean" }
637
+ ]
638
+ },
639
+ {
640
+ "tag": "pricing-card-features",
641
+ "packageExport": "./pricing-cards",
642
+ "module": "./src/components/pricing-cards/pricing-card.js",
643
+ "role": "subcomponent",
644
+ "contentModel": "none",
645
+ "props": [
646
+ { "name": "features", "type": "array" },
647
+ { "name": "shadow", "type": "boolean" }
648
+ ]
649
+ },
650
+ {
651
+ "tag": "pricing-card-privacy",
652
+ "packageExport": "./pricing-cards",
653
+ "module": "./src/components/pricing-cards/pricing-card.js",
654
+ "role": "subcomponent",
655
+ "contentModel": "none",
656
+ "props": [
657
+ { "name": "privacy", "type": "array" },
658
+ { "name": "shadow", "type": "boolean" }
659
+ ]
660
+ },
661
+ {
662
+ "tag": "pricing-card-identity",
663
+ "packageExport": "./pricing-cards",
664
+ "module": "./src/components/pricing-cards/pricing-card.js",
665
+ "role": "subcomponent",
666
+ "contentModel": "none",
667
+ "props": [
668
+ { "name": "identity", "type": "array" },
669
+ { "name": "shadow", "type": "boolean" }
670
+ ]
671
+ },
672
+ {
673
+ "tag": "pricing-card-identity-extended",
674
+ "packageExport": "./pricing-cards",
675
+ "module": "./src/components/pricing-cards/pricing-card.js",
676
+ "role": "subcomponent",
677
+ "contentModel": "none",
678
+ "props": [
679
+ { "name": "identity", "type": "array" },
680
+ { "name": "shadow", "type": "boolean" }
681
+ ]
682
+ },
683
+ {
684
+ "tag": "pricing-card-parental-control",
685
+ "packageExport": "./pricing-cards",
686
+ "module": "./src/components/pricing-cards/pricing-card.js",
687
+ "role": "subcomponent",
688
+ "contentModel": "none",
689
+ "props": [
690
+ { "name": "parentalControl", "type": "array" },
691
+ { "name": "shadow", "type": "boolean" }
692
+ ]
693
+ }
694
+ ]
695
+ }
@@ -0,0 +1,128 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://repobit.github.io/dex-system-design/page-schema.json",
4
+ "title": "Dex System Design Page Schema",
5
+ "description": "Recursive page tree for n8n or other generators that build markup from dex-system-design components.",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "required": ["version", "imports", "components"],
9
+ "properties": {
10
+ "version": {
11
+ "type": "integer",
12
+ "const": 1
13
+ },
14
+ "meta": {
15
+ "type": "object",
16
+ "additionalProperties": false,
17
+ "properties": {
18
+ "title": { "type": "string" },
19
+ "description": { "type": "string" },
20
+ "locale": { "type": "string" },
21
+ "route": { "type": "string" }
22
+ }
23
+ },
24
+ "imports": {
25
+ "type": "array",
26
+ "description": "Package exports that must be imported before rendering the page.",
27
+ "items": {
28
+ "type": "string"
29
+ },
30
+ "uniqueItems": true
31
+ },
32
+ "components": {
33
+ "type": "array",
34
+ "items": {
35
+ "$ref": "#/$defs/node"
36
+ }
37
+ }
38
+ },
39
+ "$defs": {
40
+ "scalar": {
41
+ "type": ["string", "number", "boolean", "null"]
42
+ },
43
+ "propValue": {
44
+ "oneOf": [
45
+ { "$ref": "#/$defs/scalar" },
46
+ {
47
+ "type": "array",
48
+ "items": {
49
+ "$ref": "#/$defs/propValue"
50
+ }
51
+ },
52
+ {
53
+ "type": "object",
54
+ "additionalProperties": {
55
+ "$ref": "#/$defs/propValue"
56
+ }
57
+ }
58
+ ]
59
+ },
60
+ "node": {
61
+ "type": "object",
62
+ "additionalProperties": false,
63
+ "required": ["type"],
64
+ "properties": {
65
+ "id": {
66
+ "type": "string"
67
+ },
68
+ "type": {
69
+ "type": "string",
70
+ "description": "Component tag from component-manifest.json."
71
+ },
72
+ "props": {
73
+ "type": "object",
74
+ "additionalProperties": {
75
+ "$ref": "#/$defs/propValue"
76
+ }
77
+ },
78
+ "slot": {
79
+ "type": "string"
80
+ },
81
+ "if": {
82
+ "type": "string",
83
+ "description": "Optional expression or upstream key used by a later renderer to decide whether to include the node."
84
+ },
85
+ "children": {
86
+ "type": "array",
87
+ "items": {
88
+ "oneOf": [
89
+ { "type": "string" },
90
+ { "$ref": "#/$defs/node" }
91
+ ]
92
+ }
93
+ }
94
+ }
95
+ }
96
+ },
97
+ "examples": [
98
+ {
99
+ "version": 1,
100
+ "imports": ["./heading", "./paragraph", "./button"],
101
+ "components": [
102
+ {
103
+ "type": "bd-h",
104
+ "props": {
105
+ "as": "h1"
106
+ },
107
+ "children": ["Bitdefender Security"]
108
+ },
109
+ {
110
+ "type": "bd-p",
111
+ "props": {
112
+ "kind": "regular"
113
+ },
114
+ "children": ["Advanced protection for devices, privacy, and identity."]
115
+ },
116
+ {
117
+ "type": "bd-button-link",
118
+ "props": {
119
+ "kind": "primary",
120
+ "size": "lg",
121
+ "href": "/buy"
122
+ },
123
+ "children": ["Buy now"]
124
+ }
125
+ ]
126
+ }
127
+ ]
128
+ }