@kubuild/components 0.7.0 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) 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-3HU2KE2B.js → chunk-CJN5OHHX.js} +596 -9
  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 -147
  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/types.d.ts +4 -1
  36. package/dist/definitions/types.d.ts.map +1 -1
  37. package/dist/definitions/typography/badge.d.ts.map +1 -1
  38. package/dist/definitions/typography/blockquote.d.ts.map +1 -1
  39. package/dist/definitions/typography/heading.d.ts.map +1 -1
  40. package/dist/definitions/typography/link.d.ts.map +1 -1
  41. package/dist/definitions/typography/paragraph.d.ts.map +1 -1
  42. package/dist/definitions/typography/text.d.ts.map +1 -1
  43. package/dist/index.cjs +1417 -227
  44. package/dist/index.cjs.map +1 -1
  45. package/dist/index.d.ts +1 -0
  46. package/dist/index.d.ts.map +1 -1
  47. package/dist/index.js +32 -2
  48. package/dist/index.js.map +1 -1
  49. package/dist/registry.d.ts +12 -0
  50. package/dist/registry.d.ts.map +1 -1
  51. package/package.json +3 -3
  52. package/dist/chunk-3HU2KE2B.js.map +0 -1
  53. package/dist/chunk-JTQ35OQQ.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",
@@ -1561,12 +1616,12 @@ var imageDefinition = {
1561
1616
  ],
1562
1617
  validateProps: (props) => {
1563
1618
  const errors = [];
1564
- const hasSrc = typeof props.src === "string" && props.src.trim().length > 0 || (0, import_schema8.isVariableBinding)(props.src);
1565
- 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);
1566
1621
  if (!hasSrc && !hasAsset) {
1567
1622
  errors.push('Image requires either a non-empty "src" URL or a valid "asset" reference.');
1568
1623
  }
1569
- 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);
1570
1625
  if (!hasAlt) {
1571
1626
  errors.push('Image requires non-empty "alt" text.');
1572
1627
  }
@@ -1582,7 +1637,7 @@ var imageDefinition = {
1582
1637
  };
1583
1638
 
1584
1639
  // src/definitions/media/video.ts
1585
- var import_schema9 = require("@kubuild/schema");
1640
+ var import_schema10 = require("@kubuild/schema");
1586
1641
  var videoDefinition = {
1587
1642
  type: "video",
1588
1643
  label: "Video",
@@ -1650,25 +1705,25 @@ var videoDefinition = {
1650
1705
  ],
1651
1706
  validateProps: (props) => {
1652
1707
  const errors = [];
1653
- 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)) {
1654
1709
  errors.push('Video "src" must be a string when provided.');
1655
1710
  }
1656
- if (props.provider !== void 0 && !(0, import_schema9.isVariableBinding)(props.provider)) {
1711
+ if (props.provider !== void 0 && !(0, import_schema10.isVariableBinding)(props.provider)) {
1657
1712
  const allowed = ["auto", "html5", "youtube", "vimeo"];
1658
1713
  if (typeof props.provider !== "string" || !allowed.includes(props.provider)) {
1659
1714
  errors.push(`Video "provider" must be one of: ${allowed.join(", ")}.`);
1660
1715
  }
1661
1716
  }
1662
- 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)) {
1663
1718
  errors.push('Video "controls" must be a boolean.');
1664
1719
  }
1665
- 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)) {
1666
1721
  errors.push('Video "autoplay" must be a boolean.');
1667
1722
  }
1668
- 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)) {
1669
1724
  errors.push('Video "loop" must be a boolean.');
1670
1725
  }
1671
- 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)) {
1672
1727
  errors.push('Video "muted" must be a boolean.');
1673
1728
  }
1674
1729
  return errors.length > 0 ? errors : true;
@@ -1686,7 +1741,7 @@ var videoDefinition = {
1686
1741
  };
1687
1742
 
1688
1743
  // src/definitions/media/icon.ts
1689
- var import_schema10 = require("@kubuild/schema");
1744
+ var import_schema11 = require("@kubuild/schema");
1690
1745
  var iconDefinition = {
1691
1746
  type: "icon",
1692
1747
  label: "Icon",
@@ -1712,15 +1767,15 @@ var iconDefinition = {
1712
1767
  ],
1713
1768
  validateProps: (props) => {
1714
1769
  const errors = [];
1715
- 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)) {
1716
1771
  errors.push('Icon requires a non-empty "name".');
1717
1772
  }
