@kubuild/components 0.7.0 → 0.8.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/dist/blocks/index.cjs +601 -12
- package/dist/blocks/index.cjs.map +1 -1
- package/dist/blocks/index.d.ts +2 -1
- package/dist/blocks/index.d.ts.map +1 -1
- package/dist/blocks/index.js +3 -1
- package/dist/blocks/sales.d.ts +7 -0
- package/dist/blocks/sales.d.ts.map +1 -0
- package/dist/canonical-props.d.ts +8 -0
- package/dist/canonical-props.d.ts.map +1 -0
- package/dist/{chunk-3HU2KE2B.js → chunk-CJN5OHHX.js} +596 -9
- package/dist/chunk-CJN5OHHX.js.map +1 -0
- package/dist/{chunk-JTQ35OQQ.js → chunk-DIZKTXJI.js} +601 -13
- package/dist/chunk-DIZKTXJI.js.map +1 -0
- package/dist/definitions/constants.d.ts.map +1 -1
- package/dist/definitions/conversion/accordion.d.ts +8 -0
- package/dist/definitions/conversion/accordion.d.ts.map +1 -0
- package/dist/definitions/conversion/carousel.d.ts +7 -0
- package/dist/definitions/conversion/carousel.d.ts.map +1 -0
- package/dist/definitions/conversion/countdown.d.ts +19 -0
- package/dist/definitions/conversion/countdown.d.ts.map +1 -0
- package/dist/definitions/conversion/divider.d.ts +9 -0
- package/dist/definitions/conversion/divider.d.ts.map +1 -0
- package/dist/definitions/conversion/index.d.ts +7 -0
- package/dist/definitions/conversion/index.d.ts.map +1 -0
- package/dist/definitions/conversion/rating.d.ts +7 -0
- package/dist/definitions/conversion/rating.d.ts.map +1 -0
- package/dist/definitions/conversion/tabs.d.ts +9 -0
- package/dist/definitions/conversion/tabs.d.ts.map +1 -0
- package/dist/definitions/form/button.d.ts.map +1 -1
- package/dist/definitions/index.cjs +746 -147
- package/dist/definitions/index.cjs.map +1 -1
- package/dist/definitions/index.d.ts +1 -0
- package/dist/definitions/index.d.ts.map +1 -1
- package/dist/definitions/index.js +27 -1
- package/dist/definitions/types.d.ts +4 -1
- package/dist/definitions/types.d.ts.map +1 -1
- package/dist/definitions/typography/badge.d.ts.map +1 -1
- package/dist/definitions/typography/blockquote.d.ts.map +1 -1
- package/dist/definitions/typography/heading.d.ts.map +1 -1
- package/dist/definitions/typography/link.d.ts.map +1 -1
- package/dist/definitions/typography/paragraph.d.ts.map +1 -1
- package/dist/definitions/typography/text.d.ts.map +1 -1
- package/dist/index.cjs +1417 -227
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +32 -2
- package/dist/index.js.map +1 -1
- package/dist/registry.d.ts +12 -0
- package/dist/registry.d.ts.map +1 -1
- package/package.json +3 -3
- package/dist/chunk-3HU2KE2B.js.map +0 -1
- package/dist/chunk-JTQ35OQQ.js.map +0 -1
package/dist/index.cjs
CHANGED
|
@@ -21,15 +21,22 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
21
21
|
var src_exports = {};
|
|
22
22
|
__export(src_exports, {
|
|
23
23
|
CONTENT_CHILD_TYPES: () => CONTENT_CHILD_TYPES,
|
|
24
|
+
COUNTDOWN_EXPIRE_BEHAVIORS: () => COUNTDOWN_EXPIRE_BEHAVIORS,
|
|
25
|
+
COUNTDOWN_FORMATS: () => COUNTDOWN_FORMATS,
|
|
26
|
+
COUNTDOWN_MODES: () => COUNTDOWN_MODES,
|
|
27
|
+
COUNTDOWN_STORAGE_TYPES: () => COUNTDOWN_STORAGE_TYPES,
|
|
24
28
|
ComponentRegistry: () => ComponentRegistry,
|
|
25
29
|
FORM_STARTER_BLOCKS: () => FORM_STARTER_BLOCKS,
|
|
26
30
|
LAYOUT_PARENTS: () => LAYOUT_PARENTS,
|
|
27
31
|
LAYOUT_STARTER_BLOCKS: () => LAYOUT_STARTER_BLOCKS,
|
|
32
|
+
SALES_STARTER_BLOCKS: () => SALES_STARTER_BLOCKS,
|
|
28
33
|
STARTER_BLOCKS: () => STARTER_BLOCKS,
|
|
29
34
|
TRAIT_GROUP_LABELS: () => TRAIT_GROUP_LABELS,
|
|
30
35
|
TRAIT_GROUP_ORDER: () => TRAIT_GROUP_ORDER,
|
|
31
36
|
UI_STARTER_BLOCKS: () => UI_STARTER_BLOCKS,
|
|
32
37
|
acceptTrait: () => acceptTrait,
|
|
38
|
+
accordionDefinition: () => accordionDefinition,
|
|
39
|
+
accordionItemDefinition: () => accordionItemDefinition,
|
|
33
40
|
actionTrait: () => actionTrait,
|
|
34
41
|
altTrait: () => altTrait,
|
|
35
42
|
ariaLabelTrait: () => ariaLabelTrait,
|
|
@@ -42,6 +49,8 @@ __export(src_exports, {
|
|
|
42
49
|
buttonDefinition: () => buttonDefinition,
|
|
43
50
|
buttonSubmitDefinition: () => buttonSubmitDefinition,
|
|
44
51
|
buttonTypeTrait: () => buttonTypeTrait,
|
|
52
|
+
canonicalTextPropFields: () => canonicalTextPropFields,
|
|
53
|
+
carouselDefinition: () => carouselDefinition,
|
|
45
54
|
checkboxDefinition: () => checkboxDefinition,
|
|
46
55
|
citeTrait: () => citeTrait,
|
|
47
56
|
codeBlockDefinition: () => codeBlockDefinition,
|
|
@@ -53,12 +62,14 @@ __export(src_exports, {
|
|
|
53
62
|
containerDefinition: () => containerDefinition,
|
|
54
63
|
controlsTrait: () => controlsTrait,
|
|
55
64
|
coreComponentDefinitions: () => coreComponentDefinitions,
|
|
65
|
+
countdownDefinition: () => countdownDefinition,
|
|
56
66
|
createDefaultComponentRegistry: () => createDefaultComponentRegistry,
|
|
57
67
|
defaultCheckedTrait: () => defaultCheckedTrait,
|
|
58
68
|
defaultGenId: () => defaultGenId,
|
|
59
69
|
defaultSelectedTrait: () => defaultSelectedTrait,
|
|
60
70
|
defaultValueTrait: () => defaultValueTrait,
|
|
61
71
|
disabledTrait: () => disabledTrait,
|
|
72
|
+
dividerDefinition: () => dividerDefinition,
|
|
62
73
|
drawerDefinition: () => drawerDefinition,
|
|
63
74
|
extractComponentRequirements: () => extractComponentRequirements,
|
|
64
75
|
fieldNameTrait: () => fieldNameTrait,
|
|
@@ -105,6 +116,7 @@ __export(src_exports, {
|
|
|
105
116
|
radioDefinition: () => radioDefinition,
|
|
106
117
|
radioGroupDefinition: () => radioGroupDefinition,
|
|
107
118
|
radioItemDefinition: () => radioItemDefinition,
|
|
119
|
+
ratingDefinition: () => ratingDefinition,
|
|
108
120
|
readOnlyTrait: () => readOnlyTrait,
|
|
109
121
|
relTrait: () => relTrait,
|
|
110
122
|
requiredTrait: () => requiredTrait,
|
|
@@ -118,13 +130,16 @@ __export(src_exports, {
|
|
|
118
130
|
showPreviewTrait: () => showPreviewTrait,
|
|
119
131
|
showSpinnerTrait: () => showSpinnerTrait,
|
|
120
132
|
sortTraits: () => sortTraits,
|
|
133
|
+
spacerDefinition: () => spacerDefinition,
|
|
121
134
|
srcTrait: () => srcTrait,
|
|
122
135
|
suffixIconTrait: () => suffixIconTrait,
|
|
123
136
|
switchDefinition: () => switchDefinition,
|
|
124
137
|
switchSizeTrait: () => switchSizeTrait,
|
|
138
|
+
tabPanelDefinition: () => tabPanelDefinition,
|
|
125
139
|
tableCellDefinition: () => tableCellDefinition,
|
|
126
140
|
tableDefinition: () => tableDefinition,
|
|
127
141
|
tableRowDefinition: () => tableRowDefinition,
|
|
142
|
+
tabsDefinition: () => tabsDefinition,
|
|
128
143
|
tagTrait: () => tagTrait,
|
|
129
144
|
targetTrait: () => targetTrait,
|
|
130
145
|
textDefinition: () => textDefinition,
|
|
@@ -1074,7 +1089,20 @@ function autoDisableOnSubmitTrait(overrides) {
|
|
|
1074
1089
|
}
|
|
1075
1090
|
|
|
1076
1091
|
// src/definitions/constants.ts
|
|
1077
|
-
var LAYOUT_PARENTS = [
|
|
1092
|
+
var LAYOUT_PARENTS = [
|
|
1093
|
+
"page",
|
|
1094
|
+
"section",
|
|
1095
|
+
"container",
|
|
1096
|
+
"columns",
|
|
1097
|
+
"flex",
|
|
1098
|
+
"grid",
|
|
1099
|
+
"modal",
|
|
1100
|
+
"drawer",
|
|
1101
|
+
"collapsible",
|
|
1102
|
+
"accordion-item",
|
|
1103
|
+
"tab-panel",
|
|
1104
|
+
"carousel"
|
|
1105
|
+
];
|
|
1078
1106
|
var CONTENT_CHILD_TYPES = [
|
|
1079
1107
|
"heading",
|
|
1080
1108
|
"text",
|
|
@@ -1105,7 +1133,14 @@ var CONTENT_CHILD_TYPES = [
|
|
|
1105
1133
|
"custom",
|
|
1106
1134
|
"modal",
|
|
1107
1135
|
"drawer",
|
|
1108
|
-
"collapsible"
|
|
1136
|
+
"collapsible",
|
|
1137
|
+
"countdown",
|
|
1138
|
+
"accordion",
|
|
1139
|
+
"tabs",
|
|
1140
|
+
"carousel",
|
|
1141
|
+
"rating",
|
|
1142
|
+
"divider",
|
|
1143
|
+
"spacer"
|
|
1109
1144
|
];
|
|
1110
1145
|
|
|
1111
1146
|
// src/definitions/layout/page.ts
|
|
@@ -1274,13 +1309,27 @@ var gridDefinition = {
|
|
|
1274
1309
|
};
|
|
1275
1310
|
|
|
1276
1311
|
// src/definitions/typography/heading.ts
|
|
1312
|
+
var import_schema2 = require("@kubuild/schema");
|
|
1313
|
+
|
|
1314
|
+
// src/canonical-props.ts
|
|
1277
1315
|
var import_schema = require("@kubuild/schema");
|
|
1316
|
+
function canonicalTextPropFields(componentType) {
|
|
1317
|
+
const rule = (0, import_schema.getCanonicalTextPropRule)(componentType);
|
|
1318
|
+
if (!rule) return {};
|
|
1319
|
+
return {
|
|
1320
|
+
canonicalTextProp: rule.canonical,
|
|
1321
|
+
deprecatedPropAliases: Object.fromEntries(rule.aliases.map((alias) => [alias, rule.canonical]))
|
|
1322
|
+
};
|
|
1323
|
+
}
|
|
1324
|
+
|
|
1325
|
+
// src/definitions/typography/heading.ts
|
|
1278
1326
|
var headingDefinition = {
|
|
1279
1327
|
type: "heading",
|
|
1280
1328
|
label: "Heading",
|
|
1281
1329
|
category: "typography",
|
|
1282
1330
|
icon: "heading",
|
|
1283
1331
|
acceptsChildren: false,
|
|
1332
|
+
...canonicalTextPropFields("heading"),
|
|
1284
1333
|
defaultProps: { text: "Heading Text", level: 2 },
|
|
1285
1334
|
propFields: [
|
|
1286
1335
|
{ name: "text", label: "Text", type: "string", defaultValue: "Heading Text" },
|
|
@@ -1306,7 +1355,8 @@ var headingDefinition = {
|
|
|
1306
1355
|
],
|
|
1307
1356
|
validateProps: (props) => {
|
|
1308
1357
|
const errors = [];
|
|
1309
|
-
|
|
1358
|
+
const text = props.text ?? props.content;
|
|
1359
|
+
if (!(0, import_schema2.isVariableBinding)(text) && (typeof text !== "string" || text.trim().length === 0)) {
|
|
1310
1360
|
errors.push('Heading requires a non-empty "text".');
|
|
1311
1361
|
}
|
|
1312
1362
|
if (props.level !== void 0 && (typeof props.level !== "number" || props.level < 1 || props.level > 6)) {
|
|
@@ -1325,16 +1375,18 @@ var headingDefinition = {
|
|
|
1325
1375
|
};
|
|
1326
1376
|
|
|
1327
1377
|
// src/definitions/typography/text.ts
|
|
1328
|
-
var
|
|
1378
|
+
var import_schema3 = require("@kubuild/schema");
|
|
1329
1379
|
var textDefinition = {
|
|
1330
1380
|
type: "text",
|
|
1331
1381
|
label: "Text",
|
|
1332
1382
|
category: "typography",
|
|
1333
1383
|
icon: "type",
|
|
1334
1384
|
acceptsChildren: false,
|
|
1335
|
-
|
|
1385
|
+
...canonicalTextPropFields("text"),
|
|
1386
|
+
// `as: 'p'` keeps the block-level rendering the old `content` default produced (STORA-550).
|
|
1387
|
+
defaultProps: { text: "Lorem ipsum dolor sit amet, consectetur adipiscing elit.", as: "p" },
|
|
1336
1388
|
propFields: [
|
|
1337
|
-
{ name: "
|
|
1389
|
+
{ name: "text", label: "Content", type: "string", defaultValue: "Lorem ipsum dolor sit amet." }
|
|
1338
1390
|
],
|
|
1339
1391
|
traits: [
|
|
1340
1392
|
idTrait(),
|
|
@@ -1342,8 +1394,9 @@ var textDefinition = {
|
|
|
1342
1394
|
ariaLabelTrait()
|
|
1343
1395
|
],
|
|
1344
1396
|
validateProps: (props) => {
|
|
1345
|
-
|
|
1346
|
-
|
|
1397
|
+
const value = props.text ?? props.content;
|
|
1398
|
+
if (!(0, import_schema3.isVariableBinding)(value) && (typeof value !== "string" || value.trim().length === 0)) {
|
|
1399
|
+
return ['Text requires a non-empty "text".'];
|
|
1347
1400
|
}
|
|
1348
1401
|
return true;
|
|
1349
1402
|
},
|
|
@@ -1357,13 +1410,14 @@ var textDefinition = {
|
|
|
1357
1410
|
};
|
|
1358
1411
|
|
|
1359
1412
|
// src/definitions/typography/paragraph.ts
|
|
1360
|
-
var
|
|
1413
|
+
var import_schema4 = require("@kubuild/schema");
|
|
1361
1414
|
var paragraphDefinition = {
|
|
1362
1415
|
type: "paragraph",
|
|
1363
1416
|
label: "Paragraph",
|
|
1364
1417
|
category: "typography",
|
|
1365
1418
|
icon: "paragraph",
|
|
1366
1419
|
acceptsChildren: false,
|
|
1420
|
+
...canonicalTextPropFields("paragraph"),
|
|
1367
1421
|
defaultProps: {
|
|
1368
1422
|
text: "A paragraph of text with clean semantic typography."
|
|
1369
1423
|
},
|
|
@@ -1383,7 +1437,7 @@ var paragraphDefinition = {
|
|
|
1383
1437
|
validateProps: (props) => {
|
|
1384
1438
|
const errors = [];
|
|
1385
1439
|
const textVal = props.text ?? props.content;
|
|
1386
|
-
if (textVal !== void 0 && !(0,
|
|
1440
|
+
if (textVal !== void 0 && !(0, import_schema4.isVariableBinding)(textVal) && (typeof textVal !== "string" || textVal.trim().length === 0)) {
|
|
1387
1441
|
errors.push('Paragraph requires a non-empty "text".');
|
|
1388
1442
|
}
|
|
1389
1443
|
return errors.length > 0 ? errors : true;
|
|
@@ -1399,13 +1453,14 @@ var paragraphDefinition = {
|
|
|
1399
1453
|
};
|
|
1400
1454
|
|
|
1401
1455
|
// src/definitions/typography/link.ts
|
|
1402
|
-
var
|
|
1456
|
+
var import_schema5 = require("@kubuild/schema");
|
|
1403
1457
|
var linkDefinition = {
|
|
1404
1458
|
type: "link",
|
|
1405
1459
|
label: "Link",
|
|
1406
1460
|
category: "typography",
|
|
1407
1461
|
icon: "link",
|
|
1408
1462
|
acceptsChildren: false,
|
|
1463
|
+
...canonicalTextPropFields("link"),
|
|
1409
1464
|
defaultProps: {
|
|
1410
1465
|
text: "Click here",
|
|
1411
1466
|
href: "#",
|
|
@@ -1439,19 +1494,19 @@ var linkDefinition = {
|
|
|
1439
1494
|
],
|
|
1440
1495
|
validateProps: (props) => {
|
|
1441
1496
|
const errors = [];
|
|
1442
|
-
if (props.text !== void 0 && !(0,
|
|
1497
|
+
if (props.text !== void 0 && !(0, import_schema5.isVariableBinding)(props.text) && (typeof props.text !== "string" || props.text.trim().length === 0)) {
|
|
1443
1498
|
errors.push('Link requires a non-empty "text".');
|
|
1444
1499
|
}
|
|
1445
|
-
if (props.href !== void 0 && typeof props.href !== "string" && !(0,
|
|
1500
|
+
if (props.href !== void 0 && typeof props.href !== "string" && !(0, import_schema5.isVariableBinding)(props.href)) {
|
|
1446
1501
|
errors.push('Link "href" must be a string when provided.');
|
|
1447
1502
|
}
|
|
1448
|
-
if (props.target !== void 0 && !(0,
|
|
1503
|
+
if (props.target !== void 0 && !(0, import_schema5.isVariableBinding)(props.target)) {
|
|
1449
1504
|
const allowedTargets = ["_self", "_blank", "_parent", "_top"];
|
|
1450
1505
|
if (typeof props.target !== "string" || !allowedTargets.includes(props.target)) {
|
|
1451
1506
|
errors.push(`Link "target" must be one of: ${allowedTargets.join(", ")}.`);
|
|
1452
1507
|
}
|
|
1453
1508
|
}
|
|
1454
|
-
if (props.rel !== void 0 && typeof props.rel !== "string" && !(0,
|
|
1509
|
+
if (props.rel !== void 0 && typeof props.rel !== "string" && !(0, import_schema5.isVariableBinding)(props.rel)) {
|
|
1455
1510
|
errors.push('Link "rel" must be a string when provided.');
|
|
1456
1511
|
}
|
|
1457
1512
|
return errors.length > 0 ? errors : true;
|
|
@@ -1466,7 +1521,7 @@ var linkDefinition = {
|
|
|
1466
1521
|
};
|
|
1467
1522
|
|
|
1468
1523
|
// src/definitions/typography/blockquote.ts
|
|
1469
|
-
var
|
|
1524
|
+
var import_schema6 = require("@kubuild/schema");
|
|
1470
1525
|
var blockquoteDefinition = {
|
|
1471
1526
|
type: "blockquote",
|
|
1472
1527
|
label: "Blockquote",
|
|
@@ -1486,6 +1541,7 @@ var blockquoteDefinition = {
|
|
|
1486
1541
|
"html-embed",
|
|
1487
1542
|
"custom"
|
|
1488
1543
|
],
|
|
1544
|
+
...canonicalTextPropFields("blockquote"),
|
|
1489
1545
|
defaultProps: {
|
|
1490
1546
|
text: "\u201CSimplicity is the soul of efficiency.\u201D"
|
|
1491
1547
|
},
|
|
@@ -1506,10 +1562,10 @@ var blockquoteDefinition = {
|
|
|
1506
1562
|
],
|
|
1507
1563
|
validateProps: (props) => {
|
|
1508
1564
|
const errors = [];
|
|
1509
|
-
if (props.text !== void 0 && typeof props.text !== "string" && !(0,
|
|
1565
|
+
if (props.text !== void 0 && typeof props.text !== "string" && !(0, import_schema6.isVariableBinding)(props.text)) {
|
|
1510
1566
|
errors.push('Blockquote "text" must be a string when provided.');
|
|
1511
1567
|
}
|
|
1512
|
-
if (props.cite !== void 0 && typeof props.cite !== "string" && !(0,
|
|
1568
|
+
if (props.cite !== void 0 && typeof props.cite !== "string" && !(0, import_schema6.isVariableBinding)(props.cite)) {
|
|
1513
1569
|
errors.push('Blockquote "cite" must be a string when provided.');
|
|
1514
1570
|
}
|
|
1515
1571
|
return errors.length > 0 ? errors : true;
|
|
@@ -1532,13 +1588,14 @@ var blockquoteDefinition = {
|
|
|
1532
1588
|
};
|
|
1533
1589
|
|
|
1534
1590
|
// src/definitions/typography/badge.ts
|
|
1535
|
-
var
|
|
1591
|
+
var import_schema7 = require("@kubuild/schema");
|
|
1536
1592
|
var badgeDefinition = {
|
|
1537
1593
|
type: "badge",
|
|
1538
1594
|
label: "Badge",
|
|
1539
1595
|
category: "typography",
|
|
1540
1596
|
icon: "badge",
|
|
1541
1597
|
acceptsChildren: false,
|
|
1598
|
+
...canonicalTextPropFields("badge"),
|
|
1542
1599
|
defaultProps: {
|
|
1543
1600
|
text: "Badge",
|
|
1544
1601
|
variant: "default"
|
|
@@ -1566,10 +1623,10 @@ var badgeDefinition = {
|
|
|
1566
1623
|
],
|
|
1567
1624
|
validateProps: (props) => {
|
|
1568
1625
|
const errors = [];
|
|
1569
|
-
if (props.text !== void 0 && !(0,
|
|
1626
|
+
if (props.text !== void 0 && !(0, import_schema7.isVariableBinding)(props.text) && (typeof props.text !== "string" || props.text.trim().length === 0)) {
|
|
1570
1627
|
errors.push('Badge requires a non-empty "text".');
|
|
1571
1628
|
}
|
|
1572
|
-
if (props.variant !== void 0 && typeof props.variant !== "string" && !(0,
|
|
1629
|
+
if (props.variant !== void 0 && typeof props.variant !== "string" && !(0, import_schema7.isVariableBinding)(props.variant)) {
|
|
1573
1630
|
errors.push('Badge "variant" must be a string.');
|
|
1574
1631
|
}
|
|
1575
1632
|
return errors.length > 0 ? errors : true;
|
|
@@ -1593,7 +1650,7 @@ var badgeDefinition = {
|
|
|
1593
1650
|
};
|
|
1594
1651
|
|
|
1595
1652
|
// src/definitions/typography/code-block.ts
|
|
1596
|
-
var
|
|
1653
|
+
var import_schema8 = require("@kubuild/schema");
|
|
1597
1654
|
var codeBlockDefinition = {
|
|
1598
1655
|
type: "code-block",
|
|
1599
1656
|
label: "Code Block",
|
|
@@ -1625,10 +1682,10 @@ var codeBlockDefinition = {
|
|
|
1625
1682
|
],
|
|
1626
1683
|
validateProps: (props) => {
|
|
1627
1684
|
const errors = [];
|
|
1628
|
-
if (props.code !== void 0 && typeof props.code !== "string" && !(0,
|
|
1685
|
+
if (props.code !== void 0 && typeof props.code !== "string" && !(0, import_schema8.isVariableBinding)(props.code)) {
|
|
1629
1686
|
errors.push('Code Block "code" must be a string when provided.');
|
|
1630
1687
|
}
|
|
1631
|
-
if (props.language !== void 0 && typeof props.language !== "string" && !(0,
|
|
1688
|
+
if (props.language !== void 0 && typeof props.language !== "string" && !(0, import_schema8.isVariableBinding)(props.language)) {
|
|
1632
1689
|
errors.push('Code Block "language" must be a string when provided.');
|
|
1633
1690
|
}
|
|
1634
1691
|
return errors.length > 0 ? errors : true;
|
|
@@ -1650,7 +1707,7 @@ var codeBlockDefinition = {
|
|
|
1650
1707
|
};
|
|
1651
1708
|
|
|
1652
1709
|
// src/definitions/media/image.ts
|
|
1653
|
-
var
|
|
1710
|
+
var import_schema9 = require("@kubuild/schema");
|
|
1654
1711
|
var imageDefinition = {
|
|
1655
1712
|
type: "image",
|
|
1656
1713
|
label: "Image",
|
|
@@ -1680,12 +1737,12 @@ var imageDefinition = {
|
|
|
1680
1737
|
],
|
|
1681
1738
|
validateProps: (props) => {
|
|
1682
1739
|
const errors = [];
|
|
1683
|
-
const hasSrc = typeof props.src === "string" && props.src.trim().length > 0 || (0,
|
|
1684
|
-
const hasAsset = (0,
|
|
1740
|
+
const hasSrc = typeof props.src === "string" && props.src.trim().length > 0 || (0, import_schema9.isVariableBinding)(props.src);
|
|
1741
|
+
const hasAsset = (0, import_schema9.isAssetReference)(props.asset);
|
|
1685
1742
|
if (!hasSrc && !hasAsset) {
|
|
1686
1743
|
errors.push('Image requires either a non-empty "src" URL or a valid "asset" reference.');
|
|
1687
1744
|
}
|
|
1688
|
-
const hasAlt = typeof props.alt === "string" && props.alt.trim().length > 0 || (0,
|
|
1745
|
+
const hasAlt = typeof props.alt === "string" && props.alt.trim().length > 0 || (0, import_schema9.isVariableBinding)(props.alt);
|
|
1689
1746
|
if (!hasAlt) {
|
|
1690
1747
|
errors.push('Image requires non-empty "alt" text.');
|
|
1691
1748
|
}
|
|
@@ -1701,7 +1758,7 @@ var imageDefinition = {
|
|
|
1701
1758
|
};
|
|
1702
1759
|
|
|
1703
1760
|
// src/definitions/media/video.ts
|
|
1704
|
-
var
|
|
1761
|
+
var import_schema10 = require("@kubuild/schema");
|
|
1705
1762
|
var videoDefinition = {
|
|
1706
1763
|
type: "video",
|
|
1707
1764
|
label: "Video",
|
|
@@ -1769,25 +1826,25 @@ var videoDefinition = {
|
|
|
1769
1826
|
],
|
|
1770
1827
|
validateProps: (props) => {
|
|
1771
1828
|
const errors = [];
|
|
1772
|
-
if (props.src !== void 0 && typeof props.src !== "string" && !(0,
|
|
1829
|
+
if (props.src !== void 0 && typeof props.src !== "string" && !(0, import_schema10.isVariableBinding)(props.src)) {
|
|
1773
1830
|
errors.push('Video "src" must be a string when provided.');
|
|
1774
1831
|
}
|
|
1775
|
-
if (props.provider !== void 0 && !(0,
|
|
1832
|
+
if (props.provider !== void 0 && !(0, import_schema10.isVariableBinding)(props.provider)) {
|
|
1776
1833
|
const allowed = ["auto", "html5", "youtube", "vimeo"];
|
|
1777
1834
|
if (typeof props.provider !== "string" || !allowed.includes(props.provider)) {
|
|
1778
1835
|
errors.push(`Video "provider" must be one of: ${allowed.join(", ")}.`);
|
|
1779
1836
|
}
|
|
1780
1837
|
}
|
|
1781
|
-
if (props.controls !== void 0 && typeof props.controls !== "boolean" && !(0,
|
|
1838
|
+
if (props.controls !== void 0 && typeof props.controls !== "boolean" && !(0, import_schema10.isVariableBinding)(props.controls)) {
|
|
1782
1839
|
errors.push('Video "controls" must be a boolean.');
|
|
1783
1840
|
}
|
|
1784
|
-
if (props.autoplay !== void 0 && typeof props.autoplay !== "boolean" && !(0,
|
|
1841
|
+
if (props.autoplay !== void 0 && typeof props.autoplay !== "boolean" && !(0, import_schema10.isVariableBinding)(props.autoplay)) {
|
|
1785
1842
|
errors.push('Video "autoplay" must be a boolean.');
|
|
1786
1843
|
}
|
|
1787
|
-
if (props.loop !== void 0 && typeof props.loop !== "boolean" && !(0,
|
|
1844
|
+
if (props.loop !== void 0 && typeof props.loop !== "boolean" && !(0, import_schema10.isVariableBinding)(props.loop)) {
|
|
1788
1845
|
errors.push('Video "loop" must be a boolean.');
|
|
1789
1846
|
}
|
|
1790
|
-
if (props.muted !== void 0 && typeof props.muted !== "boolean" && !(0,
|
|
1847
|
+
if (props.muted !== void 0 && typeof props.muted !== "boolean" && !(0, import_schema10.isVariableBinding)(props.muted)) {
|
|
1791
1848
|
errors.push('Video "muted" must be a boolean.');
|
|
1792
1849
|
}
|
|
1793
1850
|
return errors.length > 0 ? errors : true;
|
|
@@ -1805,7 +1862,7 @@ var videoDefinition = {
|
|
|
1805
1862
|
};
|
|
1806
1863
|
|
|
1807
1864
|
// src/definitions/media/icon.ts
|
|
1808
|
-
var
|
|
1865
|
+
var import_schema11 = require("@kubuild/schema");
|
|
1809
1866
|
var iconDefinition = {
|
|
1810
1867
|
type: "icon",
|
|
1811
1868
|
label: "Icon",
|
|
@@ -1831,15 +1888,15 @@ var iconDefinition = {
|
|
|
1831
1888
|
],
|
|
1832
1889
|
validateProps: (props) => {
|
|
1833
1890
|
const errors = [];
|
|
1834
|
-
if (props.name !== void 0 && !(0,
|
|
1891
|
+
if (props.name !== void 0 && !(0, import_schema11.isVariableBinding)(props.name) && (typeof props.name !== "string" || props.name.trim().length === 0)) {
|
|
1835
1892
|
errors.push('Icon requires a non-empty "name".');
|
|
1836
1893
|
}
|
|
1837
|
-
if (props.size !== void 0 && !(0,
|
|
1894
|
+
if (props.size !== void 0 && !(0, import_schema11.isVariableBinding)(props.size)) {
|
|
1838
1895
|
if (typeof props.size !== "number" || props.size < 0) {
|
|
1839
1896
|
errors.push('Icon "size" must be a non-negative number.');
|
|
1840
1897
|
}
|
|
1841
1898
|
}
|
|
1842
|
-
if (props.strokeWidth !== void 0 && !(0,
|
|
1899
|
+
if (props.strokeWidth !== void 0 && !(0, import_schema11.isVariableBinding)(props.strokeWidth)) {
|
|
1843
1900
|
if (typeof props.strokeWidth !== "number" || props.strokeWidth < 0) {
|
|
1844
1901
|
errors.push('Icon "strokeWidth" must be a non-negative number.');
|
|
1845
1902
|
}
|
|
@@ -1856,7 +1913,7 @@ var iconDefinition = {
|
|
|
1856
1913
|
};
|
|
1857
1914
|
|
|
1858
1915
|
// src/definitions/media/html-embed.ts
|
|
1859
|
-
var
|
|
1916
|
+
var import_schema12 = require("@kubuild/schema");
|
|
1860
1917
|
var htmlEmbedDefinition = {
|
|
1861
1918
|
type: "html-embed",
|
|
1862
1919
|
label: "HTML Embed",
|
|
@@ -1880,7 +1937,7 @@ var htmlEmbedDefinition = {
|
|
|
1880
1937
|
],
|
|
1881
1938
|
validateProps: (props) => {
|
|
1882
1939
|
const errors = [];
|
|
1883
|
-
if (props.html !== void 0 && typeof props.html !== "string" && !(0,
|
|
1940
|
+
if (props.html !== void 0 && typeof props.html !== "string" && !(0, import_schema12.isVariableBinding)(props.html)) {
|
|
1884
1941
|
errors.push('HTML Embed "html" must be a string.');
|
|
1885
1942
|
}
|
|
1886
1943
|
return errors.length > 0 ? errors : true;
|
|
@@ -1894,7 +1951,7 @@ var htmlEmbedDefinition = {
|
|
|
1894
1951
|
};
|
|
1895
1952
|
|
|
1896
1953
|
// src/definitions/data/table.ts
|
|
1897
|
-
var
|
|
1954
|
+
var import_schema13 = require("@kubuild/schema");
|
|
1898
1955
|
var tableDefinition = {
|
|
1899
1956
|
type: "table",
|
|
1900
1957
|
label: "Table",
|
|
@@ -1934,13 +1991,13 @@ var tableDefinition = {
|
|
|
1934
1991
|
],
|
|
1935
1992
|
validateProps: (props) => {
|
|
1936
1993
|
const errors = [];
|
|
1937
|
-
if (props.striped !== void 0 && typeof props.striped !== "boolean" && !(0,
|
|
1994
|
+
if (props.striped !== void 0 && typeof props.striped !== "boolean" && !(0, import_schema13.isVariableBinding)(props.striped)) {
|
|
1938
1995
|
errors.push('Table "striped" must be a boolean.');
|
|
1939
1996
|
}
|
|
1940
|
-
if (props.bordered !== void 0 && typeof props.bordered !== "boolean" && !(0,
|
|
1997
|
+
if (props.bordered !== void 0 && typeof props.bordered !== "boolean" && !(0, import_schema13.isVariableBinding)(props.bordered)) {
|
|
1941
1998
|
errors.push('Table "bordered" must be a boolean.');
|
|
1942
1999
|
}
|
|
1943
|
-
if (props.compact !== void 0 && typeof props.compact !== "boolean" && !(0,
|
|
2000
|
+
if (props.compact !== void 0 && typeof props.compact !== "boolean" && !(0, import_schema13.isVariableBinding)(props.compact)) {
|
|
1944
2001
|
errors.push('Table "compact" must be a boolean.');
|
|
1945
2002
|
}
|
|
1946
2003
|
return errors.length > 0 ? errors : true;
|
|
@@ -2025,22 +2082,22 @@ var tableCellDefinition = {
|
|
|
2025
2082
|
],
|
|
2026
2083
|
validateProps: (props) => {
|
|
2027
2084
|
const errors = [];
|
|
2028
|
-
if (props.tag !== void 0 && !(0,
|
|
2085
|
+
if (props.tag !== void 0 && !(0, import_schema13.isVariableBinding)(props.tag)) {
|
|
2029
2086
|
if (props.tag !== "td" && props.tag !== "th") {
|
|
2030
2087
|
errors.push('Table Cell "tag" must be either "td" or "th".');
|
|
2031
2088
|
}
|
|
2032
2089
|
}
|
|
2033
|
-
if (props.colSpan !== void 0 && !(0,
|
|
2090
|
+
if (props.colSpan !== void 0 && !(0, import_schema13.isVariableBinding)(props.colSpan)) {
|
|
2034
2091
|
if (typeof props.colSpan !== "number" || props.colSpan < 1 || !Number.isInteger(props.colSpan)) {
|
|
2035
2092
|
errors.push('Table Cell "colSpan" must be a positive integer (>= 1).');
|
|
2036
2093
|
}
|
|
2037
2094
|
}
|
|
2038
|
-
if (props.rowSpan !== void 0 && !(0,
|
|
2095
|
+
if (props.rowSpan !== void 0 && !(0, import_schema13.isVariableBinding)(props.rowSpan)) {
|
|
2039
2096
|
if (typeof props.rowSpan !== "number" || props.rowSpan < 1 || !Number.isInteger(props.rowSpan)) {
|
|
2040
2097
|
errors.push('Table Cell "rowSpan" must be a positive integer (>= 1).');
|
|
2041
2098
|
}
|
|
2042
2099
|
}
|
|
2043
|
-
if (props.text !== void 0 && typeof props.text !== "string" && !(0,
|
|
2100
|
+
if (props.text !== void 0 && typeof props.text !== "string" && !(0, import_schema13.isVariableBinding)(props.text)) {
|
|
2044
2101
|
errors.push('Table Cell "text" must be a string when provided.');
|
|
2045
2102
|
}
|
|
2046
2103
|
return errors.length > 0 ? errors : true;
|
|
@@ -2057,7 +2114,7 @@ var tableCellDefinition = {
|
|
|
2057
2114
|
};
|
|
2058
2115
|
|
|
2059
2116
|
// src/definitions/data/list.ts
|
|
2060
|
-
var
|
|
2117
|
+
var import_schema14 = require("@kubuild/schema");
|
|
2061
2118
|
var listDefinition = {
|
|
2062
2119
|
type: "list",
|
|
2063
2120
|
label: "List",
|
|
@@ -2106,12 +2163,12 @@ var listDefinition = {
|
|
|
2106
2163
|
],
|
|
2107
2164
|
validateProps: (props) => {
|
|
2108
2165
|
const errors = [];
|
|
2109
|
-
if (props.tag !== void 0 && !(0,
|
|
2166
|
+
if (props.tag !== void 0 && !(0, import_schema14.isVariableBinding)(props.tag)) {
|
|
2110
2167
|
if (props.tag !== "ul" && props.tag !== "ol") {
|
|
2111
2168
|
errors.push('List "tag" must be either "ul" or "ol".');
|
|
2112
2169
|
}
|
|
2113
2170
|
}
|
|
2114
|
-
if (props.listStyleType !== void 0 && !(0,
|
|
2171
|
+
if (props.listStyleType !== void 0 && !(0, import_schema14.isVariableBinding)(props.listStyleType)) {
|
|
2115
2172
|
const allowed = ["disc", "circle", "square", "decimal", "none", "custom-icon"];
|
|
2116
2173
|
if (typeof props.listStyleType !== "string" || !allowed.includes(props.listStyleType)) {
|
|
2117
2174
|
errors.push(`List "listStyleType" must be one of: ${allowed.join(", ")}.`);
|
|
@@ -2166,7 +2223,7 @@ var listItemDefinition = {
|
|
|
2166
2223
|
],
|
|
2167
2224
|
validateProps: (props) => {
|
|
2168
2225
|
const errors = [];
|
|
2169
|
-
if (props.text !== void 0 && typeof props.text !== "string" && !(0,
|
|
2226
|
+
if (props.text !== void 0 && typeof props.text !== "string" && !(0, import_schema14.isVariableBinding)(props.text)) {
|
|
2170
2227
|
errors.push('List Item "text" must be a string when provided.');
|
|
2171
2228
|
}
|
|
2172
2229
|
return errors.length > 0 ? errors : true;
|
|
@@ -2203,7 +2260,7 @@ var collectionDefinition = {
|
|
|
2203
2260
|
};
|
|
2204
2261
|
|
|
2205
2262
|
// src/definitions/form/button.ts
|
|
2206
|
-
var
|
|
2263
|
+
var import_schema15 = require("@kubuild/schema");
|
|
2207
2264
|
var buttonDefinition = {
|
|
2208
2265
|
type: "button",
|
|
2209
2266
|
label: "Button",
|
|
@@ -2211,6 +2268,7 @@ var buttonDefinition = {
|
|
|
2211
2268
|
icon: "mouse-pointer",
|
|
2212
2269
|
acceptsChildren: false,
|
|
2213
2270
|
capabilities: ["actionRegistry"],
|
|
2271
|
+
...canonicalTextPropFields("button"),
|
|
2214
2272
|
defaultProps: {
|
|
2215
2273
|
label: "Click Me",
|
|
2216
2274
|
variant: "primary"
|
|
@@ -2254,22 +2312,22 @@ var buttonDefinition = {
|
|
|
2254
2312
|
],
|
|
2255
2313
|
validateProps: (props) => {
|
|
2256
2314
|
const errors = [];
|
|
2257
|
-
const hasLabel = typeof props.label === "string" && props.label.trim().length > 0 || (0,
|
|
2315
|
+
const hasLabel = typeof props.label === "string" && props.label.trim().length > 0 || (0, import_schema15.isVariableBinding)(props.label);
|
|
2258
2316
|
if (!hasLabel) {
|
|
2259
2317
|
errors.push('Button requires a non-empty "label".');
|
|
2260
2318
|
}
|
|
2261
|
-
if (props.href !== void 0 && typeof props.href !== "string" && !(0,
|
|
2319
|
+
if (props.href !== void 0 && typeof props.href !== "string" && !(0, import_schema15.isVariableBinding)(props.href)) {
|
|
2262
2320
|
errors.push('Button "href" must be a string when provided.');
|
|
2263
2321
|
}
|
|
2264
|
-
if (props.buttonType !== void 0 && !(0,
|
|
2322
|
+
if (props.buttonType !== void 0 && !(0, import_schema15.isVariableBinding)(props.buttonType)) {
|
|
2265
2323
|
if (!["button", "submit", "reset"].includes(props.buttonType)) {
|
|
2266
2324
|
errors.push('Button "buttonType" must be one of: "button", "submit", "reset".');
|
|
2267
2325
|
}
|
|
2268
2326
|
}
|
|
2269
|
-
if (props.action !== void 0 && !(0,
|
|
2327
|
+
if (props.action !== void 0 && !(0, import_schema15.isActionBinding)(props.action)) {
|
|
2270
2328
|
errors.push('Button "action" must be a valid action binding when provided.');
|
|
2271
2329
|
}
|
|
2272
|
-
if (props.disabled !== void 0 && typeof props.disabled !== "boolean" && !(0,
|
|
2330
|
+
if (props.disabled !== void 0 && typeof props.disabled !== "boolean" && !(0, import_schema15.isVariableBinding)(props.disabled)) {
|
|
2273
2331
|
errors.push('Button "disabled" must be a boolean when provided.');
|
|
2274
2332
|
}
|
|
2275
2333
|
return errors.length > 0 ? errors : true;
|
|
@@ -2357,25 +2415,25 @@ var buttonSubmitDefinition = {
|
|
|
2357
2415
|
],
|
|
2358
2416
|
validateProps: (props) => {
|
|
2359
2417
|
const errors = [];
|
|
2360
|
-
const hasLabel = typeof props.label === "string" && props.label.trim().length > 0 || (0,
|
|
2418
|
+
const hasLabel = typeof props.label === "string" && props.label.trim().length > 0 || (0, import_schema15.isVariableBinding)(props.label);
|
|
2361
2419
|
if (!hasLabel) {
|
|
2362
2420
|
errors.push('Submit Button requires a non-empty "label".');
|
|
2363
2421
|
}
|
|
2364
|
-
if (props.loadingText !== void 0 && typeof props.loadingText !== "string" && !(0,
|
|
2422
|
+
if (props.loadingText !== void 0 && typeof props.loadingText !== "string" && !(0, import_schema15.isVariableBinding)(props.loadingText)) {
|
|
2365
2423
|
errors.push('Submit Button "loadingText" must be a string when provided.');
|
|
2366
2424
|
}
|
|
2367
|
-
if (props.showSpinner !== void 0 && typeof props.showSpinner !== "boolean" && !(0,
|
|
2425
|
+
if (props.showSpinner !== void 0 && typeof props.showSpinner !== "boolean" && !(0, import_schema15.isVariableBinding)(props.showSpinner)) {
|
|
2368
2426
|
errors.push('Submit Button "showSpinner" must be a boolean when provided.');
|
|
2369
2427
|
}
|
|
2370
|
-
if (props.autoDisableOnSubmit !== void 0 && typeof props.autoDisableOnSubmit !== "boolean" && !(0,
|
|
2428
|
+
if (props.autoDisableOnSubmit !== void 0 && typeof props.autoDisableOnSubmit !== "boolean" && !(0, import_schema15.isVariableBinding)(props.autoDisableOnSubmit)) {
|
|
2371
2429
|
errors.push('Submit Button "autoDisableOnSubmit" must be a boolean when provided.');
|
|
2372
2430
|
}
|
|
2373
|
-
if (props.buttonType !== void 0 && !(0,
|
|
2431
|
+
if (props.buttonType !== void 0 && !(0, import_schema15.isVariableBinding)(props.buttonType)) {
|
|
2374
2432
|
if (!["submit", "reset", "button"].includes(props.buttonType)) {
|
|
2375
2433
|
errors.push('Submit Button "buttonType" must be one of: "submit", "reset", "button".');
|
|
2376
2434
|
}
|
|
2377
2435
|
}
|
|
2378
|
-
if (props.disabled !== void 0 && typeof props.disabled !== "boolean" && !(0,
|
|
2436
|
+
if (props.disabled !== void 0 && typeof props.disabled !== "boolean" && !(0, import_schema15.isVariableBinding)(props.disabled)) {
|
|
2379
2437
|
errors.push('Submit Button "disabled" must be a boolean when provided.');
|
|
2380
2438
|
}
|
|
2381
2439
|
return errors.length > 0 ? errors : true;
|
|
@@ -2402,7 +2460,7 @@ var buttonSubmitDefinition = {
|
|
|
2402
2460
|
};
|
|
2403
2461
|
|
|
2404
2462
|
// src/definitions/form/form.ts
|
|
2405
|
-
var
|
|
2463
|
+
var import_schema16 = require("@kubuild/schema");
|
|
2406
2464
|
var formDefinition = {
|
|
2407
2465
|
type: "form",
|
|
2408
2466
|
label: "Form",
|
|
@@ -2489,34 +2547,34 @@ var formDefinition = {
|
|
|
2489
2547
|
],
|
|
2490
2548
|
validateProps: (props) => {
|
|
2491
2549
|
const errors = [];
|
|
2492
|
-
if (props.name !== void 0 && typeof props.name !== "string" && !(0,
|
|
2550
|
+
if (props.name !== void 0 && typeof props.name !== "string" && !(0, import_schema16.isVariableBinding)(props.name)) {
|
|
2493
2551
|
errors.push('Form "name" must be a string when provided.');
|
|
2494
2552
|
}
|
|
2495
|
-
if (props.action !== void 0 && typeof props.action !== "string" && !(0,
|
|
2553
|
+
if (props.action !== void 0 && typeof props.action !== "string" && !(0, import_schema16.isVariableBinding)(props.action)) {
|
|
2496
2554
|
errors.push('Form "action" must be a string when provided.');
|
|
2497
2555
|
}
|
|
2498
|
-
if (props.method !== void 0 && !(0,
|
|
2556
|
+
if (props.method !== void 0 && !(0, import_schema16.isVariableBinding)(props.method)) {
|
|
2499
2557
|
if (!["GET", "POST", "get", "post"].includes(props.method)) {
|
|
2500
2558
|
errors.push('Form "method" must be either "GET" or "POST".');
|
|
2501
2559
|
}
|
|
2502
2560
|
}
|
|
2503
|
-
if (props.target !== void 0 && !(0,
|
|
2561
|
+
if (props.target !== void 0 && !(0, import_schema16.isVariableBinding)(props.target)) {
|
|
2504
2562
|
if (!["_self", "_blank", "_parent", "_top"].includes(props.target)) {
|
|
2505
2563
|
errors.push('Form "target" must be one of: "_self", "_blank", "_parent", "_top".');
|
|
2506
2564
|
}
|
|
2507
2565
|
}
|
|
2508
|
-
if (props.autoComplete !== void 0 && !(0,
|
|
2566
|
+
if (props.autoComplete !== void 0 && !(0, import_schema16.isVariableBinding)(props.autoComplete)) {
|
|
2509
2567
|
if (!["on", "off"].includes(props.autoComplete)) {
|
|
2510
2568
|
errors.push('Form "autoComplete" must be either "on" or "off".');
|
|
2511
2569
|
}
|
|
2512
2570
|
}
|
|
2513
|
-
if (props.preventDefault !== void 0 && typeof props.preventDefault !== "boolean" && !(0,
|
|
2571
|
+
if (props.preventDefault !== void 0 && typeof props.preventDefault !== "boolean" && !(0, import_schema16.isVariableBinding)(props.preventDefault)) {
|
|
2514
2572
|
errors.push('Form "preventDefault" must be a boolean when provided.');
|
|
2515
2573
|
}
|
|
2516
|
-
if (props.scrollToFirstError !== void 0 && typeof props.scrollToFirstError !== "boolean" && !(0,
|
|
2574
|
+
if (props.scrollToFirstError !== void 0 && typeof props.scrollToFirstError !== "boolean" && !(0, import_schema16.isVariableBinding)(props.scrollToFirstError)) {
|
|
2517
2575
|
errors.push('Form "scrollToFirstError" must be a boolean when provided.');
|
|
2518
2576
|
}
|
|
2519
|
-
if (props.resetOnSubmit !== void 0 && typeof props.resetOnSubmit !== "boolean" && !(0,
|
|
2577
|
+
if (props.resetOnSubmit !== void 0 && typeof props.resetOnSubmit !== "boolean" && !(0, import_schema16.isVariableBinding)(props.resetOnSubmit)) {
|
|
2520
2578
|
errors.push('Form "resetOnSubmit" must be a boolean when provided.');
|
|
2521
2579
|
}
|
|
2522
2580
|
return errors.length > 0 ? errors : true;
|
|
@@ -2532,7 +2590,7 @@ var formDefinition = {
|
|
|
2532
2590
|
};
|
|
2533
2591
|
|
|
2534
2592
|
// src/definitions/form/input.ts
|
|
2535
|
-
var
|
|
2593
|
+
var import_schema17 = require("@kubuild/schema");
|
|
2536
2594
|
var inputDefinition = {
|
|
2537
2595
|
type: "input",
|
|
2538
2596
|
label: "Input",
|
|
@@ -2614,47 +2672,47 @@ var inputDefinition = {
|
|
|
2614
2672
|
],
|
|
2615
2673
|
validateProps: (props) => {
|
|
2616
2674
|
const errors = [];
|
|
2617
|
-
if (props.name !== void 0 && typeof props.name !== "string" && !(0,
|
|
2675
|
+
if (props.name !== void 0 && typeof props.name !== "string" && !(0, import_schema17.isVariableBinding)(props.name)) {
|
|
2618
2676
|
errors.push('Input "name" must be a string when provided.');
|
|
2619
2677
|
}
|
|
2620
|
-
if (props.type !== void 0 && !(0,
|
|
2678
|
+
if (props.type !== void 0 && !(0, import_schema17.isVariableBinding)(props.type)) {
|
|
2621
2679
|
const validTypes = ["text", "email", "number", "password", "tel", "url", "search", "date", "hidden"];
|
|
2622
2680
|
if (!validTypes.includes(props.type)) {
|
|
2623
2681
|
errors.push(`Input "type" must be one of: ${validTypes.join(", ")}.`);
|
|
2624
2682
|
}
|
|
2625
2683
|
}
|
|
2626
|
-
if (props.placeholder !== void 0 && typeof props.placeholder !== "string" && !(0,
|
|
2684
|
+
if (props.placeholder !== void 0 && typeof props.placeholder !== "string" && !(0, import_schema17.isVariableBinding)(props.placeholder)) {
|
|
2627
2685
|
errors.push('Input "placeholder" must be a string when provided.');
|
|
2628
2686
|
}
|
|
2629
|
-
if (props.required !== void 0 && typeof props.required !== "boolean" && !(0,
|
|
2687
|
+
if (props.required !== void 0 && typeof props.required !== "boolean" && !(0, import_schema17.isVariableBinding)(props.required)) {
|
|
2630
2688
|
errors.push('Input "required" must be a boolean when provided.');
|
|
2631
2689
|
}
|
|
2632
|
-
if (props.disabled !== void 0 && typeof props.disabled !== "boolean" && !(0,
|
|
2690
|
+
if (props.disabled !== void 0 && typeof props.disabled !== "boolean" && !(0, import_schema17.isVariableBinding)(props.disabled)) {
|
|
2633
2691
|
errors.push('Input "disabled" must be a boolean when provided.');
|
|
2634
2692
|
}
|
|
2635
|
-
if (props.readOnly !== void 0 && typeof props.readOnly !== "boolean" && !(0,
|
|
2693
|
+
if (props.readOnly !== void 0 && typeof props.readOnly !== "boolean" && !(0, import_schema17.isVariableBinding)(props.readOnly)) {
|
|
2636
2694
|
errors.push('Input "readOnly" must be a boolean when provided.');
|
|
2637
2695
|
}
|
|
2638
|
-
if (props.pattern !== void 0 && typeof props.pattern !== "string" && !(0,
|
|
2696
|
+
if (props.pattern !== void 0 && typeof props.pattern !== "string" && !(0, import_schema17.isVariableBinding)(props.pattern)) {
|
|
2639
2697
|
errors.push('Input "pattern" must be a string when provided.');
|
|
2640
2698
|
}
|
|
2641
|
-
if (props.minLength !== void 0 && !(0,
|
|
2699
|
+
if (props.minLength !== void 0 && !(0, import_schema17.isVariableBinding)(props.minLength)) {
|
|
2642
2700
|
if (typeof props.minLength !== "number" || props.minLength < 0 || !Number.isInteger(props.minLength)) {
|
|
2643
2701
|
errors.push('Input "minLength" must be a non-negative integer when provided.');
|
|
2644
2702
|
}
|
|
2645
2703
|
}
|
|
2646
|
-
if (props.maxLength !== void 0 && !(0,
|
|
2704
|
+
if (props.maxLength !== void 0 && !(0, import_schema17.isVariableBinding)(props.maxLength)) {
|
|
2647
2705
|
if (typeof props.maxLength !== "number" || props.maxLength < 0 || !Number.isInteger(props.maxLength)) {
|
|
2648
2706
|
errors.push('Input "maxLength" must be a non-negative integer when provided.');
|
|
2649
2707
|
}
|
|
2650
2708
|
}
|
|
2651
|
-
if (props.prefixIcon !== void 0 && typeof props.prefixIcon !== "string" && !(0,
|
|
2709
|
+
if (props.prefixIcon !== void 0 && typeof props.prefixIcon !== "string" && !(0, import_schema17.isVariableBinding)(props.prefixIcon)) {
|
|
2652
2710
|
errors.push('Input "prefixIcon" must be a string when provided.');
|
|
2653
2711
|
}
|
|
2654
|
-
if (props.suffixIcon !== void 0 && typeof props.suffixIcon !== "string" && !(0,
|
|
2712
|
+
if (props.suffixIcon !== void 0 && typeof props.suffixIcon !== "string" && !(0, import_schema17.isVariableBinding)(props.suffixIcon)) {
|
|
2655
2713
|
errors.push('Input "suffixIcon" must be a string when provided.');
|
|
2656
2714
|
}
|
|
2657
|
-
if (props.helperText !== void 0 && typeof props.helperText !== "string" && !(0,
|
|
2715
|
+
if (props.helperText !== void 0 && typeof props.helperText !== "string" && !(0, import_schema17.isVariableBinding)(props.helperText)) {
|
|
2658
2716
|
errors.push('Input "helperText" must be a string when provided.');
|
|
2659
2717
|
}
|
|
2660
2718
|
return errors.length > 0 ? errors : true;
|
|
@@ -2679,7 +2737,7 @@ var inputDefinition = {
|
|
|
2679
2737
|
};
|
|
2680
2738
|
|
|
2681
2739
|
// src/definitions/form/textarea.ts
|
|
2682
|
-
var
|
|
2740
|
+
var import_schema18 = require("@kubuild/schema");
|
|
2683
2741
|
var textareaDefinition = {
|
|
2684
2742
|
type: "textarea",
|
|
2685
2743
|
label: "Textarea",
|
|
@@ -2741,41 +2799,41 @@ var textareaDefinition = {
|
|
|
2741
2799
|
],
|
|
2742
2800
|
validateProps: (props) => {
|
|
2743
2801
|
const errors = [];
|
|
2744
|
-
if (props.name !== void 0 && typeof props.name !== "string" && !(0,
|
|
2802
|
+
if (props.name !== void 0 && typeof props.name !== "string" && !(0, import_schema18.isVariableBinding)(props.name)) {
|
|
2745
2803
|
errors.push('Textarea "name" must be a string when provided.');
|
|
2746
2804
|
}
|
|
2747
|
-
if (props.rows !== void 0 && !(0,
|
|
2805
|
+
if (props.rows !== void 0 && !(0, import_schema18.isVariableBinding)(props.rows)) {
|
|
2748
2806
|
if (typeof props.rows !== "number" || props.rows < 1 || !Number.isInteger(props.rows)) {
|
|
2749
2807
|
errors.push('Textarea "rows" must be a positive integer (>= 1).');
|
|
2750
2808
|
}
|
|
2751
2809
|
}
|
|
2752
|
-
if (props.placeholder !== void 0 && typeof props.placeholder !== "string" && !(0,
|
|
2810
|
+
if (props.placeholder !== void 0 && typeof props.placeholder !== "string" && !(0, import_schema18.isVariableBinding)(props.placeholder)) {
|
|
2753
2811
|
errors.push('Textarea "placeholder" must be a string when provided.');
|
|
2754
2812
|
}
|
|
2755
|
-
if (props.required !== void 0 && typeof props.required !== "boolean" && !(0,
|
|
2813
|
+
if (props.required !== void 0 && typeof props.required !== "boolean" && !(0, import_schema18.isVariableBinding)(props.required)) {
|
|
2756
2814
|
errors.push('Textarea "required" must be a boolean when provided.');
|
|
2757
2815
|
}
|
|
2758
|
-
if (props.disabled !== void 0 && typeof props.disabled !== "boolean" && !(0,
|
|
2816
|
+
if (props.disabled !== void 0 && typeof props.disabled !== "boolean" && !(0, import_schema18.isVariableBinding)(props.disabled)) {
|
|
2759
2817
|
errors.push('Textarea "disabled" must be a boolean when provided.');
|
|
2760
2818
|
}
|
|
2761
|
-
if (props.readOnly !== void 0 && typeof props.readOnly !== "boolean" && !(0,
|
|
2819
|
+
if (props.readOnly !== void 0 && typeof props.readOnly !== "boolean" && !(0, import_schema18.isVariableBinding)(props.readOnly)) {
|
|
2762
2820
|
errors.push('Textarea "readOnly" must be a boolean when provided.');
|
|
2763
2821
|
}
|
|
2764
|
-
if (props.resize !== void 0 && !(0,
|
|
2822
|
+
if (props.resize !== void 0 && !(0, import_schema18.isVariableBinding)(props.resize)) {
|
|
2765
2823
|
const allowedResize = ["vertical", "horizontal", "both", "none"];
|
|
2766
2824
|
if (typeof props.resize !== "string" || !allowedResize.includes(props.resize)) {
|
|
2767
2825
|
errors.push(`Textarea "resize" must be one of: ${allowedResize.join(", ")}.`);
|
|
2768
2826
|
}
|
|
2769
2827
|
}
|
|
2770
|
-
if (props.autoGrow !== void 0 && typeof props.autoGrow !== "boolean" && !(0,
|
|
2828
|
+
if (props.autoGrow !== void 0 && typeof props.autoGrow !== "boolean" && !(0, import_schema18.isVariableBinding)(props.autoGrow)) {
|
|
2771
2829
|
errors.push('Textarea "autoGrow" must be a boolean when provided.');
|
|
2772
2830
|
}
|
|
2773
|
-
if (props.maxCharCount !== void 0 && !(0,
|
|
2831
|
+
if (props.maxCharCount !== void 0 && !(0, import_schema18.isVariableBinding)(props.maxCharCount)) {
|
|
2774
2832
|
if (typeof props.maxCharCount !== "number" || props.maxCharCount < 1 || !Number.isInteger(props.maxCharCount)) {
|
|
2775
2833
|
errors.push('Textarea "maxCharCount" must be a positive integer (>= 1) when provided.');
|
|
2776
2834
|
}
|
|
2777
2835
|
}
|
|
2778
|
-
if (props.helperText !== void 0 && typeof props.helperText !== "string" && !(0,
|
|
2836
|
+
if (props.helperText !== void 0 && typeof props.helperText !== "string" && !(0, import_schema18.isVariableBinding)(props.helperText)) {
|
|
2779
2837
|
errors.push('Textarea "helperText" must be a string when provided.');
|
|
2780
2838
|
}
|
|
2781
2839
|
return errors.length > 0 ? errors : true;
|
|
@@ -2800,7 +2858,7 @@ var textareaDefinition = {
|
|
|
2800
2858
|
};
|
|
2801
2859
|
|
|
2802
2860
|
// src/definitions/form/select.ts
|
|
2803
|
-
var
|
|
2861
|
+
var import_schema19 = require("@kubuild/schema");
|
|
2804
2862
|
var selectDefinition = {
|
|
2805
2863
|
type: "select",
|
|
2806
2864
|
label: "Select",
|
|
@@ -2852,21 +2910,21 @@ var selectDefinition = {
|
|
|
2852
2910
|
],
|
|
2853
2911
|
validateProps: (props) => {
|
|
2854
2912
|
const errors = [];
|
|
2855
|
-
if (props.name !== void 0 && typeof props.name !== "string" && !(0,
|
|
2913
|
+
if (props.name !== void 0 && typeof props.name !== "string" && !(0, import_schema19.isVariableBinding)(props.name)) {
|
|
2856
2914
|
errors.push('Select "name" must be a string when provided.');
|
|
2857
2915
|
}
|
|
2858
|
-
if (props.options !== void 0 && !(0,
|
|
2916
|
+
if (props.options !== void 0 && !(0, import_schema19.isVariableBinding)(props.options)) {
|
|
2859
2917
|
if (!Array.isArray(props.options) && typeof props.options !== "string") {
|
|
2860
2918
|
errors.push('Select "options" must be an array of option objects or a JSON string.');
|
|
2861
2919
|
}
|
|
2862
2920
|
}
|
|
2863
|
-
if (props.required !== void 0 && typeof props.required !== "boolean" && !(0,
|
|
2921
|
+
if (props.required !== void 0 && typeof props.required !== "boolean" && !(0, import_schema19.isVariableBinding)(props.required)) {
|
|
2864
2922
|
errors.push('Select "required" must be a boolean when provided.');
|
|
2865
2923
|
}
|
|
2866
|
-
if (props.disabled !== void 0 && typeof props.disabled !== "boolean" && !(0,
|
|
2924
|
+
if (props.disabled !== void 0 && typeof props.disabled !== "boolean" && !(0, import_schema19.isVariableBinding)(props.disabled)) {
|
|
2867
2925
|
errors.push('Select "disabled" must be a boolean when provided.');
|
|
2868
2926
|
}
|
|
2869
|
-
if (props.helperText !== void 0 && typeof props.helperText !== "string" && !(0,
|
|
2927
|
+
if (props.helperText !== void 0 && typeof props.helperText !== "string" && !(0, import_schema19.isVariableBinding)(props.helperText)) {
|
|
2870
2928
|
errors.push('Select "helperText" must be a string when provided.');
|
|
2871
2929
|
}
|
|
2872
2930
|
return errors.length > 0 ? errors : true;
|
|
@@ -2891,7 +2949,7 @@ var selectDefinition = {
|
|
|
2891
2949
|
};
|
|
2892
2950
|
|
|
2893
2951
|
// src/definitions/form/checkbox.ts
|
|
2894
|
-
var
|
|
2952
|
+
var import_schema20 = require("@kubuild/schema");
|
|
2895
2953
|
var checkboxDefinition = {
|
|
2896
2954
|
type: "checkbox",
|
|
2897
2955
|
label: "Checkbox",
|
|
@@ -2933,28 +2991,28 @@ var checkboxDefinition = {
|
|
|
2933
2991
|
],
|
|
2934
2992
|
validateProps: (props) => {
|
|
2935
2993
|
const errors = [];
|
|
2936
|
-
if (props.label !== void 0 && typeof props.label !== "string" && !(0,
|
|
2994
|
+
if (props.label !== void 0 && typeof props.label !== "string" && !(0, import_schema20.isVariableBinding)(props.label)) {
|
|
2937
2995
|
errors.push('Checkbox "label" must be a string when provided.');
|
|
2938
2996
|
}
|
|
2939
|
-
if (props.name !== void 0 && typeof props.name !== "string" && !(0,
|
|
2997
|
+
if (props.name !== void 0 && typeof props.name !== "string" && !(0, import_schema20.isVariableBinding)(props.name)) {
|
|
2940
2998
|
errors.push('Checkbox "name" must be a string when provided.');
|
|
2941
2999
|
}
|
|
2942
|
-
if (props.value !== void 0 && typeof props.value !== "string" && !(0,
|
|
3000
|
+
if (props.value !== void 0 && typeof props.value !== "string" && !(0, import_schema20.isVariableBinding)(props.value)) {
|
|
2943
3001
|
errors.push('Checkbox "value" must be a string when provided.');
|
|
2944
3002
|
}
|
|
2945
|
-
if (props.defaultChecked !== void 0 && typeof props.defaultChecked !== "boolean" && !(0,
|
|
3003
|
+
if (props.defaultChecked !== void 0 && typeof props.defaultChecked !== "boolean" && !(0, import_schema20.isVariableBinding)(props.defaultChecked)) {
|
|
2946
3004
|
errors.push('Checkbox "defaultChecked" must be a boolean when provided.');
|
|
2947
3005
|
}
|
|
2948
|
-
if (props.indeterminate !== void 0 && typeof props.indeterminate !== "boolean" && !(0,
|
|
3006
|
+
if (props.indeterminate !== void 0 && typeof props.indeterminate !== "boolean" && !(0, import_schema20.isVariableBinding)(props.indeterminate)) {
|
|
2949
3007
|
errors.push('Checkbox "indeterminate" must be a boolean when provided.');
|
|
2950
3008
|
}
|
|
2951
|
-
if (props.required !== void 0 && typeof props.required !== "boolean" && !(0,
|
|
3009
|
+
if (props.required !== void 0 && typeof props.required !== "boolean" && !(0, import_schema20.isVariableBinding)(props.required)) {
|
|
2952
3010
|
errors.push('Checkbox "required" must be a boolean when provided.');
|
|
2953
3011
|
}
|
|
2954
|
-
if (props.disabled !== void 0 && typeof props.disabled !== "boolean" && !(0,
|
|
3012
|
+
if (props.disabled !== void 0 && typeof props.disabled !== "boolean" && !(0, import_schema20.isVariableBinding)(props.disabled)) {
|
|
2955
3013
|
errors.push('Checkbox "disabled" must be a boolean when provided.');
|
|
2956
3014
|
}
|
|
2957
|
-
if (props.helperText !== void 0 && typeof props.helperText !== "string" && !(0,
|
|
3015
|
+
if (props.helperText !== void 0 && typeof props.helperText !== "string" && !(0, import_schema20.isVariableBinding)(props.helperText)) {
|
|
2958
3016
|
errors.push('Checkbox "helperText" must be a string when provided.');
|
|
2959
3017
|
}
|
|
2960
3018
|
return errors.length > 0 ? errors : true;
|
|
@@ -2973,7 +3031,7 @@ var checkboxDefinition = {
|
|
|
2973
3031
|
};
|
|
2974
3032
|
|
|
2975
3033
|
// src/definitions/form/switch.ts
|
|
2976
|
-
var
|
|
3034
|
+
var import_schema21 = require("@kubuild/schema");
|
|
2977
3035
|
var switchDefinition = {
|
|
2978
3036
|
type: "switch",
|
|
2979
3037
|
label: "Switch",
|
|
@@ -3025,31 +3083,31 @@ var switchDefinition = {
|
|
|
3025
3083
|
],
|
|
3026
3084
|
validateProps: (props) => {
|
|
3027
3085
|
const errors = [];
|
|
3028
|
-
if (props.label !== void 0 && typeof props.label !== "string" && !(0,
|
|
3086
|
+
if (props.label !== void 0 && typeof props.label !== "string" && !(0, import_schema21.isVariableBinding)(props.label)) {
|
|
3029
3087
|
errors.push('Switch "label" must be a string when provided.');
|
|
3030
3088
|
}
|
|
3031
|
-
if (props.name !== void 0 && typeof props.name !== "string" && !(0,
|
|
3089
|
+
if (props.name !== void 0 && typeof props.name !== "string" && !(0, import_schema21.isVariableBinding)(props.name)) {
|
|
3032
3090
|
errors.push('Switch "name" must be a string when provided.');
|
|
3033
3091
|
}
|
|
3034
|
-
if (props.value !== void 0 && typeof props.value !== "string" && !(0,
|
|
3092
|
+
if (props.value !== void 0 && typeof props.value !== "string" && !(0, import_schema21.isVariableBinding)(props.value)) {
|
|
3035
3093
|
errors.push('Switch "value" must be a string when provided.');
|
|
3036
3094
|
}
|
|
3037
|
-
if (props.defaultChecked !== void 0 && typeof props.defaultChecked !== "boolean" && !(0,
|
|
3095
|
+
if (props.defaultChecked !== void 0 && typeof props.defaultChecked !== "boolean" && !(0, import_schema21.isVariableBinding)(props.defaultChecked)) {
|
|
3038
3096
|
errors.push('Switch "defaultChecked" must be a boolean when provided.');
|
|
3039
3097
|
}
|
|
3040
|
-
if (props.switchSize !== void 0 && !(0,
|
|
3098
|
+
if (props.switchSize !== void 0 && !(0, import_schema21.isVariableBinding)(props.switchSize)) {
|
|
3041
3099
|
const allowedSizes = ["sm", "md", "lg"];
|
|
3042
3100
|
if (typeof props.switchSize !== "string" || !allowedSizes.includes(props.switchSize)) {
|
|
3043
3101
|
errors.push(`Switch "switchSize" must be one of: ${allowedSizes.join(", ")}.`);
|
|
3044
3102
|
}
|
|
3045
3103
|
}
|
|
3046
|
-
if (props.required !== void 0 && typeof props.required !== "boolean" && !(0,
|
|
3104
|
+
if (props.required !== void 0 && typeof props.required !== "boolean" && !(0, import_schema21.isVariableBinding)(props.required)) {
|
|
3047
3105
|
errors.push('Switch "required" must be a boolean when provided.');
|
|
3048
3106
|
}
|
|
3049
|
-
if (props.disabled !== void 0 && typeof props.disabled !== "boolean" && !(0,
|
|
3107
|
+
if (props.disabled !== void 0 && typeof props.disabled !== "boolean" && !(0, import_schema21.isVariableBinding)(props.disabled)) {
|
|
3050
3108
|
errors.push('Switch "disabled" must be a boolean when provided.');
|
|
3051
3109
|
}
|
|
3052
|
-
if (props.helperText !== void 0 && typeof props.helperText !== "string" && !(0,
|
|
3110
|
+
if (props.helperText !== void 0 && typeof props.helperText !== "string" && !(0, import_schema21.isVariableBinding)(props.helperText)) {
|
|
3053
3111
|
errors.push('Switch "helperText" must be a string when provided.');
|
|
3054
3112
|
}
|
|
3055
3113
|
return errors.length > 0 ? errors : true;
|
|
@@ -3068,7 +3126,7 @@ var switchDefinition = {
|
|
|
3068
3126
|
};
|
|
3069
3127
|
|
|
3070
3128
|
// src/definitions/form/radio.ts
|
|
3071
|
-
var
|
|
3129
|
+
var import_schema22 = require("@kubuild/schema");
|
|
3072
3130
|
var radioGroupDefinition = {
|
|
3073
3131
|
type: "radio-group",
|
|
3074
3132
|
label: "Radio Group",
|
|
@@ -3119,25 +3177,25 @@ var radioGroupDefinition = {
|
|
|
3119
3177
|
],
|
|
3120
3178
|
validateProps: (props) => {
|
|
3121
3179
|
const errors = [];
|
|
3122
|
-
if (props.name !== void 0 && typeof props.name !== "string" && !(0,
|
|
3180
|
+
if (props.name !== void 0 && typeof props.name !== "string" && !(0, import_schema22.isVariableBinding)(props.name)) {
|
|
3123
3181
|
errors.push('RadioGroup "name" must be a string when provided.');
|
|
3124
3182
|
}
|
|
3125
|
-
if (props.defaultSelected !== void 0 && typeof props.defaultSelected !== "string" && !(0,
|
|
3183
|
+
if (props.defaultSelected !== void 0 && typeof props.defaultSelected !== "string" && !(0, import_schema22.isVariableBinding)(props.defaultSelected)) {
|
|
3126
3184
|
errors.push('RadioGroup "defaultSelected" must be a string when provided.');
|
|
3127
3185
|
}
|
|
3128
|
-
if (props.orientation !== void 0 && !(0,
|
|
3186
|
+
if (props.orientation !== void 0 && !(0, import_schema22.isVariableBinding)(props.orientation)) {
|
|
3129
3187
|
const allowedOrientations = ["vertical", "horizontal"];
|
|
3130
3188
|
if (typeof props.orientation !== "string" || !allowedOrientations.includes(props.orientation)) {
|
|
3131
3189
|
errors.push(`RadioGroup "orientation" must be one of: ${allowedOrientations.join(", ")}.`);
|
|
3132
3190
|
}
|
|
3133
3191
|
}
|
|
3134
|
-
if (props.required !== void 0 && typeof props.required !== "boolean" && !(0,
|
|
3192
|
+
if (props.required !== void 0 && typeof props.required !== "boolean" && !(0, import_schema22.isVariableBinding)(props.required)) {
|
|
3135
3193
|
errors.push('RadioGroup "required" must be a boolean when provided.');
|
|
3136
3194
|
}
|
|
3137
|
-
if (props.disabled !== void 0 && typeof props.disabled !== "boolean" && !(0,
|
|
3195
|
+
if (props.disabled !== void 0 && typeof props.disabled !== "boolean" && !(0, import_schema22.isVariableBinding)(props.disabled)) {
|
|
3138
3196
|
errors.push('RadioGroup "disabled" must be a boolean when provided.');
|
|
3139
3197
|
}
|
|
3140
|
-
if (props.helperText !== void 0 && typeof props.helperText !== "string" && !(0,
|
|
3198
|
+
if (props.helperText !== void 0 && typeof props.helperText !== "string" && !(0, import_schema22.isVariableBinding)(props.helperText)) {
|
|
3141
3199
|
errors.push('RadioGroup "helperText" must be a string when provided.');
|
|
3142
3200
|
}
|
|
3143
3201
|
return errors.length > 0 ? errors : true;
|
|
@@ -3188,25 +3246,25 @@ var radioDefinition = {
|
|
|
3188
3246
|
],
|
|
3189
3247
|
validateProps: (props) => {
|
|
3190
3248
|
const errors = [];
|
|
3191
|
-
if (props.label !== void 0 && typeof props.label !== "string" && !(0,
|
|
3249
|
+
if (props.label !== void 0 && typeof props.label !== "string" && !(0, import_schema22.isVariableBinding)(props.label)) {
|
|
3192
3250
|
errors.push('Radio "label" must be a string when provided.');
|
|
3193
3251
|
}
|
|
3194
|
-
if (props.name !== void 0 && typeof props.name !== "string" && !(0,
|
|
3252
|
+
if (props.name !== void 0 && typeof props.name !== "string" && !(0, import_schema22.isVariableBinding)(props.name)) {
|
|
3195
3253
|
errors.push('Radio "name" must be a string when provided.');
|
|
3196
3254
|
}
|
|
3197
|
-
if (props.value !== void 0 && typeof props.value !== "string" && !(0,
|
|
3255
|
+
if (props.value !== void 0 && typeof props.value !== "string" && !(0, import_schema22.isVariableBinding)(props.value)) {
|
|
3198
3256
|
errors.push('Radio "value" must be a string when provided.');
|
|
3199
3257
|
}
|
|
3200
|
-
if (props.defaultChecked !== void 0 && typeof props.defaultChecked !== "boolean" && !(0,
|
|
3258
|
+
if (props.defaultChecked !== void 0 && typeof props.defaultChecked !== "boolean" && !(0, import_schema22.isVariableBinding)(props.defaultChecked)) {
|
|
3201
3259
|
errors.push('Radio "defaultChecked" must be a boolean when provided.');
|
|
3202
3260
|
}
|
|
3203
|
-
if (props.required !== void 0 && typeof props.required !== "boolean" && !(0,
|
|
3261
|
+
if (props.required !== void 0 && typeof props.required !== "boolean" && !(0, import_schema22.isVariableBinding)(props.required)) {
|
|
3204
3262
|
errors.push('Radio "required" must be a boolean when provided.');
|
|
3205
3263
|
}
|
|
3206
|
-
if (props.disabled !== void 0 && typeof props.disabled !== "boolean" && !(0,
|
|
3264
|
+
if (props.disabled !== void 0 && typeof props.disabled !== "boolean" && !(0, import_schema22.isVariableBinding)(props.disabled)) {
|
|
3207
3265
|
errors.push('Radio "disabled" must be a boolean when provided.');
|
|
3208
3266
|
}
|
|
3209
|
-
if (props.helperText !== void 0 && typeof props.helperText !== "string" && !(0,
|
|
3267
|
+
if (props.helperText !== void 0 && typeof props.helperText !== "string" && !(0, import_schema22.isVariableBinding)(props.helperText)) {
|
|
3210
3268
|
errors.push('Radio "helperText" must be a string when provided.');
|
|
3211
3269
|
}
|
|
3212
3270
|
return errors.length > 0 ? errors : true;
|
|
@@ -3230,7 +3288,7 @@ var radioItemDefinition = {
|
|
|
3230
3288
|
};
|
|
3231
3289
|
|
|
3232
3290
|
// src/definitions/form/file-upload.ts
|
|
3233
|
-
var
|
|
3291
|
+
var import_schema23 = require("@kubuild/schema");
|
|
3234
3292
|
var fileUploadDefinition = {
|
|
3235
3293
|
type: "file-upload",
|
|
3236
3294
|
label: "File Upload",
|
|
@@ -3275,33 +3333,33 @@ var fileUploadDefinition = {
|
|
|
3275
3333
|
],
|
|
3276
3334
|
validateProps: (props) => {
|
|
3277
3335
|
const errors = [];
|
|
3278
|
-
if (props.label !== void 0 && typeof props.label !== "string" && !(0,
|
|
3336
|
+
if (props.label !== void 0 && typeof props.label !== "string" && !(0, import_schema23.isVariableBinding)(props.label)) {
|
|
3279
3337
|
errors.push('FileUpload "label" must be a string when provided.');
|
|
3280
3338
|
}
|
|
3281
|
-
if (props.name !== void 0 && typeof props.name !== "string" && !(0,
|
|
3339
|
+
if (props.name !== void 0 && typeof props.name !== "string" && !(0, import_schema23.isVariableBinding)(props.name)) {
|
|
3282
3340
|
errors.push('FileUpload "name" must be a string when provided.');
|
|
3283
3341
|
}
|
|
3284
|
-
if (props.accept !== void 0 && typeof props.accept !== "string" && !(0,
|
|
3342
|
+
if (props.accept !== void 0 && typeof props.accept !== "string" && !(0, import_schema23.isVariableBinding)(props.accept)) {
|
|
3285
3343
|
errors.push('FileUpload "accept" must be a string when provided.');
|
|
3286
3344
|
}
|
|
3287
|
-
if (props.maxFileSize !== void 0 && !(0,
|
|
3345
|
+
if (props.maxFileSize !== void 0 && !(0, import_schema23.isVariableBinding)(props.maxFileSize)) {
|
|
3288
3346
|
if (typeof props.maxFileSize !== "number" || props.maxFileSize <= 0) {
|
|
3289
3347
|
errors.push('FileUpload "maxFileSize" must be a positive number when provided.');
|
|
3290
3348
|
}
|
|
3291
3349
|
}
|
|
3292
|
-
if (props.multiple !== void 0 && typeof props.multiple !== "boolean" && !(0,
|
|
3350
|
+
if (props.multiple !== void 0 && typeof props.multiple !== "boolean" && !(0, import_schema23.isVariableBinding)(props.multiple)) {
|
|
3293
3351
|
errors.push('FileUpload "multiple" must be a boolean when provided.');
|
|
3294
3352
|
}
|
|
3295
|
-
if (props.showPreview !== void 0 && typeof props.showPreview !== "boolean" && !(0,
|
|
3353
|
+
if (props.showPreview !== void 0 && typeof props.showPreview !== "boolean" && !(0, import_schema23.isVariableBinding)(props.showPreview)) {
|
|
3296
3354
|
errors.push('FileUpload "showPreview" must be a boolean when provided.');
|
|
3297
3355
|
}
|
|
3298
|
-
if (props.required !== void 0 && typeof props.required !== "boolean" && !(0,
|
|
3356
|
+
if (props.required !== void 0 && typeof props.required !== "boolean" && !(0, import_schema23.isVariableBinding)(props.required)) {
|
|
3299
3357
|
errors.push('FileUpload "required" must be a boolean when provided.');
|
|
3300
3358
|
}
|
|
3301
|
-
if (props.disabled !== void 0 && typeof props.disabled !== "boolean" && !(0,
|
|
3359
|
+
if (props.disabled !== void 0 && typeof props.disabled !== "boolean" && !(0, import_schema23.isVariableBinding)(props.disabled)) {
|
|
3302
3360
|
errors.push('FileUpload "disabled" must be a boolean when provided.');
|
|
3303
3361
|
}
|
|
3304
|
-
if (props.helperText !== void 0 && typeof props.helperText !== "string" && !(0,
|
|
3362
|
+
if (props.helperText !== void 0 && typeof props.helperText !== "string" && !(0, import_schema23.isVariableBinding)(props.helperText)) {
|
|
3305
3363
|
errors.push('FileUpload "helperText" must be a string when provided.');
|
|
3306
3364
|
}
|
|
3307
3365
|
return errors.length > 0 ? errors : true;
|
|
@@ -3541,77 +3599,607 @@ var collapsibleDefinition = {
|
|
|
3541
3599
|
}
|
|
3542
3600
|
};
|
|
3543
3601
|
|
|
3544
|
-
// src/definitions/
|
|
3545
|
-
var
|
|
3546
|
-
|
|
3547
|
-
|
|
3548
|
-
|
|
3549
|
-
|
|
3550
|
-
|
|
3551
|
-
|
|
3552
|
-
|
|
3553
|
-
|
|
3554
|
-
|
|
3555
|
-
|
|
3556
|
-
|
|
3557
|
-
|
|
3558
|
-
|
|
3559
|
-
|
|
3560
|
-
|
|
3561
|
-
|
|
3562
|
-
|
|
3563
|
-
|
|
3564
|
-
|
|
3565
|
-
|
|
3566
|
-
|
|
3567
|
-
|
|
3568
|
-
|
|
3569
|
-
|
|
3570
|
-
|
|
3571
|
-
|
|
3572
|
-
|
|
3573
|
-
|
|
3574
|
-
|
|
3575
|
-
|
|
3576
|
-
|
|
3577
|
-
|
|
3578
|
-
|
|
3579
|
-
|
|
3580
|
-
|
|
3581
|
-
|
|
3582
|
-
|
|
3583
|
-
|
|
3584
|
-
|
|
3585
|
-
|
|
3586
|
-
|
|
3587
|
-
|
|
3588
|
-
|
|
3589
|
-
|
|
3590
|
-
|
|
3591
|
-
|
|
3592
|
-
|
|
3593
|
-
|
|
3594
|
-
|
|
3595
|
-
|
|
3596
|
-
|
|
3597
|
-
|
|
3598
|
-
|
|
3599
|
-
|
|
3600
|
-
|
|
3602
|
+
// src/definitions/conversion/countdown.ts
|
|
3603
|
+
var import_schema24 = require("@kubuild/schema");
|
|
3604
|
+
var COUNTDOWN_MODES = ["evergreen", "fixed"];
|
|
3605
|
+
var COUNTDOWN_FORMATS = ["mm:ss", "hh:mm:ss", "d h m s"];
|
|
3606
|
+
var COUNTDOWN_EXPIRE_BEHAVIORS = ["text", "hide", "zero"];
|
|
3607
|
+
var COUNTDOWN_STORAGE_TYPES = ["session", "local"];
|
|
3608
|
+
var countdownDefinition = {
|
|
3609
|
+
type: "countdown",
|
|
3610
|
+
label: "Countdown",
|
|
3611
|
+
category: "interactive",
|
|
3612
|
+
icon: "clock",
|
|
3613
|
+
description: "Urgency timer for limited offers (evergreen per-visitor or fixed deadline).",
|
|
3614
|
+
acceptsChildren: false,
|
|
3615
|
+
defaultProps: {
|
|
3616
|
+
mode: "evergreen",
|
|
3617
|
+
durationMinutes: 15,
|
|
3618
|
+
targetDate: "",
|
|
3619
|
+
timezone: "UTC",
|
|
3620
|
+
format: "hh:mm:ss",
|
|
3621
|
+
label: "",
|
|
3622
|
+
labelDays: "Days",
|
|
3623
|
+
labelHours: "Hours",
|
|
3624
|
+
labelMinutes: "Minutes",
|
|
3625
|
+
labelSeconds: "Seconds",
|
|
3626
|
+
expireBehavior: "text",
|
|
3627
|
+
expiredText: "This offer has expired.",
|
|
3628
|
+
storage: "session",
|
|
3629
|
+
storageKey: ""
|
|
3630
|
+
},
|
|
3631
|
+
propFields: [
|
|
3632
|
+
{
|
|
3633
|
+
name: "mode",
|
|
3634
|
+
label: "Mode",
|
|
3635
|
+
type: "select",
|
|
3636
|
+
defaultValue: "evergreen",
|
|
3637
|
+
options: [
|
|
3638
|
+
{ label: "Evergreen (per visitor)", value: "evergreen" },
|
|
3639
|
+
{ label: "Fixed date", value: "fixed" }
|
|
3640
|
+
]
|
|
3641
|
+
},
|
|
3642
|
+
{
|
|
3643
|
+
name: "durationMinutes",
|
|
3644
|
+
label: "Duration (minutes)",
|
|
3645
|
+
type: "number",
|
|
3646
|
+
defaultValue: 15,
|
|
3647
|
+
description: "Evergreen mode: how long each visitor gets from their first view."
|
|
3648
|
+
},
|
|
3649
|
+
{
|
|
3650
|
+
name: "targetDate",
|
|
3651
|
+
label: "Target Date/Time",
|
|
3652
|
+
type: "string",
|
|
3653
|
+
defaultValue: "",
|
|
3654
|
+
description: 'Fixed mode: wall-clock time "YYYY-MM-DDTHH:mm" in the selected timezone.'
|
|
3655
|
+
},
|
|
3656
|
+
{
|
|
3657
|
+
name: "timezone",
|
|
3658
|
+
label: "Timezone",
|
|
3659
|
+
type: "string",
|
|
3660
|
+
defaultValue: "UTC",
|
|
3661
|
+
description: 'Fixed mode: IANA timezone name, e.g. "Asia/Jakarta" or "Europe/London".'
|
|
3662
|
+
},
|
|
3663
|
+
{
|
|
3664
|
+
name: "format",
|
|
3665
|
+
label: "Format",
|
|
3666
|
+
type: "select",
|
|
3667
|
+
defaultValue: "hh:mm:ss",
|
|
3668
|
+
options: [
|
|
3669
|
+
{ label: "mm:ss", value: "mm:ss" },
|
|
3670
|
+
{ label: "hh:mm:ss", value: "hh:mm:ss" },
|
|
3671
|
+
{ label: "d h m s (unit blocks)", value: "d h m s" }
|
|
3672
|
+
]
|
|
3673
|
+
},
|
|
3674
|
+
{
|
|
3675
|
+
name: "label",
|
|
3676
|
+
label: "Label",
|
|
3677
|
+
type: "string",
|
|
3678
|
+
defaultValue: "",
|
|
3679
|
+
description: 'Optional text shown before the timer, e.g. "Offer ends in".'
|
|
3680
|
+
},
|
|
3681
|
+
{ name: "labelDays", label: "Days Label", type: "string", defaultValue: "Days" },
|
|
3682
|
+
{ name: "labelHours", label: "Hours Label", type: "string", defaultValue: "Hours" },
|
|
3683
|
+
{ name: "labelMinutes", label: "Minutes Label", type: "string", defaultValue: "Minutes" },
|
|
3684
|
+
{ name: "labelSeconds", label: "Seconds Label", type: "string", defaultValue: "Seconds" },
|
|
3685
|
+
{
|
|
3686
|
+
name: "expireBehavior",
|
|
3687
|
+
label: "When Expired",
|
|
3688
|
+
type: "select",
|
|
3689
|
+
defaultValue: "text",
|
|
3690
|
+
options: [
|
|
3691
|
+
{ label: "Show expired text", value: "text" },
|
|
3692
|
+
{ label: "Hide timer", value: "hide" },
|
|
3693
|
+
{ label: "Keep showing zeros", value: "zero" }
|
|
3694
|
+
],
|
|
3695
|
+
description: 'Add an "On Expire" action pipeline to redirect, show a toast, open a modal, etc.'
|
|
3696
|
+
},
|
|
3697
|
+
{
|
|
3698
|
+
name: "expiredText",
|
|
3699
|
+
label: "Expired Text",
|
|
3700
|
+
type: "string",
|
|
3701
|
+
defaultValue: "This offer has expired."
|
|
3702
|
+
},
|
|
3703
|
+
{
|
|
3704
|
+
name: "storage",
|
|
3705
|
+
label: "Evergreen Storage",
|
|
3706
|
+
type: "select",
|
|
3707
|
+
defaultValue: "session",
|
|
3708
|
+
options: [
|
|
3709
|
+
{ label: "Session (per browser session)", value: "session" },
|
|
3710
|
+
{ label: "Local (persists across visits)", value: "local" }
|
|
3711
|
+
]
|
|
3712
|
+
},
|
|
3713
|
+
{
|
|
3714
|
+
name: "storageKey",
|
|
3715
|
+
label: "Storage Key",
|
|
3716
|
+
type: "string",
|
|
3717
|
+
defaultValue: "",
|
|
3718
|
+
description: "Share one deadline across pages by using the same key (defaults to the node id)."
|
|
3601
3719
|
}
|
|
3602
|
-
|
|
3603
|
-
|
|
3720
|
+
],
|
|
3721
|
+
traits: [
|
|
3722
|
+
idTrait(),
|
|
3723
|
+
ariaLabelTrait({ description: 'Accessible name for the timer, e.g. "Offer ends in".' })
|
|
3724
|
+
],
|
|
3725
|
+
defaultStyles: {
|
|
3726
|
+
base: {
|
|
3727
|
+
display: "flex",
|
|
3728
|
+
alignItems: "center",
|
|
3729
|
+
justifyContent: "center",
|
|
3730
|
+
gap: "12px",
|
|
3731
|
+
fontSize: "28px",
|
|
3732
|
+
fontWeight: "700",
|
|
3733
|
+
fontVariantNumeric: "tabular-nums"
|
|
3604
3734
|
}
|
|
3605
|
-
|
|
3606
|
-
|
|
3607
|
-
|
|
3608
|
-
|
|
3609
|
-
|
|
3610
|
-
|
|
3611
|
-
|
|
3612
|
-
}
|
|
3613
|
-
|
|
3614
|
-
|
|
3735
|
+
},
|
|
3736
|
+
validateProps: (props) => {
|
|
3737
|
+
const errors = [];
|
|
3738
|
+
const checkEnum = (name, allowed) => {
|
|
3739
|
+
const value = props[name];
|
|
3740
|
+
if (value === void 0 || (0, import_schema24.isVariableBinding)(value)) return;
|
|
3741
|
+
if (typeof value !== "string" || !allowed.includes(value)) {
|
|
3742
|
+
errors.push(`Countdown "${name}" must be one of: ${allowed.join(", ")}.`);
|
|
3743
|
+
}
|
|
3744
|
+
};
|
|
3745
|
+
checkEnum("mode", COUNTDOWN_MODES);
|
|
3746
|
+
checkEnum("format", COUNTDOWN_FORMATS);
|
|
3747
|
+
checkEnum("expireBehavior", COUNTDOWN_EXPIRE_BEHAVIORS);
|
|
3748
|
+
checkEnum("storage", COUNTDOWN_STORAGE_TYPES);
|
|
3749
|
+
const duration = props.durationMinutes;
|
|
3750
|
+
if (duration !== void 0 && !(0, import_schema24.isVariableBinding)(duration)) {
|
|
3751
|
+
if (typeof duration !== "number" || !Number.isFinite(duration) || duration < 0) {
|
|
3752
|
+
errors.push('Countdown "durationMinutes" must be a non-negative number.');
|
|
3753
|
+
}
|
|
3754
|
+
}
|
|
3755
|
+
return errors;
|
|
3756
|
+
}
|
|
3757
|
+
};
|
|
3758
|
+
|
|
3759
|
+
// src/definitions/conversion/accordion.ts
|
|
3760
|
+
var import_schema25 = require("@kubuild/schema");
|
|
3761
|
+
var accordionDefinition = {
|
|
3762
|
+
type: "accordion",
|
|
3763
|
+
label: "Accordion",
|
|
3764
|
+
category: "interactive",
|
|
3765
|
+
icon: "chevron-down",
|
|
3766
|
+
description: "Group of expandable items (FAQ) with single- or multi-open behavior.",
|
|
3767
|
+
acceptsChildren: true,
|
|
3768
|
+
allowedChildren: ["accordion-item"],
|
|
3769
|
+
defaultProps: {
|
|
3770
|
+
allowMultiple: false,
|
|
3771
|
+
defaultOpenIndex: 0,
|
|
3772
|
+
icon: "chevron",
|
|
3773
|
+
faqSchema: false
|
|
3774
|
+
},
|
|
3775
|
+
defaultChildren: [
|
|
3776
|
+
{
|
|
3777
|
+
type: "accordion-item",
|
|
3778
|
+
props: { title: "What is included?" },
|
|
3779
|
+
children: [{ type: "paragraph", props: { text: "Everything you need to get started." } }]
|
|
3780
|
+
},
|
|
3781
|
+
{
|
|
3782
|
+
type: "accordion-item",
|
|
3783
|
+
props: { title: "Can I get a refund?" },
|
|
3784
|
+
children: [{ type: "paragraph", props: { text: "Yes, within 30 days of purchase." } }]
|
|
3785
|
+
},
|
|
3786
|
+
{
|
|
3787
|
+
type: "accordion-item",
|
|
3788
|
+
props: { title: "How do I get access?" },
|
|
3789
|
+
children: [
|
|
3790
|
+
{ type: "paragraph", props: { text: "You receive an email right after checkout." } }
|
|
3791
|
+
]
|
|
3792
|
+
}
|
|
3793
|
+
],
|
|
3794
|
+
propFields: [
|
|
3795
|
+
{
|
|
3796
|
+
name: "allowMultiple",
|
|
3797
|
+
label: "Allow Multiple Open",
|
|
3798
|
+
type: "boolean",
|
|
3799
|
+
defaultValue: false,
|
|
3800
|
+
description: "When off, opening an item closes the others."
|
|
3801
|
+
},
|
|
3802
|
+
{
|
|
3803
|
+
name: "defaultOpenIndex",
|
|
3804
|
+
label: "Default Open Item",
|
|
3805
|
+
type: "number",
|
|
3806
|
+
defaultValue: 0,
|
|
3807
|
+
description: "Zero-based index of the item open on first render (-1 = all closed)."
|
|
3808
|
+
},
|
|
3809
|
+
{
|
|
3810
|
+
name: "icon",
|
|
3811
|
+
label: "Icon",
|
|
3812
|
+
type: "select",
|
|
3813
|
+
defaultValue: "chevron",
|
|
3814
|
+
options: [
|
|
3815
|
+
{ label: "Chevron", value: "chevron" },
|
|
3816
|
+
{ label: "Plus / Minus", value: "plus" },
|
|
3817
|
+
{ label: "None", value: "none" }
|
|
3818
|
+
]
|
|
3819
|
+
},
|
|
3820
|
+
{
|
|
3821
|
+
name: "faqSchema",
|
|
3822
|
+
label: "Output FAQPage JSON-LD",
|
|
3823
|
+
type: "boolean",
|
|
3824
|
+
defaultValue: false,
|
|
3825
|
+
description: "Emits schema.org FAQPage structured data on the published page for SEO."
|
|
3826
|
+
}
|
|
3827
|
+
],
|
|
3828
|
+
traits: [idTrait(), ariaLabelTrait({ description: "Accessible name for the accordion group." })],
|
|
3829
|
+
defaultStyles: {
|
|
3830
|
+
base: {
|
|
3831
|
+
display: "flex",
|
|
3832
|
+
flexDirection: "column",
|
|
3833
|
+
width: "100%",
|
|
3834
|
+
borderTop: "1px solid #e2e8f0"
|
|
3835
|
+
}
|
|
3836
|
+
},
|
|
3837
|
+
validateProps: (props) => {
|
|
3838
|
+
const errors = [];
|
|
3839
|
+
const idx = props.defaultOpenIndex;
|
|
3840
|
+
if (idx !== void 0 && !(0, import_schema25.isVariableBinding)(idx) && (typeof idx !== "number" || !Number.isInteger(idx))) {
|
|
3841
|
+
errors.push('Accordion "defaultOpenIndex" must be an integer.');
|
|
3842
|
+
}
|
|
3843
|
+
return errors;
|
|
3844
|
+
}
|
|
3845
|
+
};
|
|
3846
|
+
var accordionItemDefinition = {
|
|
3847
|
+
type: "accordion-item",
|
|
3848
|
+
label: "Accordion Item",
|
|
3849
|
+
category: "interactive",
|
|
3850
|
+
icon: "chevron-right",
|
|
3851
|
+
description: "One question/answer row of an accordion: a title header plus content children.",
|
|
3852
|
+
acceptsChildren: true,
|
|
3853
|
+
allowedChildren: ["container", "columns", "flex", "grid", ...CONTENT_CHILD_TYPES],
|
|
3854
|
+
defaultProps: {
|
|
3855
|
+
title: "Question"
|
|
3856
|
+
},
|
|
3857
|
+
defaultChildren: [{ type: "paragraph", props: { text: "Answer goes here." } }],
|
|
3858
|
+
propFields: [{ name: "title", label: "Title", type: "string", defaultValue: "Question" }],
|
|
3859
|
+
traits: [idTrait()],
|
|
3860
|
+
defaultStyles: {
|
|
3861
|
+
base: {
|
|
3862
|
+
borderBottom: "1px solid #e2e8f0"
|
|
3863
|
+
}
|
|
3864
|
+
}
|
|
3865
|
+
};
|
|
3866
|
+
|
|
3867
|
+
// src/definitions/conversion/tabs.ts
|
|
3868
|
+
var import_schema26 = require("@kubuild/schema");
|
|
3869
|
+
var tabsDefinition = {
|
|
3870
|
+
type: "tabs",
|
|
3871
|
+
label: "Tabs",
|
|
3872
|
+
category: "interactive",
|
|
3873
|
+
icon: "tabs",
|
|
3874
|
+
description: "Tabbed content for product variants, specifications, or plan comparison.",
|
|
3875
|
+
acceptsChildren: true,
|
|
3876
|
+
allowedChildren: ["tab-panel"],
|
|
3877
|
+
defaultProps: {
|
|
3878
|
+
activeIndex: 0
|
|
3879
|
+
},
|
|
3880
|
+
defaultChildren: [
|
|
3881
|
+
{
|
|
3882
|
+
type: "tab-panel",
|
|
3883
|
+
props: { label: "Tab 1" },
|
|
3884
|
+
children: [{ type: "paragraph", props: { text: "Content for the first tab." } }]
|
|
3885
|
+
},
|
|
3886
|
+
{
|
|
3887
|
+
type: "tab-panel",
|
|
3888
|
+
props: { label: "Tab 2" },
|
|
3889
|
+
children: [{ type: "paragraph", props: { text: "Content for the second tab." } }]
|
|
3890
|
+
}
|
|
3891
|
+
],
|
|
3892
|
+
propFields: [
|
|
3893
|
+
{
|
|
3894
|
+
name: "activeIndex",
|
|
3895
|
+
label: "Active Tab",
|
|
3896
|
+
type: "number",
|
|
3897
|
+
defaultValue: 0,
|
|
3898
|
+
description: "Zero-based index of the tab shown initially."
|
|
3899
|
+
}
|
|
3900
|
+
],
|
|
3901
|
+
traits: [idTrait(), ariaLabelTrait({ description: "Accessible name for the tab list." })],
|
|
3902
|
+
defaultStyles: {
|
|
3903
|
+
base: {
|
|
3904
|
+
display: "flex",
|
|
3905
|
+
flexDirection: "column",
|
|
3906
|
+
width: "100%"
|
|
3907
|
+
}
|
|
3908
|
+
},
|
|
3909
|
+
validateProps: (props) => {
|
|
3910
|
+
const errors = [];
|
|
3911
|
+
const idx = props.activeIndex;
|
|
3912
|
+
if (idx !== void 0 && !(0, import_schema26.isVariableBinding)(idx) && (typeof idx !== "number" || !Number.isInteger(idx) || idx < 0)) {
|
|
3913
|
+
errors.push('Tabs "activeIndex" must be a non-negative integer.');
|
|
3914
|
+
}
|
|
3915
|
+
return errors;
|
|
3916
|
+
}
|
|
3917
|
+
};
|
|
3918
|
+
var tabPanelDefinition = {
|
|
3919
|
+
type: "tab-panel",
|
|
3920
|
+
label: "Tab Panel",
|
|
3921
|
+
category: "interactive",
|
|
3922
|
+
icon: "layout",
|
|
3923
|
+
description: "Content of a single tab; its label is shown in the tab list.",
|
|
3924
|
+
acceptsChildren: true,
|
|
3925
|
+
allowedChildren: ["container", "columns", "flex", "grid", ...CONTENT_CHILD_TYPES],
|
|
3926
|
+
defaultProps: {
|
|
3927
|
+
label: "Tab"
|
|
3928
|
+
},
|
|
3929
|
+
defaultChildren: [{ type: "paragraph", props: { text: "Tab content." } }],
|
|
3930
|
+
propFields: [{ name: "label", label: "Tab Label", type: "string", defaultValue: "Tab" }],
|
|
3931
|
+
traits: [idTrait()],
|
|
3932
|
+
defaultStyles: {
|
|
3933
|
+
base: {
|
|
3934
|
+
paddingTop: "16px"
|
|
3935
|
+
}
|
|
3936
|
+
}
|
|
3937
|
+
};
|
|
3938
|
+
|
|
3939
|
+
// src/definitions/conversion/carousel.ts
|
|
3940
|
+
var import_schema27 = require("@kubuild/schema");
|
|
3941
|
+
var carouselDefinition = {
|
|
3942
|
+
type: "carousel",
|
|
3943
|
+
label: "Carousel",
|
|
3944
|
+
category: "interactive",
|
|
3945
|
+
icon: "carousel",
|
|
3946
|
+
description: "Slider for product galleries and testimonials; each child is a slide.",
|
|
3947
|
+
acceptsChildren: true,
|
|
3948
|
+
allowedChildren: ["*"],
|
|
3949
|
+
defaultProps: {
|
|
3950
|
+
autoplay: false,
|
|
3951
|
+
interval: 5e3,
|
|
3952
|
+
loop: true,
|
|
3953
|
+
showDots: true,
|
|
3954
|
+
showArrows: true
|
|
3955
|
+
},
|
|
3956
|
+
defaultChildren: [
|
|
3957
|
+
{ type: "container", children: [{ type: "paragraph", props: { text: "Slide 1" } }] },
|
|
3958
|
+
{ type: "container", children: [{ type: "paragraph", props: { text: "Slide 2" } }] },
|
|
3959
|
+
{ type: "container", children: [{ type: "paragraph", props: { text: "Slide 3" } }] }
|
|
3960
|
+
],
|
|
3961
|
+
propFields: [
|
|
3962
|
+
{ name: "autoplay", label: "Autoplay", type: "boolean", defaultValue: false },
|
|
3963
|
+
{ name: "interval", label: "Autoplay Interval (ms)", type: "number", defaultValue: 5e3 },
|
|
3964
|
+
{ name: "loop", label: "Loop", type: "boolean", defaultValue: true },
|
|
3965
|
+
{ name: "showDots", label: "Show Dots", type: "boolean", defaultValue: true },
|
|
3966
|
+
{ name: "showArrows", label: "Show Arrows", type: "boolean", defaultValue: true }
|
|
3967
|
+
],
|
|
3968
|
+
traits: [
|
|
3969
|
+
idTrait(),
|
|
3970
|
+
ariaLabelTrait({ description: 'Accessible name for the carousel, e.g. "Testimonials".' })
|
|
3971
|
+
],
|
|
3972
|
+
defaultStyles: {
|
|
3973
|
+
base: {
|
|
3974
|
+
position: "relative",
|
|
3975
|
+
width: "100%",
|
|
3976
|
+
overflow: "hidden"
|
|
3977
|
+
}
|
|
3978
|
+
},
|
|
3979
|
+
validateProps: (props) => {
|
|
3980
|
+
const errors = [];
|
|
3981
|
+
const interval = props.interval;
|
|
3982
|
+
if (interval !== void 0 && !(0, import_schema27.isVariableBinding)(interval) && (typeof interval !== "number" || !(interval > 0))) {
|
|
3983
|
+
errors.push('Carousel "interval" must be a positive number of milliseconds.');
|
|
3984
|
+
}
|
|
3985
|
+
return errors;
|
|
3986
|
+
}
|
|
3987
|
+
};
|
|
3988
|
+
|
|
3989
|
+
// src/definitions/conversion/rating.ts
|
|
3990
|
+
var import_schema28 = require("@kubuild/schema");
|
|
3991
|
+
var ratingDefinition = {
|
|
3992
|
+
type: "rating",
|
|
3993
|
+
label: "Rating",
|
|
3994
|
+
category: "media",
|
|
3995
|
+
icon: "star",
|
|
3996
|
+
description: "Read-only star rating with half-star support.",
|
|
3997
|
+
acceptsChildren: false,
|
|
3998
|
+
defaultProps: {
|
|
3999
|
+
value: 5,
|
|
4000
|
+
max: 5,
|
|
4001
|
+
size: 20,
|
|
4002
|
+
color: "#f59e0b",
|
|
4003
|
+
emptyColor: "#e2e8f0",
|
|
4004
|
+
labelTemplate: "{value} out of {max}"
|
|
4005
|
+
},
|
|
4006
|
+
propFields: [
|
|
4007
|
+
{
|
|
4008
|
+
name: "value",
|
|
4009
|
+
label: "Value",
|
|
4010
|
+
type: "number",
|
|
4011
|
+
defaultValue: 5,
|
|
4012
|
+
description: "Rounded to the nearest half star."
|
|
4013
|
+
},
|
|
4014
|
+
{ name: "max", label: "Max Stars", type: "number", defaultValue: 5 },
|
|
4015
|
+
{ name: "size", label: "Star Size (px)", type: "number", defaultValue: 20 },
|
|
4016
|
+
{ name: "color", label: "Color", type: "color", defaultValue: "#f59e0b" },
|
|
4017
|
+
{ name: "emptyColor", label: "Empty Color", type: "color", defaultValue: "#e2e8f0" },
|
|
4018
|
+
{
|
|
4019
|
+
name: "labelTemplate",
|
|
4020
|
+
label: "Accessible Label",
|
|
4021
|
+
type: "string",
|
|
4022
|
+
defaultValue: "{value} out of {max}",
|
|
4023
|
+
description: 'Screen reader text; {value} and {max} are replaced (e.g. "{value} dari {max}").'
|
|
4024
|
+
}
|
|
4025
|
+
],
|
|
4026
|
+
traits: [idTrait()],
|
|
4027
|
+
defaultStyles: {
|
|
4028
|
+
base: {
|
|
4029
|
+
display: "inline-flex",
|
|
4030
|
+
alignItems: "center",
|
|
4031
|
+
gap: "2px"
|
|
4032
|
+
}
|
|
4033
|
+
},
|
|
4034
|
+
validateProps: (props) => {
|
|
4035
|
+
const errors = [];
|
|
4036
|
+
for (const name of ["value", "max", "size"]) {
|
|
4037
|
+
const v = props[name];
|
|
4038
|
+
if (v !== void 0 && !(0, import_schema28.isVariableBinding)(v) && (typeof v !== "number" || !Number.isFinite(v) || v < 0)) {
|
|
4039
|
+
errors.push(`Rating "${name}" must be a non-negative number.`);
|
|
4040
|
+
}
|
|
4041
|
+
}
|
|
4042
|
+
return errors;
|
|
4043
|
+
}
|
|
4044
|
+
};
|
|
4045
|
+
|
|
4046
|
+
// src/definitions/conversion/divider.ts
|
|
4047
|
+
var import_schema29 = require("@kubuild/schema");
|
|
4048
|
+
var dividerDefinition = {
|
|
4049
|
+
type: "divider",
|
|
4050
|
+
label: "Divider",
|
|
4051
|
+
category: "layout",
|
|
4052
|
+
icon: "divider",
|
|
4053
|
+
description: "Horizontal rule (solid/dashed/dotted) with an optional centered label.",
|
|
4054
|
+
acceptsChildren: false,
|
|
4055
|
+
defaultProps: {
|
|
4056
|
+
lineStyle: "solid",
|
|
4057
|
+
thickness: 1,
|
|
4058
|
+
color: "#e2e8f0",
|
|
4059
|
+
label: ""
|
|
4060
|
+
},
|
|
4061
|
+
propFields: [
|
|
4062
|
+
{
|
|
4063
|
+
name: "lineStyle",
|
|
4064
|
+
label: "Line Style",
|
|
4065
|
+
type: "select",
|
|
4066
|
+
defaultValue: "solid",
|
|
4067
|
+
options: [
|
|
4068
|
+
{ label: "Solid", value: "solid" },
|
|
4069
|
+
{ label: "Dashed", value: "dashed" },
|
|
4070
|
+
{ label: "Dotted", value: "dotted" }
|
|
4071
|
+
]
|
|
4072
|
+
},
|
|
4073
|
+
{ name: "thickness", label: "Thickness (px)", type: "number", defaultValue: 1 },
|
|
4074
|
+
{ name: "color", label: "Color", type: "color", defaultValue: "#e2e8f0" },
|
|
4075
|
+
{
|
|
4076
|
+
name: "label",
|
|
4077
|
+
label: "Center Label",
|
|
4078
|
+
type: "string",
|
|
4079
|
+
defaultValue: "",
|
|
4080
|
+
description: 'Optional text in the middle of the line, e.g. "OR".'
|
|
4081
|
+
}
|
|
4082
|
+
],
|
|
4083
|
+
traits: [idTrait()],
|
|
4084
|
+
defaultStyles: {
|
|
4085
|
+
base: {
|
|
4086
|
+
width: "100%",
|
|
4087
|
+
marginTop: "16px",
|
|
4088
|
+
marginBottom: "16px"
|
|
4089
|
+
}
|
|
4090
|
+
},
|
|
4091
|
+
validateProps: (props) => {
|
|
4092
|
+
const v = props.lineStyle;
|
|
4093
|
+
if (v !== void 0 && !(0, import_schema29.isVariableBinding)(v) && !["solid", "dashed", "dotted"].includes(v)) {
|
|
4094
|
+
return ['Divider "lineStyle" must be one of: solid, dashed, dotted.'];
|
|
4095
|
+
}
|
|
4096
|
+
return [];
|
|
4097
|
+
}
|
|
4098
|
+
};
|
|
4099
|
+
var spacerDefinition = {
|
|
4100
|
+
type: "spacer",
|
|
4101
|
+
label: "Spacer",
|
|
4102
|
+
category: "layout",
|
|
4103
|
+
icon: "dimension",
|
|
4104
|
+
description: "Empty vertical space; height is responsive per breakpoint.",
|
|
4105
|
+
acceptsChildren: false,
|
|
4106
|
+
defaultProps: {},
|
|
4107
|
+
traits: [idTrait()],
|
|
4108
|
+
defaultStyles: {
|
|
4109
|
+
base: {
|
|
4110
|
+
width: "100%",
|
|
4111
|
+
height: "48px"
|
|
4112
|
+
},
|
|
4113
|
+
tablet: {
|
|
4114
|
+
height: "32px"
|
|
4115
|
+
},
|
|
4116
|
+
mobile: {
|
|
4117
|
+
height: "24px"
|
|
4118
|
+
}
|
|
4119
|
+
}
|
|
4120
|
+
};
|
|
4121
|
+
|
|
4122
|
+
// src/definitions/index.ts
|
|
4123
|
+
var coreComponentDefinitions = [
|
|
4124
|
+
pageDefinition,
|
|
4125
|
+
sectionDefinition,
|
|
4126
|
+
containerDefinition,
|
|
4127
|
+
columnsDefinition,
|
|
4128
|
+
flexDefinition,
|
|
4129
|
+
gridDefinition,
|
|
4130
|
+
headingDefinition,
|
|
4131
|
+
textDefinition,
|
|
4132
|
+
paragraphDefinition,
|
|
4133
|
+
linkDefinition,
|
|
4134
|
+
blockquoteDefinition,
|
|
4135
|
+
badgeDefinition,
|
|
4136
|
+
codeBlockDefinition,
|
|
4137
|
+
imageDefinition,
|
|
4138
|
+
videoDefinition,
|
|
4139
|
+
iconDefinition,
|
|
4140
|
+
htmlEmbedDefinition,
|
|
4141
|
+
buttonDefinition,
|
|
4142
|
+
buttonSubmitDefinition,
|
|
4143
|
+
formDefinition,
|
|
4144
|
+
inputDefinition,
|
|
4145
|
+
textareaDefinition,
|
|
4146
|
+
selectDefinition,
|
|
4147
|
+
checkboxDefinition,
|
|
4148
|
+
switchDefinition,
|
|
4149
|
+
radioGroupDefinition,
|
|
4150
|
+
radioDefinition,
|
|
4151
|
+
radioItemDefinition,
|
|
4152
|
+
fileUploadDefinition,
|
|
4153
|
+
collectionDefinition,
|
|
4154
|
+
listDefinition,
|
|
4155
|
+
listItemDefinition,
|
|
4156
|
+
tableDefinition,
|
|
4157
|
+
tableRowDefinition,
|
|
4158
|
+
tableCellDefinition,
|
|
4159
|
+
modalDefinition,
|
|
4160
|
+
drawerDefinition,
|
|
4161
|
+
collapsibleDefinition,
|
|
4162
|
+
// Conversion components (Epic 60)
|
|
4163
|
+
countdownDefinition,
|
|
4164
|
+
accordionDefinition,
|
|
4165
|
+
accordionItemDefinition,
|
|
4166
|
+
tabsDefinition,
|
|
4167
|
+
tabPanelDefinition,
|
|
4168
|
+
carouselDefinition,
|
|
4169
|
+
ratingDefinition,
|
|
4170
|
+
dividerDefinition,
|
|
4171
|
+
spacerDefinition
|
|
4172
|
+
];
|
|
4173
|
+
function createDefaultComponentRegistry() {
|
|
4174
|
+
const registry = new ComponentRegistry();
|
|
4175
|
+
for (const def of coreComponentDefinitions) {
|
|
4176
|
+
registry.register(def);
|
|
4177
|
+
}
|
|
4178
|
+
return registry;
|
|
4179
|
+
}
|
|
4180
|
+
|
|
4181
|
+
// src/requirements.ts
|
|
4182
|
+
function extractComponentRequirements(root, registry) {
|
|
4183
|
+
const requiredComponents = /* @__PURE__ */ new Set();
|
|
4184
|
+
const requiredCapabilities = /* @__PURE__ */ new Set();
|
|
4185
|
+
const visit = (node) => {
|
|
4186
|
+
const definition = registry.get(node.type);
|
|
4187
|
+
if (definition?.category === "custom") {
|
|
4188
|
+
requiredComponents.add(node.type);
|
|
4189
|
+
}
|
|
4190
|
+
for (const capability of definition?.capabilities ?? []) {
|
|
4191
|
+
requiredCapabilities.add(capability);
|
|
4192
|
+
}
|
|
4193
|
+
node.children?.forEach(visit);
|
|
4194
|
+
};
|
|
4195
|
+
visit(root);
|
|
4196
|
+
return {
|
|
4197
|
+
requiredComponents: Array.from(requiredComponents),
|
|
4198
|
+
requiredCapabilities: Array.from(requiredCapabilities)
|
|
4199
|
+
};
|
|
4200
|
+
}
|
|
4201
|
+
|
|
4202
|
+
// src/prop-types.ts
|
|
3615
4203
|
function primitiveTypeForField(field) {
|
|
3616
4204
|
switch (field.type) {
|
|
3617
4205
|
case "string":
|
|
@@ -4218,7 +4806,7 @@ var UI_STARTER_BLOCKS = [
|
|
|
4218
4806
|
id: gen("paragraph"),
|
|
4219
4807
|
type: "paragraph",
|
|
4220
4808
|
props: {
|
|
4221
|
-
|
|
4809
|
+
text: "A visual builder designed for maximum craft, responsiveness, and performance."
|
|
4222
4810
|
},
|
|
4223
4811
|
styles: {
|
|
4224
4812
|
base: {
|
|
@@ -4276,7 +4864,7 @@ var UI_STARTER_BLOCKS = [
|
|
|
4276
4864
|
{
|
|
4277
4865
|
id: gen("badge"),
|
|
4278
4866
|
type: "badge",
|
|
4279
|
-
props: {
|
|
4867
|
+
props: { text: "PRO FEATURE", variant: "primary" },
|
|
4280
4868
|
styles: { base: { marginBottom: "12px", display: "inline-block" } }
|
|
4281
4869
|
},
|
|
4282
4870
|
{
|
|
@@ -4291,7 +4879,7 @@ var UI_STARTER_BLOCKS = [
|
|
|
4291
4879
|
id: gen("paragraph"),
|
|
4292
4880
|
type: "paragraph",
|
|
4293
4881
|
props: {
|
|
4294
|
-
|
|
4882
|
+
text: "Engineered for sub-millisecond render updates and zero runtime overhead."
|
|
4295
4883
|
},
|
|
4296
4884
|
styles: { base: { fontSize: "14px", color: "#64748b", lineHeight: "1.5" } }
|
|
4297
4885
|
}
|
|
@@ -4355,7 +4943,7 @@ var UI_STARTER_BLOCKS = [
|
|
|
4355
4943
|
{
|
|
4356
4944
|
id: gen("paragraph"),
|
|
4357
4945
|
type: "paragraph",
|
|
4358
|
-
props: {
|
|
4946
|
+
props: { text: "High dynamic range gradients crafted for modern presentations." },
|
|
4359
4947
|
styles: { base: { fontSize: "13px", color: "#64748b", lineHeight: "1.4" } }
|
|
4360
4948
|
}
|
|
4361
4949
|
]
|
|
@@ -4389,7 +4977,7 @@ var UI_STARTER_BLOCKS = [
|
|
|
4389
4977
|
{
|
|
4390
4978
|
id: gen("badge"),
|
|
4391
4979
|
type: "badge",
|
|
4392
|
-
props: {
|
|
4980
|
+
props: { text: "MOST POPULAR", variant: "primary" },
|
|
4393
4981
|
styles: { base: { marginBottom: "12px", display: "inline-block" } }
|
|
4394
4982
|
},
|
|
4395
4983
|
{
|
|
@@ -4409,7 +4997,7 @@ var UI_STARTER_BLOCKS = [
|
|
|
4409
4997
|
{
|
|
4410
4998
|
id: gen("paragraph"),
|
|
4411
4999
|
type: "paragraph",
|
|
4412
|
-
props: {
|
|
5000
|
+
props: { text: "Includes unlimited pages, custom domains, and team collaboration." },
|
|
4413
5001
|
styles: { base: { fontSize: "14px", color: "#64748b", marginBottom: "24px" } }
|
|
4414
5002
|
},
|
|
4415
5003
|
{
|
|
@@ -4466,7 +5054,7 @@ var UI_STARTER_BLOCKS = [
|
|
|
4466
5054
|
{
|
|
4467
5055
|
id: gen("paragraph"),
|
|
4468
5056
|
type: "paragraph",
|
|
4469
|
-
props: {
|
|
5057
|
+
props: { text: "Start building with zero installation and instant live preview." },
|
|
4470
5058
|
styles: {
|
|
4471
5059
|
base: { fontSize: "16px", color: "#94a3b8", marginBottom: "24px", maxWidth: "600px", margin: "0 auto 24px auto" }
|
|
4472
5060
|
}
|
|
@@ -4549,7 +5137,7 @@ var FORM_STARTER_BLOCKS = [
|
|
|
4549
5137
|
id: gen("paragraph"),
|
|
4550
5138
|
type: "paragraph",
|
|
4551
5139
|
props: {
|
|
4552
|
-
|
|
5140
|
+
text: "Have questions or need assistance? Fill out the form below and we will get back to you shortly."
|
|
4553
5141
|
},
|
|
4554
5142
|
styles: {
|
|
4555
5143
|
base: {
|
|
@@ -4807,7 +5395,7 @@ var FORM_STARTER_BLOCKS = [
|
|
|
4807
5395
|
id: gen("paragraph"),
|
|
4808
5396
|
type: "paragraph",
|
|
4809
5397
|
props: {
|
|
4810
|
-
|
|
5398
|
+
text: "Subscribe to our newsletter for weekly curated insights, updates, and best practices."
|
|
4811
5399
|
},
|
|
4812
5400
|
styles: {
|
|
4813
5401
|
base: {
|
|
@@ -4985,7 +5573,7 @@ var FORM_STARTER_BLOCKS = [
|
|
|
4985
5573
|
{
|
|
4986
5574
|
id: gen("badge"),
|
|
4987
5575
|
type: "badge",
|
|
4988
|
-
props: {
|
|
5576
|
+
props: { text: "FREE CONSULTATION", variant: "primary" },
|
|
4989
5577
|
styles: { base: { marginBottom: "12px", display: "inline-block" } }
|
|
4990
5578
|
},
|
|
4991
5579
|
{
|
|
@@ -5005,7 +5593,7 @@ var FORM_STARTER_BLOCKS = [
|
|
|
5005
5593
|
id: gen("paragraph"),
|
|
5006
5594
|
type: "paragraph",
|
|
5007
5595
|
props: {
|
|
5008
|
-
|
|
5596
|
+
text: "Share your project details with our solutions team. We will analyze your needs and provide a personalized roadmap."
|
|
5009
5597
|
},
|
|
5010
5598
|
styles: {
|
|
5011
5599
|
base: {
|
|
@@ -5246,24 +5834,618 @@ var FORM_STARTER_BLOCKS = [
|
|
|
5246
5834
|
}
|
|
5247
5835
|
];
|
|
5248
5836
|
|
|
5837
|
+
// src/blocks/sales.ts
|
|
5838
|
+
var SALES_CATEGORY = "sales";
|
|
5839
|
+
var SALES_CATEGORY_LABEL = "Sales & Conversion";
|
|
5840
|
+
function sectionShell(gen, children, sectionStyles = {}, maxWidth = "960px") {
|
|
5841
|
+
return {
|
|
5842
|
+
id: gen("section"),
|
|
5843
|
+
type: "section",
|
|
5844
|
+
styles: {
|
|
5845
|
+
...sectionStyles,
|
|
5846
|
+
base: {
|
|
5847
|
+
paddingTop: "64px",
|
|
5848
|
+
paddingBottom: "64px",
|
|
5849
|
+
paddingLeft: "24px",
|
|
5850
|
+
paddingRight: "24px",
|
|
5851
|
+
width: "100%",
|
|
5852
|
+
...sectionStyles.base ?? {}
|
|
5853
|
+
},
|
|
5854
|
+
mobile: {
|
|
5855
|
+
paddingTop: "40px",
|
|
5856
|
+
paddingBottom: "40px",
|
|
5857
|
+
paddingLeft: "16px",
|
|
5858
|
+
paddingRight: "16px",
|
|
5859
|
+
...sectionStyles.mobile ?? {}
|
|
5860
|
+
}
|
|
5861
|
+
},
|
|
5862
|
+
children: [
|
|
5863
|
+
{
|
|
5864
|
+
id: gen("container"),
|
|
5865
|
+
type: "container",
|
|
5866
|
+
props: { tag: "div" },
|
|
5867
|
+
styles: {
|
|
5868
|
+
base: {
|
|
5869
|
+
maxWidth,
|
|
5870
|
+
margin: "0 auto",
|
|
5871
|
+
width: "100%",
|
|
5872
|
+
display: "flex",
|
|
5873
|
+
flexDirection: "column",
|
|
5874
|
+
gap: "24px"
|
|
5875
|
+
}
|
|
5876
|
+
},
|
|
5877
|
+
children
|
|
5878
|
+
}
|
|
5879
|
+
]
|
|
5880
|
+
};
|
|
5881
|
+
}
|
|
5882
|
+
function sectionHeading(gen, text, subtitle, color = "#0f172a") {
|
|
5883
|
+
const nodes = [
|
|
5884
|
+
{
|
|
5885
|
+
id: gen("heading"),
|
|
5886
|
+
type: "heading",
|
|
5887
|
+
props: { text, level: 2 },
|
|
5888
|
+
styles: {
|
|
5889
|
+
base: { fontSize: "32px", fontWeight: "800", color, textAlign: "center", margin: "0" },
|
|
5890
|
+
mobile: { fontSize: "26px" }
|
|
5891
|
+
}
|
|
5892
|
+
}
|
|
5893
|
+
];
|
|
5894
|
+
if (subtitle) {
|
|
5895
|
+
nodes.push({
|
|
5896
|
+
id: gen("paragraph"),
|
|
5897
|
+
type: "paragraph",
|
|
5898
|
+
props: { text: subtitle },
|
|
5899
|
+
styles: { base: { fontSize: "16px", color: "#64748b", textAlign: "center", margin: "0" } }
|
|
5900
|
+
});
|
|
5901
|
+
}
|
|
5902
|
+
return nodes;
|
|
5903
|
+
}
|
|
5904
|
+
function faqItem(gen, question, answer) {
|
|
5905
|
+
return {
|
|
5906
|
+
id: gen("accordion-item"),
|
|
5907
|
+
type: "accordion-item",
|
|
5908
|
+
props: { title: question },
|
|
5909
|
+
styles: { base: { borderBottom: "1px solid #e2e8f0" } },
|
|
5910
|
+
children: [
|
|
5911
|
+
{
|
|
5912
|
+
id: gen("paragraph"),
|
|
5913
|
+
type: "paragraph",
|
|
5914
|
+
props: { text: answer },
|
|
5915
|
+
styles: { base: { fontSize: "15px", color: "#475569", margin: "0", lineHeight: "1.6" } }
|
|
5916
|
+
}
|
|
5917
|
+
]
|
|
5918
|
+
};
|
|
5919
|
+
}
|
|
5920
|
+
function testimonialSlide(gen, quote, name, role, rating) {
|
|
5921
|
+
return {
|
|
5922
|
+
id: gen("flex"),
|
|
5923
|
+
type: "flex",
|
|
5924
|
+
styles: {
|
|
5925
|
+
base: {
|
|
5926
|
+
display: "flex",
|
|
5927
|
+
flexDirection: "column",
|
|
5928
|
+
alignItems: "center",
|
|
5929
|
+
gap: "16px",
|
|
5930
|
+
padding: "32px 48px",
|
|
5931
|
+
textAlign: "center"
|
|
5932
|
+
},
|
|
5933
|
+
mobile: { padding: "24px 40px" }
|
|
5934
|
+
},
|
|
5935
|
+
children: [
|
|
5936
|
+
{
|
|
5937
|
+
id: gen("rating"),
|
|
5938
|
+
type: "rating",
|
|
5939
|
+
props: { value: rating, max: 5, size: 20, color: "#f59e0b" }
|
|
5940
|
+
},
|
|
5941
|
+
{
|
|
5942
|
+
id: gen("blockquote"),
|
|
5943
|
+
type: "blockquote",
|
|
5944
|
+
props: { text: quote },
|
|
5945
|
+
styles: {
|
|
5946
|
+
base: {
|
|
5947
|
+
fontSize: "18px",
|
|
5948
|
+
color: "#0f172a",
|
|
5949
|
+
fontStyle: "italic",
|
|
5950
|
+
margin: "0",
|
|
5951
|
+
lineHeight: "1.6"
|
|
5952
|
+
}
|
|
5953
|
+
}
|
|
5954
|
+
},
|
|
5955
|
+
{
|
|
5956
|
+
id: gen("text"),
|
|
5957
|
+
type: "text",
|
|
5958
|
+
props: { text: `${name} \u2014 ${role}` },
|
|
5959
|
+
styles: { base: { fontSize: "14px", fontWeight: "600", color: "#64748b" } }
|
|
5960
|
+
}
|
|
5961
|
+
]
|
|
5962
|
+
};
|
|
5963
|
+
}
|
|
5964
|
+
function badgeItem(gen, iconName, label) {
|
|
5965
|
+
return {
|
|
5966
|
+
id: gen("flex"),
|
|
5967
|
+
type: "flex",
|
|
5968
|
+
styles: {
|
|
5969
|
+
base: {
|
|
5970
|
+
display: "flex",
|
|
5971
|
+
flexDirection: "column",
|
|
5972
|
+
alignItems: "center",
|
|
5973
|
+
gap: "8px",
|
|
5974
|
+
padding: "16px",
|
|
5975
|
+
textAlign: "center"
|
|
5976
|
+
}
|
|
5977
|
+
},
|
|
5978
|
+
children: [
|
|
5979
|
+
{
|
|
5980
|
+
id: gen("icon"),
|
|
5981
|
+
type: "icon",
|
|
5982
|
+
props: { name: iconName, size: 28, color: "#16a34a", ariaLabel: label }
|
|
5983
|
+
},
|
|
5984
|
+
{
|
|
5985
|
+
id: gen("text"),
|
|
5986
|
+
type: "text",
|
|
5987
|
+
props: { text: label },
|
|
5988
|
+
styles: { base: { fontSize: "14px", fontWeight: "600", color: "#334155" } }
|
|
5989
|
+
}
|
|
5990
|
+
]
|
|
5991
|
+
};
|
|
5992
|
+
}
|
|
5993
|
+
function planCard(gen, name, price, features, highlighted) {
|
|
5994
|
+
return {
|
|
5995
|
+
id: gen("container"),
|
|
5996
|
+
type: "container",
|
|
5997
|
+
props: { tag: "div" },
|
|
5998
|
+
styles: {
|
|
5999
|
+
base: {
|
|
6000
|
+
display: "flex",
|
|
6001
|
+
flexDirection: "column",
|
|
6002
|
+
gap: "12px",
|
|
6003
|
+
padding: "28px 24px",
|
|
6004
|
+
backgroundColor: "#ffffff",
|
|
6005
|
+
borderRadius: "16px",
|
|
6006
|
+
border: highlighted ? "2px solid #2563eb" : "1px solid #e2e8f0"
|
|
6007
|
+
}
|
|
6008
|
+
},
|
|
6009
|
+
children: [
|
|
6010
|
+
{
|
|
6011
|
+
id: gen("heading"),
|
|
6012
|
+
type: "heading",
|
|
6013
|
+
props: { text: name, level: 3 },
|
|
6014
|
+
styles: { base: { fontSize: "20px", fontWeight: "700", color: "#0f172a", margin: "0" } }
|
|
6015
|
+
},
|
|
6016
|
+
{
|
|
6017
|
+
id: gen("heading"),
|
|
6018
|
+
type: "heading",
|
|
6019
|
+
props: { text: price, level: 4 },
|
|
6020
|
+
styles: { base: { fontSize: "32px", fontWeight: "800", color: "#2563eb", margin: "0" } }
|
|
6021
|
+
},
|
|
6022
|
+
{
|
|
6023
|
+
id: gen("list"),
|
|
6024
|
+
type: "list",
|
|
6025
|
+
props: { tag: "ul", listStyleType: "disc" },
|
|
6026
|
+
styles: { base: { fontSize: "14px", color: "#475569", paddingLeft: "20px", margin: "0" } },
|
|
6027
|
+
children: features.map((feature) => ({
|
|
6028
|
+
id: gen("list-item"),
|
|
6029
|
+
type: "list-item",
|
|
6030
|
+
props: { text: feature }
|
|
6031
|
+
}))
|
|
6032
|
+
},
|
|
6033
|
+
{
|
|
6034
|
+
id: gen("button"),
|
|
6035
|
+
type: "button",
|
|
6036
|
+
props: {
|
|
6037
|
+
label: `Choose ${name}`,
|
|
6038
|
+
href: "#checkout",
|
|
6039
|
+
variant: highlighted ? "primary" : "secondary"
|
|
6040
|
+
},
|
|
6041
|
+
styles: {
|
|
6042
|
+
base: {
|
|
6043
|
+
width: "100%",
|
|
6044
|
+
padding: "12px",
|
|
6045
|
+
borderRadius: "8px",
|
|
6046
|
+
fontWeight: "600",
|
|
6047
|
+
marginTop: "8px"
|
|
6048
|
+
}
|
|
6049
|
+
}
|
|
6050
|
+
}
|
|
6051
|
+
]
|
|
6052
|
+
};
|
|
6053
|
+
}
|
|
6054
|
+
function planColumns(gen, plans) {
|
|
6055
|
+
return {
|
|
6056
|
+
id: gen("columns"),
|
|
6057
|
+
type: "columns",
|
|
6058
|
+
props: { columns: plans.length, gap: "16px" },
|
|
6059
|
+
styles: {
|
|
6060
|
+
base: {
|
|
6061
|
+
display: "grid",
|
|
6062
|
+
gridTemplateColumns: `repeat(${plans.length}, minmax(0, 1fr))`,
|
|
6063
|
+
gap: "16px"
|
|
6064
|
+
},
|
|
6065
|
+
mobile: { gridTemplateColumns: "repeat(1, minmax(0, 1fr))" }
|
|
6066
|
+
},
|
|
6067
|
+
children: plans.map(
|
|
6068
|
+
([name, price, features, highlighted]) => planCard(gen, name, price, features, highlighted)
|
|
6069
|
+
)
|
|
6070
|
+
};
|
|
6071
|
+
}
|
|
6072
|
+
var SALES_STARTER_BLOCKS = [
|
|
6073
|
+
{
|
|
6074
|
+
id: "sales-faq",
|
|
6075
|
+
name: "FAQ",
|
|
6076
|
+
category: SALES_CATEGORY,
|
|
6077
|
+
categoryLabel: SALES_CATEGORY_LABEL,
|
|
6078
|
+
description: "Frequently asked questions accordion with FAQPage structured data for SEO",
|
|
6079
|
+
icon: "chevron-down",
|
|
6080
|
+
createNodeTree: (gen = defaultGenId) => sectionShell(
|
|
6081
|
+
gen,
|
|
6082
|
+
[
|
|
6083
|
+
...sectionHeading(
|
|
6084
|
+
gen,
|
|
6085
|
+
"Frequently Asked Questions",
|
|
6086
|
+
"Everything you need to know before you buy."
|
|
6087
|
+
),
|
|
6088
|
+
{
|
|
6089
|
+
id: gen("accordion"),
|
|
6090
|
+
type: "accordion",
|
|
6091
|
+
props: { allowMultiple: false, defaultOpenIndex: 0, icon: "chevron", faqSchema: true },
|
|
6092
|
+
styles: {
|
|
6093
|
+
base: {
|
|
6094
|
+
display: "flex",
|
|
6095
|
+
flexDirection: "column",
|
|
6096
|
+
width: "100%",
|
|
6097
|
+
borderTop: "1px solid #e2e8f0"
|
|
6098
|
+
}
|
|
6099
|
+
},
|
|
6100
|
+
children: [
|
|
6101
|
+
faqItem(
|
|
6102
|
+
gen,
|
|
6103
|
+
"What exactly do I get?",
|
|
6104
|
+
"Instant access to the full program, all bonuses, and every future update."
|
|
6105
|
+
),
|
|
6106
|
+
faqItem(
|
|
6107
|
+
gen,
|
|
6108
|
+
"How long do I have access?",
|
|
6109
|
+
"Lifetime access \u2014 learn at your own pace, on any device."
|
|
6110
|
+
),
|
|
6111
|
+
faqItem(
|
|
6112
|
+
gen,
|
|
6113
|
+
"Is there a money-back guarantee?",
|
|
6114
|
+
"Yes. If you are not satisfied within 30 days, we refund you in full."
|
|
6115
|
+
),
|
|
6116
|
+
faqItem(
|
|
6117
|
+
gen,
|
|
6118
|
+
"How do I pay?",
|
|
6119
|
+
"We accept cards, bank transfer, and e-wallets through a secure checkout."
|
|
6120
|
+
)
|
|
6121
|
+
]
|
|
6122
|
+
}
|
|
6123
|
+
],
|
|
6124
|
+
{},
|
|
6125
|
+
"760px"
|
|
6126
|
+
)
|
|
6127
|
+
},
|
|
6128
|
+
{
|
|
6129
|
+
id: "sales-testimonials",
|
|
6130
|
+
name: "Testimonials Carousel",
|
|
6131
|
+
category: SALES_CATEGORY,
|
|
6132
|
+
categoryLabel: SALES_CATEGORY_LABEL,
|
|
6133
|
+
description: "Customer testimonial slider with star ratings",
|
|
6134
|
+
icon: "star",
|
|
6135
|
+
createNodeTree: (gen = defaultGenId) => sectionShell(
|
|
6136
|
+
gen,
|
|
6137
|
+
[
|
|
6138
|
+
...sectionHeading(gen, "What Our Customers Say"),
|
|
6139
|
+
{
|
|
6140
|
+
id: gen("carousel"),
|
|
6141
|
+
type: "carousel",
|
|
6142
|
+
props: {
|
|
6143
|
+
autoplay: true,
|
|
6144
|
+
interval: 6e3,
|
|
6145
|
+
loop: true,
|
|
6146
|
+
showDots: true,
|
|
6147
|
+
showArrows: true,
|
|
6148
|
+
ariaLabel: "Testimonials"
|
|
6149
|
+
},
|
|
6150
|
+
styles: {
|
|
6151
|
+
base: {
|
|
6152
|
+
position: "relative",
|
|
6153
|
+
width: "100%",
|
|
6154
|
+
overflow: "hidden",
|
|
6155
|
+
backgroundColor: "#f8fafc",
|
|
6156
|
+
borderRadius: "16px"
|
|
6157
|
+
}
|
|
6158
|
+
},
|
|
6159
|
+
children: [
|
|
6160
|
+
testimonialSlide(
|
|
6161
|
+
gen,
|
|
6162
|
+
"This completely changed how I run my business. Worth every cent.",
|
|
6163
|
+
"Sarah K.",
|
|
6164
|
+
"Founder",
|
|
6165
|
+
5
|
|
6166
|
+
),
|
|
6167
|
+
testimonialSlide(
|
|
6168
|
+
gen,
|
|
6169
|
+
"Clear, practical, and easy to follow. I saw results in the first week.",
|
|
6170
|
+
"Budi S.",
|
|
6171
|
+
"Marketing Lead",
|
|
6172
|
+
4.5
|
|
6173
|
+
),
|
|
6174
|
+
testimonialSlide(
|
|
6175
|
+
gen,
|
|
6176
|
+
"The support team is amazing and the material is top-notch.",
|
|
6177
|
+
"Aisha R.",
|
|
6178
|
+
"Freelancer",
|
|
6179
|
+
5
|
|
6180
|
+
)
|
|
6181
|
+
]
|
|
6182
|
+
}
|
|
6183
|
+
],
|
|
6184
|
+
{ base: { backgroundColor: "#ffffff" } },
|
|
6185
|
+
"760px"
|
|
6186
|
+
)
|
|
6187
|
+
},
|
|
6188
|
+
{
|
|
6189
|
+
id: "sales-countdown-banner",
|
|
6190
|
+
name: "Countdown Banner",
|
|
6191
|
+
category: SALES_CATEGORY,
|
|
6192
|
+
categoryLabel: SALES_CATEGORY_LABEL,
|
|
6193
|
+
description: "Limited-time offer banner with an evergreen countdown timer and CTA",
|
|
6194
|
+
icon: "clock",
|
|
6195
|
+
createNodeTree: (gen = defaultGenId) => sectionShell(
|
|
6196
|
+
gen,
|
|
6197
|
+
[
|
|
6198
|
+
...sectionHeading(gen, "Special Launch Price Ends Soon", void 0, "#ffffff"),
|
|
6199
|
+
{
|
|
6200
|
+
id: gen("countdown"),
|
|
6201
|
+
type: "countdown",
|
|
6202
|
+
props: {
|
|
6203
|
+
mode: "evergreen",
|
|
6204
|
+
durationMinutes: 30,
|
|
6205
|
+
format: "d h m s",
|
|
6206
|
+
labelDays: "Days",
|
|
6207
|
+
labelHours: "Hours",
|
|
6208
|
+
labelMinutes: "Minutes",
|
|
6209
|
+
labelSeconds: "Seconds",
|
|
6210
|
+
expireBehavior: "text",
|
|
6211
|
+
expiredText: "The special price has ended.",
|
|
6212
|
+
storage: "session",
|
|
6213
|
+
ariaLabel: "Offer ends in"
|
|
6214
|
+
},
|
|
6215
|
+
styles: {
|
|
6216
|
+
base: {
|
|
6217
|
+
display: "flex",
|
|
6218
|
+
alignItems: "center",
|
|
6219
|
+
justifyContent: "center",
|
|
6220
|
+
gap: "16px",
|
|
6221
|
+
fontSize: "36px",
|
|
6222
|
+
fontWeight: "800",
|
|
6223
|
+
color: "#ffffff",
|
|
6224
|
+
fontVariantNumeric: "tabular-nums"
|
|
6225
|
+
},
|
|
6226
|
+
mobile: { fontSize: "28px", gap: "8px" }
|
|
6227
|
+
}
|
|
6228
|
+
},
|
|
6229
|
+
{
|
|
6230
|
+
id: gen("button"),
|
|
6231
|
+
type: "button",
|
|
6232
|
+
props: { label: "Claim the Offer", href: "#checkout" },
|
|
6233
|
+
styles: {
|
|
6234
|
+
base: {
|
|
6235
|
+
alignSelf: "center",
|
|
6236
|
+
backgroundColor: "#f59e0b",
|
|
6237
|
+
color: "#0f172a",
|
|
6238
|
+
padding: "14px 32px",
|
|
6239
|
+
borderRadius: "9999px",
|
|
6240
|
+
fontSize: "16px",
|
|
6241
|
+
fontWeight: "700"
|
|
6242
|
+
}
|
|
6243
|
+
}
|
|
6244
|
+
}
|
|
6245
|
+
],
|
|
6246
|
+
{ base: { backgroundColor: "#0f172a" } }
|
|
6247
|
+
)
|
|
6248
|
+
},
|
|
6249
|
+
{
|
|
6250
|
+
id: "sales-guarantee",
|
|
6251
|
+
name: "Money-Back Guarantee",
|
|
6252
|
+
category: SALES_CATEGORY,
|
|
6253
|
+
categoryLabel: SALES_CATEGORY_LABEL,
|
|
6254
|
+
description: "Risk-reversal guarantee section with shield icon",
|
|
6255
|
+
icon: "badge",
|
|
6256
|
+
createNodeTree: (gen = defaultGenId) => sectionShell(
|
|
6257
|
+
gen,
|
|
6258
|
+
[
|
|
6259
|
+
{
|
|
6260
|
+
id: gen("flex"),
|
|
6261
|
+
type: "flex",
|
|
6262
|
+
styles: {
|
|
6263
|
+
base: {
|
|
6264
|
+
display: "flex",
|
|
6265
|
+
flexDirection: "row",
|
|
6266
|
+
alignItems: "center",
|
|
6267
|
+
gap: "24px",
|
|
6268
|
+
padding: "32px",
|
|
6269
|
+
backgroundColor: "#f0fdf4",
|
|
6270
|
+
border: "2px dashed #16a34a",
|
|
6271
|
+
borderRadius: "16px"
|
|
6272
|
+
},
|
|
6273
|
+
mobile: { flexDirection: "column", textAlign: "center", padding: "24px" }
|
|
6274
|
+
},
|
|
6275
|
+
children: [
|
|
6276
|
+
{
|
|
6277
|
+
id: gen("icon"),
|
|
6278
|
+
type: "icon",
|
|
6279
|
+
props: { name: "shield-check", size: 64, color: "#16a34a", ariaLabel: "Guarantee" }
|
|
6280
|
+
},
|
|
6281
|
+
{
|
|
6282
|
+
id: gen("flex"),
|
|
6283
|
+
type: "flex",
|
|
6284
|
+
styles: { base: { display: "flex", flexDirection: "column", gap: "8px" } },
|
|
6285
|
+
children: [
|
|
6286
|
+
{
|
|
6287
|
+
id: gen("heading"),
|
|
6288
|
+
type: "heading",
|
|
6289
|
+
props: { text: "30-Day Money-Back Guarantee", level: 3 },
|
|
6290
|
+
styles: {
|
|
6291
|
+
base: { fontSize: "22px", fontWeight: "800", color: "#14532d", margin: "0" }
|
|
6292
|
+
}
|
|
6293
|
+
},
|
|
6294
|
+
{
|
|
6295
|
+
id: gen("paragraph"),
|
|
6296
|
+
type: "paragraph",
|
|
6297
|
+
props: {
|
|
6298
|
+
text: "Try it risk-free. If it is not right for you, email us within 30 days and we will refund every cent \u2014 no questions asked."
|
|
6299
|
+
},
|
|
6300
|
+
styles: {
|
|
6301
|
+
base: { fontSize: "15px", color: "#166534", margin: "0", lineHeight: "1.6" }
|
|
6302
|
+
}
|
|
6303
|
+
}
|
|
6304
|
+
]
|
|
6305
|
+
}
|
|
6306
|
+
]
|
|
6307
|
+
}
|
|
6308
|
+
],
|
|
6309
|
+
{},
|
|
6310
|
+
"760px"
|
|
6311
|
+
)
|
|
6312
|
+
},
|
|
6313
|
+
{
|
|
6314
|
+
id: "sales-trust-badges",
|
|
6315
|
+
name: "Trust Badges",
|
|
6316
|
+
category: SALES_CATEGORY,
|
|
6317
|
+
categoryLabel: SALES_CATEGORY_LABEL,
|
|
6318
|
+
description: "Row of trust signals: secure payment, guarantee, support, and delivery",
|
|
6319
|
+
icon: "grid",
|
|
6320
|
+
createNodeTree: (gen = defaultGenId) => sectionShell(
|
|
6321
|
+
gen,
|
|
6322
|
+
[
|
|
6323
|
+
{
|
|
6324
|
+
id: gen("grid"),
|
|
6325
|
+
type: "grid",
|
|
6326
|
+
styles: {
|
|
6327
|
+
base: {
|
|
6328
|
+
display: "grid",
|
|
6329
|
+
gridTemplateColumns: "repeat(4, minmax(0, 1fr))",
|
|
6330
|
+
gap: "16px"
|
|
6331
|
+
},
|
|
6332
|
+
mobile: { gridTemplateColumns: "repeat(2, minmax(0, 1fr))" }
|
|
6333
|
+
},
|
|
6334
|
+
children: [
|
|
6335
|
+
badgeItem(gen, "lock", "Secure Payment"),
|
|
6336
|
+
badgeItem(gen, "shield-check", "Money-Back Guarantee"),
|
|
6337
|
+
badgeItem(gen, "headphones", "24/7 Support"),
|
|
6338
|
+
badgeItem(gen, "zap", "Instant Access")
|
|
6339
|
+
]
|
|
6340
|
+
},
|
|
6341
|
+
{
|
|
6342
|
+
id: gen("divider"),
|
|
6343
|
+
type: "divider",
|
|
6344
|
+
props: { lineStyle: "solid", thickness: 1, color: "#e2e8f0", label: "" }
|
|
6345
|
+
},
|
|
6346
|
+
{
|
|
6347
|
+
id: gen("paragraph"),
|
|
6348
|
+
type: "paragraph",
|
|
6349
|
+
props: { text: "Trusted by 10,000+ customers." },
|
|
6350
|
+
styles: {
|
|
6351
|
+
base: { fontSize: "14px", color: "#64748b", textAlign: "center", margin: "0" }
|
|
6352
|
+
}
|
|
6353
|
+
}
|
|
6354
|
+
],
|
|
6355
|
+
{ base: { paddingTop: "32px", paddingBottom: "32px" } }
|
|
6356
|
+
)
|
|
6357
|
+
},
|
|
6358
|
+
{
|
|
6359
|
+
id: "sales-plan-comparison",
|
|
6360
|
+
name: "Plan Comparison",
|
|
6361
|
+
category: SALES_CATEGORY,
|
|
6362
|
+
categoryLabel: SALES_CATEGORY_LABEL,
|
|
6363
|
+
description: "Monthly/yearly tabs comparing pricing plans side by side",
|
|
6364
|
+
icon: "columns",
|
|
6365
|
+
createNodeTree: (gen = defaultGenId) => sectionShell(gen, [
|
|
6366
|
+
...sectionHeading(gen, "Choose Your Plan", "Switch between monthly and yearly billing."),
|
|
6367
|
+
{
|
|
6368
|
+
id: gen("tabs"),
|
|
6369
|
+
type: "tabs",
|
|
6370
|
+
props: { activeIndex: 0, ariaLabel: "Billing period" },
|
|
6371
|
+
styles: { base: { display: "flex", flexDirection: "column", width: "100%" } },
|
|
6372
|
+
children: [
|
|
6373
|
+
{
|
|
6374
|
+
id: gen("tab-panel"),
|
|
6375
|
+
type: "tab-panel",
|
|
6376
|
+
props: { label: "Monthly" },
|
|
6377
|
+
styles: { base: { paddingTop: "24px" } },
|
|
6378
|
+
children: [
|
|
6379
|
+
planColumns(gen, [
|
|
6380
|
+
["Basic", "$19 / mo", ["1 project", "Email support", "Core features"], false],
|
|
6381
|
+
[
|
|
6382
|
+
"Pro",
|
|
6383
|
+
"$49 / mo",
|
|
6384
|
+
["Unlimited projects", "Priority support", "All features"],
|
|
6385
|
+
true
|
|
6386
|
+
]
|
|
6387
|
+
])
|
|
6388
|
+
]
|
|
6389
|
+
},
|
|
6390
|
+
{
|
|
6391
|
+
id: gen("tab-panel"),
|
|
6392
|
+
type: "tab-panel",
|
|
6393
|
+
props: { label: "Yearly" },
|
|
6394
|
+
styles: { base: { paddingTop: "24px" } },
|
|
6395
|
+
children: [
|
|
6396
|
+
planColumns(gen, [
|
|
6397
|
+
[
|
|
6398
|
+
"Basic",
|
|
6399
|
+
"$190 / yr",
|
|
6400
|
+
["1 project", "Email support", "Core features", "2 months free"],
|
|
6401
|
+
false
|
|
6402
|
+
],
|
|
6403
|
+
[
|
|
6404
|
+
"Pro",
|
|
6405
|
+
"$490 / yr",
|
|
6406
|
+
["Unlimited projects", "Priority support", "All features", "2 months free"],
|
|
6407
|
+
true
|
|
6408
|
+
]
|
|
6409
|
+
])
|
|
6410
|
+
]
|
|
6411
|
+
}
|
|
6412
|
+
]
|
|
6413
|
+
},
|
|
6414
|
+
{
|
|
6415
|
+
id: gen("spacer"),
|
|
6416
|
+
type: "spacer",
|
|
6417
|
+
styles: { base: { width: "100%", height: "16px" }, mobile: { height: "8px" } }
|
|
6418
|
+
}
|
|
6419
|
+
])
|
|
6420
|
+
}
|
|
6421
|
+
];
|
|
6422
|
+
|
|
5249
6423
|
// src/blocks/index.ts
|
|
5250
6424
|
var STARTER_BLOCKS = [
|
|
5251
6425
|
...LAYOUT_STARTER_BLOCKS,
|
|
5252
6426
|
...UI_STARTER_BLOCKS,
|
|
5253
|
-
...FORM_STARTER_BLOCKS
|
|
6427
|
+
...FORM_STARTER_BLOCKS,
|
|
6428
|
+
...SALES_STARTER_BLOCKS
|
|
5254
6429
|
];
|
|
5255
6430
|
// Annotate the CommonJS export names for ESM import in node:
|
|
5256
6431
|
0 && (module.exports = {
|
|
5257
6432
|
CONTENT_CHILD_TYPES,
|
|
6433
|
+
COUNTDOWN_EXPIRE_BEHAVIORS,
|
|
6434
|
+
COUNTDOWN_FORMATS,
|
|
6435
|
+
COUNTDOWN_MODES,
|
|
6436
|
+
COUNTDOWN_STORAGE_TYPES,
|
|
5258
6437
|
ComponentRegistry,
|
|
5259
6438
|
FORM_STARTER_BLOCKS,
|
|
5260
6439
|
LAYOUT_PARENTS,
|
|
5261
6440
|
LAYOUT_STARTER_BLOCKS,
|
|
6441
|
+
SALES_STARTER_BLOCKS,
|
|
5262
6442
|
STARTER_BLOCKS,
|
|
5263
6443
|
TRAIT_GROUP_LABELS,
|
|
5264
6444
|
TRAIT_GROUP_ORDER,
|
|
5265
6445
|
UI_STARTER_BLOCKS,
|
|
5266
6446
|
acceptTrait,
|
|
6447
|
+
accordionDefinition,
|
|
6448
|
+
accordionItemDefinition,
|
|
5267
6449
|
actionTrait,
|
|
5268
6450
|
altTrait,
|
|
5269
6451
|
ariaLabelTrait,
|
|
@@ -5276,6 +6458,8 @@ var STARTER_BLOCKS = [
|
|
|
5276
6458
|
buttonDefinition,
|
|
5277
6459
|
buttonSubmitDefinition,
|
|
5278
6460
|
buttonTypeTrait,
|
|
6461
|
+
canonicalTextPropFields,
|
|
6462
|
+
carouselDefinition,
|
|
5279
6463
|
checkboxDefinition,
|
|
5280
6464
|
citeTrait,
|
|
5281
6465
|
codeBlockDefinition,
|
|
@@ -5287,12 +6471,14 @@ var STARTER_BLOCKS = [
|
|
|
5287
6471
|
containerDefinition,
|
|
5288
6472
|
controlsTrait,
|
|
5289
6473
|
coreComponentDefinitions,
|
|
6474
|
+
countdownDefinition,
|
|
5290
6475
|
createDefaultComponentRegistry,
|
|
5291
6476
|
defaultCheckedTrait,
|
|
5292
6477
|
defaultGenId,
|
|
5293
6478
|
defaultSelectedTrait,
|
|
5294
6479
|
defaultValueTrait,
|
|
5295
6480
|
disabledTrait,
|
|
6481
|
+
dividerDefinition,
|
|
5296
6482
|
drawerDefinition,
|
|
5297
6483
|
extractComponentRequirements,
|
|
5298
6484
|
fieldNameTrait,
|
|
@@ -5339,6 +6525,7 @@ var STARTER_BLOCKS = [
|
|
|
5339
6525
|
radioDefinition,
|
|
5340
6526
|
radioGroupDefinition,
|
|
5341
6527
|
radioItemDefinition,
|
|
6528
|
+
ratingDefinition,
|
|
5342
6529
|
readOnlyTrait,
|
|
5343
6530
|
relTrait,
|
|
5344
6531
|
requiredTrait,
|
|
@@ -5352,13 +6539,16 @@ var STARTER_BLOCKS = [
|
|
|
5352
6539
|
showPreviewTrait,
|
|
5353
6540
|
showSpinnerTrait,
|
|
5354
6541
|
sortTraits,
|
|
6542
|
+
spacerDefinition,
|
|
5355
6543
|
srcTrait,
|
|
5356
6544
|
suffixIconTrait,
|
|
5357
6545
|
switchDefinition,
|
|
5358
6546
|
switchSizeTrait,
|
|
6547
|
+
tabPanelDefinition,
|
|
5359
6548
|
tableCellDefinition,
|
|
5360
6549
|
tableDefinition,
|
|
5361
6550
|
tableRowDefinition,
|
|
6551
|
+
tabsDefinition,
|
|
5362
6552
|
tagTrait,
|
|
5363
6553
|
targetTrait,
|
|
5364
6554
|
textDefinition,
|