@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.
Files changed (54) hide show
  1. package/dist/blocks/index.cjs +601 -12
  2. package/dist/blocks/index.cjs.map +1 -1
  3. package/dist/blocks/index.d.ts +2 -1
  4. package/dist/blocks/index.d.ts.map +1 -1
  5. package/dist/blocks/index.js +3 -1
  6. package/dist/blocks/sales.d.ts +7 -0
  7. package/dist/blocks/sales.d.ts.map +1 -0
  8. package/dist/canonical-props.d.ts +8 -0
  9. package/dist/canonical-props.d.ts.map +1 -0
  10. package/dist/{chunk-PWKMZYTC.js → chunk-CJN5OHHX.js} +596 -10
  11. package/dist/chunk-CJN5OHHX.js.map +1 -0
  12. package/dist/{chunk-JTQ35OQQ.js → chunk-DIZKTXJI.js} +601 -13
  13. package/dist/chunk-DIZKTXJI.js.map +1 -0
  14. package/dist/definitions/constants.d.ts.map +1 -1
  15. package/dist/definitions/conversion/accordion.d.ts +8 -0
  16. package/dist/definitions/conversion/accordion.d.ts.map +1 -0
  17. package/dist/definitions/conversion/carousel.d.ts +7 -0
  18. package/dist/definitions/conversion/carousel.d.ts.map +1 -0
  19. package/dist/definitions/conversion/countdown.d.ts +19 -0
  20. package/dist/definitions/conversion/countdown.d.ts.map +1 -0
  21. package/dist/definitions/conversion/divider.d.ts +9 -0
  22. package/dist/definitions/conversion/divider.d.ts.map +1 -0
  23. package/dist/definitions/conversion/index.d.ts +7 -0
  24. package/dist/definitions/conversion/index.d.ts.map +1 -0
  25. package/dist/definitions/conversion/rating.d.ts +7 -0
  26. package/dist/definitions/conversion/rating.d.ts.map +1 -0
  27. package/dist/definitions/conversion/tabs.d.ts +9 -0
  28. package/dist/definitions/conversion/tabs.d.ts.map +1 -0
  29. package/dist/definitions/form/button.d.ts.map +1 -1
  30. package/dist/definitions/index.cjs +746 -148
  31. package/dist/definitions/index.cjs.map +1 -1
  32. package/dist/definitions/index.d.ts +1 -0
  33. package/dist/definitions/index.d.ts.map +1 -1
  34. package/dist/definitions/index.js +27 -1
  35. package/dist/definitions/media/image.d.ts.map +1 -1
  36. package/dist/definitions/types.d.ts +4 -1
  37. package/dist/definitions/types.d.ts.map +1 -1
  38. package/dist/definitions/typography/badge.d.ts.map +1 -1
  39. package/dist/definitions/typography/blockquote.d.ts.map +1 -1
  40. package/dist/definitions/typography/heading.d.ts.map +1 -1
  41. package/dist/definitions/typography/link.d.ts.map +1 -1
  42. package/dist/definitions/typography/paragraph.d.ts.map +1 -1
  43. package/dist/definitions/typography/text.d.ts.map +1 -1
  44. package/dist/index.cjs +1417 -228
  45. package/dist/index.cjs.map +1 -1
  46. package/dist/index.d.ts +1 -0
  47. package/dist/index.d.ts.map +1 -1
  48. package/dist/index.js +32 -2
  49. package/dist/index.js.map +1 -1
  50. package/dist/registry.d.ts +12 -0
  51. package/dist/registry.d.ts.map +1 -1
  52. package/package.json +3 -3
  53. package/dist/chunk-JTQ35OQQ.js.map +0 -1
  54. package/dist/chunk-PWKMZYTC.js.map +0 -1
@@ -21,11 +21,18 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
21
21
  var definitions_exports = {};