1718
- if (props.size !== void 0 && !(0, import_schema10.isVariableBinding)(props.size)) {
1773
+ if (props.size !== void 0 && !(0, import_schema11.isVariableBinding)(props.size)) {
1719
1774
  if (typeof props.size !== "number" || props.size < 0) {
1720
1775
  errors.push('Icon "size" must be a non-negative number.');
1721
1776
  }
1722
1777
  }
1723
- if (props.strokeWidth !== void 0 && !(0, import_schema10.isVariableBinding)(props.strokeWidth)) {
1778
+ if (props.strokeWidth !== void 0 && !(0, import_schema11.isVariableBinding)(props.strokeWidth)) {
1724
1779
  if (typeof props.strokeWidth !== "number" || props.strokeWidth < 0) {
1725
1780
  errors.push('Icon "strokeWidth" must be a non-negative number.');
1726
1781
  }
@@ -1737,7 +1792,7 @@ var iconDefinition = {
1737
1792
  };
1738
1793
 
1739
1794
  // src/definitions/media/html-embed.ts
1740
- var import_schema11 = require("@kubuild/schema");
1795
+ var import_schema12 = require("@kubuild/schema");
1741
1796
  var htmlEmbedDefinition = {
1742
1797
  type: "html-embed",
1743
1798
  label: "HTML Embed",
@@ -1761,7 +1816,7 @@ var htmlEmbedDefinition = {
1761
1816
  ],
1762
1817
  validateProps: (props) => {
1763
1818
  const errors = [];
1764
- 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)) {
1765
1820
  errors.push('HTML Embed "html" must be a string.');
1766
1821
  }
1767
1822
  return errors.length > 0 ? errors : true;
@@ -1775,7 +1830,7 @@ var htmlEmbedDefinition = {
1775
1830
  };
1776
1831
 
1777
1832
  // src/definitions/data/table.ts
1778
- var import_schema12 = require("@kubuild/schema");
1833
+ var import_schema13 = require("@kubuild/schema");
1779
1834
  var tableDefinition = {
1780
1835
  type: "table",
1781
1836
  label: "Table",
@@ -1815,13 +1870,13 @@ var tableDefinition = {
1815
1870
  ],
1816
1871
  validateProps: (props) => {
1817
1872
  const errors = [];
1818
- 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)) {
1819
1874
  errors.push('Table "striped" must be a boolean.');
1820
1875
  }
1821
- 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)) {
1822
1877
  errors.push('Table "bordered" must be a boolean.');
1823
1878
  }
1824
- 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)) {
1825
1880
  errors.push('Table "compact" must be a boolean.');
1826
1881
  }
1827
1882
  return errors.length > 0 ? errors : true;
@@ -1906,22 +1961,22 @@ var tableCellDefinition = {
1906
1961
  ],
