@kubuild/components 0.6.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-PWKMZYTC.js → chunk-CJN5OHHX.js} +596 -10
- 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 -148
- 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/media/image.d.ts.map +1 -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 -228
- 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-JTQ35OQQ.js.map +0 -1
- package/dist/chunk-PWKMZYTC.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",
|
|
@@ -1666,7 +1723,6 @@ var imageDefinition = {
|
|
|
1666
1723
|
},
|
|
1667
1724
|
propFields: [
|
|
1668
1725
|
{ name: "src", label: "Image URL", type: "string" },
|
|
1669
|
-
{ name: "asset", label: "Asset Reference", type: "json" },
|
|
1670
1726
|
{ name: "alt", label: "Alt Text", type: "string", defaultValue: "Default image" },
|
|
1671
1727
|
{ name: "width", label: "Width", type: "number" },
|
|
1672
1728
|
{ name: "height", label: "Height", type: "number" }
|
|
@@ -1681,12 +1737,12 @@ var imageDefinition = {
|
|
|
1681
1737
|
],
|
|
1682
1738
|
validateProps: (props) => {
|
|
1683
1739
|
const errors = [];
|
|
1684
|
-
const hasSrc = typeof props.src === "string" && props.src.trim().length > 0 || (0,
|
|
1685
|
-
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);
|
|
1686
1742
|
if (!hasSrc && !hasAsset) {
|
|
1687
1743
|
errors.push('Image requires either a non-empty "src" URL or a valid "asset" reference.');
|
|
1688
1744
|
}
|
|
1689
|
-
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);
|
|
1690
1746
|
if (!hasAlt) {
|
|
1691
1747
|
errors.push('Image requires non-empty "alt" text.');
|
|
1692
1748
|
}
|
|
@@ -1702,7 +1758,7 @@ var imageDefinition = {
|
|
|
1702
1758
|
};
|
|
1703
1759
|
|
|
1704
1760
|
// src/definitions/media/video.ts
|
|
1705
|
-
var
|
|
1761
|
+
var import_schema10 = require("@kubuild/schema");
|
|
1706
1762
|
var videoDefinition = {
|
|
1707
1763
|
type: "video",
|
|
1708
1764
|
label: "Video",
|
|
@@ -1770,25 +1826,25 @@ var videoDefinition = {
|
|
|
1770
1826
|
],
|
|
1771
1827
|
validateProps: (props) => {
|
|
1772
1828
|
const errors = [];
|
|
1773
|
-
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)) {
|
|
1774
1830
|
errors.push('Video "src" must be a string when provided.');
|
|
1775
1831
|
}
|
|
1776
|
-
if (props.provider !== void 0 && !(0,
|
|
1832
|
+
if (props.provider !== void 0 && !(0, import_schema10.isVariableBinding)(props.provider)) {
|
|
1777
1833
|
const allowed = ["auto", "html5", "youtube", "vimeo"];
|
|
1778
1834
|
if (typeof props.provider !== "string" || !allowed.includes(props.provider)) {
|
|
1779
1835
|
errors.push(`Video "provider" must be one of: ${allowed.join(", ")}.`);
|
|
1780
1836
|
}
|
|
1781
1837
|
}
|
|
1782
|
-
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)) {
|
|
1783
1839
|
errors.push('Video "controls" must be a boolean.');
|
|
1784
1840
|
}
|
|
1785
|
-
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)) {
|
|
1786
1842
|
errors.push('Video "autoplay" must be a boolean.');
|
|
1787
1843
|
}
|
|
1788
|
-
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)) {
|
|
1789
1845
|
errors.push('Video "loop" must be a boolean.');
|
|
1790
1846
|
}
|
|
1791
|
-
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)) {
|
|
1792
1848
|
errors.push('Video "muted" must be a boolean.');
|
|
1793
1849
|
}
|
|
1794
1850
|
return errors.length > 0 ? errors : true;
|
|
@@ -1806,7 +1862,7 @@ var videoDefinition = {
|
|
|
1806
1862
|
};
|
|
1807
1863
|
|
|
1808
1864
|
// src/definitions/media/icon.ts
|
|
1809
|
-
var
|
|
1865
|
+
var import_schema11 = require("@kubuild/schema");
|
|
1810
1866
|
var iconDefinition = {
|
|
1811
1867
|
type: "icon",
|
|
1812
1868
|
label: "Icon",
|
|
@@ -1832,15 +1888,15 @@ var iconDefinition = {
|
|
|
1832
1888
|
],
|
|
1833
1889
|
validateProps: (props) => {
|
|
1834
1890
|
const errors = [];
|
|
1835
|
-
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)) {
|
|
1836
1892
|
errors.push('Icon requires a non-empty "name".');
|
|
1837
1893
|
}
|
|
1838
|
-
if (props.size !== void 0 && !(0,
|
|
1894
|
+
if (props.size !== void 0 && !(0, import_schema11.isVariableBinding)(props.size)) {
|
|
1839
1895
|
if (typeof props.size !== "number" || props.size < 0) {
|
|
1840
1896
|
errors.push('Icon "size" must be a non-negative number.');
|
|
1841
1897
|
}
|
|
1842
1898
|
}
|
|
1843
|
-
if (props.strokeWidth !== void 0 && !(0,
|
|
1899
|
+
if (props.strokeWidth !== void 0 && !(0, import_schema11.isVariableBinding)(props.strokeWidth)) {
|
|
1844
1900
|
if (typeof props.strokeWidth !== "number" || props.strokeWidth < 0) {
|
|
1845
1901
|
errors.push('Icon "strokeWidth" must be a non-negative number.');
|
|
1846
1902
|
}
|
|
@@ -1857,7 +1913,7 @@ var iconDefinition = {
|
|
|
1857
1913
|
};
|
|
1858
1914
|
|
|
1859
1915
|
// src/definitions/media/html-embed.ts
|
|
1860
|
-
var
|
|
1916
|
+
var import_schema12 = require("@kubuild/schema");
|
|
1861
1917
|
var htmlEmbedDefinition = {
|
|
1862
1918
|
type: "html-embed",
|
|
1863
1919
|
label: "HTML Embed",
|
|
@@ -1881,7 +1937,7 @@ var htmlEmbedDefinition = {
|
|
|
1881
1937
|
],
|
|
1882
1938
|
validateProps: (props) => {
|
|
1883
1939
|
const errors = [];
|
|
1884
|
-
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)) {
|
|
1885
1941
|
errors.push('HTML Embed "html" must be a string.');
|
|
1886
1942
|
}
|
|
1887
1943
|
return errors.length > 0 ? errors : true;
|
|
@@ -1895,7 +1951,7 @@ var htmlEmbedDefinition = {
|
|
|
1895
1951
|
};
|
|
1896
1952
|
|
|
1897
1953
|
// src/definitions/data/table.ts
|
|
1898
|
-
var
|
|
1954
|
+
var import_schema13 = require("@kubuild/schema");
|
|
1899
1955
|
var tableDefinition = {
|
|
1900
1956
|
type: "table",
|
|
1901
1957
|
label: "Table",
|
|
@@ -1935,13 +1991,13 @@ var tableDefinition = {
|
|
|
1935
1991
|
],
|
|
1936
1992
|
validateProps: (props) => {
|
|
1937
1993
|
const errors = [];
|
|
1938
|
-
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)) {
|
|
1939
1995
|
errors.push('Table "striped" must be a boolean.');
|
|
1940
1996
|
}
|
|
1941
|
-
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)) {
|
|
1942
1998
|
errors.push('Table "bordered" must be a boolean.');
|
|
1943
1999
|
}
|
|
1944
|
-
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)) {
|
|
1945
2001
|
errors.push('Table "compact" must be a boolean.');
|
|
1946
2002
|
}
|
|
1947
2003
|
return errors.length > 0 ? errors : true;
|
|
@@ -2026,22 +2082,22 @@ var tableCellDefinition = {
|
|
|
2026
2082
|
],
|
|
2027
2083
|
validateProps: (props) => {
|
|
2028
2084
|
const errors = [];
|
|
2029
|
-
if (props.tag !== void 0 && !(0,
|
|
2085
|
+
if (props.tag !== void 0 && !(0, import_schema13.isVariableBinding)(props.tag)) {
|
|
2030
2086
|
if (props.tag !== "td" && props.tag !== "th") {
|
|
2031
2087
|
errors.push('Table Cell "tag" must be either "td" or "th".');
|
|
2032
2088
|
}
|
|
2033
2089
|
}
|
|
2034
|
-
if (props.colSpan !== void 0 && !(0,
|
|
2090
|
+
if (props.colSpan !== void 0 && !(0, import_schema13.isVariableBinding)(props.colSpan)) {
|
|
2035
2091
|
if (typeof props.colSpan !== "number" || props.colSpan < 1 || !Number.isInteger(props.colSpan)) {
|
|
2036
2092
|
errors.push('Table Cell "colSpan" must be a positive integer (>= 1).');
|
|
2037
2093
|
}
|
|
2038
2094
|
}
|
|
2039
|
-
if (props.rowSpan !== void 0 && !(0,
|
|
2095
|
+
if (props.rowSpan !== void 0 && !(0, import_schema13.isVariableBinding)(props.rowSpan)) {
|
|
2040
2096
|
if (typeof props.rowSpan !== "number" || props.rowSpan < 1 || !Number.isInteger(props.rowSpan)) {
|
|
2041
2097
|
errors.push('Table Cell "rowSpan" must be a positive integer (>= 1).');
|
|
2042
2098
|
}
|
|
2043
2099
|
}
|
|
2044
|
-
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)) {
|
|
2045
2101
|
errors.push('Table Cell "text" must be a string when provided.');
|
|
2046
2102
|
}
|
|
2047
2103
|
return errors.length > 0 ? errors : true;
|
|
@@ -2058,7 +2114,7 @@ var tableCellDefinition = {
|
|
|
2058
2114
|
};
|
|
2059
2115
|
|
|
2060
2116
|
// src/definitions/data/list.ts
|
|
2061
|
-
var
|
|
2117
|
+
var import_schema14 = require("@kubuild/schema");
|
|
2062
2118
|
var listDefinition = {
|
|
2063
2119
|
type: "list",
|
|
2064
2120
|
label: "List",
|
|
@@ -2107,12 +2163,12 @@ var listDefinition = {
|
|
|
2107
2163
|
],
|
|
2108
2164
|
validateProps: (props) => {
|
|
2109
2165
|
const errors = [];
|
|
2110
|
-
if (props.tag !== void 0 && !(0,
|
|
2166
|
+
if (props.tag !== void 0 && !(0, import_schema14.isVariableBinding)(props.tag)) {
|
|
2111
2167
|
if (props.tag !== "ul" && props.tag !== "ol") {
|
|
2112
2168
|
errors.push('List "tag" must be either "ul" or "ol".');
|
|
2113
2169
|
}
|
|
2114
2170
|
}
|
|
2115
|
-
if (props.listStyleType !== void 0 && !(0,
|
|
2171
|
+
if (props.listStyleType !== void 0 && !(0, import_schema14.isVariableBinding)(props.listStyleType)) {
|
|
2116
2172
|
const allowed = ["disc", "circle", "square", "decimal", "none", "custom-icon"];
|
|
2117
2173
|
if (typeof props.listStyleType !== "string" || !allowed.includes(props.listStyleType)) {
|
|
2118
2174
|
errors.push(`List "listStyleType" must be one of: ${allowed.join(", ")}.`);
|
|
@@ -2167,7 +2223,7 @@ var listItemDefinition = {
|
|
|
2167
2223
|
],
|
|
2168
2224
|
validateProps: (props) => {
|
|
2169
2225
|
const errors = [];
|
|
2170
|
-
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)) {
|
|
2171
2227
|
errors.push('List Item "text" must be a string when provided.');
|
|
2172
2228
|
}
|
|
2173
2229
|
return errors.length > 0 ? errors : true;
|
|
@@ -2204,7 +2260,7 @@ var collectionDefinition = {
|
|
|
2204
2260
|
};
|
|
2205
2261
|
|
|
2206
2262
|
// src/definitions/form/button.ts
|
|
2207
|
-
var
|
|
2263
|
+
var import_schema15 = require("@kubuild/schema");
|
|
2208
2264
|
var buttonDefinition = {
|
|
2209
2265
|
type: "button",
|
|
2210
2266
|
label: "Button",
|
|
@@ -2212,6 +2268,7 @@ var buttonDefinition = {
|
|
|
2212
2268
|
icon: "mouse-pointer",
|
|
2213
2269
|
acceptsChildren: false,
|
|
2214
2270
|
capabilities: ["actionRegistry"],
|
|
2271
|
+
...canonicalTextPropFields("button"),
|
|
2215
2272
|
defaultProps: {
|
|
2216
2273
|
label: "Click Me",
|
|
2217
2274
|
variant: "primary"
|
|
@@ -2255,22 +2312,22 @@ var buttonDefinition = {
|
|
|
2255
2312
|
],
|
|
2256
2313
|
validateProps: (props) => {
|
|
2257
2314
|
const errors = [];
|
|
2258
|
-
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);
|
|
2259
2316
|
if (!hasLabel) {
|
|
2260
2317
|
errors.push('Button requires a non-empty "label".');
|
|
2261
2318
|
}
|
|
2262
|
-
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)) {
|
|
2263
2320
|
errors.push('Button "href" must be a string when provided.');
|
|
2264
2321
|
}
|
|
2265
|
-
if (props.buttonType !== void 0 && !(0,
|
|
2322
|
+
if (props.buttonType !== void 0 && !(0, import_schema15.isVariableBinding)(props.buttonType)) {
|
|
2266
2323
|
if (!["button", "submit", "reset"].includes(props.buttonType)) {
|
|
2267
2324
|
errors.push('Button "buttonType" must be one of: "button", "submit", "reset".');
|
|
2268
2325
|
}
|
|
2269
2326
|
}
|
|
2270
|
-
if (props.action !== void 0 && !(0,
|
|
2327
|
+
if (props.action !== void 0 && !(0, import_schema15.isActionBinding)(props.action)) {
|
|
2271
2328
|
errors.push('Button "action" must be a valid action binding when provided.');
|
|
2272
2329
|
}
|
|
2273
|
-
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)) {
|
|
2274
2331
|
errors.push('Button "disabled" must be a boolean when provided.');
|
|
2275
2332
|
}
|
|
2276
2333
|
return errors.length > 0 ? errors : true;
|
|
@@ -2358,25 +2415,25 @@ var buttonSubmitDefinition = {
|
|
|
2358
2415
|
],
|
|
2359
2416
|
validateProps: (props) => {
|
|
2360
2417
|
const errors = [];
|
|
2361
|
-
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);
|
|
2362
2419
|
if (!hasLabel) {
|
|
2363
2420
|
errors.push('Submit Button requires a non-empty "label".');
|
|
2364
2421
|
}
|
|
2365
|
-
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)) {
|
|
2366
2423
|
errors.push('Submit Button "loadingText" must be a string when provided.');
|
|
2367
2424
|
}
|
|
2368
|
-
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)) {
|
|
2369
2426
|
errors.push('Submit Button "showSpinner" must be a boolean when provided.');
|
|
2370
2427
|
}
|
|
2371
|
-
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)) {
|
|
2372
2429
|
errors.push('Submit Button "autoDisableOnSubmit" must be a boolean when provided.');
|
|
2373
2430
|
}
|
|
2374
|
-
if (props.buttonType !== void 0 && !(0,
|
|
2431
|
+
if (props.buttonType !== void 0 && !(0, import_schema15.isVariableBinding)(props.buttonType)) {
|
|
2375
2432
|
if (!["submit", "reset", "button"].includes(props.buttonType)) {
|
|
2376
2433
|
errors.push('Submit Button "buttonType" must be one of: "submit", "reset", "button".');
|
|
2377
2434
|
}
|
|
2378
2435
|
}
|
|
2379
|
-
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)) {
|
|
2380
2437
|
errors.push('Submit Button "disabled" must be a boolean when provided.');
|
|
2381
2438
|
}
|
|
2382
2439
|
return errors.length > 0 ? errors : true;
|
|
@@ -2403,7 +2460,7 @@ var buttonSubmitDefinition = {
|
|
|
2403
2460
|
};
|
|
2404
2461
|
|
|
2405
2462
|
// src/definitions/form/form.ts
|
|
2406
|
-
var
|
|
2463
|
+
var import_schema16 = require("@kubuild/schema");
|
|
2407
2464
|
var formDefinition = {
|
|
2408
2465
|
type: "form",
|
|
2409
2466
|
label: "Form",
|
|
@@ -2490,34 +2547,34 @@ var formDefinition = {
|
|
|
2490
2547
|
],
|
|
2491
2548
|
validateProps: (props) => {
|
|
2492
2549
|
const errors = [];
|
|
2493
|
-
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)) {
|
|
2494
2551
|
errors.push('Form "name" must be a string when provided.');
|
|
2495
2552
|
}
|
|
2496
|
-
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)) {
|
|
2497
2554
|
errors.push('Form "action" must be a string when provided.');
|
|
2498
2555
|
}
|
|
2499
|
-
if (props.method !== void 0 && !(0,
|
|
2556
|
+
if (props.method !== void 0 && !(0, import_schema16.isVariableBinding)(props.method)) {
|
|
2500
2557
|
if (!["GET", "POST", "get", "post"].includes(props.method)) {
|
|
2501
2558
|
errors.push('Form "method" must be either "GET" or "POST".');
|
|
2502
2559
|
}
|
|
2503
2560
|
}
|
|
2504
|
-
if (props.target !== void 0 && !(0,
|
|
2561
|
+
if (props.target !== void 0 && !(0, import_schema16.isVariableBinding)(props.target)) {
|
|
2505
2562
|
if (!["_self", "_blank", "_parent", "_top"].includes(props.target)) {
|
|
2506
2563
|
errors.push('Form "target" must be one of: "_self", "_blank", "_parent", "_top".');
|
|
2507
2564
|
}
|
|
2508
2565
|
}
|
|
2509
|
-
if (props.autoComplete !== void 0 && !(0,
|
|
2566
|
+
if (props.autoComplete !== void 0 && !(0, import_schema16.isVariableBinding)(props.autoComplete)) {
|
|
2510
2567
|
if (!["on", "off"].includes(props.autoComplete)) {
|
|
2511
2568
|
errors.push('Form "autoComplete" must be either "on" or "off".');
|
|
2512
2569
|
}
|
|
2513
2570
|
}
|
|
2514
|
-
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)) {
|
|
2515
2572
|
errors.push('Form "preventDefault" must be a boolean when provided.');
|
|
2516
2573
|
}
|
|
2517
|
-
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)) {
|
|
2518
2575
|
errors.push('Form "scrollToFirstError" must be a boolean when provided.');
|
|
2519
2576
|
}
|
|
2520
|
-
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)) {
|
|
2521
2578
|
errors.push('Form "resetOnSubmit" must be a boolean when provided.');
|
|
2522
2579
|
}
|
|
2523
2580
|
return errors.length > 0 ? errors : true;
|
|
@@ -2533,7 +2590,7 @@ var formDefinition = {
|
|
|
2533
2590
|
};
|
|
2534
2591
|
|
|
2535
2592
|
// src/definitions/form/input.ts
|
|
2536
|
-
var
|
|
2593
|
+
var import_schema17 = require("@kubuild/schema");
|
|
2537
2594
|
var inputDefinition = {
|
|
2538
2595
|
type: "input",
|
|
2539
2596
|
label: "Input",
|
|
@@ -2615,47 +2672,47 @@ var inputDefinition = {
|
|
|
2615
2672
|
],
|
|
2616
2673
|
validateProps: (props) => {
|
|
2617
2674
|
const errors = [];
|
|
2618
|
-
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)) {
|
|
2619
2676
|
errors.push('Input "name" must be a string when provided.');
|
|
2620
2677
|
}
|
|
2621
|
-
if (props.type !== void 0 && !(0,
|
|
2678
|
+
if (props.type !== void 0 && !(0, import_schema17.isVariableBinding)(props.type)) {
|
|
2622
2679
|
const validTypes = ["text", "email", "number", "password", "tel", "url", "search", "date", "hidden"];
|
|
2623
2680
|
if (!validTypes.includes(props.type)) {
|
|
2624
2681
|
errors.push(`Input "type" must be one of: ${validTypes.join(", ")}.`);
|
|
2625
2682
|
}
|
|
2626
2683
|
}
|
|
2627
|
-
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)) {
|
|
2628
2685
|
errors.push('Input "placeholder" must be a string when provided.');
|
|
2629
2686
|
}
|
|
2630
|
-
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)) {
|
|
2631
2688
|
errors.push('Input "required" must be a boolean when provided.');
|
|
2632
2689
|
}
|
|
2633
|
-
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)) {
|
|
2634
2691
|
errors.push('Input "disabled" must be a boolean when provided.');
|
|
2635
2692
|
}
|
|
2636
|
-
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)) {
|
|
2637
2694
|
errors.push('Input "readOnly" must be a boolean when provided.');
|
|
2638
2695
|
}
|
|
2639
|
-
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)) {
|
|
2640
2697
|
errors.push('Input "pattern" must be a string when provided.');
|
|
2641
2698
|
}
|
|
2642
|
-
if (props.minLength !== void 0 && !(0,
|
|
2699
|
+
if (props.minLength !== void 0 && !(0, import_schema17.isVariableBinding)(props.minLength)) {
|
|
2643
2700
|
if (typeof props.minLength !== "number" || props.minLength < 0 || !Number.isInteger(props.minLength)) {
|
|
2644
2701
|
errors.push('Input "minLength" must be a non-negative integer when provided.');
|
|
2645
2702
|
}
|
|
2646
2703
|
}
|
|
2647
|
-
if (props.maxLength !== void 0 && !(0,
|
|
2704
|
+
if (props.maxLength !== void 0 && !(0, import_schema17.isVariableBinding)(props.maxLength)) {
|
|
2648
2705
|
if (typeof props.maxLength !== "number" || props.maxLength < 0 || !Number.isInteger(props.maxLength)) {
|
|
2649
2706
|
errors.push('Input "maxLength" must be a non-negative integer when provided.');
|
|
2650
2707
|
}
|
|
2651
2708
|
}
|
|
2652
|
-
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)) {
|
|
2653
2710
|
errors.push('Input "prefixIcon" must be a string when provided.');
|
|
2654
2711
|
}
|
|
2655
|
-
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)) {
|
|
2656
2713
|
errors.push('Input "suffixIcon" must be a string when provided.');
|
|
2657
2714
|
}
|
|
2658
|
-
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)) {
|
|
2659
2716
|
errors.push('Input "helperText" must be a string when provided.');
|
|
2660
2717
|
}
|
|
2661
2718
|
return errors.length > 0 ? errors : true;
|
|
@@ -2680,7 +2737,7 @@ var inputDefinition = {
|
|
|
2680
2737
|
};
|
|
2681
2738
|
|
|
2682
2739
|
// src/definitions/form/textarea.ts
|
|
2683
|
-
var
|
|
2740
|
+
var import_schema18 = require("@kubuild/schema");
|
|
2684
2741
|
var textareaDefinition = {
|
|
2685
2742
|
type: "textarea",
|
|
2686
2743
|
label: "Textarea",
|
|
@@ -2742,41 +2799,41 @@ var textareaDefinition = {
|
|
|
2742
2799
|
],
|
|
2743
2800
|
validateProps: (props) => {
|
|
2744
2801
|
const errors = [];
|
|
2745
|
-
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)) {
|
|
2746
2803
|
errors.push('Textarea "name" must be a string when provided.');
|
|
2747
2804
|
}
|
|
2748
|
-
if (props.rows !== void 0 && !(0,
|
|
2805
|
+
if (props.rows !== void 0 && !(0, import_schema18.isVariableBinding)(props.rows)) {
|
|
2749
2806
|
if (typeof props.rows !== "number" || props.rows < 1 || !Number.isInteger(props.rows)) {
|
|
2750
2807
|
errors.push('Textarea "rows" must be a positive integer (>= 1).');
|
|
2751
2808
|
}
|
|
2752
2809
|
}
|
|
2753
|
-
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)) {
|
|
2754
2811
|
errors.push('Textarea "placeholder" must be a string when provided.');
|
|
2755
2812
|
}
|
|
2756
|
-
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)) {
|
|
2757
2814
|
errors.push('Textarea "required" must be a boolean when provided.');
|
|
2758
2815
|
}
|
|
2759
|
-
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)) {
|
|
2760
2817
|
errors.push('Textarea "disabled" must be a boolean when provided.');
|
|
2761
2818
|
}
|
|
2762
|
-
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)) {
|
|
2763
2820
|
errors.push('Textarea "readOnly" must be a boolean when provided.');
|
|
2764
2821
|
}
|
|
2765
|
-
if (props.resize !== void 0 && !(0,
|
|
2822
|
+
if (props.resize !== void 0 && !(0, import_schema18.isVariableBinding)(props.resize)) {
|
|
2766
2823
|
const allowedResize = ["vertical", "horizontal", "both", "none"];
|
|
2767
2824
|
if (typeof props.resize !== "string" || !allowedResize.includes(props.resize)) {
|
|
2768
2825
|
errors.push(`Textarea "resize" must be one of: ${allowedResize.join(", ")}.`);
|
|
2769
2826
|
}
|
|
2770
2827
|
}
|
|
2771
|
-
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)) {
|
|
2772
2829
|
errors.push('Textarea "autoGrow" must be a boolean when provided.');
|
|
2773
2830
|
}
|
|
2774
|
-
if (props.maxCharCount !== void 0 && !(0,
|
|
2831
|
+
if (props.maxCharCount !== void 0 && !(0, import_schema18.isVariableBinding)(props.maxCharCount)) {
|
|
2775
2832
|
if (typeof props.maxCharCount !== "number" || props.maxCharCount < 1 || !Number.isInteger(props.maxCharCount)) {
|
|
2776
2833
|
errors.push('Textarea "maxCharCount" must be a positive integer (>= 1) when provided.');
|
|
2777
2834
|
}
|
|
2778
2835
|
}
|
|
2779
|
-
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)) {
|
|
2780
2837
|
errors.push('Textarea "helperText" must be a string when provided.');
|
|
2781
2838
|
}
|
|
2782
2839
|
return errors.length > 0 ? errors : true;
|
|
@@ -2801,7 +2858,7 @@ var textareaDefinition = {
|
|
|
2801
2858
|
};
|
|
2802
2859
|
|
|
2803
2860
|
// src/definitions/form/select.ts
|
|
2804
|
-
var
|
|
2861
|
+
var import_schema19 = require("@kubuild/schema");
|
|
2805
2862
|
var selectDefinition = {
|
|
2806
2863
|
type: "select",
|
|
2807
2864
|
label: "Select",
|
|
@@ -2853,21 +2910,21 @@ var selectDefinition = {
|
|
|
2853
2910
|
],
|
|
2854
2911
|
validateProps: (props) => {
|
|
2855
2912
|
const errors = [];
|
|
2856
|
-
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)) {
|
|
2857
2914
|
errors.push('Select "name" must be a string when provided.');
|
|
2858
2915
|
}
|
|
2859
|
-
if (props.options !== void 0 && !(0,
|
|
2916
|
+
if (props.options !== void 0 && !(0, import_schema19.isVariableBinding)(props.options)) {
|
|
2860
2917
|
if (!Array.isArray(props.options) && typeof props.options !== "string") {
|
|
2861
2918
|
errors.push('Select "options" must be an array of option objects or a JSON string.');
|
|
2862
2919
|
}
|
|
2863
2920
|
}
|
|
2864
|
-
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)) {
|
|
2865
2922
|
errors.push('Select "required" must be a boolean when provided.');
|
|
2866
2923
|
}
|
|
2867
|
-
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)) {
|
|
2868
2925
|
errors.push('Select "disabled" must be a boolean when provided.');
|
|
2869
2926
|
}
|
|
2870
|
-
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)) {
|
|
2871
2928
|
errors.push('Select "helperText" must be a string when provided.');
|
|
2872
2929
|
}
|
|
2873
2930
|
return errors.length > 0 ? errors : true;
|
|
@@ -2892,7 +2949,7 @@ var selectDefinition = {
|
|
|
2892
2949
|
};
|
|
2893
2950
|
|
|
2894
2951
|
// src/definitions/form/checkbox.ts
|
|
2895
|
-
var
|
|
2952
|
+
var import_schema20 = require("@kubuild/schema");
|
|
2896
2953
|
var checkboxDefinition = {
|
|
2897
2954
|
type: "checkbox",
|
|
2898
2955
|
label: "Checkbox",
|
|
@@ -2934,28 +2991,28 @@ var checkboxDefinition = {
|
|
|
2934
2991
|
],
|
|
2935
2992
|
validateProps: (props) => {
|
|
2936
2993
|
const errors = [];
|
|
2937
|
-
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)) {
|
|
2938
2995
|
errors.push('Checkbox "label" must be a string when provided.');
|
|
2939
2996
|
}
|
|
2940
|
-
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)) {
|
|
2941
2998
|
errors.push('Checkbox "name" must be a string when provided.');
|
|
2942
2999
|
}
|
|
2943
|
-
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)) {
|
|
2944
3001
|
errors.push('Checkbox "value" must be a string when provided.');
|
|
2945
3002
|
}
|
|
2946
|
-
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)) {
|
|
2947
3004
|
errors.push('Checkbox "defaultChecked" must be a boolean when provided.');
|
|
2948
3005
|
}
|
|
2949
|
-
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)) {
|
|
2950
3007
|
errors.push('Checkbox "indeterminate" must be a boolean when provided.');
|
|
2951
3008
|
}
|
|
2952
|
-
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)) {
|
|
2953
3010
|
errors.push('Checkbox "required" must be a boolean when provided.');
|
|
2954
3011
|
}
|
|
2955
|
-
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)) {
|
|
2956
3013
|
errors.push('Checkbox "disabled" must be a boolean when provided.');
|
|
2957
3014
|
}
|
|
2958
|
-
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)) {
|
|
2959
3016
|
errors.push('Checkbox "helperText" must be a string when provided.');
|
|
2960
3017
|
}
|
|
2961
3018
|
return errors.length > 0 ? errors : true;
|
|
@@ -2974,7 +3031,7 @@ var checkboxDefinition = {
|
|
|
2974
3031
|
};
|
|
2975
3032
|
|
|
2976
3033
|
// src/definitions/form/switch.ts
|
|
2977
|
-
var
|
|
3034
|
+
var import_schema21 = require("@kubuild/schema");
|
|
2978
3035
|
var switchDefinition = {
|
|
2979
3036
|
type: "switch",
|
|
2980
3037
|
label: "Switch",
|
|
@@ -3026,31 +3083,31 @@ var switchDefinition = {
|
|
|
3026
3083
|
],
|
|
3027
3084
|
validateProps: (props) => {
|
|
3028
3085
|
const errors = [];
|
|
3029
|
-
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)) {
|
|
3030
3087
|
errors.push('Switch "label" must be a string when provided.');
|
|
3031
3088
|
}
|
|
3032
|
-
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)) {
|
|
3033
3090
|
errors.push('Switch "name" must be a string when provided.');
|
|
3034
3091
|
}
|
|
3035
|
-
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)) {
|
|
3036
3093
|
errors.push('Switch "value" must be a string when provided.');
|
|
3037
3094
|
}
|
|
3038
|
-
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)) {
|
|
3039
3096
|
errors.push('Switch "defaultChecked" must be a boolean when provided.');
|
|
3040
3097
|
}
|
|
3041
|
-
if (props.switchSize !== void 0 && !(0,
|
|
3098
|
+
if (props.switchSize !== void 0 && !(0, import_schema21.isVariableBinding)(props.switchSize)) {
|
|
3042
3099
|
const allowedSizes = ["sm", "md", "lg"];
|
|
3043
3100
|
if (typeof props.switchSize !== "string" || !allowedSizes.includes(props.switchSize)) {
|
|
3044
3101
|
errors.push(`Switch "switchSize" must be one of: ${allowedSizes.join(", ")}.`);
|
|
3045
3102
|
}
|
|
3046
3103
|
}
|
|
3047
|
-
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)) {
|
|
3048
3105
|
errors.push('Switch "required" must be a boolean when provided.');
|
|
3049
3106
|
}
|
|
3050
|
-
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)) {
|
|
3051
3108
|
errors.push('Switch "disabled" must be a boolean when provided.');
|
|
3052
3109
|
}
|
|
3053
|
-
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)) {
|
|
3054
3111
|
errors.push('Switch "helperText" must be a string when provided.');
|
|
3055
3112
|
}
|
|
3056
3113
|
return errors.length > 0 ? errors : true;
|
|
@@ -3069,7 +3126,7 @@ var switchDefinition = {
|
|
|
3069
3126
|
};
|
|
3070
3127
|
|
|
3071
3128
|
// src/definitions/form/radio.ts
|
|
3072
|
-
var
|
|
3129
|
+
var import_schema22 = require("@kubuild/schema");
|
|
3073
3130
|
var radioGroupDefinition = {
|
|
3074
3131
|
type: "radio-group",
|
|
3075
3132
|
label: "Radio Group",
|
|
@@ -3120,25 +3177,25 @@ var radioGroupDefinition = {
|
|
|
3120
3177
|
],
|
|
3121
3178
|
validateProps: (props) => {
|
|
3122
3179
|
const errors = [];
|
|
3123
|
-
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)) {
|
|
3124
3181
|
errors.push('RadioGroup "name" must be a string when provided.');
|
|
3125
3182
|
}
|
|
3126
|
-
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)) {
|
|
3127
3184
|
errors.push('RadioGroup "defaultSelected" must be a string when provided.');
|
|
3128
3185
|
}
|
|
3129
|
-
if (props.orientation !== void 0 && !(0,
|
|
3186
|
+
if (props.orientation !== void 0 && !(0, import_schema22.isVariableBinding)(props.orientation)) {
|
|
3130
3187
|
const allowedOrientations = ["vertical", "horizontal"];
|
|
3131
3188
|
if (typeof props.orientation !== "string" || !allowedOrientations.includes(props.orientation)) {
|
|
3132
3189
|
errors.push(`RadioGroup "orientation" must be one of: ${allowedOrientations.join(", ")}.`);
|
|
3133
3190
|
}
|
|
3134
3191
|
}
|
|
3135
|
-
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)) {
|
|
3136
3193
|
errors.push('RadioGroup "required" must be a boolean when provided.');
|
|
3137
3194
|
}
|
|
3138
|
-
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)) {
|
|
3139
3196
|
errors.push('RadioGroup "disabled" must be a boolean when provided.');
|
|
3140
3197
|
}
|
|
3141
|
-
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)) {
|
|
3142
3199
|
errors.push('RadioGroup "helperText" must be a string when provided.');
|
|
3143
3200
|
}
|
|
3144
3201
|
return errors.length > 0 ? errors : true;
|
|
@@ -3189,25 +3246,25 @@ var radioDefinition = {
|
|
|
3189
3246
|
],
|
|
3190
3247
|
validateProps: (props) => {
|
|
3191
3248
|
const errors = [];
|
|
3192
|
-
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)) {
|
|
3193
3250
|
errors.push('Radio "label" must be a string when provided.');
|
|
3194
3251
|
}
|
|
3195
|
-
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)) {
|
|
3196
3253
|
errors.push('Radio "name" must be a string when provided.');
|
|
3197
3254
|
}
|
|
3198
|
-
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)) {
|
|
3199
3256
|
errors.push('Radio "value" must be a string when provided.');
|
|
3200
3257
|
}
|
|
3201
|
-
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)) {
|
|
3202
3259
|
errors.push('Radio "defaultChecked" must be a boolean when provided.');
|
|
3203
3260
|
}
|
|
3204
|
-
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)) {
|
|
3205
3262
|
errors.push('Radio "required" must be a boolean when provided.');
|
|
3206
3263
|
}
|
|
3207
|
-
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)) {
|
|
3208
3265
|
errors.push('Radio "disabled" must be a boolean when provided.');
|
|
3209
3266
|
}
|
|
3210
|
-
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)) {
|
|
3211
3268
|
errors.push('Radio "helperText" must be a string when provided.');
|
|
3212
3269
|
}
|
|
3213
3270
|
return errors.length > 0 ? errors : true;
|
|
@@ -3231,7 +3288,7 @@ var radioItemDefinition = {
|
|
|
3231
3288
|
};
|
|
3232
3289
|
|
|
3233
3290
|
// src/definitions/form/file-upload.ts
|
|
3234
|
-
var
|
|
3291
|
+
var import_schema23 = require("@kubuild/schema");
|
|
3235
3292
|
var fileUploadDefinition = {
|
|
3236
3293
|
type: "file-upload",
|
|
3237
3294
|
label: "File Upload",
|
|
@@ -3276,33 +3333,33 @@ var fileUploadDefinition = {
|
|
|
3276
3333
|
],
|
|
3277
3334
|
validateProps: (props) => {
|
|
3278
3335
|
const errors = [];
|
|
3279
|
-
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)) {
|
|
3280
3337
|
errors.push('FileUpload "label" must be a string when provided.');
|
|
3281
3338
|
}
|
|
3282
|
-
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)) {
|
|
3283
3340
|
errors.push('FileUpload "name" must be a string when provided.');
|
|
3284
3341
|
}
|
|
3285
|
-
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)) {
|
|
3286
3343
|
errors.push('FileUpload "accept" must be a string when provided.');
|
|
3287
3344
|
}
|
|
3288
|
-
if (props.maxFileSize !== void 0 && !(0,
|
|
3345
|
+
if (props.maxFileSize !== void 0 && !(0, import_schema23.isVariableBinding)(props.maxFileSize)) {
|
|
3289
3346
|
if (typeof props.maxFileSize !== "number" || props.maxFileSize <= 0) {
|
|
3290
3347
|
errors.push('FileUpload "maxFileSize" must be a positive number when provided.');
|
|
3291
3348
|
}
|
|
3292
3349
|
}
|
|
3293
|
-
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)) {
|
|
3294
3351
|
errors.push('FileUpload "multiple" must be a boolean when provided.');
|
|
3295
3352
|
}
|
|
3296
|
-
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)) {
|
|
3297
3354
|
errors.push('FileUpload "showPreview" must be a boolean when provided.');
|
|
3298
3355
|
}
|
|
3299
|
-
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)) {
|
|
3300
3357
|
errors.push('FileUpload "required" must be a boolean when provided.');
|
|
3301
3358
|
}
|
|
3302
|
-
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)) {
|
|
3303
3360
|
errors.push('FileUpload "disabled" must be a boolean when provided.');
|
|
3304
3361
|
}
|
|
3305
|
-
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)) {
|
|
3306
3363
|
errors.push('FileUpload "helperText" must be a string when provided.');
|
|
3307
3364
|
}
|
|
3308
3365
|
return errors.length > 0 ? errors : true;
|
|
@@ -3542,77 +3599,607 @@ var collapsibleDefinition = {
|
|
|
3542
3599
|
}
|
|
3543
3600
|
};
|
|
3544
3601
|
|
|
3545
|
-
// src/definitions/
|
|
3546
|
-
var
|
|
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
|
-
|
|
3601
|
-
|
|
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)."
|
|
3602
3719
|
}
|
|
3603
|
-
|
|
3604
|
-
|
|
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"
|
|
3605
3734
|
}
|
|
3606
|
-
|
|
3607
|
-
|
|
3608
|
-
|
|
3609
|
-
|
|
3610
|
-
|
|
3611
|
-
|
|
3612
|
-
|
|
3613
|
-
}
|
|
3614
|
-
|
|
3615
|
-
|
|
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
|
|
3616
4203
|
function primitiveTypeForField(field) {
|
|
3617
4204
|
switch (field.type) {
|
|
3618
4205
|
case "string":
|
|
@@ -4219,7 +4806,7 @@ var UI_STARTER_BLOCKS = [
|
|
|
4219
4806
|
id: gen("paragraph"),
|
|
4220
4807
|
type: "paragraph",
|
|
4221
4808
|
props: {
|
|
4222
|
-
|
|
4809
|
+
text: "A visual builder designed for maximum craft, responsiveness, and performance."
|
|
4223
4810
|
},
|
|
4224
4811
|
styles: {
|
|
4225
4812
|
base: {
|
|
@@ -4277,7 +4864,7 @@ var UI_STARTER_BLOCKS = [
|
|
|
4277
4864
|
{
|
|
4278
4865
|
id: gen("badge"),
|
|
4279
4866
|
type: "badge",
|
|
4280
|
-
props: {
|
|
4867
|
+
props: { text: "PRO FEATURE", variant: "primary" },
|
|
4281
4868
|
styles: { base: { marginBottom: "12px", display: "inline-block" } }
|
|
4282
4869
|
},
|
|
4283
4870
|
{
|
|
@@ -4292,7 +4879,7 @@ var UI_STARTER_BLOCKS = [
|
|
|
4292
4879
|
id: gen("paragraph"),
|
|
4293
4880
|
type: "paragraph",
|
|
4294
4881
|
props: {
|
|
4295
|
-
|
|
4882
|
+
text: "Engineered for sub-millisecond render updates and zero runtime overhead."
|
|
4296
4883
|
},
|
|
4297
4884
|
styles: { base: { fontSize: "14px", color: "#64748b", lineHeight: "1.5" } }
|
|
4298
4885
|
}
|
|
@@ -4356,7 +4943,7 @@ var UI_STARTER_BLOCKS = [
|
|
|
4356
4943
|
{
|
|
4357
4944
|
id: gen("paragraph"),
|
|
4358
4945
|
type: "paragraph",
|
|
4359
|
-
props: {
|
|
4946
|
+
props: { text: "High dynamic range gradients crafted for modern presentations." },
|
|
4360
4947
|
styles: { base: { fontSize: "13px", color: "#64748b", lineHeight: "1.4" } }
|
|
4361
4948
|
}
|
|
4362
4949
|
]
|
|
@@ -4390,7 +4977,7 @@ var UI_STARTER_BLOCKS = [
|
|
|
4390
4977
|
{
|
|
4391
4978
|
id: gen("badge"),
|
|
4392
4979
|
type: "badge",
|
|
4393
|
-
props: {
|
|
4980
|
+
props: { text: "MOST POPULAR", variant: "primary" },
|
|
4394
4981
|
styles: { base: { marginBottom: "12px", display: "inline-block" } }
|
|
4395
4982
|
},
|
|
4396
4983
|
{
|
|
@@ -4410,7 +4997,7 @@ var UI_STARTER_BLOCKS = [
|
|
|
4410
4997
|
{
|
|
4411
4998
|
id: gen("paragraph"),
|
|
4412
4999
|
type: "paragraph",
|
|
4413
|
-
props: {
|
|
5000
|
+
props: { text: "Includes unlimited pages, custom domains, and team collaboration." },
|
|
4414
5001
|
styles: { base: { fontSize: "14px", color: "#64748b", marginBottom: "24px" } }
|
|
4415
5002
|
},
|
|
4416
5003
|
{
|
|
@@ -4467,7 +5054,7 @@ var UI_STARTER_BLOCKS = [
|
|
|
4467
5054
|
{
|
|
4468
5055
|
id: gen("paragraph"),
|
|
4469
5056
|
type: "paragraph",
|
|
4470
|
-
props: {
|
|
5057
|
+
props: { text: "Start building with zero installation and instant live preview." },
|
|
4471
5058
|
styles: {
|
|
4472
5059
|
base: { fontSize: "16px", color: "#94a3b8", marginBottom: "24px", maxWidth: "600px", margin: "0 auto 24px auto" }
|
|
4473
5060
|
}
|
|
@@ -4550,7 +5137,7 @@ var FORM_STARTER_BLOCKS = [
|
|
|
4550
5137
|
id: gen("paragraph"),
|
|
4551
5138
|
type: "paragraph",
|
|
4552
5139
|
props: {
|
|
4553
|
-
|
|
5140
|
+
text: "Have questions or need assistance? Fill out the form below and we will get back to you shortly."
|
|
4554
5141
|
},
|
|
4555
5142
|
styles: {
|
|
4556
5143
|
base: {
|
|
@@ -4808,7 +5395,7 @@ var FORM_STARTER_BLOCKS = [
|
|
|
4808
5395
|
id: gen("paragraph"),
|
|
4809
5396
|
type: "paragraph",
|
|
4810
5397
|
props: {
|
|
4811
|
-
|
|
5398
|
+
text: "Subscribe to our newsletter for weekly curated insights, updates, and best practices."
|
|
4812
5399
|
},
|
|
4813
5400
|
styles: {
|
|
4814
5401
|
base: {
|
|
@@ -4986,7 +5573,7 @@ var FORM_STARTER_BLOCKS = [
|
|
|
4986
5573
|
{
|
|
4987
5574
|
id: gen("badge"),
|
|
4988
5575
|
type: "badge",
|
|
4989
|
-
props: {
|
|
5576
|
+
props: { text: "FREE CONSULTATION", variant: "primary" },
|
|
4990
5577
|
styles: { base: { marginBottom: "12px", display: "inline-block" } }
|
|
4991
5578
|
},
|
|
4992
5579
|
{
|
|
@@ -5006,7 +5593,7 @@ var FORM_STARTER_BLOCKS = [
|
|
|
5006
5593
|
id: gen("paragraph"),
|
|
5007
5594
|
type: "paragraph",
|
|
5008
5595
|
props: {
|
|
5009
|
-
|
|
5596
|
+
text: "Share your project details with our solutions team. We will analyze your needs and provide a personalized roadmap."
|
|
5010
5597
|
},
|
|
5011
5598
|
styles: {
|
|
5012
5599
|
base: {
|
|
@@ -5247,24 +5834,618 @@ var FORM_STARTER_BLOCKS = [
|
|
|
5247
5834
|
}
|
|
5248
5835
|
];
|
|
5249
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
|
+
|
|
5250
6423
|
// src/blocks/index.ts
|
|
5251
6424
|
var STARTER_BLOCKS = [
|
|
5252
6425
|
...LAYOUT_STARTER_BLOCKS,
|
|
5253
6426
|
...UI_STARTER_BLOCKS,
|
|
5254
|
-
...FORM_STARTER_BLOCKS
|
|
6427
|
+
...FORM_STARTER_BLOCKS,
|
|
6428
|
+
...SALES_STARTER_BLOCKS
|
|
5255
6429
|
];
|
|
5256
6430
|
// Annotate the CommonJS export names for ESM import in node:
|
|
5257
6431
|
0 && (module.exports = {
|
|
5258
6432
|
CONTENT_CHILD_TYPES,
|
|
6433
|
+
COUNTDOWN_EXPIRE_BEHAVIORS,
|
|
6434
|
+
COUNTDOWN_FORMATS,
|
|
6435
|
+
COUNTDOWN_MODES,
|
|
6436
|
+
COUNTDOWN_STORAGE_TYPES,
|
|
5259
6437
|
ComponentRegistry,
|
|
5260
6438
|
FORM_STARTER_BLOCKS,
|
|
5261
6439
|
LAYOUT_PARENTS,
|
|
5262
6440
|
LAYOUT_STARTER_BLOCKS,
|
|
6441
|
+
SALES_STARTER_BLOCKS,
|
|
5263
6442
|
STARTER_BLOCKS,
|
|
5264
6443
|
TRAIT_GROUP_LABELS,
|
|
5265
6444
|
TRAIT_GROUP_ORDER,
|
|
5266
6445
|
UI_STARTER_BLOCKS,
|
|
5267
6446
|
acceptTrait,
|
|
6447
|
+
accordionDefinition,
|
|
6448
|
+
accordionItemDefinition,
|
|
5268
6449
|
actionTrait,
|
|
5269
6450
|
altTrait,
|
|
5270
6451
|
ariaLabelTrait,
|
|
@@ -5277,6 +6458,8 @@ var STARTER_BLOCKS = [
|
|
|
5277
6458
|
buttonDefinition,
|
|
5278
6459
|
buttonSubmitDefinition,
|
|
5279
6460
|
buttonTypeTrait,
|
|
6461
|
+
canonicalTextPropFields,
|
|
6462
|
+
carouselDefinition,
|
|
5280
6463
|
checkboxDefinition,
|
|
5281
6464
|
citeTrait,
|
|
5282
6465
|
codeBlockDefinition,
|
|
@@ -5288,12 +6471,14 @@ var STARTER_BLOCKS = [
|
|
|
5288
6471
|
containerDefinition,
|
|
5289
6472
|
controlsTrait,
|
|
5290
6473
|
coreComponentDefinitions,
|
|
6474
|
+
countdownDefinition,
|
|
5291
6475
|
createDefaultComponentRegistry,
|
|
5292
6476
|
defaultCheckedTrait,
|
|
5293
6477
|
defaultGenId,
|
|
5294
6478
|
defaultSelectedTrait,
|
|
5295
6479
|
defaultValueTrait,
|
|
5296
6480
|
disabledTrait,
|
|
6481
|
+
dividerDefinition,
|
|
5297
6482
|
drawerDefinition,
|
|
5298
6483
|
extractComponentRequirements,
|
|
5299
6484
|
fieldNameTrait,
|
|
@@ -5340,6 +6525,7 @@ var STARTER_BLOCKS = [
|
|
|
5340
6525
|
radioDefinition,
|
|
5341
6526
|
radioGroupDefinition,
|
|
5342
6527
|
radioItemDefinition,
|
|
6528
|
+
ratingDefinition,
|
|
5343
6529
|
readOnlyTrait,
|
|
5344
6530
|
relTrait,
|
|
5345
6531
|
requiredTrait,
|
|
@@ -5353,13 +6539,16 @@ var STARTER_BLOCKS = [
|
|
|
5353
6539
|
showPreviewTrait,
|
|
5354
6540
|
showSpinnerTrait,
|
|
5355
6541
|
sortTraits,
|
|
6542
|
+
spacerDefinition,
|
|
5356
6543
|
srcTrait,
|
|
5357
6544
|
suffixIconTrait,
|
|
5358
6545
|
switchDefinition,
|
|
5359
6546
|
switchSizeTrait,
|
|
6547
|
+
tabPanelDefinition,
|
|
5360
6548
|
tableCellDefinition,
|
|
5361
6549
|
tableDefinition,
|
|
5362
6550
|
tableRowDefinition,
|
|
6551
|
+
tabsDefinition,
|
|
5363
6552
|
tagTrait,
|
|
5364
6553
|
targetTrait,
|
|
5365
6554
|
textDefinition,
|