22
22
  __export(definitions_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
  LAYOUT_PARENTS: () => LAYOUT_PARENTS,
29
+ accordionDefinition: () => accordionDefinition,
30
+ accordionItemDefinition: () => accordionItemDefinition,
25
31
  badgeDefinition: () => badgeDefinition,
26
32
  blockquoteDefinition: () => blockquoteDefinition,
27
33
  buttonDefinition: () => buttonDefinition,
28
34
  buttonSubmitDefinition: () => buttonSubmitDefinition,
35
+ carouselDefinition: () => carouselDefinition,
29
36
  checkboxDefinition: () => checkboxDefinition,
30
37
  codeBlockDefinition: () => codeBlockDefinition,
31
38
  collapsibleDefinition: () => collapsibleDefinition,
@@ -33,7 +40,9 @@ __export(definitions_exports, {
33
40
  columnsDefinition: () => columnsDefinition,
34
41
  containerDefinition: () => containerDefinition,
35
42
  coreComponentDefinitions: () => coreComponentDefinitions,
43
+ countdownDefinition: () => countdownDefinition,
36
44
  createDefaultComponentRegistry: () => createDefaultComponentRegistry,
45
+ dividerDefinition: () => dividerDefinition,
37
46
  drawerDefinition: () => drawerDefinition,
38
47
  fileUploadDefinition: () => fileUploadDefinition,
39
48
  flexDefinition: () => flexDefinition,
@@ -53,12 +62,16 @@ __export(definitions_exports, {
53
62
  radioDefinition: () => radioDefinition,
54
63
  radioGroupDefinition: () => radioGroupDefinition,
55
64
  radioItemDefinition: () => radioItemDefinition,
65
+ ratingDefinition: () => ratingDefinition,
56
66
  sectionDefinition: () => sectionDefinition,
57
67
  selectDefinition: () => selectDefinition,
68
+ spacerDefinition: () => spacerDefinition,
58
69
  switchDefinition: () => switchDefinition,
70
+ tabPanelDefinition: () => tabPanelDefinition,
59
71
  tableCellDefinition: () => tableCellDefinition,
60
72
  tableDefinition: () => tableDefinition,
61
73
  tableRowDefinition: () => tableRowDefinition,
74
+ tabsDefinition: () => tabsDefinition,
62
75
  textDefinition: () => textDefinition,
63
76
  textareaDefinition: () => textareaDefinition,
64
77
  videoDefinition: () => videoDefinition
@@ -955,7 +968,20 @@ function autoDisableOnSubmitTrait(overrides) {
955
968
  }
956
969
 
957
970
  // src/definitions/constants.ts
958
- var LAYOUT_PARENTS = ["page", "section", "container", "columns", "flex", "grid", "modal", "drawer", "collapsible"];
971
+ var LAYOUT_PARENTS = [
972
+ "page",
973
+ "section",
974
+ "container",
975
+ "columns",
976
+ "flex",
977
+ "grid",
978
+ "modal",
979
+ "drawer",
980
+ "collapsible",
981
+ "accordion-item",
982
+ "tab-panel",
983
+ "carousel"
984
+ ];
959
985
  var CONTENT_CHILD_TYPES = [
960
986
  "heading",
961
987
  "text",
@@ -986,7 +1012,14 @@ var CONTENT_CHILD_TYPES = [
986
1012
  "custom",
987
1013
  "modal",
988
1014
  "drawer",
989
- "collapsible"
1015
+ "collapsible",
1016
+ "countdown",
1017
+ "accordion",
1018
+ "tabs",
1019
+ "carousel",
1020
+ "rating",
1021
+ "divider",
1022
+ "spacer"
990
1023
  ];
991
1024
 
992
1025
  // src/definitions/layout/page.ts
@@ -1155,13 +1188,27 @@ var gridDefinition = {
1155
1188
  };
1156
1189
 
1157
1190
  // src/definitions/typography/heading.ts
1191
+ var import_schema2 = require("@kubuild/schema");
1192
+
1193
+ // src/canonical-props.ts
1158
1194
  var import_schema = require("@kubuild/schema");
1195
+ function canonicalTextPropFields(componentType) {
1196
+ const rule = (0, import_schema.getCanonicalTextPropRule)(componentType);
1197
+ if (!rule) return {};
1198
+ return {
1199
+ canonicalTextProp: rule.canonical,
1200
+ deprecatedPropAliases: Object.fromEntries(rule.aliases.map((alias) => [alias, rule.canonical]))
1201
+ };
1202
+ }
1203
+
1204
+ // src/definitions/typography/heading.ts
1159
1205
  var headingDefinition = {
1160
1206
  type: "heading",
1161
1207
  label: "Heading",
1162
1208
  category: "typography",
1163
1209
  icon: "heading",
1164
1210
  acceptsChildren: false,
1211
+ ...canonicalTextPropFields("heading"),
1165
1212
  defaultProps: { text: "Heading Text", level: 2 },
1166
1213
  propFields: [
1167
1214
  { name: "text", label: "Text", type: "string", defaultValue: "Heading Text" },
@@ -1187,7 +1234,8 @@ var headingDefinition = {
1187
1234
  ],
1188
1235
  validateProps: (props) => {
1189
1236
  const errors = [];
1190
- if (!(0, import_schema.isVariableBinding)(props.text) && (typeof props.text !== "string" || props.text.trim().length === 0)) {
1237
+ const text = props.text ?? props.content;
1238
+ if (!(0, import_schema2.isVariableBinding)(text) && (typeof text !== "string" || text.trim().length === 0)) {
1191
1239
  errors.push('Heading requires a non-empty "text".');
1192
1240
  }
1193
1241
  if (props.level !== void 0 && (typeof props.level !== "number" || props.level < 1 || props.level > 6)) {
@@ -1206,16 +1254,18 @@ var headingDefinition = {
1206
1254
  };
1207
1255
 
1208
1256
  // src/definitions/typography/text.ts
1209
- var import_schema2 = require("@kubuild/schema");
1257
+ var import_schema3 = require("@kubuild/schema");
1210
1258
  var textDefinition = {
1211
1259
  type: "text",
1212
1260
  label: "Text",
1213
1261
  category: "typography",
1214
1262
  icon: "type",
1215
1263
  acceptsChildren: false,
1216
- defaultProps: { content: "Lorem ipsum dolor sit amet, consectetur adipiscing elit." },
1264
+ ...canonicalTextPropFields("text"),
1265
+ // `as: 'p'` keeps the block-level rendering the old `content` default produced (STORA-550).
1266
+ defaultProps: { text: "Lorem ipsum dolor sit amet, consectetur adipiscing elit.", as: "p" },
1217
1267
  propFields: [
1218
- { name: "content", label: "Content", type: "string", defaultValue: "Lorem ipsum dolor sit amet." }
1268
+ { name: "text", label: "Content", type: "string", defaultValue: "Lorem ipsum dolor sit amet." }
1219
1269
  ],
1220
1270
  traits: [
1221
1271
  idTrait(),
@@ -1223,8 +1273,9 @@ var textDefinition = {
1223
1273
  ariaLabelTrait()
1224
1274
  ],
1225
1275
  validateProps: (props) => {
1226
- if (!(0, import_schema2.isVariableBinding)(props.content) && (typeof props.content !== "string" || props.content.trim().length === 0)) {
1227
- return ['Text requires a non-empty "content".'];
1276
+ const value = props.text ?? props.content;
1277
+ if (!(0, import_schema3.isVariableBinding)(value) && (typeof value !== "string" || value.trim().length === 0)) {
1278
+ return ['Text requires a non-empty "text".'];
1228
1279
  }
1229
1280
  return true;
1230
1281
  },
@@ -1238,13 +1289,14 @@ var textDefinition = {
1238
1289
  };
1239
1290
 
1240
1291
  // src/definitions/typography/paragraph.ts
1241
- var import_schema3 = require("@kubuild/schema");
1292
+ var import_schema4 = require("@kubuild/schema");
1242
1293
  var paragraphDefinition = {
1243
1294
  type: "paragraph",
1244
1295
  label: "Paragraph",
1245
1296
  category: "typography",
1246
1297
  icon: "paragraph",
1247
1298
  acceptsChildren: false,
1299
+ ...canonicalTextPropFields("paragraph"),
1248
1300
  defaultProps: {
1249
1301
  text: "A paragraph of text with clean semantic typography."
1250
1302
  },
@@ -1264,7 +1316,7 @@ var paragraphDefinition = {
1264
1316
  validateProps: (props) => {
1265
1317
  const errors = [];
1266
1318
  const textVal = props.text ?? props.content;
1267
- if (textVal !== void 0 && !(0, import_schema3.isVariableBinding)(textVal) && (typeof textVal !== "string" || textVal.trim().length === 0)) {
1319
+ if (textVal !== void 0 && !(0, import_schema4.isVariableBinding)(textVal) && (typeof textVal !== "string" || textVal.trim().length === 0)) {
1268
1320
  errors.push('Paragraph requires a non-empty "text".');
1269
1321
  }
1270
1322
  return errors.length > 0 ? errors : true;
@@ -1280,13 +1332,14 @@ var paragraphDefinition = {
1280
1332
  };
1281
1333
 
1282
1334
  // src/definitions/typography/link.ts
1283
- var import_schema4 = require("@kubuild/schema");
1335
+ var import_schema5 = require("@kubuild/schema");
1284
1336
  var linkDefinition = {
1285
1337
  type: "link",
1286
1338
  label: "Link",
1287
1339
  category: "typography",
1288
1340
  icon: "link",
1289
1341
  acceptsChildren: false,
1342
+ ...canonicalTextPropFields("link"),
1290
1343
  defaultProps: {
1291
1344
  text: "Click here",
1292
1345
  href: "#",
@@ -1320,19 +1373,19 @@ var linkDefinition = {
1320
1373
  ],
1321
1374
  validateProps: (props) => {
1322
1375
  const errors = [];
1323
- if (props.text !== void 0 && !(0, import_schema4.isVariableBinding)(props.text) && (typeof props.text !== "string" || props.text.trim().length === 0)) {
1376
+ if (props.text !== void 0 && !(0, import_schema5.isVariableBinding)(props.text) && (typeof props.text !== "string" || props.text.trim().length === 0)) {
1324
1377
  errors.push('Link requires a non-empty "text".');
1325
1378
  }
1326
- if (props.href !== void 0 && typeof props.href !== "string" && !(0, import_schema4.isVariableBinding)(props.href)) {
1379
+ if (props.href !== void 0 && typeof props.href !== "string" && !(0, import_schema5.isVariableBinding)(props.href)) {
1327
1380
  errors.push('Link "href" must be a string when provided.');
1328
1381
  }
1329
- if (props.target !== void 0 && !(0, import_schema4.isVariableBinding)(props.target)) {
1382
+ if (props.target !== void 0 && !(0, import_schema5.isVariableBinding)(props.target)) {
1330
1383
  const allowedTargets = ["_self", "_blank", "_parent", "_top"];
1331
1384
  if (typeof props.target !== "string" || !allowedTargets.includes(props.target)) {
1332
1385
  errors.push(`Link "target" must be one of: ${allowedTargets.join(", ")}.`);
1333
1386
  }
1334
1387
  }
1335
- if (props.rel !== void 0 && typeof props.rel !== "string" && !(0, import_schema4.isVariableBinding)(props.rel)) {
1388
+ if (props.rel !== void 0 && typeof props.rel !== "string" && !(0, import_schema5.isVariableBinding)(props.rel)) {
1336
1389
  errors.push('Link "rel" must be a string when provided.');
1337
1390
  }
1338
1391
  return errors.length > 0 ? errors : true;
@@ -1347,7 +1400,7 @@ var linkDefinition = {
1347
1400
  };
1348
1401
 
1349
1402
  // src/definitions/typography/blockquote.ts
1350
- var import_schema5 = require("@kubuild/schema");
1403
+ var import_schema6 = require("@kubuild/schema");
1351
1404
  var blockquoteDefinition = {
1352
1405
  type: "blockquote",
1353
1406
  label: "Blockquote",
@@ -1367,6 +1420,7 @@ var blockquoteDefinition = {
1367
1420
  "html-embed",
1368
1421
  "custom"
1369
1422
  ],
1423
+ ...canonicalTextPropFields("blockquote"),
1370
1424
  defaultProps: {
1371
1425
  text: "\u201CSimplicity is the soul of efficiency.\u201D"
1372
1426
  },
@@ -1387,10 +1441,10 @@ var blockquoteDefinition = {
1387
1441
  ],
1388
1442
  validateProps: (props) => {
1389
1443
  const errors = [];
1390
- if (props.text !== void 0 && typeof props.text !== "string" && !(0, import_schema5.isVariableBinding)(props.text)) {
1444
+ if (props.text !== void 0 && typeof props.text !== "string" && !(0, import_schema6.isVariableBinding)(props.text)) {
1391
1445
  errors.push('Blockquote "text" must be a string when provided.');
1392
1446
  }
1393
- if (props.cite !== void 0 && typeof props.cite !== "string" && !(0, import_schema5.isVariableBinding)(props.cite)) {
1447
+ if (props.cite !== void 0 && typeof props.cite !== "string" && !(0, import_schema6.isVariableBinding)(props.cite)) {
1394
1448
  errors.push('Blockquote "cite" must be a string when provided.');
1395
1449
  }
1396
1450
  return errors.length > 0 ? errors : true;
@@ -1413,13 +1467,14 @@ var blockquoteDefinition = {
1413
1467
  };
1414
1468
 
1415
1469
  // src/definitions/typography/badge.ts
1416
- var import_schema6 = require("@kubuild/schema");
1470
+ var import_schema7 = require("@kubuild/schema");
1417
1471
  var badgeDefinition = {
1418
1472
  type: "badge",
1419
1473
  label: "Badge",
1420
1474
  category: "typography",
1421
1475
  icon: "badge",
1422
1476
  acceptsChildren: false,
1477
+ ...canonicalTextPropFields("badge"),
1423
1478
  defaultProps: {
1424
1479
  text: "Badge",
1425
1480
  variant: "default"
@@ -1447,10 +1502,10 @@ var badgeDefinition = {
1447
1502
  ],
1448
1503
  validateProps: (props) => {
1449
1504
  const errors = [];
1450
- if (props.text !== void 0 && !(0, import_schema6.isVariableBinding)(props.text) && (typeof props.text !== "string" || props.text.trim().length === 0)) {
1505
+ if (props.text !== void 0 && !(0, import_schema7.isVariableBinding)(props.text) && (typeof props.text !== "string" || props.text.trim().length === 0)) {
1451
1506
  errors.push('Badge requires a non-empty "text".');
1452
1507
  }
1453
- if (props.variant !== void 0 && typeof props.variant !== "string" && !(0, import_schema6.isVariableBinding)(props.variant)) {
1508
+ if (props.variant !== void 0 && typeof props.variant !== "string" && !(0, import_schema7.isVariableBinding)(props.variant)) {
1454
1509
  errors.push('Badge "variant" must be a string.');
1455
1510
  }
1456
1511
  return errors.length > 0 ? errors : true;
@@ -1474,7 +1529,7 @@ var badgeDefinition = {
1474
1529
  };
1475
1530
 
1476
1531
  // src/definitions/typography/code-block.ts
1477
- var import_schema7 = require("@kubuild/schema");
1532
+ var import_schema8 = require("@kubuild/schema");
1478
1533
  var codeBlockDefinition = {
1479
1534
  type: "code-block",
1480
1535
  label: "Code Block",
@@ -1506,10 +1561,10 @@ var codeBlockDefinition = {
1506
1561
  ],
1507
1562
  validateProps: (props) => {
1508
1563
  const errors = [];
1509
- if (props.code !== void 0 && typeof props.code !== "string" && !(0, import_schema7.isVariableBinding)(props.code)) {
1564
+ if (props.code !== void 0 && typeof props.code !== "string" && !(0, import_schema8.isVariableBinding)(props.code)) {
1510
1565
  errors.push('Code Block "code" must be a string when provided.');
1511
1566
  }
1512
- if (props.language !== void 0 && typeof props.language !== "string" && !(0, import_schema7.isVariableBinding)(props.language)) {
1567
+ if (props.language !== void 0 && typeof props.language !== "string" && !(0, import_schema8.isVariableBinding)(props.language)) {
1513
1568
  errors.push('Code Block "language" must be a string when provided.');
1514
1569
  }
1515
1570
  return errors.length > 0 ? errors : true;
@@ -1531,7 +1586,7 @@ var codeBlockDefinition = {
1531
1586
  };
1532
1587
 
1533
1588
  // src/definitions/media/image.ts
1534
- var import_schema8 = require("@kubuild/schema");
1589
+ var import_schema9 = require("@kubuild/schema");
1535
1590
  var imageDefinition = {
1536
1591
  type: "image",
1537
1592
  label: "Image",
@@ -1547,7 +1602,6 @@ var imageDefinition = {
1547
1602
  },
1548
1603
  propFields: [
1549
1604
  { name: "src", label: "Image URL", type: "string" },
1550
- { name: "asset", label: "Asset Reference", type: "json" },
1551
1605
  { name: "alt", label: "Alt Text", type: "string", defaultValue: "Default image" },
1552
1606
  { name: "width", label: "Width", type: "number" },
1553
1607
  { name: "height", label: "Height", type: "number" }
@@ -1562,12 +1616,12 @@ var imageDefinition = {
1562
1616
  ],
1563
1617
  validateProps: (props) => {
1564
1618
  const errors = [];
1565
- const hasSrc = typeof props.src === "string" && props.src.trim().length > 0 || (0, import_schema8.isVariableBinding)(props.src);
1566
- const hasAsset = (0, import_schema8.isAssetReference)(props.asset);
1619
+ const hasSrc = typeof props.src === "string" && props.src.trim().length > 0 || (0, import_schema9.isVariableBinding)(props.src);
1620
+ const hasAsset = (0, import_schema9.isAssetReference)(props.asset);
1567
1621
  if (!hasSrc && !hasAsset) {
1568
1622
  errors.push('Image requires either a non-empty "src" URL or a valid "asset" reference.');
1569
1623
  }
1570
- const hasAlt = typeof props.alt === "string" && props.alt.trim().length > 0 || (0, import_schema8.isVariableBinding)(props.alt);
1624
+ const hasAlt = typeof props.alt === "string" && props.alt.trim().length > 0 || (0, import_schema9.isVariableBinding)(props.alt);
1571
1625
  if (!hasAlt) {
1572
1626
  errors.push('Image requires non-empty "alt" text.');
1573
1627
  }
@@ -1583,7 +1637,7 @@ var imageDefinition = {
1583
1637
  };
1584
1638
 
1585
1639
  // src/definitions/media/video.ts
1586
- var import_schema9 = require("@kubuild/schema");
1640
+ var import_schema10 = require("@kubuild/schema");
1587
1641
  var videoDefinition = {
1588
1642
  type: "video",
1589
1643
  label: "Video",
@@ -1651,25 +1705,25 @@ var videoDefinition = {
1651
1705
  ],
1652
1706
  validateProps: (props) => {
1653
1707
  const errors = [];
1654
- if (props.src !== void 0 && typeof props.src !== "string" && !(0, import_schema9.isVariableBinding)(props.src)) {
1708
+ if (props.src !== void 0 && typeof props.src !== "string" && !(0, import_schema10.isVariableBinding)(props.src)) {
1655
1709
  errors.push('Video "src" must be a string when provided.');
1656
1710
  }
1657
- if (props.provider !== void 0 && !(0, import_schema9.isVariableBinding)(props.provider)) {
1711
+ if (props.provider !== void 0 && !(0, import_schema10.isVariableBinding)(props.provider)) {
1658
1712
  const allowed = ["auto", "html5", "youtube", "vimeo"];
1659
1713
  if (typeof props.provider !== "string" || !allowed.includes(props.provider)) {
1660
1714
  errors.push(`Video "provider" must be one of: ${allowed.join(", ")}.`);
1661
1715
  }
1662
1716
  }
1663
- if (props.controls !== void 0 && typeof props.controls !== "boolean" && !(0, import_schema9.isVariableBinding)(props.controls)) {
1717
+ if (props.controls !== void 0 && typeof props.controls !== "boolean" && !(0, import_schema10.isVariableBinding)(props.controls)) {
1664
1718
  errors.push('Video "controls" must be a boolean.');
1665
1719
  }
1666
- if (props.autoplay !== void 0 && typeof props.autoplay !== "boolean" && !(0, import_schema9.isVariableBinding)(props.autoplay)) {
1720
+ if (props.autoplay !== void 0 && typeof props.autoplay !== "boolean" && !(0, import_schema10.isVariableBinding)(props.autoplay)) {
1667
1721
  errors.push('Video "autoplay" must be a boolean.');
1668
1722
  }
1669
- if (props.loop !== void 0 && typeof props.loop !== "boolean" && !(0, import_schema9.isVariableBinding)(props.loop)) {
1723
+ if (props.loop !== void 0 && typeof props.loop !== "boolean" && !(0, import_schema10.isVariableBinding)(props.loop)) {
1670
1724
  errors.push('Video "loop" must be a boolean.');
1671
1725
  }
1672
- if (props.muted !== void 0 && typeof props.muted !== "boolean" && !(0, import_schema9.isVariableBinding)(props.muted)) {
1726
+ if (props.muted !== void 0 && typeof props.muted !== "boolean" && !(0, import_schema10.isVariableBinding)(props.muted)) {
1673
1727
  errors.push('Video "muted" must be a boolean.');
1674
1728
  }
1675
1729
  return errors.length > 0 ? errors : true;
@@ -1687,7 +1741,7 @@ var videoDefinition = {
1687
1741
  };
1688
1742
 
1689
1743
  // src/definitions/media/icon.ts
1690
- var import_schema10 = require("@kubuild/schema");
1744
+ var import_schema11 = require("@kubuild/schema");
1691
1745
  var iconDefinition = {
1692
1746
  type: "icon",
1693
1747
  label: "Icon",
@@ -1713,15 +1767,15 @@ var iconDefinition = {
1713
1767
  ],
1714
1768
  validateProps: (props) => {
1715
1769
  const errors = [];
1716
- if (props.name !== void 0 && !(0, import_schema10.isVariableBinding)(props.name) && (typeof props.name !== "string" || props.name.trim().length === 0)) {
1770
+ if (props.name !== void 0 && !(0, import_schema11.isVariableBinding)(props.name) && (typeof props.name !== "string" || props.name.trim().length === 0)) {
1717
1771
  errors.push('Icon requires a non-empty "name".');
1718
1772
  }
1719
- if (props.size !== void 0 && !(0, import_schema10.isVariableBinding)(props.size)) {
1773
+ if (props.size !== void 0 && !(0, import_schema11.isVariableBinding)(props.size)) {
1720
1774
  if (typeof props.size !== "number" || props.size < 0) {
1721
1775
  errors.push('Icon "size" must be a non-negative number.');
1722
1776
  }
1723
1777
  }
1724
- if (props.strokeWidth !== void 0 && !(0, import_schema10.isVariableBinding)(props.strokeWidth)) {
1778
+ if (props.strokeWidth !== void 0 && !(0, import_schema11.isVariableBinding)(props.strokeWidth)) {
1725
1779
  if (typeof props.strokeWidth !== "number" || props.strokeWidth < 0) {
1726
1780
  errors.push('Icon "strokeWidth" must be a non-negative number.');
1727
1781
  }
@@ -1738,7 +1792,7 @@ var iconDefinition = {
1738
1792
  };
1739
1793
 
1740
1794
  // src/definitions/media/html-embed.ts
1741
- var import_schema11 = require("@kubuild/schema");
1795
+ var import_schema12 = require("@kubuild/schema");
1742
1796
  var htmlEmbedDefinition = {
1743
1797
  type: "html-embed",
1744
1798
  label: "HTML Embed",
@@ -1762,7 +1816,7 @@ var htmlEmbedDefinition = {
1762
1816
  ],
1763
1817
  validateProps: (props) => {
1764
1818
  const errors = [];
1765
- if (props.html !== void 0 && typeof props.html !== "string" && !(0, import_schema11.isVariableBinding)(props.html)) {
1819
+ if (props.html !== void 0 && typeof props.html !== "string" && !(0, import_schema12.isVariableBinding)(props.html)) {
1766
1820
  errors.push('HTML Embed "html" must be a string.');
1767
1821
  }
1768
1822
  return errors.length > 0 ? errors : true;
@@ -1776,7 +1830,7 @@ var htmlEmbedDefinition = {
1776
1830
  };
1777
1831
 
1778
1832
  // src/definitions/data/table.ts
1779
- var import_schema12 = require("@kubuild/schema");
1833
+ var import_schema13 = require("@kubuild/schema");
1780
1834
  var tableDefinition = {
1781
1835
  type: "table",
1782
1836
  label: "Table",
@@ -1816,13 +1870,13 @@ var tableDefinition = {
1816
1870
  ],
1817
1871
  validateProps: (props) => {
1818
1872
  const errors = [];
1819
- if (props.striped !== void 0 && typeof props.striped !== "boolean" && !(0, import_schema12.isVariableBinding)(props.striped)) {
1873
+ if (props.striped !== void 0 && typeof props.striped !== "boolean" && !(0, import_schema13.isVariableBinding)(props.striped)) {
1820
1874
  errors.push('Table "striped" must be a boolean.');
1821
1875
  }
1822
- if (props.bordered !== void 0 && typeof props.bordered !== "boolean" && !(0, import_schema12.isVariableBinding)(props.bordered)) {
1876
+ if (props.bordered !== void 0 && typeof props.bordered !== "boolean" && !(0, import_schema13.isVariableBinding)(props.bordered)) {
1823
1877
  errors.push('Table "bordered" must be a boolean.');
1824
1878
  }
1825
- if (props.compact !== void 0 && typeof props.compact !== "boolean" && !(0, import_schema12.isVariableBinding)(props.compact)) {
1879
+ if (props.compact !== void 0 && typeof props.compact !== "boolean" && !(0, import_schema13.isVariableBinding)(props.compact)) {
1826
1880
  errors.push('Table "compact" must be a boolean.');
1827
1881
  }
1828
1882
  return errors.length > 0 ? errors : true;
@@ -1907,22 +1961,22 @@ var tableCellDefinition = {
1907
1961
  ],
1908
1962
  validateProps: (props) => {
1909
1963
  const errors = [];
1910
- if (props.tag !== void 0 && !(0, import_schema12.isVariableBinding)(props.tag)) {
1964
+ if (props.tag !== void 0 && !(0, import_schema13.isVariableBinding)(props.tag)) {
1911
1965
  if (props.tag !== "td" && props.tag !== "th") {
1912
1966
  errors.push('Table Cell "tag" must be either "td" or "th".');
1913
1967
  }
1914
1968
  }
1915
- if (props.colSpan !== void 0 && !(0, import_schema12.isVariableBinding)(props.colSpan)) {
1969
+ if (props.colSpan !== void 0 && !(0, import_schema13.isVariableBinding)(props.colSpan)) {
1916
1970
  if (typeof props.colSpan !== "number" || props.colSpan < 1 || !Number.isInteger(props.colSpan)) {
1917
1971
  errors.push('Table Cell "colSpan" must be a positive integer (>= 1).');
1918
1972
  }
1919
1973
  }
1920
- if (props.rowSpan !== void 0 && !(0, import_schema12.isVariableBinding)(props.rowSpan)) {
1974
+ if (props.rowSpan !== void 0 && !(0, import_schema13.isVariableBinding)(props.rowSpan)) {
1921
1975
  if (typeof props.rowSpan !== "number" || props.rowSpan < 1 || !Number.isInteger(props.rowSpan)) {
1922
1976
  errors.push('Table Cell "rowSpan" must be a positive integer (>= 1).');
1923
1977
  }
1924
1978
  }
1925
- if (props.text !== void 0 && typeof props.text !== "string" && !(0, import_schema12.isVariableBinding)(props.text)) {
1979
+ if (props.text !== void 0 && typeof props.text !== "string" && !(0, import_schema13.isVariableBinding)(props.text)) {
1926
1980
  errors.push('Table Cell "text" must be a string when provided.');
1927
1981
  }
1928
1982
  return errors.length > 0 ? errors : true;
@@ -1939,7 +1993,7 @@ var tableCellDefinition = {
1939
1993
  };
1940
1994
 
1941
1995
  // src/definitions/data/list.ts
1942
- var import_schema13 = require("@kubuild/schema");
1996
+ var import_schema14 = require("@kubuild/schema");
1943
1997
  var listDefinition = {
1944
1998
  type: "list",
1945
1999
  label: "List",
@@ -1988,12 +2042,12 @@ var listDefinition = {
1988
2042
  ],
1989
2043
  validateProps: (props) => {
1990
2044
  const errors = [];
1991
- if (props.tag !== void 0 && !(0, import_schema13.isVariableBinding)(props.tag)) {
2045
+ if (props.tag !== void 0 && !(0, import_schema14.isVariableBinding)(props.tag)) {
1992
2046
  if (props.tag !== "ul" && props.tag !== "ol") {
1993
2047
  errors.push('List "tag" must be either "ul" or "ol".');
1994
2048
  }
1995
2049
  }
1996
- if (props.listStyleType !== void 0 && !(0, import_schema13.isVariableBinding)(props.listStyleType)) {
2050
+ if (props.listStyleType !== void 0 && !(0, import_schema14.isVariableBinding)(props.listStyleType)) {
1997
2051
  const allowed = ["disc", "circle", "square", "decimal", "none", "custom-icon"];
1998
2052
  if (typeof props.listStyleType !== "string" || !allowed.includes(props.listStyleType)) {
1999
2053
  errors.push(`List "listStyleType" must be one of: ${allowed.join(", ")}.`);
@@ -2048,7 +2102,7 @@ var listItemDefinition = {
2048
2102
  ],
2049
2103
  validateProps: (props) => {
2050
2104
  const errors = [];
2051
- if (props.text !== void 0 && typeof props.text !== "string" && !(0, import_schema13.isVariableBinding)(props.text)) {
2105
+ if (props.text !== void 0 && typeof props.text !== "string" && !(0, import_schema14.isVariableBinding)(props.text)) {
2052
2106
  errors.push('List Item "text" must be a string when provided.');
2053
2107
  }
2054
2108
  return errors.length > 0 ? errors : true;
@@ -2085,7 +2139,7 @@ var collectionDefinition = {
2085
2139
  };
2086
2140
 
2087
2141
  // src/definitions/form/button.ts
2088
- var import_schema14 = require("@kubuild/schema");
2142
+ var import_schema15 = require("@kubuild/schema");
2089
2143
  var buttonDefinition = {
2090
2144
  type: "button",
2091
2145
  label: "Button",
@@ -2093,6 +2147,7 @@ var buttonDefinition = {
2093
2147
  icon: "mouse-pointer",
2094
2148
  acceptsChildren: false,
2095
2149
  capabilities: ["actionRegistry"],
2150
+ ...canonicalTextPropFields("button"),
2096
2151
  defaultProps: {
2097
2152
  label: "Click Me",
2098
2153
  variant: "primary"
@@ -2136,22 +2191,22 @@ var buttonDefinition = {
2136
2191
  ],
2137
2192
  validateProps: (props) => {
2138
2193
  const errors = [];
2139
- const hasLabel = typeof props.label === "string" && props.label.trim().length > 0 || (0, import_schema14.isVariableBinding)(props.label);
2194
+ const hasLabel = typeof props.label === "string" && props.label.trim().length > 0 || (0, import_schema15.isVariableBinding)(props.label);
2140
2195
  if (!hasLabel) {
2141
2196
  errors.push('Button requires a non-empty "label".');
2142
2197
  }
2143
- if (props.href !== void 0 && typeof props.href !== "string" && !(0, import_schema14.isVariableBinding)(props.href)) {
2198
+ if (props.href !== void 0 && typeof props.href !== "string" && !(0, import_schema15.isVariableBinding)(props.href)) {
2144
2199
  errors.push('Button "href" must be a string when provided.');
2145
2200
  }
2146
- if (props.buttonType !== void 0 && !(0, import_schema14.isVariableBinding)(props.buttonType)) {
2201
+ if (props.buttonType !== void 0 && !(0, import_schema15.isVariableBinding)(props.buttonType)) {
2147
2202
  if (!["button", "submit", "reset"].includes(props.buttonType)) {
2148
2203
  errors.push('Button "buttonType" must be one of: "button", "submit", "reset".');
2149
2204
  }
2150
2205
  }
2151
- if (props.action !== void 0 && !(0, import_schema14.isActionBinding)(props.action)) {
2206
+ if (props.action !== void 0 && !(0, import_schema15.isActionBinding)(props.action)) {
2152
2207
  errors.push('Button "action" must be a valid action binding when provided.');
2153
2208
  }
2154
- if (props.disabled !== void 0 && typeof props.disabled !== "boolean" && !(0, import_schema14.isVariableBinding)(props.disabled)) {
2209
+ if (props.disabled !== void 0 && typeof props.disabled !== "boolean" && !(0, import_schema15.isVariableBinding)(props.disabled)) {
2155
2210
  errors.push('Button "disabled" must be a boolean when provided.');
2156
2211
  }
2157
2212
  return errors.length > 0 ? errors : true;
@@ -2239,25 +2294,25 @@ var buttonSubmitDefinition = {
2239
2294
  ],
2240
2295
  validateProps: (props) => {
2241
2296
  const errors = [];
2242
- const hasLabel = typeof props.label === "string" && props.label.trim().length > 0 || (0, import_schema14.isVariableBinding)(props.label);
2297
+ const hasLabel = typeof props.label === "string" && props.label.trim().length > 0 || (0, import_schema15.isVariableBinding)(props.label);
2243
2298
  if (!hasLabel) {
2244
2299
  errors.push('Submit Button requires a non-empty "label".');
2245
2300
  }
2246
- if (props.loadingText !== void 0 && typeof props.loadingText !== "string" && !(0, import_schema14.isVariableBinding)(props.loadingText)) {
2301
+ if (props.loadingText !== void 0 && typeof props.loadingText !== "string" && !(0, import_schema15.isVariableBinding)(props.loadingText)) {
2247
2302
  errors.push('Submit Button "loadingText" must be a string when provided.');
2248
2303
  }
2249
- if (props.showSpinner !== void 0 && typeof props.showSpinner !== "boolean" && !(0, import_schema14.isVariableBinding)(props.showSpinner)) {
2304
+ if (props.showSpinner !== void 0 && typeof props.showSpinner !== "boolean" && !(0, import_schema15.isVariableBinding)(props.showSpinner)) {
2250
2305
  errors.push('Submit Button "showSpinner" must be a boolean when provided.');
2251
2306
  }
2252
- if (props.autoDisableOnSubmit !== void 0 && typeof props.autoDisableOnSubmit !== "boolean" && !(0, import_schema14.isVariableBinding)(props.autoDisableOnSubmit)) {
2307
+ if (props.autoDisableOnSubmit !== void 0 && typeof props.autoDisableOnSubmit !== "boolean" && !(0, import_schema15.isVariableBinding)(props.autoDisableOnSubmit)) {
2253
2308
  errors.push('Submit Button "autoDisableOnSubmit" must be a boolean when provided.');
2254
2309
  }
2255
- if (props.buttonType !== void 0 && !(0, import_schema14.isVariableBinding)(props.buttonType)) {
2310
+ if (props.buttonType !== void 0 && !(0, import_schema15.isVariableBinding)(props.buttonType)) {
2256
2311
  if (!["submit", "reset", "button"].includes(props.buttonType)) {
2257
2312
  errors.push('Submit Button "buttonType" must be one of: "submit", "reset", "button".');
2258
2313
  }
2259
2314
  }
2260
- if (props.disabled !== void 0 && typeof props.disabled !== "boolean" && !(0, import_schema14.isVariableBinding)(props.disabled)) {
2315
+ if (props.disabled !== void 0 && typeof props.disabled !== "boolean" && !(0, import_schema15.isVariableBinding)(props.disabled)) {
2261
2316
  errors.push('Submit Button "disabled" must be a boolean when provided.');
2262
2317
  }
2263
2318
  return errors.length > 0 ? errors : true;
@@ -2284,7 +2339,7 @@ var buttonSubmitDefinition = {
2284
2339
  };
2285
2340
 
2286
2341
  // src/definitions/form/form.ts
2287
- var import_schema15 = require("@kubuild/schema");
2342
+ var import_schema16 = require("@kubuild/schema");
2288
2343
  var formDefinition = {
2289
2344
  type: "form",
2290
2345
  label: "Form",
@@ -2371,34 +2426,34 @@ var formDefinition = {
2371
2426
  ],
2372
2427
  validateProps: (props) => {
2373
2428
  const errors = [];
2374
- if (props.name !== void 0 && typeof props.name !== "string" && !(0, import_schema15.isVariableBinding)(props.name)) {
2429
+ if (props.name !== void 0 && typeof props.name !== "string" && !(0, import_schema16.isVariableBinding)(props.name)) {
2375
2430
  errors.push('Form "name" must be a string when provided.');
2376
2431
  }
2377
- if (props.action !== void 0 && typeof props.action !== "string" && !(0, import_schema15.isVariableBinding)(props.action)) {
2432
+ if (props.action !== void 0 && typeof props.action !== "string" && !(0, import_schema16.isVariableBinding)(props.action)) {
2378
2433
  errors.push('Form "action" must be a string when provided.');
2379
2434
  }
2380
- if (props.method !== void 0 && !(0, import_schema15.isVariableBinding)(props.method)) {
2435
+ if (props.method !== void 0 && !(0, import_schema16.isVariableBinding)(props.method)) {
2381
2436
  if (!["GET", "POST", "get", "post"].includes(props.method)) {
2382
2437
  errors.push('Form "method" must be either "GET" or "POST".');
2383
2438
  }
2384
2439
  }
2385
- if (props.target !== void 0 && !(0, import_schema15.isVariableBinding)(props.target)) {
2440
+ if (props.target !== void 0 && !(0, import_schema16.isVariableBinding)(props.target)) {
2386
2441
  if (!["_self", "_blank", "_parent", "_top"].includes(props.target)) {
2387
2442
  errors.push('Form "target" must be one of: "_self", "_blank", "_parent", "_top".');
2388
2443
  }
2389
2444
  }
2390
- if (props.autoComplete !== void 0 && !(0, import_schema15.isVariableBinding)(props.autoComplete)) {
2445
+ if (props.autoComplete !== void 0 && !(0, import_schema16.isVariableBinding)(props.autoComplete)) {
2391
2446
  if (!["on", "off"].includes(props.autoComplete)) {
2392
2447
  errors.push('Form "autoComplete" must be either "on" or "off".');
2393
2448
  }
2394
2449
  }
2395
- if (props.preventDefault !== void 0 && typeof props.preventDefault !== "boolean" && !(0, import_schema15.isVariableBinding)(props.preventDefault)) {
2450
+ if (props.preventDefault !== void 0 && typeof props.preventDefault !== "boolean" && !(0, import_schema16.isVariableBinding)(props.preventDefault)) {
2396
2451
  errors.push('Form "preventDefault" must be a boolean when provided.');
2397
2452
  }
2398
- if (props.scrollToFirstError !== void 0 && typeof props.scrollToFirstError !== "boolean" && !(0, import_schema15.isVariableBinding)(props.scrollToFirstError)) {
2453
+ if (props.scrollToFirstError !== void 0 && typeof props.scrollToFirstError !== "boolean" && !(0, import_schema16.isVariableBinding)(props.scrollToFirstError)) {
2399
2454
  errors.push('Form "scrollToFirstError" must be a boolean when provided.');
2400
2455
  }
2401
- if (props.resetOnSubmit !== void 0 && typeof props.resetOnSubmit !== "boolean" && !(0, import_schema15.isVariableBinding)(props.resetOnSubmit)) {
2456
+ if (props.resetOnSubmit !== void 0 && typeof props.resetOnSubmit !== "boolean" && !(0, import_schema16.isVariableBinding)(props.resetOnSubmit)) {
2402
2457
  errors.push('Form "resetOnSubmit" must be a boolean when provided.');
2403
2458
  }
2404
2459
  return errors.length > 0 ? errors : true;
@@ -2414,7 +2469,7 @@ var formDefinition = {
2414
2469
  };
2415
2470
 
2416
2471
  // src/definitions/form/input.ts
2417
- var import_schema16 = require("@kubuild/schema");
2472
+ var import_schema17 = require("@kubuild/schema");
2418
2473
  var inputDefinition = {
2419
2474
  type: "input",
2420
2475
  label: "Input",
@@ -2496,47 +2551,47 @@ var inputDefinition = {
2496
2551
  ],
2497
2552
  validateProps: (props) => {
2498
2553
  const errors = [];
2499
- if (props.name !== void 0 && typeof props.name !== "string" && !(0, import_schema16.isVariableBinding)(props.name)) {
2554
+ if (props.name !== void 0 && typeof props.name !== "string" && !(0, import_schema17.isVariableBinding)(props.name)) {
2500
2555
  errors.push('Input "name" must be a string when provided.');
2501
2556
  }
2502
- if (props.type !== void 0 && !(0, import_schema16.isVariableBinding)(props.type)) {
2557
+ if (props.type !== void 0 && !(0, import_schema17.isVariableBinding)(props.type)) {
2503
2558
  const validTypes = ["text", "email", "number", "password", "tel", "url", "search", "date", "hidden"];
2504
2559
  if (!validTypes.includes(props.type)) {
2505
2560
  errors.push(`Input "type" must be one of: ${validTypes.join(", ")}.`);
2506
2561
  }
2507
2562
  }
2508
- if (props.placeholder !== void 0 && typeof props.placeholder !== "string" && !(0, import_schema16.isVariableBinding)(props.placeholder)) {
2563
+ if (props.placeholder !== void 0 && typeof props.placeholder !== "string" && !(0, import_schema17.isVariableBinding)(props.placeholder)) {
2509
2564
  errors.push('Input "placeholder" must be a string when provided.');
2510
2565
  }
2511
- if (props.required !== void 0 && typeof props.required !== "boolean" && !(0, import_schema16.isVariableBinding)(props.required)) {
2566
+ if (props.required !== void 0 && typeof props.required !== "boolean" && !(0, import_schema17.isVariableBinding)(props.required)) {
2512
2567
  errors.push('Input "required" must be a boolean when provided.');
2513
2568
  }
2514
- if (props.disabled !== void 0 && typeof props.disabled !== "boolean" && !(0, import_schema16.isVariableBinding)(props.disabled)) {
2569
+ if (props.disabled !== void 0 && typeof props.disabled !== "boolean" && !(0, import_schema17.isVariableBinding)(props.disabled)) {
2515
2570
  errors.push('Input "disabled" must be a boolean when provided.');
2516
2571
  }
2517
- if (props.readOnly !== void 0 && typeof props.readOnly !== "boolean" && !(0, import_schema16.isVariableBinding)(props.readOnly)) {
2572
+ if (props.readOnly !== void 0 && typeof props.readOnly !== "boolean" && !(0, import_schema17.isVariableBinding)(props.readOnly)) {
2518
2573
  errors.push('Input "readOnly" must be a boolean when provided.');
2519
2574
  }
2520
- if (props.pattern !== void 0 && typeof props.pattern !== "string" && !(0, import_schema16.isVariableBinding)(props.pattern)) {
2575
+ if (props.pattern !== void 0 && typeof props.pattern !== "string" && !(0, import_schema17.isVariableBinding)(props.pattern)) {
2521
2576
  errors.push('Input "pattern" must be a string when provided.');
2522
2577
  }
2523
- if (props.minLength !== void 0 && !(0, import_schema16.isVariableBinding)(props.minLength)) {
2578
+ if (props.minLength !== void 0 && !(0, import_schema17.isVariableBinding)(props.minLength)) {
2524
2579
  if (typeof props.minLength !== "number" || props.minLength < 0 || !Number.isInteger(props.minLength)) {
2525
2580
  errors.push('Input "minLength" must be a non-negative integer when provided.');
2526
2581
  }
2527
2582
  }
2528
- if (props.maxLength !== void 0 && !(0, import_schema16.isVariableBinding)(props.maxLength)) {
2583
+ if (props.maxLength !== void 0 && !(0, import_schema17.isVariableBinding)(props.maxLength)) {
2529
2584
  if (typeof props.maxLength !== "number" || props.maxLength < 0 || !Number.isInteger(props.maxLength)) {
2530
2585
  errors.push('Input "maxLength" must be a non-negative integer when provided.');
2531
2586
  }
2532
2587
  }
2533
- if (props.prefixIcon !== void 0 && typeof props.prefixIcon !== "string" && !(0, import_schema16.isVariableBinding)(props.prefixIcon)) {
2588
+ if (props.prefixIcon !== void 0 && typeof props.prefixIcon !== "string" && !(0, import_schema17.isVariableBinding)(props.prefixIcon)) {
2534
2589
  errors.push('Input "prefixIcon" must be a string when provided.');
2535
2590
  }
2536
- if (props.suffixIcon !== void 0 && typeof props.suffixIcon !== "string" && !(0, import_schema16.isVariableBinding)(props.suffixIcon)) {
2591
+ if (props.suffixIcon !== void 0 && typeof props.suffixIcon !== "string" && !(0, import_schema17.isVariableBinding)(props.suffixIcon)) {
2537
2592
  errors.push('Input "suffixIcon" must be a string when provided.');
2538
2593
  }
2539
- if (props.helperText !== void 0 && typeof props.helperText !== "string" && !(0, import_schema16.isVariableBinding)(props.helperText)) {
2594
+ if (props.helperText !== void 0 && typeof props.helperText !== "string" && !(0, import_schema17.isVariableBinding)(props.helperText)) {
2540
2595
  errors.push('Input "helperText" must be a string when provided.');
2541
2596
  }
2542
2597
  return errors.length > 0 ? errors : true;
@@ -2561,7 +2616,7 @@ var inputDefinition = {
2561
2616
  };
2562
2617
 
2563
2618
  // src/definitions/form/textarea.ts
2564
- var import_schema17 = require("@kubuild/schema");
2619
+ var import_schema18 = require("@kubuild/schema");
2565
2620
  var textareaDefinition = {
2566
2621
  type: "textarea",
2567
2622
  label: "Textarea",
@@ -2623,41 +2678,41 @@ var textareaDefinition = {
2623
2678
  ],
2624
2679
  validateProps: (props) => {
2625
2680
  const errors = [];
2626
- if (props.name !== void 0 && typeof props.name !== "string" && !(0, import_schema17.isVariableBinding)(props.name)) {
2681
+ if (props.name !== void 0 && typeof props.name !== "string" && !(0, import_schema18.isVariableBinding)(props.name)) {
2627
2682
  errors.push('Textarea "name" must be a string when provided.');
2628
2683
  }
2629
- if (props.rows !== void 0 && !(0, import_schema17.isVariableBinding)(props.rows)) {
2684
+ if (props.rows !== void 0 && !(0, import_schema18.isVariableBinding)(props.rows)) {
2630
2685
  if (typeof props.rows !== "number" || props.rows < 1 || !Number.isInteger(props.rows)) {
2631
2686
  errors.push('Textarea "rows" must be a positive integer (>= 1).');
2632
2687
  }
2633
2688
  }
2634
- if (props.placeholder !== void 0 && typeof props.placeholder !== "string" && !(0, import_schema17.isVariableBinding)(props.placeholder)) {
2689
+ if (props.placeholder !== void 0 && typeof props.placeholder !== "string" && !(0, import_schema18.isVariableBinding)(props.placeholder)) {
2635
2690
  errors.push('Textarea "placeholder" must be a string when provided.');
2636
2691
  }
2637
- if (props.required !== void 0 && typeof props.required !== "boolean" && !(0, import_schema17.isVariableBinding)(props.required)) {
2692
+ if (props.required !== void 0 && typeof props.required !== "boolean" && !(0, import_schema18.isVariableBinding)(props.required)) {
2638
2693
  errors.push('Textarea "required" must be a boolean when provided.');
2639
2694
  }
2640
- if (props.disabled !== void 0 && typeof props.disabled !== "boolean" && !(0, import_schema17.isVariableBinding)(props.disabled)) {
2695
+ if (props.disabled !== void 0 && typeof props.disabled !== "boolean" && !(0, import_schema18.isVariableBinding)(props.disabled)) {
2641
2696
  errors.push('Textarea "disabled" must be a boolean when provided.');
2642
2697
  }
2643
- if (props.readOnly !== void 0 && typeof props.readOnly !== "boolean" && !(0, import_schema17.isVariableBinding)(props.readOnly)) {
2698
+ if (props.readOnly !== void 0 && typeof props.readOnly !== "boolean" && !(0, import_schema18.isVariableBinding)(props.readOnly)) {
2644
2699
  errors.push('Textarea "readOnly" must be a boolean when provided.');
2645
2700
  }
2646
- if (props.resize !== void 0 && !(0, import_schema17.isVariableBinding)(props.resize)) {
2701
+ if (props.resize !== void 0 && !(0, import_schema18.isVariableBinding)(props.resize)) {
2647
2702
  const allowedResize = ["vertical", "horizontal", "both", "none"];
2648
2703
  if (typeof props.resize !== "string" || !allowedResize.includes(props.resize)) {
2649
2704
  errors.push(`Textarea "resize" must be one of: ${allowedResize.join(", ")}.`);
2650
2705
  }
2651
2706
  }
2652
- if (props.autoGrow !== void 0 && typeof props.autoGrow !== "boolean" && !(0, import_schema17.isVariableBinding)(props.autoGrow)) {
2707
+ if (props.autoGrow !== void 0 && typeof props.autoGrow !== "boolean" && !(0, import_schema18.isVariableBinding)(props.autoGrow)) {
2653
2708
  errors.push('Textarea "autoGrow" must be a boolean when provided.');
2654
2709
  }
2655
- if (props.maxCharCount !== void 0 && !(0, import_schema17.isVariableBinding)(props.maxCharCount)) {
2710
+ if (props.maxCharCount !== void 0 && !(0, import_schema18.isVariableBinding)(props.maxCharCount)) {
2656
2711
  if (typeof props.maxCharCount !== "number" || props.maxCharCount < 1 || !Number.isInteger(props.maxCharCount)) {
2657
2712
  errors.push('Textarea "maxCharCount" must be a positive integer (>= 1) when provided.');
2658
2713
  }
2659
2714
  }
2660
- if (props.helperText !== void 0 && typeof props.helperText !== "string" && !(0, import_schema17.isVariableBinding)(props.helperText)) {
2715
+ if (props.helperText !== void 0 && typeof props.helperText !== "string" && !(0, import_schema18.isVariableBinding)(props.helperText)) {
2661
2716
  errors.push('Textarea "helperText" must be a string when provided.');
2662
2717
  }
2663
2718
  return errors.length > 0 ? errors : true;
@@ -2682,7 +2737,7 @@ var textareaDefinition = {
2682
2737
  };
2683
2738
 
2684
2739
  // src/definitions/form/select.ts
2685
- var import_schema18 = require("@kubuild/schema");
2740
+ var import_schema19 = require("@kubuild/schema");
2686
2741
  var selectDefinition = {
2687
2742
  type: "select",
2688
2743
  label: "Select",
@@ -2734,21 +2789,21 @@ var selectDefinition = {
2734
2789
  ],
2735
2790
  validateProps: (props) => {
2736
2791
  const errors = [];
2737
- if (props.name !== void 0 && typeof props.name !== "string" && !(0, import_schema18.isVariableBinding)(props.name)) {
2792
+ if (props.name !== void 0 && typeof props.name !== "string" && !(0, import_schema19.isVariableBinding)(props.name)) {
2738
2793
  errors.push('Select "name" must be a string when provided.');
2739
2794
  }
2740
- if (props.options !== void 0 && !(0, import_schema18.isVariableBinding)(props.options)) {
2795
+ if (props.options !== void 0 && !(0, import_schema19.isVariableBinding)(props.options)) {
2741
2796
  if (!Array.isArray(props.options) && typeof props.options !== "string") {
2742
2797
  errors.push('Select "options" must be an array of option objects or a JSON string.');
2743
2798
  }
2744
2799
  }
2745
- if (props.required !== void 0 && typeof props.required !== "boolean" && !(0, import_schema18.isVariableBinding)(props.required)) {
2800
+ if (props.required !== void 0 && typeof props.required !== "boolean" && !(0, import_schema19.isVariableBinding)(props.required)) {
2746
2801
  errors.push('Select "required" must be a boolean when provided.');
2747
2802
  }
2748
- if (props.disabled !== void 0 && typeof props.disabled !== "boolean" && !(0, import_schema18.isVariableBinding)(props.disabled)) {
2803
+ if (props.disabled !== void 0 && typeof props.disabled !== "boolean" && !(0, import_schema19.isVariableBinding)(props.disabled)) {
2749
2804
  errors.push('Select "disabled" must be a boolean when provided.');
2750
2805
  }
2751
- if (props.helperText !== void 0 && typeof props.helperText !== "string" && !(0, import_schema18.isVariableBinding)(props.helperText)) {
2806
+ if (props.helperText !== void 0 && typeof props.helperText !== "string" && !(0, import_schema19.isVariableBinding)(props.helperText)) {
2752
2807
  errors.push('Select "helperText" must be a string when provided.');
2753
2808
  }
2754
2809
  return errors.length > 0 ? errors : true;
@@ -2773,7 +2828,7 @@ var selectDefinition = {
2773
2828
  };
2774
2829
 
2775
2830
  // src/definitions/form/checkbox.ts
2776
- var import_schema19 = require("@kubuild/schema");
2831
+ var import_schema20 = require("@kubuild/schema");
2777
2832
  var checkboxDefinition = {
2778
2833
  type: "checkbox",
2779
2834
  label: "Checkbox",
@@ -2815,28 +2870,28 @@ var checkboxDefinition = {
2815
2870
  ],
2816
2871
  validateProps: (props) => {
2817
2872
  const errors = [];
2818
- if (props.label !== void 0 && typeof props.label !== "string" && !(0, import_schema19.isVariableBinding)(props.label)) {
2873
+ if (props.label !== void 0 && typeof props.label !== "string" && !(0, import_schema20.isVariableBinding)(props.label)) {
2819
2874
  errors.push('Checkbox "label" must be a string when provided.');
2820
2875
  }
2821
- if (props.name !== void 0 && typeof props.name !== "string" && !(0, import_schema19.isVariableBinding)(props.name)) {
2876
+ if (props.name !== void 0 && typeof props.name !== "string" && !(0, import_schema20.isVariableBinding)(props.name)) {
2822
2877
  errors.push('Checkbox "name" must be a string when provided.');
2823
2878
  }
2824
- if (props.value !== void 0 && typeof props.value !== "string" && !(0, import_schema19.isVariableBinding)(props.value)) {
2879
+ if (props.value !== void 0 && typeof props.value !== "string" && !(0, import_schema20.isVariableBinding)(props.value)) {
2825
2880
  errors.push('Checkbox "value" must be a string when provided.');
2826
2881
  }
2827
- if (props.defaultChecked !== void 0 && typeof props.defaultChecked !== "boolean" && !(0, import_schema19.isVariableBinding)(props.defaultChecked)) {
2882
+ if (props.defaultChecked !== void 0 && typeof props.defaultChecked !== "boolean" && !(0, import_schema20.isVariableBinding)(props.defaultChecked)) {
2828
2883
  errors.push('Checkbox "defaultChecked" must be a boolean when provided.');
2829
2884
  }
2830
- if (props.indeterminate !== void 0 && typeof props.indeterminate !== "boolean" && !(0, import_schema19.isVariableBinding)(props.indeterminate)) {
2885
+ if (props.indeterminate !== void 0 && typeof props.indeterminate !== "boolean" && !(0, import_schema20.isVariableBinding)(props.indeterminate)) {
2831
2886
  errors.push('Checkbox "indeterminate" must be a boolean when provided.');
2832
2887
  }
2833
- if (props.required !== void 0 && typeof props.required !== "boolean" && !(0, import_schema19.isVariableBinding)(props.required)) {
2888
+ if (props.required !== void 0 && typeof props.required !== "boolean" && !(0, import_schema20.isVariableBinding)(props.required)) {
2834
2889
  errors.push('Checkbox "required" must be a boolean when provided.');
2835
2890
  }
2836
- if (props.disabled !== void 0 && typeof props.disabled !== "boolean" && !(0, import_schema19.isVariableBinding)(props.disabled)) {
2891
+ if (props.disabled !== void 0 && typeof props.disabled !== "boolean" && !(0, import_schema20.isVariableBinding)(props.disabled)) {
2837
2892
  errors.push('Checkbox "disabled" must be a boolean when provided.');
2838
2893
  }
2839
- if (props.helperText !== void 0 && typeof props.helperText !== "string" && !(0, import_schema19.isVariableBinding)(props.helperText)) {
2894
+ if (props.helperText !== void 0 && typeof props.helperText !== "string" && !(0, import_schema20.isVariableBinding)(props.helperText)) {
2840
2895
  errors.push('Checkbox "helperText" must be a string when provided.');
2841
2896
  }
2842
2897
  return errors.length > 0 ? errors : true;
@@ -2855,7 +2910,7 @@ var checkboxDefinition = {
2855
2910
  };
2856
2911
 
2857
2912
  // src/definitions/form/switch.ts
2858
- var import_schema20 = require("@kubuild/schema");
2913
+ var import_schema21 = require("@kubuild/schema");
2859
2914
  var switchDefinition = {
2860
2915
  type: "switch",
2861
2916
  label: "Switch",
@@ -2907,31 +2962,31 @@ var switchDefinition = {
2907
2962
  ],
2908
2963
  validateProps: (props) => {
2909
2964
  const errors = [];
2910
- if (props.label !== void 0 && typeof props.label !== "string" && !(0, import_schema20.isVariableBinding)(props.label)) {
2965
+ if (props.label !== void 0 && typeof props.label !== "string" && !(0, import_schema21.isVariableBinding)(props.label)) {
2911
2966
  errors.push('Switch "label" must be a string when provided.');
2912
2967
  }
2913
- if (props.name !== void 0 && typeof props.name !== "string" && !(0, import_schema20.isVariableBinding)(props.name)) {
2968
+ if (props.name !== void 0 && typeof props.name !== "string" && !(0, import_schema21.isVariableBinding)(props.name)) {
2914
2969
  errors.push('Switch "name" must be a string when provided.');
2915
2970
  }
2916
- if (props.value !== void 0 && typeof props.value !== "string" && !(0, import_schema20.isVariableBinding)(props.value)) {
2971
+ if (props.value !== void 0 && typeof props.value !== "string" && !(0, import_schema21.isVariableBinding)(props.value)) {
2917
2972
  errors.push('Switch "value" must be a string when provided.');
2918
2973
  }
2919
- if (props.defaultChecked !== void 0 && typeof props.defaultChecked !== "boolean" && !(0, import_schema20.isVariableBinding)(props.defaultChecked)) {
2974
+ if (props.defaultChecked !== void 0 && typeof props.defaultChecked !== "boolean" && !(0, import_schema21.isVariableBinding)(props.defaultChecked)) {
2920
2975
  errors.push('Switch "defaultChecked" must be a boolean when provided.');
2921
2976
  }
2922
- if (props.switchSize !== void 0 && !(0, import_schema20.isVariableBinding)(props.switchSize)) {
2977
+ if (props.switchSize !== void 0 && !(0, import_schema21.isVariableBinding)(props.switchSize)) {
2923
2978
  const allowedSizes = ["sm", "md", "lg"];
2924
2979
  if (typeof props.switchSize !== "string" || !allowedSizes.includes(props.switchSize)) {
2925
2980
  errors.push(`Switch "switchSize" must be one of: ${allowedSizes.join(", ")}.`);
2926
2981
  }
2927
2982
  }
2928
- if (props.required !== void 0 && typeof props.required !== "boolean" && !(0, import_schema20.isVariableBinding)(props.required)) {
2983
+ if (props.required !== void 0 && typeof props.required !== "boolean" && !(0, import_schema21.isVariableBinding)(props.required)) {
2929
2984
  errors.push('Switch "required" must be a boolean when provided.');
2930
2985
  }
2931
- if (props.disabled !== void 0 && typeof props.disabled !== "boolean" && !(0, import_schema20.isVariableBinding)(props.disabled)) {
2986
+ if (props.disabled !== void 0 && typeof props.disabled !== "boolean" && !(0, import_schema21.isVariableBinding)(props.disabled)) {
2932
2987
  errors.push('Switch "disabled" must be a boolean when provided.');
2933
2988
  }
2934
- if (props.helperText !== void 0 && typeof props.helperText !== "string" && !(0, import_schema20.isVariableBinding)(props.helperText)) {
2989
+ if (props.helperText !== void 0 && typeof props.helperText !== "string" && !(0, import_schema21.isVariableBinding)(props.helperText)) {
2935
2990
  errors.push('Switch "helperText" must be a string when provided.');
2936
2991
  }
2937
2992
  return errors.length > 0 ? errors : true;
@@ -2950,7 +3005,7 @@ var switchDefinition = {
2950
3005
  };
2951
3006
 
2952
3007
  // src/definitions/form/radio.ts
2953
- var import_schema21 = require("@kubuild/schema");
3008
+ var import_schema22 = require("@kubuild/schema");
2954
3009
  var radioGroupDefinition = {
2955
3010
  type: "radio-group",
2956
3011
  label: "Radio Group",
@@ -3001,25 +3056,25 @@ var radioGroupDefinition = {
3001
3056
  ],
3002
3057
  validateProps: (props) => {
3003
3058
  const errors = [];
3004
- if (props.name !== void 0 && typeof props.name !== "string" && !(0, import_schema21.isVariableBinding)(props.name)) {
3059
+ if (props.name !== void 0 && typeof props.name !== "string" && !(0, import_schema22.isVariableBinding)(props.name)) {
3005
3060
  errors.push('RadioGroup "name" must be a string when provided.');
3006
3061
  }
3007
- if (props.defaultSelected !== void 0 && typeof props.defaultSelected !== "string" && !(0, import_schema21.isVariableBinding)(props.defaultSelected)) {
3062
+ if (props.defaultSelected !== void 0 && typeof props.defaultSelected !== "string" && !(0, import_schema22.isVariableBinding)(props.defaultSelected)) {
3008
3063
  errors.push('RadioGroup "defaultSelected" must be a string when provided.');
3009
3064
  }
3010
- if (props.orientation !== void 0 && !(0, import_schema21.isVariableBinding)(props.orientation)) {
3065
+ if (props.orientation !== void 0 && !(0, import_schema22.isVariableBinding)(props.orientation)) {
3011
3066
  const allowedOrientations = ["vertical", "horizontal"];
3012
3067
  if (typeof props.orientation !== "string" || !allowedOrientations.includes(props.orientation)) {
3013
3068
  errors.push(`RadioGroup "orientation" must be one of: ${allowedOrientations.join(", ")}.`);
3014
3069
  }
3015
3070
  }
3016
- if (props.required !== void 0 && typeof props.required !== "boolean" && !(0, import_schema21.isVariableBinding)(props.required)) {
3071
+ if (props.required !== void 0 && typeof props.required !== "boolean" && !(0, import_schema22.isVariableBinding)(props.required)) {
3017
3072
  errors.push('RadioGroup "required" must be a boolean when provided.');
3018
3073
  }
3019
- if (props.disabled !== void 0 && typeof props.disabled !== "boolean" && !(0, import_schema21.isVariableBinding)(props.disabled)) {
3074
+ if (props.disabled !== void 0 && typeof props.disabled !== "boolean" && !(0, import_schema22.isVariableBinding)(props.disabled)) {
3020
3075
  errors.push('RadioGroup "disabled" must be a boolean when provided.');
3021
3076
  }
3022
- if (props.helperText !== void 0 && typeof props.helperText !== "string" && !(0, import_schema21.isVariableBinding)(props.helperText)) {
3077
+ if (props.helperText !== void 0 && typeof props.helperText !== "string" && !(0, import_schema22.isVariableBinding)(props.helperText)) {
3023
3078
  errors.push('RadioGroup "helperText" must be a string when provided.');
3024
3079
  }
3025
3080
  return errors.length > 0 ? errors : true;
@@ -3070,25 +3125,25 @@ var radioDefinition = {
3070
3125
  ],
3071
3126
  validateProps: (props) => {
3072
3127
  const errors = [];
3073
- if (props.label !== void 0 && typeof props.label !== "string" && !(0, import_schema21.isVariableBinding)(props.label)) {
3128
+ if (props.label !== void 0 && typeof props.label !== "string" && !(0, import_schema22.isVariableBinding)(props.label)) {
3074
3129
  errors.push('Radio "label" must be a string when provided.');
3075
3130
  }
3076
- if (props.name !== void 0 && typeof props.name !== "string" && !(0, import_schema21.isVariableBinding)(props.name)) {
3131
+ if (props.name !== void 0 && typeof props.name !== "string" && !(0, import_schema22.isVariableBinding)(props.name)) {
3077
3132
  errors.push('Radio "name" must be a string when provided.');
3078
3133
  }
3079
- if (props.value !== void 0 && typeof props.value !== "string" && !(0, import_schema21.isVariableBinding)(props.value)) {
3134
+ if (props.value !== void 0 && typeof props.value !== "string" && !(0, import_schema22.isVariableBinding)(props.value)) {
3080
3135
  errors.push('Radio "value" must be a string when provided.');
3081
3136
  }
3082
- if (props.defaultChecked !== void 0 && typeof props.defaultChecked !== "boolean" && !(0, import_schema21.isVariableBinding)(props.defaultChecked)) {
3137
+ if (props.defaultChecked !== void 0 && typeof props.defaultChecked !== "boolean" && !(0, import_schema22.isVariableBinding)(props.defaultChecked)) {
3083
3138
  errors.push('Radio "defaultChecked" must be a boolean when provided.');
3084
3139
  }
3085
- if (props.required !== void 0 && typeof props.required !== "boolean" && !(0, import_schema21.isVariableBinding)(props.required)) {
3140
+ if (props.required !== void 0 && typeof props.required !== "boolean" && !(0, import_schema22.isVariableBinding)(props.required)) {
3086
3141
  errors.push('Radio "required" must be a boolean when provided.');
3087
3142
  }
3088
- if (props.disabled !== void 0 && typeof props.disabled !== "boolean" && !(0, import_schema21.isVariableBinding)(props.disabled)) {
3143
+ if (props.disabled !== void 0 && typeof props.disabled !== "boolean" && !(0, import_schema22.isVariableBinding)(props.disabled)) {
3089
3144
  errors.push('Radio "disabled" must be a boolean when provided.');
3090
3145
  }
3091
- if (props.helperText !== void 0 && typeof props.helperText !== "string" && !(0, import_schema21.isVariableBinding)(props.helperText)) {
3146
+ if (props.helperText !== void 0 && typeof props.helperText !== "string" && !(0, import_schema22.isVariableBinding)(props.helperText)) {
3092
3147
  errors.push('Radio "helperText" must be a string when provided.');
3093
3148
  }
3094
3149
  return errors.length > 0 ? errors : true;
@@ -3112,7 +3167,7 @@ var radioItemDefinition = {
3112
3167
  };
3113
3168
 
3114
3169
  // src/definitions/form/file-upload.ts
3115
- var import_schema22 = require("@kubuild/schema");
3170
+ var import_schema23 = require("@kubuild/schema");
3116
3171
  var fileUploadDefinition = {
3117
3172
  type: "file-upload",
3118
3173
  label: "File Upload",
@@ -3157,33 +3212,33 @@ var fileUploadDefinition = {
3157
3212
  ],
3158
3213
  validateProps: (props) => {
3159
3214
  const errors = [];
3160
- if (props.label !== void 0 && typeof props.label !== "string" && !(0, import_schema22.isVariableBinding)(props.label)) {
3215
+ if (props.label !== void 0 && typeof props.label !== "string" && !(0, import_schema23.isVariableBinding)(props.label)) {
3161
3216
  errors.push('FileUpload "label" must be a string when provided.');
3162
3217
  }
3163
- if (props.name !== void 0 && typeof props.name !== "string" && !(0, import_schema22.isVariableBinding)(props.name)) {
3218
+ if (props.name !== void 0 && typeof props.name !== "string" && !(0, import_schema23.isVariableBinding)(props.name)) {
3164
3219
  errors.push('FileUpload "name" must be a string when provided.');
3165
3220
  }
3166
- if (props.accept !== void 0 && typeof props.accept !== "string" && !(0, import_schema22.isVariableBinding)(props.accept)) {
3221
+ if (props.accept !== void 0 && typeof props.accept !== "string" && !(0, import_schema23.isVariableBinding)(props.accept)) {
3167
3222
  errors.push('FileUpload "accept" must be a string when provided.');
3168
3223
  }
3169
- if (props.maxFileSize !== void 0 && !(0, import_schema22.isVariableBinding)(props.maxFileSize)) {
3224
+ if (props.maxFileSize !== void 0 && !(0, import_schema23.isVariableBinding)(props.maxFileSize)) {
3170
3225
  if (typeof props.maxFileSize !== "number" || props.maxFileSize <= 0) {
3171
3226
  errors.push('FileUpload "maxFileSize" must be a positive number when provided.');
3172
3227
  }
3173
3228
  }
3174
- if (props.multiple !== void 0 && typeof props.multiple !== "boolean" && !(0, import_schema22.isVariableBinding)(props.multiple)) {
3229
+ if (props.multiple !== void 0 && typeof props.multiple !== "boolean" && !(0, import_schema23.isVariableBinding)(props.multiple)) {
3175
3230
  errors.push('FileUpload "multiple" must be a boolean when provided.');
3176
3231
  }
3177
- if (props.showPreview !== void 0 && typeof props.showPreview !== "boolean" && !(0, import_schema22.isVariableBinding)(props.showPreview)) {
3232
+ if (props.showPreview !== void 0 && typeof props.showPreview !== "boolean" && !(0, import_schema23.isVariableBinding)(props.showPreview)) {
3178
3233
  errors.push('FileUpload "showPreview" must be a boolean when provided.');
3179
3234
  }
3180
- if (props.required !== void 0 && typeof props.required !== "boolean" && !(0, import_schema22.isVariableBinding)(props.required)) {
3235
+ if (props.required !== void 0 && typeof props.required !== "boolean" && !(0, import_schema23.isVariableBinding)(props.required)) {
3181
3236
  errors.push('FileUpload "required" must be a boolean when provided.');
3182
3237
  }
3183
- if (props.disabled !== void 0 && typeof props.disabled !== "boolean" && !(0, import_schema22.isVariableBinding)(props.disabled)) {
3238
+ if (props.disabled !== void 0 && typeof props.disabled !== "boolean" && !(0, import_schema23.isVariableBinding)(props.disabled)) {
3184
3239
  errors.push('FileUpload "disabled" must be a boolean when provided.');
3185
3240
  }
3186
- if (props.helperText !== void 0 && typeof props.helperText !== "string" && !(0, import_schema22.isVariableBinding)(props.helperText)) {
3241
+ if (props.helperText !== void 0 && typeof props.helperText !== "string" && !(0, import_schema23.isVariableBinding)(props.helperText)) {
3187
3242
  errors.push('FileUpload "helperText" must be a string when provided.');
3188
3243
  }
3189
3244
  return errors.length > 0 ? errors : true;
@@ -3423,6 +3478,526 @@ var collapsibleDefinition = {
3423
3478
  }
3424
3479
  };
3425
3480
 
3481
+ // src/definitions/conversion/countdown.ts
3482
+ var import_schema24 = require("@kubuild/schema");
3483
+ var COUNTDOWN_MODES = ["evergreen", "fixed"];
3484
+ var COUNTDOWN_FORMATS = ["mm:ss", "hh:mm:ss", "d h m s"];
3485
+ var COUNTDOWN_EXPIRE_BEHAVIORS = ["text", "hide", "zero"];
3486
+ var COUNTDOWN_STORAGE_TYPES = ["session", "local"];
3487
+ var countdownDefinition = {
3488
+ type: "countdown",
3489
+ label: "Countdown",
3490
+ category: "interactive",
3491
+ icon: "clock",
3492
+ description: "Urgency timer for limited offers (evergreen per-visitor or fixed deadline).",
3493
+ acceptsChildren: false,
3494
+ defaultProps: {
3495
+ mode: "evergreen",
3496
+ durationMinutes: 15,
3497
+ targetDate: "",
3498
+ timezone: "UTC",
3499
+ format: "hh:mm:ss",
3500
+ label: "",
3501
+ labelDays: "Days",
3502
+ labelHours: "Hours",
3503
+ labelMinutes: "Minutes",
3504
+ labelSeconds: "Seconds",
3505
+ expireBehavior: "text",
3506
+ expiredText: "This offer has expired.",
3507
+ storage: "session",
3508
+ storageKey: ""
3509
+ },
3510
+ propFields: [
3511
+ {
3512
+ name: "mode",
3513
+ label: "Mode",
3514
+ type: "select",
3515
+ defaultValue: "evergreen",
3516
+ options: [
3517
+ { label: "Evergreen (per visitor)", value: "evergreen" },
3518
+ { label: "Fixed date", value: "fixed" }
3519
+ ]
3520
+ },
3521
+ {
3522
+ name: "durationMinutes",
3523
+ label: "Duration (minutes)",
3524
+ type: "number",
3525
+ defaultValue: 15,
3526
+ description: "Evergreen mode: how long each visitor gets from their first view."
3527
+ },
3528
+ {
3529
+ name: "targetDate",
3530
+ label: "Target Date/Time",
3531
+ type: "string",
3532
+ defaultValue: "",
3533
+ description: 'Fixed mode: wall-clock time "YYYY-MM-DDTHH:mm" in the selected timezone.'
3534
+ },
3535
+ {
3536
+ name: "timezone",
3537
+ label: "Timezone",
3538
+ type: "string",
3539
+ defaultValue: "UTC",
3540
+ description: 'Fixed mode: IANA timezone name, e.g. "Asia/Jakarta" or "Europe/London".'
3541
+ },
3542
+ {
3543
+ name: "format",
3544
+ label: "Format",
3545
+ type: "select",
3546
+ defaultValue: "hh:mm:ss",
3547
+ options: [
3548
+ { label: "mm:ss", value: "mm:ss" },
3549
+ { label: "hh:mm:ss", value: "hh:mm:ss" },
3550
+ { label: "d h m s (unit blocks)", value: "d h m s" }
3551
+ ]
3552
+ },
3553
+ {
3554
+ name: "label",
3555
+ label: "Label",
3556
+ type: "string",
3557
+ defaultValue: "",
3558
+ description: 'Optional text shown before the timer, e.g. "Offer ends in".'
3559
+ },
3560
+ { name: "labelDays", label: "Days Label", type: "string", defaultValue: "Days" },
3561
+ { name: "labelHours", label: "Hours Label", type: "string", defaultValue: "Hours" },
3562
+ { name: "labelMinutes", label: "Minutes Label", type: "string", defaultValue: "Minutes" },
3563
+ { name: "labelSeconds", label: "Seconds Label", type: "string", defaultValue: "Seconds" },
3564
+ {
3565
+ name: "expireBehavior",
3566
+ label: "When Expired",
3567
+ type: "select",
3568
+ defaultValue: "text",
3569
+ options: [
3570
+ { label: "Show expired text", value: "text" },
3571
+ { label: "Hide timer", value: "hide" },
3572
+ { label: "Keep showing zeros", value: "zero" }
3573
+ ],
3574
+ description: 'Add an "On Expire" action pipeline to redirect, show a toast, open a modal, etc.'
3575
+ },
3576
+ {
3577
+ name: "expiredText",
3578
+ label: "Expired Text",
3579
+ type: "string",
3580
+ defaultValue: "This offer has expired."
3581
+ },
3582
+ {
3583
+ name: "storage",
3584
+ label: "Evergreen Storage",
3585
+ type: "select",
3586
+ defaultValue: "session",
3587
+ options: [
3588
+ { label: "Session (per browser session)", value: "session" },
3589
+ { label: "Local (persists across visits)", value: "local" }
3590
+ ]
3591
+ },
3592
+ {
3593
+ name: "storageKey",
3594
+ label: "Storage Key",
3595
+ type: "string",
3596
+ defaultValue: "",
3597
+ description: "Share one deadline across pages by using the same key (defaults to the node id)."
3598
+ }
3599
+ ],
3600
+ traits: [
3601
+ idTrait(),
3602
+ ariaLabelTrait({ description: 'Accessible name for the timer, e.g. "Offer ends in".' })
3603
+ ],
3604
+ defaultStyles: {
3605
+ base: {
3606
+ display: "flex",
3607
+ alignItems: "center",
3608
+ justifyContent: "center",
3609
+ gap: "12px",
3610
+ fontSize: "28px",
3611
+ fontWeight: "700",
3612
+ fontVariantNumeric: "tabular-nums"
3613
+ }
3614
+ },
3615
+ validateProps: (props) => {
3616
+ const errors = [];
3617
+ const checkEnum = (name, allowed) => {
3618
+ const value = props[name];
3619
+ if (value === void 0 || (0, import_schema24.isVariableBinding)(value)) return;
3620
+ if (typeof value !== "string" || !allowed.includes(value)) {
3621
+ errors.push(`Countdown "${name}" must be one of: ${allowed.join(", ")}.`);
3622
+ }
3623
+ };
3624
+ checkEnum("mode", COUNTDOWN_MODES);
3625
+ checkEnum("format", COUNTDOWN_FORMATS);
3626
+ checkEnum("expireBehavior", COUNTDOWN_EXPIRE_BEHAVIORS);
3627
+ checkEnum("storage", COUNTDOWN_STORAGE_TYPES);
3628
+ const duration = props.durationMinutes;
3629
+ if (duration !== void 0 && !(0, import_schema24.isVariableBinding)(duration)) {
3630
+ if (typeof duration !== "number" || !Number.isFinite(duration) || duration < 0) {
3631
+ errors.push('Countdown "durationMinutes" must be a non-negative number.');
3632
+ }
3633
+ }
3634
+ return errors;
3635
+ }
3636
+ };
3637
+
3638
+ // src/definitions/conversion/accordion.ts
3639
+ var import_schema25 = require("@kubuild/schema");
3640
+ var accordionDefinition = {
3641
+ type: "accordion",
3642
+ label: "Accordion",
3643
+ category: "interactive",
3644
+ icon: "chevron-down",
3645
+ description: "Group of expandable items (FAQ) with single- or multi-open behavior.",
3646
+ acceptsChildren: true,
3647
+ allowedChildren: ["accordion-item"],
3648
+ defaultProps: {
3649
+ allowMultiple: false,
3650
+ defaultOpenIndex: 0,
3651
+ icon: "chevron",
3652
+ faqSchema: false
3653
+ },
3654
+ defaultChildren: [
3655
+ {
3656
+ type: "accordion-item",
3657
+ props: { title: "What is included?" },
3658
+ children: [{ type: "paragraph", props: { text: "Everything you need to get started." } }]
3659
+ },
3660
+ {
3661
+ type: "accordion-item",
3662
+ props: { title: "Can I get a refund?" },
3663
+ children: [{ type: "paragraph", props: { text: "Yes, within 30 days of purchase." } }]
3664
+ },
3665
+ {
3666
+ type: "accordion-item",
3667
+ props: { title: "How do I get access?" },
3668
+ children: [
3669
+ { type: "paragraph", props: { text: "You receive an email right after checkout." } }
3670
+ ]
3671
+ }
3672
+ ],
3673
+ propFields: [
3674
+ {
3675
+ name: "allowMultiple",
3676
+ label: "Allow Multiple Open",
3677
+ type: "boolean",
3678
+ defaultValue: false,
3679
+ description: "When off, opening an item closes the others."
3680
+ },
3681
+ {
3682
+ name: "defaultOpenIndex",
3683
+ label: "Default Open Item",
3684
+ type: "number",
3685
+ defaultValue: 0,
3686
+ description: "Zero-based index of the item open on first render (-1 = all closed)."
3687
+ },
3688
+ {
3689
+ name: "icon",
3690
+ label: "Icon",
3691
+ type: "select",
3692
+ defaultValue: "chevron",
3693
+ options: [
3694
+ { label: "Chevron", value: "chevron" },
3695
+ { label: "Plus / Minus", value: "plus" },
3696
+ { label: "None", value: "none" }
3697
+ ]
3698
+ },
3699
+ {
3700
+ name: "faqSchema",
3701
+ label: "Output FAQPage JSON-LD",
3702
+ type: "boolean",
3703
+ defaultValue: false,
3704
+ description: "Emits schema.org FAQPage structured data on the published page for SEO."
3705
+ }
3706
+ ],
3707
+ traits: [idTrait(), ariaLabelTrait({ description: "Accessible name for the accordion group." })],
3708
+ defaultStyles: {
3709
+ base: {
3710
+ display: "flex",
3711
+ flexDirection: "column",
3712
+ width: "100%",
3713
+ borderTop: "1px solid #e2e8f0"
3714
+ }
3715
+ },
3716
+ validateProps: (props) => {
3717
+ const errors = [];
3718
+ const idx = props.defaultOpenIndex;
3719
+ if (idx !== void 0 && !(0, import_schema25.isVariableBinding)(idx) && (typeof idx !== "number" || !Number.isInteger(idx))) {
3720
+ errors.push('Accordion "defaultOpenIndex" must be an integer.');
3721
+ }
3722
+ return errors;
3723
+ }
3724
+ };
3725
+ var accordionItemDefinition = {
3726
+ type: "accordion-item",
3727
+ label: "Accordion Item",
3728
+ category: "interactive",
3729
+ icon: "chevron-right",
3730
+ description: "One question/answer row of an accordion: a title header plus content children.",
3731
+ acceptsChildren: true,
3732
+ allowedChildren: ["container", "columns", "flex", "grid", ...CONTENT_CHILD_TYPES],
3733
+ defaultProps: {
3734
+ title: "Question"
3735
+ },
3736
+ defaultChildren: [{ type: "paragraph", props: { text: "Answer goes here." } }],
3737
+ propFields: [{ name: "title", label: "Title", type: "string", defaultValue: "Question" }],
3738
+ traits: [idTrait()],
3739
+ defaultStyles: {
3740
+ base: {
3741
+ borderBottom: "1px solid #e2e8f0"
3742
+ }
3743
+ }
3744
+ };
3745
+
3746
+ // src/definitions/conversion/tabs.ts
3747
+ var import_schema26 = require("@kubuild/schema");
3748
+ var tabsDefinition = {
3749
+ type: "tabs",
3750
+ label: "Tabs",
3751
+ category: "interactive",
3752
+ icon: "tabs",
3753
+ description: "Tabbed content for product variants, specifications, or plan comparison.",
3754
+ acceptsChildren: true,
3755
+ allowedChildren: ["tab-panel"],
3756
+ defaultProps: {
3757
+ activeIndex: 0
3758
+ },
3759
+ defaultChildren: [
3760
+ {
3761
+ type: "tab-panel",
3762
+ props: { label: "Tab 1" },
3763
+ children: [{ type: "paragraph", props: { text: "Content for the first tab." } }]
3764
+ },
3765
+ {
3766
+ type: "tab-panel",
3767
+ props: { label: "Tab 2" },
3768
+ children: [{ type: "paragraph", props: { text: "Content for the second tab." } }]
3769
+ }
3770
+ ],
3771
+ propFields: [
3772
+ {
3773
+ name: "activeIndex",
3774
+ label: "Active Tab",
3775
+ type: "number",
3776
+ defaultValue: 0,
3777
+ description: "Zero-based index of the tab shown initially."
3778
+ }
3779
+ ],
3780
+ traits: [idTrait(), ariaLabelTrait({ description: "Accessible name for the tab list." })],
3781
+ defaultStyles: {
3782
+ base: {
3783
+ display: "flex",
3784
+ flexDirection: "column",
3785
+ width: "100%"
3786
+ }
3787
+ },
3788
+ validateProps: (props) => {
3789
+ const errors = [];
3790
+ const idx = props.activeIndex;
3791
+ if (idx !== void 0 && !(0, import_schema26.isVariableBinding)(idx) && (typeof idx !== "number" || !Number.isInteger(idx) || idx < 0)) {
3792
+ errors.push('Tabs "activeIndex" must be a non-negative integer.');
3793
+ }
3794
+ return errors;
3795
+ }
3796
+ };
3797
+ var tabPanelDefinition = {
3798
+ type: "tab-panel",
3799
+ label: "Tab Panel",
3800
+ category: "interactive",
3801
+ icon: "layout",
3802
+ description: "Content of a single tab; its label is shown in the tab list.",
3803
+ acceptsChildren: true,
3804
+ allowedChildren: ["container", "columns", "flex", "grid", ...CONTENT_CHILD_TYPES],
3805
+ defaultProps: {
3806
+ label: "Tab"
3807
+ },
3808
+ defaultChildren: [{ type: "paragraph", props: { text: "Tab content." } }],
3809
+ propFields: [{ name: "label", label: "Tab Label", type: "string", defaultValue: "Tab" }],
3810
+ traits: [idTrait()],
3811
+ defaultStyles: {
3812
+ base: {
3813
+ paddingTop: "16px"
3814
+ }
3815
+ }
3816
+ };
3817
+
3818
+ // src/definitions/conversion/carousel.ts
3819
+ var import_schema27 = require("@kubuild/schema");
3820
+ var carouselDefinition = {
3821
+ type: "carousel",
3822
+ label: "Carousel",
3823
+ category: "interactive",
3824
+ icon: "carousel",
3825
+ description: "Slider for product galleries and testimonials; each child is a slide.",
3826
+ acceptsChildren: true,
3827
+ allowedChildren: ["*"],
3828
+ defaultProps: {
3829
+ autoplay: false,
3830
+ interval: 5e3,
3831
+ loop: true,
3832
+ showDots: true,
3833
+ showArrows: true
3834
+ },
3835
+ defaultChildren: [
3836
+ { type: "container", children: [{ type: "paragraph", props: { text: "Slide 1" } }] },
3837
+ { type: "container", children: [{ type: "paragraph", props: { text: "Slide 2" } }] },
3838
+ { type: "container", children: [{ type: "paragraph", props: { text: "Slide 3" } }] }
3839
+ ],
3840
+ propFields: [
3841
+ { name: "autoplay", label: "Autoplay", type: "boolean", defaultValue: false },
3842
+ { name: "interval", label: "Autoplay Interval (ms)", type: "number", defaultValue: 5e3 },
3843
+ { name: "loop", label: "Loop", type: "boolean", defaultValue: true },
3844
+ { name: "showDots", label: "Show Dots", type: "boolean", defaultValue: true },
3845
+ { name: "showArrows", label: "Show Arrows", type: "boolean", defaultValue: true }
3846
+ ],
3847
+ traits: [
3848
+ idTrait(),
3849
+ ariaLabelTrait({ description: 'Accessible name for the carousel, e.g. "Testimonials".' })
3850
+ ],
3851
+ defaultStyles: {
3852
+ base: {
3853
+ position: "relative",
3854
+ width: "100%",
3855
+ overflow: "hidden"
3856
+ }
3857
+ },
3858
+ validateProps: (props) => {
3859
+ const errors = [];
3860
+ const interval = props.interval;
3861
+ if (interval !== void 0 && !(0, import_schema27.isVariableBinding)(interval) && (typeof interval !== "number" || !(interval > 0))) {
3862
+ errors.push('Carousel "interval" must be a positive number of milliseconds.');
3863
+ }
3864
+ return errors;
3865
+ }
3866
+ };
3867
+
3868
+ // src/definitions/conversion/rating.ts
3869
+ var import_schema28 = require("@kubuild/schema");
3870
+ var ratingDefinition = {
3871
+ type: "rating",
3872
+ label: "Rating",
3873
+ category: "media",
3874
+ icon: "star",
3875
+ description: "Read-only star rating with half-star support.",
3876
+ acceptsChildren: false,
3877
+ defaultProps: {
3878
+ value: 5,
3879
+ max: 5,
3880
+ size: 20,
3881
+ color: "#f59e0b",
3882
+ emptyColor: "#e2e8f0",
3883
+ labelTemplate: "{value} out of {max}"
3884
+ },
3885
+ propFields: [
3886
+ {
3887
+ name: "value",
3888
+ label: "Value",
3889
+ type: "number",
3890
+ defaultValue: 5,
3891
+ description: "Rounded to the nearest half star."
3892
+ },
3893
+ { name: "max", label: "Max Stars", type: "number", defaultValue: 5 },
3894
+ { name: "size", label: "Star Size (px)", type: "number", defaultValue: 20 },
3895
+ { name: "color", label: "Color", type: "color", defaultValue: "#f59e0b" },
3896
+ { name: "emptyColor", label: "Empty Color", type: "color", defaultValue: "#e2e8f0" },
3897
+ {
3898
+ name: "labelTemplate",
3899
+ label: "Accessible Label",
3900
+ type: "string",
3901
+ defaultValue: "{value} out of {max}",
3902
+ description: 'Screen reader text; {value} and {max} are replaced (e.g. "{value} dari {max}").'
3903
+ }
3904
+ ],
3905
+ traits: [idTrait()],
3906
+ defaultStyles: {
3907
+ base: {
3908
+ display: "inline-flex",
3909
+ alignItems: "center",
3910
+ gap: "2px"
3911
+ }
3912
+ },
3913
+ validateProps: (props) => {
3914
+ const errors = [];
3915
+ for (const name of ["value", "max", "size"]) {
3916
+ const v = props[name];
3917
+ if (v !== void 0 && !(0, import_schema28.isVariableBinding)(v) && (typeof v !== "number" || !Number.isFinite(v) || v < 0)) {
3918
+ errors.push(`Rating "${name}" must be a non-negative number.`);
3919
+ }
3920
+ }
3921
+ return errors;
3922
+ }
3923
+ };
3924
+
3925
+ // src/definitions/conversion/divider.ts
3926
+ var import_schema29 = require("@kubuild/schema");
3927
+ var dividerDefinition = {
3928
+ type: "divider",
3929
+ label: "Divider",
3930
+ category: "layout",
3931
+ icon: "divider",
3932
+ description: "Horizontal rule (solid/dashed/dotted) with an optional centered label.",
3933
+ acceptsChildren: false,
3934
+ defaultProps: {
3935
+ lineStyle: "solid",
3936
+ thickness: 1,
3937
+ color: "#e2e8f0",
3938
+ label: ""
3939
+ },
3940
+ propFields: [
3941
+ {
3942
+ name: "lineStyle",
3943
+ label: "Line Style",
3944
+ type: "select",
3945
+ defaultValue: "solid",
3946
+ options: [
3947
+ { label: "Solid", value: "solid" },
3948
+ { label: "Dashed", value: "dashed" },
3949
+ { label: "Dotted", value: "dotted" }
3950
+ ]
3951
+ },
3952
+ { name: "thickness", label: "Thickness (px)", type: "number", defaultValue: 1 },
3953
+ { name: "color", label: "Color", type: "color", defaultValue: "#e2e8f0" },
3954
+ {
3955
+ name: "label",
3956
+ label: "Center Label",
3957
+ type: "string",
3958
+ defaultValue: "",
3959
+ description: 'Optional text in the middle of the line, e.g. "OR".'
3960
+ }
3961
+ ],
3962
+ traits: [idTrait()],
3963
+ defaultStyles: {
3964
+ base: {
3965
+ width: "100%",
3966
+ marginTop: "16px",
3967
+ marginBottom: "16px"
3968
+ }
3969
+ },
3970
+ validateProps: (props) => {
3971
+ const v = props.lineStyle;
3972
+ if (v !== void 0 && !(0, import_schema29.isVariableBinding)(v) && !["solid", "dashed", "dotted"].includes(v)) {
3973
+ return ['Divider "lineStyle" must be one of: solid, dashed, dotted.'];
3974
+ }
3975
+ return [];
3976
+ }
3977
+ };
3978
+ var spacerDefinition = {
3979
+ type: "spacer",
3980
+ label: "Spacer",
3981
+ category: "layout",
3982
+ icon: "dimension",
3983
+ description: "Empty vertical space; height is responsive per breakpoint.",
3984
+ acceptsChildren: false,
3985
+ defaultProps: {},
3986
+ traits: [idTrait()],
3987
+ defaultStyles: {
3988
+ base: {
3989
+ width: "100%",
3990
+ height: "48px"
3991
+ },
3992
+ tablet: {
3993
+ height: "32px"
3994
+ },
3995
+ mobile: {
3996
+ height: "24px"
3997
+ }
3998
+ }
3999
+ };
4000
+
3426
4001
  // src/definitions/index.ts
3427
4002
  var coreComponentDefinitions = [
3428
4003
  pageDefinition,
@@ -3462,7 +4037,17 @@ var coreComponentDefinitions = [
3462
4037
  tableCellDefinition,
3463
4038
  modalDefinition,
3464
4039
  drawerDefinition,
3465
- collapsibleDefinition
4040
+ collapsibleDefinition,
4041
+ // Conversion components (Epic 60)
4042
+ countdownDefinition,
4043
+ accordionDefinition,
4044
+ accordionItemDefinition,
4045
+ tabsDefinition,
4046
+ tabPanelDefinition,
4047
+ carouselDefinition,
4048
+ ratingDefinition,
4049
+ dividerDefinition,
4050
+ spacerDefinition
3466
4051
  ];
3467
4052
  function createDefaultComponentRegistry() {
3468
4053
  const registry = new ComponentRegistry();
@@ -3474,11 +4059,18 @@ function createDefaultComponentRegistry() {
3474
4059
  // Annotate the CommonJS export names for ESM import in node:
3475
4060
  0 && (module.exports = {
3476
4061
  CONTENT_CHILD_TYPES,
4062
+ COUNTDOWN_EXPIRE_BEHAVIORS,
4063
+ COUNTDOWN_FORMATS,
4064
+ COUNTDOWN_MODES,
4065
+ COUNTDOWN_STORAGE_TYPES,
3477
4066
  LAYOUT_PARENTS,
4067
+ accordionDefinition,
4068
+ accordionItemDefinition,
3478
4069
  badgeDefinition,
3479
4070
  blockquoteDefinition,
3480
4071
  buttonDefinition,
3481
4072
  buttonSubmitDefinition,
4073
+ carouselDefinition,
3482
4074
  checkboxDefinition,
3483
4075
  codeBlockDefinition,
3484
4076
  collapsibleDefinition,
@@ -3486,7 +4078,9 @@ function createDefaultComponentRegistry() {
3486
4078
  columnsDefinition,
3487
4079
  containerDefinition,
3488
4080
  coreComponentDefinitions,
4081
+ countdownDefinition,
3489
4082
  createDefaultComponentRegistry,
4083
+ dividerDefinition,
3490
4084
  drawerDefinition,
3491
4085
  fileUploadDefinition,
3492
4086
  flexDefinition,
@@ -3506,12 +4100,16 @@ function createDefaultComponentRegistry() {
3506
4100
  radioDefinition,
3507
4101
  radioGroupDefinition,
3508
4102
  radioItemDefinition,
4103
+ ratingDefinition,
3509
4104
  sectionDefinition,
3510
4105
  selectDefinition,
4106
+ spacerDefinition,
3511
4107
  switchDefinition,
4108
+ tabPanelDefinition,
3512
4109
  tableCellDefinition,
3513
4110
  tableDefinition,
3514
4111
  tableRowDefinition,
4112
+ tabsDefinition,
3515
4113
  textDefinition,
3516
4114
  textareaDefinition,
3517
4115
  videoDefinition