1907
1962
  validateProps: (props) => {
1908
1963
  const errors = [];
1909
- if (props.tag !== void 0 && !(0, import_schema12.isVariableBinding)(props.tag)) {
1964
+ if (props.tag !== void 0 && !(0, import_schema13.isVariableBinding)(props.tag)) {
1910
1965
  if (props.tag !== "td" && props.tag !== "th") {
1911
1966
  errors.push('Table Cell "tag" must be either "td" or "th".');
1912
1967
  }
1913
1968
  }
1914
- if (props.colSpan !== void 0 && !(0, import_schema12.isVariableBinding)(props.colSpan)) {
1969
+ if (props.colSpan !== void 0 && !(0, import_schema13.isVariableBinding)(props.colSpan)) {
1915
1970
  if (typeof props.colSpan !== "number" || props.colSpan < 1 || !Number.isInteger(props.colSpan)) {
1916
1971
  errors.push('Table Cell "colSpan" must be a positive integer (>= 1).');
1917
1972
  }
1918
1973
  }
1919
- if (props.rowSpan !== void 0 && !(0, import_schema12.isVariableBinding)(props.rowSpan)) {
1974
+ if (props.rowSpan !== void 0 && !(0, import_schema13.isVariableBinding)(props.rowSpan)) {
1920
1975
  if (typeof props.rowSpan !== "number" || props.rowSpan < 1 || !Number.isInteger(props.rowSpan)) {
1921
1976
  errors.push('Table Cell "rowSpan" must be a positive integer (>= 1).');
1922
1977
  }
1923
1978
  }
1924
- 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)) {
1925
1980
  errors.push('Table Cell "text" must be a string when provided.');
1926
1981
  }
1927
1982
  return errors.length > 0 ? errors : true;
@@ -1938,7 +1993,7 @@ var tableCellDefinition = {
1938
1993
  };
1939
1994
 
1940
1995
  // src/definitions/data/list.ts
1941
- var import_schema13 = require("@kubuild/schema");
1996
+ var import_schema14 = require("@kubuild/schema");
1942
1997
  var listDefinition = {
1943
1998
  type: "list",
1944
1999
  label: "List",
@@ -1987,12 +2042,12 @@ var listDefinition = {
1987
2042
  ],
1988
2043
  validateProps: (props) => {
1989
2044
  const errors = [];
1990
- if (props.tag !== void 0 && !(0, import_schema13.isVariableBinding)(props.tag)) {
2045
+ if (props.tag !== void 0 && !(0, import_schema14.isVariableBinding)(props.tag)) {
1991
2046
  if (props.tag !== "ul" && props.tag !== "ol") {
1992
2047
  errors.push('List "tag" must be either "ul" or "ol".');
1993
2048
  }
1994
2049
  }
1995
- if (props.listStyleType !== void 0 && !(0, import_schema13.isVariableBinding)(props.listStyleType)) {
2050
+ if (props.listStyleType !== void 0 && !(0, import_schema14.isVariableBinding)(props.listStyleType)) {
1996
2051
  const allowed = ["disc", "circle", "square", "decimal", "none", "custom-icon"];
1997
2052
  if (typeof props.listStyleType !== "string" || !allowed.includes(props.listStyleType)) {
1998
2053
  errors.push(`List "listStyleType" must be one of: ${allowed.join(", ")}.`);
@@ -2047,7 +2102,7 @@ var listItemDefinition = {
2047
2102
  ],
2048
2103
  validateProps: (props) => {
2049
2104
  const errors = [];
2050
- 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)) {
2051
2106
  errors.push('List Item "text" must be a string when provided.');
2052
2107
  }
2053
2108
  return errors.length > 0 ? errors : true;
@@ -2084,7 +2139,7 @@ var collectionDefinition = {
2084
2139
  };
2085
2140
 
2086
2141
  // src/definitions/form/button.ts
2087
- var import_schema14 = require("@kubuild/schema");
2142
+ var import_schema15 = require("@kubuild/schema");
2088
2143
  var buttonDefinition = {
2089
2144
  type: "button",
2090
2145
  label: "Button",
@@ -2092,6 +2147,7 @@ var buttonDefinition = {
2092
2147
  icon: "mouse-pointer",
2093
2148
  acceptsChildren: false,
2094
2149
  capabilities: ["actionRegistry"],
2150
+ ...canonicalTextPropFields("button"),
2095
2151
  defaultProps: {
2096
2152
  label: "Click Me",
2097
2153
  variant: "primary"
@@ -2135,22 +2191,22 @@ var buttonDefinition = {
2135
2191
  ],
2136
2192
  validateProps: (props) => {
2137
2193
  const errors = [];
2138
- 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);
2139
2195
  if (!hasLabel) {
2140
2196
  errors.push('Button requires a non-empty "label".');
2141
2197
  }
2142
- 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)) {
2143
2199
  errors.push('Button "href" must be a string when provided.');
2144
2200
  }
2145
- if (props.buttonType !== void 0 && !(0, import_schema14.isVariableBinding)(props.buttonType)) {
2201
+ if (props.buttonType !== void 0 && !(0, import_schema15.isVariableBinding)(props.buttonType)) {
2146
2202
  if (!["button", "submit", "reset"].includes(props.buttonType)) {
2147
2203
  errors.push('Button "buttonType" must be one of: "button", "submit", "reset".');
2148
2204
  }
2149
2205
  }
2150
- if (props.action !== void 0 && !(0, import_schema14.isActionBinding)(props.action)) {
2206
+ if (props.action !== void 0 && !(0, import_schema15.isActionBinding)(props.action)) {
2151
2207
  errors.push('Button "action" must be a valid action binding when provided.');
2152
2208
  }
2153
- 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)) {
2154
2210
  errors.push('Button "disabled" must be a boolean when provided.');
2155
2211
  }
2156
2212
  return errors.length > 0 ? errors : true;
@@ -2238,25 +2294,25 @@ var buttonSubmitDefinition = {
2238
2294
  ],
2239
2295
  validateProps: (props) => {
2240
2296
  const errors = [];
2241
- 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);
2242
2298
  if (!hasLabel) {
2243
2299
  errors.push('Submit Button requires a non-empty "label".');
2244
2300
  }
2245
- 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)) {
2246
2302
  errors.push('Submit Button "loadingText" must be a string when provided.');
2247
2303
  }
2248
- 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)) {
2249
2305
  errors.push('Submit Button "showSpinner" must be a boolean when provided.');
2250
2306
  }
2251
- 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)) {
2252
2308
  errors.push('Submit Button "autoDisableOnSubmit" must be a boolean when provided.');
2253
2309
  }
2254
- if (props.buttonType !== void 0 && !(0, import_schema14.isVariableBinding)(props.buttonType)) {
2310
+ if (props.buttonType !== void 0 && !(0, import_schema15.isVariableBinding)(props.buttonType)) {
2255
2311
  if (!["submit", "reset", "button"].includes(props.buttonType)) {
2256
2312
  errors.push('Submit Button "buttonType" must be one of: "submit", "reset", "button".');
2257
2313
  }
2258
2314
  }
2259
- 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)) {
2260
2316
  errors.push('Submit Button "disabled" must be a boolean when provided.');
2261
2317
  }
2262
2318
  return errors.length > 0 ? errors : true;
@@ -2283,7 +2339,7 @@ var buttonSubmitDefinition = {
2283
2339
  };
2284
2340
 
2285
2341
  // src/definitions/form/form.ts
2286
- var import_schema15 = require("@kubuild/schema");
2342
+ var import_schema16 = require("@kubuild/schema");
2287
2343
  var formDefinition = {
2288
2344
  type: "form",
2289
2345
  label: "Form",
@@ -2370,34 +2426,34 @@ var formDefinition = {
2370
2426
  ],
2371
2427
  validateProps: (props) => {
2372
2428
  const errors = [];
2373
- 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)) {
2374
2430
  errors.push('Form "name" must be a string when provided.');
2375
2431
  }
2376
- 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)) {
2377
2433
  errors.push('Form "action" must be a string when provided.');
2378
2434
  }
2379
- if (props.method !== void 0 && !(0, import_schema15.isVariableBinding)(props.method)) {
2435
+ if (props.method !== void 0 && !(0, import_schema16.isVariableBinding)(props.method)) {
2380
2436
  if (!["GET", "POST", "get", "post"].includes(props.method)) {
2381
2437
  errors.push('Form "method" must be either "GET" or "POST".');
2382
2438
  }
2383
2439
  }
2384
- if (props.target !== void 0 && !(0, import_schema15.isVariableBinding)(props.target)) {
2440
+ if (props.target !== void 0 && !(0, import_schema16.isVariableBinding)(props.target)) {
2385
2441
  if (!["_self", "_blank", "_parent", "_top"].includes(props.target)) {
2386
2442
  errors.push('Form "target" must be one of: "_self", "_blank", "_parent", "_top".');
2387
2443
  }
2388
2444
  }
2389
- if (props.autoComplete !== void 0 && !(0, import_schema15.isVariableBinding)(props.autoComplete)) {
2445
+ if (props.autoComplete !== void 0 && !(0, import_schema16.isVariableBinding)(props.autoComplete)) {
2390
2446
  if (!["on", "off"].includes(props.autoComplete)) {
2391
2447
  errors.push('Form "autoComplete" must be either "on" or "off".');
2392
2448
  }
2393
2449
  }
2394
- 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)) {
2395
2451
  errors.push('Form "preventDefault" must be a boolean when provided.');
2396
2452
  }
2397
- 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)) {
2398
2454
  errors.push('Form "scrollToFirstError" must be a boolean when provided.');
2399
2455
  }
2400
- 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)) {
2401
2457
  errors.push('Form "resetOnSubmit" must be a boolean when provided.');
2402
2458
  }
2403
2459
  return errors.length > 0 ? errors : true;
@@ -2413,7 +2469,7 @@ var formDefinition = {
2413
2469
  };
2414
2470
 
2415
2471
  // src/definitions/form/input.ts
2416
- var import_schema16 = require("@kubuild/schema");
2472
+ var import_schema17 = require("@kubuild/schema");
2417
2473
  var inputDefinition = {
2418
2474
  type: "input",
2419
2475
  label: "Input",
@@ -2495,47 +2551,47 @@ var inputDefinition = {
2495
2551
  ],
2496
2552
  validateProps: (props) => {
2497
2553
  const errors = [];
2498
- 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)) {
2499
2555
  errors.push('Input "name" must be a string when provided.');
2500
2556
  }
2501
- if (props.type !== void 0 && !(0, import_schema16.isVariableBinding)(props.type)) {
2557
+ if (props.type !== void 0 && !(0, import_schema17.isVariableBinding)(props.type)) {
2502
2558
  const validTypes = ["text", "email", "number", "password", "tel", "url", "search", "date", "hidden"];
2503
2559
  if (!validTypes.includes(props.type)) {
2504
2560
  errors.push(`Input "type" must be one of: ${validTypes.join(", ")}.`);
2505
2561
  }
2506
2562
  }
2507
- 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)) {
2508
2564
  errors.push('Input "placeholder" must be a string when provided.');
2509
2565
  }
2510
- 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)) {
2511
2567
  errors.push('Input "required" must be a boolean when provided.');
2512
2568
  }
2513
- 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)) {
2514
2570
  errors.push('Input "disabled" must be a boolean when provided.');
2515
2571
  }
2516
- 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)) {
2517
2573
  errors.push('Input "readOnly" must be a boolean when provided.');
2518
2574
  }
2519
- 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)) {
2520
2576
  errors.push('Input "pattern" must be a string when provided.');
2521
2577
  }
2522
- if (props.minLength !== void 0 && !(0, import_schema16.isVariableBinding)(props.minLength)) {
2578
+ if (props.minLength !== void 0 && !(0, import_schema17.isVariableBinding)(props.minLength)) {
2523
2579
  if (typeof props.minLength !== "number" || props.minLength < 0 || !Number.isInteger(props.minLength)) {
2524
2580
  errors.push('Input "minLength" must be a non-negative integer when provided.');
2525
2581
  }
2526
2582
  }
2527
- if (props.maxLength !== void 0 && !(0, import_schema16.isVariableBinding)(props.maxLength)) {
2583
+ if (props.maxLength !== void 0 && !(0, import_schema17.isVariableBinding)(props.maxLength)) {
2528
2584
  if (typeof props.maxLength !== "number" || props.maxLength < 0 || !Number.isInteger(props.maxLength)) {
2529
2585
  errors.push('Input "maxLength" must be a non-negative integer when provided.');
2530
2586
  }
2531
2587
  }
2532
- 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)) {
2533
2589
  errors.push('Input "prefixIcon" must be a string when provided.');
2534
2590
  }
2535
- 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)) {
2536
2592
  errors.push('Input "suffixIcon" must be a string when provided.');
2537
2593
  }
2538
- 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)) {
2539
2595
  errors.push('Input "helperText" must be a string when provided.');
2540
2596
  }
2541
2597
  return errors.length > 0 ? errors : true;
@@ -2560,7 +2616,7 @@ var inputDefinition = {
2560
2616
  };
2561
2617
 
2562
2618
  // src/definitions/form/textarea.ts
2563
- var import_schema17 = require("@kubuild/schema");
2619
+ var import_schema18 = require("@kubuild/schema");
2564
2620
  var textareaDefinition = {
2565
2621
  type: "textarea",
2566
2622
  label: "Textarea",
@@ -2622,41 +2678,41 @@ var textareaDefinition = {
2622
2678
  ],
2623
2679
  validateProps: (props) => {
2624
2680
  const errors = [];
2625
- 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)) {
2626
2682
  errors.push('Textarea "name" must be a string when provided.');
2627
2683
  }
2628
- if (props.rows !== void 0 && !(0, import_schema17.isVariableBinding)(props.rows)) {
2684
+ if (props.rows !== void 0 && !(0, import_schema18.isVariableBinding)(props.rows)) {
2629
2685
  if (typeof props.rows !== "number" || props.rows < 1 || !Number.isInteger(props.rows)) {
2630
2686
  errors.push('Textarea "rows" must be a positive integer (>= 1).');
2631
2687
  }
2632
2688
  }
2633
- 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)) {
2634
2690
  errors.push('Textarea "placeholder" must be a string when provided.');
2635
2691
  }
2636
- 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)) {
2637
2693
  errors.push('Textarea "required" must be a boolean when provided.');
2638
2694
  }
2639
- 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)) {
2640
2696
  errors.push('Textarea "disabled" must be a boolean when provided.');
2641
2697
  }
2642
- 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)) {
2643
2699
  errors.push('Textarea "readOnly" must be a boolean when provided.');
2644
2700
  }
2645
- if (props.resize !== void 0 && !(0, import_schema17.isVariableBinding)(props.resize)) {
2701
+ if (props.resize !== void 0 && !(0, import_schema18.isVariableBinding)(props.resize)) {
2646
2702
  const allowedResize = ["vertical", "horizontal", "both", "none"];
2647
2703
  if (typeof props.resize !== "string" || !allowedResize.includes(props.resize)) {
2648
2704
  errors.push(`Textarea "resize" must be one of: ${allowedResize.join(", ")}.`);
2649
2705
  }
2650
2706
  }
2651
- 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)) {
2652
2708
  errors.push('Textarea "autoGrow" must be a boolean when provided.');
2653
2709
  }
2654
- if (props.maxCharCount !== void 0 && !(0, import_schema17.isVariableBinding)(props.maxCharCount)) {
2710
+ if (props.maxCharCount !== void 0 && !(0, import_schema18.isVariableBinding)(props.maxCharCount)) {
2655
2711
  if (typeof props.maxCharCount !== "number" || props.maxCharCount < 1 || !Number.isInteger(props.maxCharCount)) {
2656
2712
  errors.push('Textarea "maxCharCount" must be a positive integer (>= 1) when provided.');
2657
2713
  }
2658
2714
  }
2659
- 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)) {
2660
2716
  errors.push('Textarea "helperText" must be a string when provided.');
2661
2717
  }
2662
2718
  return errors.length > 0 ? errors : true;
@@ -2681,7 +2737,7 @@ var textareaDefinition = {
2681
2737
  };
2682
2738
 
2683
2739
  // src/definitions/form/select.ts
2684
- var import_schema18 = require("@kubuild/schema");
2740
+ var import_schema19 = require("@kubuild/schema");
2685
2741
  var selectDefinition = {
2686
2742
  type: "select",
2687
2743
  label: "Select",
@@ -2733,21 +2789,21 @@ var selectDefinition = {
2733
2789
  ],
2734
2790
  validateProps: (props) => {
2735
2791
  const errors = [];
2736
- 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)) {
2737
2793
  errors.push('Select "name" must be a string when provided.');
2738
2794
  }
2739
- if (props.options !== void 0 && !(0, import_schema18.isVariableBinding)(props.options)) {
2795
+ if (props.options !== void 0 && !(0, import_schema19.isVariableBinding)(props.options)) {
2740
2796
  if (!Array.isArray(props.options) && typeof props.options !== "string") {
2741
2797
  errors.push('Select "options" must be an array of option objects or a JSON string.');
2742
2798
  }
2743
2799
  }
2744
- 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)) {
2745
2801
  errors.push('Select "required" must be a boolean when provided.');
2746
2802
  }
2747
- 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)) {
2748
2804
  errors.push('Select "disabled" must be a boolean when provided.');
2749
2805
  }
2750
- 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)) {
2751
2807
  errors.push('Select "helperText" must be a string when provided.');
2752
2808
  }
2753
2809
  return errors.length > 0 ? errors : true;
@@ -2772,7 +2828,7 @@ var selectDefinition = {
2772
2828
  };
2773
2829
 
2774
2830
  // src/definitions/form/checkbox.ts
2775
- var import_schema19 = require("@kubuild/schema");
2831
+ var import_schema20 = require("@kubuild/schema");
2776
2832
  var checkboxDefinition = {
2777
2833
  type: "checkbox",
2778
2834
  label: "Checkbox",
@@ -2814,28 +2870,28 @@ var checkboxDefinition = {
2814
2870
  ],
2815
2871
  validateProps: (props) => {
2816
2872
  const errors = [];
2817
- 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)) {
2818
2874
  errors.push('Checkbox "label" must be a string when provided.');
2819
2875
  }
2820
- 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)) {
2821
2877
  errors.push('Checkbox "name" must be a string when provided.');
2822
2878
  }
2823
- 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)) {
2824
2880
  errors.push('Checkbox "value" must be a string when provided.');
2825
2881
  }
2826
- 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)) {
2827
2883
  errors.push('Checkbox "defaultChecked" must be a boolean when provided.');
2828
2884
  }
2829
- 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)) {
2830
2886
  errors.push('Checkbox "indeterminate" must be a boolean when provided.');
2831
2887
  }
2832
- 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)) {
2833
2889
  errors.push('Checkbox "required" must be a boolean when provided.');
2834
2890
  }
2835
- 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)) {
2836
2892
  errors.push('Checkbox "disabled" must be a boolean when provided.');
2837
2893
  }
2838
- 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)) {
2839
2895
  errors.push('Checkbox "helperText" must be a string when provided.');
2840
2896
  }
2841
2897
  return errors.length > 0 ? errors : true;
@@ -2854,7 +2910,7 @@ var checkboxDefinition = {
2854
2910
  };
2855
2911
 
2856
2912
  // src/definitions/form/switch.ts
2857
- var import_schema20 = require("@kubuild/schema");
2913
+ var import_schema21 = require("@kubuild/schema");
2858
2914
  var switchDefinition = {
2859
2915
  type: "switch",
2860
2916
  label: "Switch",
@@ -2906,31 +2962,31 @@ var switchDefinition = {
2906
2962
  ],
2907
2963
  validateProps: (props) => {
2908
2964
  const errors = [];
2909
- 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)) {
2910
2966
  errors.push('Switch "label" must be a string when provided.');
2911
2967
  }
2912
- 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)) {
2913
2969
  errors.push('Switch "name" must be a string when provided.');
2914
2970
  }
2915
- 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)) {
2916
2972
  errors.push('Switch "value" must be a string when provided.');
2917
2973
  }
2918
- 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)) {
2919
2975
  errors.push('Switch "defaultChecked" must be a boolean when provided.');
2920
2976
  }
2921
- if (props.switchSize !== void 0 && !(0, import_schema20.isVariableBinding)(props.switchSize)) {
2977
+ if (props.switchSize !== void 0 && !(0, import_schema21.isVariableBinding)(props.switchSize)) {
2922
2978
  const allowedSizes = ["sm", "md", "lg"];
2923
2979
  if (typeof props.switchSize !== "string" || !allowedSizes.includes(props.switchSize)) {
2924
2980
  errors.push(`Switch "switchSize" must be one of: ${allowedSizes.join(", ")}.`);
2925
2981
  }
2926
2982
  }
2927
- 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)) {
2928
2984
  errors.push('Switch "required" must be a boolean when provided.');
2929
2985
  }
2930
- 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)) {
2931
2987
  errors.push('Switch "disabled" must be a boolean when provided.');
2932
2988
  }
2933
- 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)) {
2934
2990
  errors.push('Switch "helperText" must be a string when provided.');
2935
2991
  }
2936
2992
  return errors.length > 0 ? errors : true;
@@ -2949,7 +3005,7 @@ var switchDefinition = {
2949
3005
  };
2950
3006
 
2951
3007
  // src/definitions/form/radio.ts
2952
- var import_schema21 = require("@kubuild/schema");
3008
+ var import_schema22 = require("@kubuild/schema");
2953
3009
  var radioGroupDefinition = {
2954
3010
  type: "radio-group",
2955
3011
  label: "Radio Group",
@@ -3000,25 +3056,25 @@ var radioGroupDefinition = {
3000
3056
  ],
3001
3057
  validateProps: (props) => {
3002
3058
  const errors = [];
3003
- 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)) {
3004
3060
  errors.push('RadioGroup "name" must be a string when provided.');
3005
3061
  }
3006
- 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)) {
3007
3063
  errors.push('RadioGroup "defaultSelected" must be a string when provided.');
3008
3064
  }
3009
- if (props.orientation !== void 0 && !(0, import_schema21.isVariableBinding)(props.orientation)) {
3065
+ if (props.orientation !== void 0 && !(0, import_schema22.isVariableBinding)(props.orientation)) {
3010
3066
  const allowedOrientations = ["vertical", "horizontal"];
3011
3067
  if (typeof props.orientation !== "string" || !allowedOrientations.includes(props.orientation)) {
3012
3068
  errors.push(`RadioGroup "orientation" must be one of: ${allowedOrientations.join(", ")}.`);
3013
3069
  }
3014
3070
  }
3015
- 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)) {
3016
3072
  errors.push('RadioGroup "required" must be a boolean when provided.');
3017
3073
  }
3018
- 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)) {
3019
3075
  errors.push('RadioGroup "disabled" must be a boolean when provided.');
3020
3076
  }
3021
- 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)) {
3022
3078
  errors.push('RadioGroup "helperText" must be a string when provided.');
3023
3079
  }
3024
3080
  return errors.length > 0 ? errors : true;
@@ -3069,25 +3125,25 @@ var radioDefinition = {
3069
3125
  ],
3070
3126
  validateProps: (props) => {
3071
3127
  const errors = [];
3072
- 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)) {
3073
3129
  errors.push('Radio "label" must be a string when provided.');
3074
3130
  }
3075
- 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)) {
3076
3132
  errors.push('Radio "name" must be a string when provided.');
3077
3133
  }
3078
- 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)) {
3079
3135
  errors.push('Radio "value" must be a string when provided.');
3080
3136
  }
3081
- 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)) {
3082
3138
  errors.push('Radio "defaultChecked" must be a boolean when provided.');
3083
3139
  }
3084
- 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)) {
3085
3141
  errors.push('Radio "required" must be a boolean when provided.');
3086
3142
  }
3087
- 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)) {
3088
3144
  errors.push('Radio "disabled" must be a boolean when provided.');
3089
3145
  }
3090
- 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)) {
3091
3147
  errors.push('Radio "helperText" must be a string when provided.');
3092
3148
  }
3093
3149
  return errors.length > 0 ? errors : true;
@@ -3111,7 +3167,7 @@ var radioItemDefinition = {
3111
3167
  };
3112
3168
 
3113
3169
  // src/definitions/form/file-upload.ts
3114
- var import_schema22 = require("@kubuild/schema");
3170
+ var import_schema23 = require("@kubuild/schema");
3115
3171
  var fileUploadDefinition = {
3116
3172
  type: "file-upload",
3117
3173
  label: "File Upload",
@@ -3156,33 +3212,33 @@ var fileUploadDefinition = {
3156
3212
  ],
3157
3213
  validateProps: (props) => {
3158
3214
  const errors = [];
3159
- 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)) {
3160
3216
  errors.push('FileUpload "label" must be a string when provided.');
3161
3217
  }
3162
- 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)) {
3163
3219
  errors.push('FileUpload "name" must be a string when provided.');
3164
3220
  }
3165
- 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)) {
3166
3222
  errors.push('FileUpload "accept" must be a string when provided.');
3167
3223
  }
3168
- if (props.maxFileSize !== void 0 && !(0, import_schema22.isVariableBinding)(props.maxFileSize)) {
3224
+ if (props.maxFileSize !== void 0 && !(0, import_schema23.isVariableBinding)(props.maxFileSize)) {
3169
3225
  if (typeof props.maxFileSize !== "number" || props.maxFileSize <= 0) {
3170
3226
  errors.push('FileUpload "maxFileSize" must be a positive number when provided.');
3171
3227
  }
3172
3228
  }
3173
- 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)) {
3174
3230
  errors.push('FileUpload "multiple" must be a boolean when provided.');
3175
3231
  }
3176
- 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)) {
3177
3233
  errors.push('FileUpload "showPreview" must be a boolean when provided.');
3178
3234
  }
3179
- 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)) {
3180
3236
  errors.push('FileUpload "required" must be a boolean when provided.');
3181
3237
  }
3182
- 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)) {
3183
3239
  errors.push('FileUpload "disabled" must be a boolean when provided.');
3184
3240
  }
3185
- 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)) {
3186
3242
  errors.push('FileUpload "helperText" must be a string when provided.');
3187
3243
  }
3188
3244
  return errors.length > 0 ? errors : true;
@@ -3422,6 +3478,526 @@ var collapsibleDefinition = {
3422
3478
  }
3423
3479
  };
3424
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
+
3425
4001
  // src/definitions/index.ts
3426
4002
  var coreComponentDefinitions = [
3427
4003
  pageDefinition,
@@ -3461,7 +4037,17 @@ var coreComponentDefinitions = [
3461
4037
  tableCellDefinition,
3462
4038
  modalDefinition,
3463
4039
  drawerDefinition,
3464
- 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
3465
4051
  ];
3466
4052
  function createDefaultComponentRegistry() {
3467
4053
  const registry = new ComponentRegistry();
@@ -3473,11 +4059,18 @@ function createDefaultComponentRegistry() {
3473
4059
  // Annotate the CommonJS export names for ESM import in node:
3474
4060
  0 && (module.exports = {
3475
4061
  CONTENT_CHILD_TYPES,
4062
+ COUNTDOWN_EXPIRE_BEHAVIORS,
4063
+ COUNTDOWN_FORMATS,
4064
+ COUNTDOWN_MODES,
4065
+ COUNTDOWN_STORAGE_TYPES,
3476
4066
  LAYOUT_PARENTS,
4067
+ accordionDefinition,
4068
+ accordionItemDefinition,
3477
4069
  badgeDefinition,
3478
4070
  blockquoteDefinition,
3479
4071
  buttonDefinition,
3480
4072
  buttonSubmitDefinition,
4073
+ carouselDefinition,
3481
4074
  checkboxDefinition,
3482
4075
  codeBlockDefinition,
3483
4076
  collapsibleDefinition,
@@ -3485,7 +4078,9 @@ function createDefaultComponentRegistry() {
3485
4078
  columnsDefinition,
3486
4079
  containerDefinition,
3487
4080
  coreComponentDefinitions,
4081
+ countdownDefinition,
3488
4082
  createDefaultComponentRegistry,
4083
+ dividerDefinition,
3489
4084
  drawerDefinition,
3490
4085
  fileUploadDefinition,
3491
4086
  flexDefinition,
@@ -3505,12 +4100,16 @@ function createDefaultComponentRegistry() {
3505
4100
  radioDefinition,
3506
4101
  radioGroupDefinition,
3507
4102
  radioItemDefinition,
4103
+ ratingDefinition,
3508
4104
  sectionDefinition,
3509
4105
  selectDefinition,
4106
+ spacerDefinition,
3510
4107
  switchDefinition,
4108
+ tabPanelDefinition,
3511
4109
  tableCellDefinition,
3512
4110
  tableDefinition,
3513
4111
  tableRowDefinition,
4112
+ tabsDefinition,
3514
4113
  textDefinition,
3515
4114
  textareaDefinition,
3516
4115
  videoDefinition