@react-typed-forms/schemas 9.1.1 → 10.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/index.js CHANGED
@@ -66,6 +66,7 @@ exports.ControlAdornmentType = void 0;
66
66
  exports.DataRenderType = void 0;
67
67
  (function (DataRenderType) {
68
68
  DataRenderType["Standard"] = "Standard";
69
+ DataRenderType["Textfield"] = "Textfield";
69
70
  DataRenderType["Radio"] = "Radio";
70
71
  DataRenderType["HtmlEditor"] = "HtmlEditor";
71
72
  DataRenderType["IconList"] = "IconList";
@@ -102,6 +103,7 @@ exports.ValidatorType = void 0;
102
103
  (function (ValidatorType) {
103
104
  ValidatorType["Jsonata"] = "Jsonata";
104
105
  ValidatorType["Date"] = "Date";
106
+ ValidatorType["Length"] = "Length";
105
107
  })(exports.ValidatorType || (exports.ValidatorType = {}));
106
108
  exports.DateComparison = void 0;
107
109
  (function (DateComparison) {
@@ -143,6 +145,9 @@ function isFlexRenderer(options) {
143
145
  function isDisplayOnlyRenderer(options) {
144
146
  return options.type === exports.DataRenderType.DisplayOnly;
145
147
  }
148
+ function isTextfieldRenderer(options) {
149
+ return options.type === exports.DataRenderType.Textfield;
150
+ }
146
151
  function isDataGroupRenderer(options) {
147
152
  return options.type === exports.DataRenderType.Group;
148
153
  }
@@ -566,6 +571,14 @@ function toDepString(x) {
566
571
  if (x === null) return "~";
567
572
  return x.toString();
568
573
  }
574
+ function appendElementIndex(dataContext, elementIndex) {
575
+ return _extends({}, dataContext, {
576
+ path: [].concat(dataContext.path, [elementIndex])
577
+ });
578
+ }
579
+ function applyLengthRestrictions(length, min, max, minValue, maxValue) {
580
+ return [min == null || length > min ? minValue : undefined, max == null || length < max ? maxValue : undefined];
581
+ }
569
582
 
570
583
  function buildSchema(def) {
571
584
  return Object.entries(def).map(function (x) {
@@ -919,7 +932,7 @@ function useEvalDisabledHook(useEvalExpressionHook, definition) {
919
932
  function useEvalDisplayHook(useEvalExpressionHook, definition) {
920
933
  return useEvalDynamicHook(definition, exports.DynamicPropertyType.Display, useEvalExpressionHook);
921
934
  }
922
- function useEvalDefaultValueHook(useEvalExpressionHook, definition, schemaField) {
935
+ function useEvalDefaultValueHook(useEvalExpressionHook, definition, schemaField, element) {
923
936
  var dynamicValue = useEvalDynamicHook(definition, exports.DynamicPropertyType.DefaultValue, useEvalExpressionHook);
924
937
  return makeDynamicPropertyHook(dynamicValue, function (ctx, _ref3) {
925
938
  var definition = _ref3.definition,
@@ -929,7 +942,7 @@ function useEvalDefaultValueHook(useEvalExpressionHook, definition, schemaField)
929
942
  var _ref4 = isDataControlDefinition(definition) ? [definition.required, definition.defaultValue] : [false, undefined],
930
943
  required = _ref4[0],
931
944
  dcv = _ref4[1];
932
- return dcv != null ? dcv : schemaField ? defaultValueForField(schemaField, required) : undefined;
945
+ return dcv != null ? dcv : schemaField ? element ? elementValueForField(schemaField) : defaultValueForField(schemaField, required) : undefined;
933
946
  }
934
947
  }, {
935
948
  definition: definition,
@@ -1066,16 +1079,21 @@ function makeDynamicPropertyHook(dynamicValue, makeDefault, state, deps) {
1066
1079
  };
1067
1080
  }
1068
1081
 
1069
- function useValidationHook(definition) {
1082
+ function useValidationHook(definition, field) {
1070
1083
  var _definition$validator, _definition$validator2;
1071
1084
  var validatorTypes = isDataControlDefinition(definition) ? (_definition$validator = (_definition$validator2 = definition.validators) == null ? void 0 : _definition$validator2.map(function (x) {
1072
1085
  return x.type;
1073
1086
  })) != null ? _definition$validator : [] : null;
1074
- var r = useUpdatedRef(definition);
1075
- return React.useCallback(function (control, hidden, groupContext) {
1087
+ var r = useUpdatedRef({
1088
+ definition: definition,
1089
+ field: field
1090
+ });
1091
+ return React.useCallback(function (control, hidden, groupContext, schemaInterface) {
1076
1092
  var _dd$validators;
1077
1093
  if (!validatorTypes) return;
1078
- var dd = r.current;
1094
+ var _r$current = r.current,
1095
+ dd = _r$current.definition,
1096
+ field = _r$current.field;
1079
1097
  core.useValueChangeEffect(control, function () {
1080
1098
  return control.setError("default", "");
1081
1099
  });
@@ -1084,6 +1102,27 @@ function useValidationHook(definition) {
1084
1102
  }, "required");
1085
1103
  ((_dd$validators = dd.validators) != null ? _dd$validators : []).forEach(function (x, i) {
1086
1104
  switch (x.type) {
1105
+ case exports.ValidatorType.Length:
1106
+ var lv = x;
1107
+ core.useControlEffect(function () {
1108
+ core.trackControlChange(control, core.ControlChange.Validate);
1109
+ return field ? schemaInterface.controlLength(field, control) : 0;
1110
+ }, function (len) {
1111
+ if (lv.min != null && len < lv.min) {
1112
+ if (field != null && field.collection) {
1113
+ control.setValue(function (v) {
1114
+ return [].concat(v, Array.from({
1115
+ length: lv.min - len
1116
+ }));
1117
+ });
1118
+ } else {
1119
+ control.setError("length", "Length must be at least " + lv.min);
1120
+ }
1121
+ } else if (lv.max != null && len > lv.max) {
1122
+ control.setError("length", "Length must be less than " + lv.max);
1123
+ }
1124
+ }, true);
1125
+ break;
1087
1126
  case exports.ValidatorType.Jsonata:
1088
1127
  return useJsonataValidator(control, groupContext, x, hidden, i);
1089
1128
  case exports.ValidatorType.Date:
@@ -1125,31 +1164,41 @@ function useDateValidator(control, dv, i) {
1125
1164
  }, "date" + i);
1126
1165
  }
1127
1166
 
1128
- var defaultSchemaInterface = {
1129
- isEmptyValue: defaultIsEmpty,
1130
- textValue: defaultTextValue
1131
- };
1132
- function defaultIsEmpty(f, value) {
1133
- if (f.collection) return Array.isArray(value) ? value.length === 0 : value == null;
1134
- switch (f.type) {
1135
- case exports.FieldType.String:
1136
- return !value;
1137
- default:
1138
- return value == null;
1139
- }
1140
- }
1141
- function defaultTextValue(f, value) {
1142
- switch (f.type) {
1143
- case exports.FieldType.DateTime:
1144
- return new Date(value).toLocaleDateString();
1145
- case exports.FieldType.Date:
1146
- return new Date(value).toLocaleDateString();
1147
- default:
1148
- return value != null ? value.toString() : undefined;
1149
- }
1150
- }
1167
+ var DefaultSchemaInterface = /*#__PURE__*/function () {
1168
+ function DefaultSchemaInterface() {}
1169
+ var _proto = DefaultSchemaInterface.prototype;
1170
+ _proto.isEmptyValue = function isEmptyValue(f, value) {
1171
+ if (f.collection) return Array.isArray(value) ? value.length === 0 : value == null;
1172
+ switch (f.type) {
1173
+ case exports.FieldType.String:
1174
+ return !value;
1175
+ default:
1176
+ return value == null;
1177
+ }
1178
+ };
1179
+ _proto.textValue = function textValue(field, value, element) {
1180
+ switch (field.type) {
1181
+ case exports.FieldType.DateTime:
1182
+ return new Date(value).toLocaleDateString();
1183
+ case exports.FieldType.Date:
1184
+ return new Date(value).toLocaleDateString();
1185
+ default:
1186
+ return value != null ? value.toString() : undefined;
1187
+ }
1188
+ };
1189
+ _proto.controlLength = function controlLength(f, control) {
1190
+ var _control$elements$len, _control$elements;
1191
+ return f.collection ? (_control$elements$len = (_control$elements = control.elements) == null ? void 0 : _control$elements.length) != null ? _control$elements$len : 0 : this.valueLength(f, control.value);
1192
+ };
1193
+ _proto.valueLength = function valueLength(field, value) {
1194
+ var _ref;
1195
+ return (_ref = value && (value == null ? void 0 : value.length)) != null ? _ref : 0;
1196
+ };
1197
+ return DefaultSchemaInterface;
1198
+ }();
1199
+ var defaultSchemaInterface = new DefaultSchemaInterface();
1151
1200
 
1152
- var _excluded$1 = ["definition", "field", "control", "options", "elementRenderer", "style", "allowedOptions"];
1201
+ var _excluded$3 = ["definition", "field", "control", "formOptions", "style", "allowedOptions"];
1153
1202
  var AppendAdornmentPriority = 0;
1154
1203
  var WrapAdornmentPriority = 1000;
1155
1204
  exports.LabelType = void 0;
@@ -1163,11 +1212,12 @@ function useControlRenderer(definition, fields, renderer, options) {
1163
1212
  options = {};
1164
1213
  }
1165
1214
  var dataProps = (_options$useDataHook = options.useDataHook == null ? void 0 : options.useDataHook(definition)) != null ? _options$useDataHook : defaultDataProps;
1215
+ var elementIndex = options.elementIndex;
1166
1216
  var schemaInterface = (_options$schemaInterf = options.schemaInterface) != null ? _options$schemaInterf : defaultSchemaInterface;
1167
1217
  var useExpr = (_options$useEvalExpre = options.useEvalExpressionHook) != null ? _options$useEvalExpre : defaultUseEvalExpressionHook;
1168
1218
  var schemaField = lookupSchemaField(definition, fields);
1169
1219
  var dynamicHooks = useDynamicHooks({
1170
- defaultValueControl: useEvalDefaultValueHook(useExpr, definition, schemaField),
1220
+ defaultValueControl: useEvalDefaultValueHook(useExpr, definition, schemaField, elementIndex != null),
1171
1221
  visibleControl: useEvalVisibilityHook(useExpr, definition, schemaField),
1172
1222
  readonlyControl: useEvalReadonlyHook(useExpr, definition),
1173
1223
  disabledControl: useEvalDisabledHook(useExpr, definition),
@@ -1177,12 +1227,13 @@ function useControlRenderer(definition, fields, renderer, options) {
1177
1227
  layoutStyle: useEvalStyleHook(useExpr, exports.DynamicPropertyType.LayoutStyle, definition),
1178
1228
  displayControl: useEvalDisplayHook(useExpr, definition)
1179
1229
  });
1180
- var useValidation = useValidationHook(definition);
1230
+ var useValidation = useValidationHook(definition, schemaField);
1181
1231
  var r = useUpdatedRef({
1182
1232
  options: options,
1183
1233
  definition: definition,
1184
1234
  fields: fields,
1185
- schemaField: schemaField
1235
+ schemaField: schemaField,
1236
+ elementIndex: elementIndex
1186
1237
  });
1187
1238
  var Component = React.useCallback(function (_ref) {
1188
1239
  var rootControl = _ref.control,
@@ -1195,7 +1246,8 @@ function useControlRenderer(definition, fields, renderer, options) {
1195
1246
  c = _r$current.definition,
1196
1247
  _options = _r$current.options,
1197
1248
  _fields = _r$current.fields,
1198
- _schemaField = _r$current.schemaField;
1249
+ _schemaField = _r$current.schemaField,
1250
+ _elementIndex = _r$current.elementIndex;
1199
1251
  var parentDataContext = {
1200
1252
  fields: _fields,
1201
1253
  schemaInterface: schemaInterface,
@@ -1229,7 +1281,7 @@ function useControlRenderer(definition, fields, renderer, options) {
1229
1281
  };
1230
1282
  });
1231
1283
  });
1232
- var _getControlData = getControlData(_schemaField, parentDataContext),
1284
+ var _getControlData = getControlData(_schemaField, parentDataContext, _elementIndex),
1233
1285
  parentControl = _getControlData[0],
1234
1286
  control = _getControlData[1],
1235
1287
  controlDataContext = _getControlData[2];
@@ -1263,8 +1315,10 @@ function useControlRenderer(definition, fields, renderer, options) {
1263
1315
  disabled: _options.disabled || disabledControl.value
1264
1316
  };
1265
1317
  }).value;
1266
- useValidation(control != null ? control : core.newControl(null), !!myOptions.hidden, parentDataContext);
1267
- var childOptions = _extends({}, _options, myOptions);
1318
+ useValidation(control != null ? control : core.newControl(null), !!myOptions.hidden, parentDataContext, schemaInterface);
1319
+ var childOptions = _extends({}, _options, myOptions, {
1320
+ elementIndex: undefined
1321
+ });
1268
1322
  React.useEffect(function () {
1269
1323
  if (control && typeof myOptions.disabled === "boolean") control.disabled = myOptions.disabled;
1270
1324
  }, [control, myOptions.disabled]);
@@ -1277,29 +1331,34 @@ function useControlRenderer(definition, fields, renderer, options) {
1277
1331
  var labelAndChildren = renderControlLayout({
1278
1332
  definition: c,
1279
1333
  renderer: renderer,
1280
- renderChild: function renderChild(k, child, path) {
1334
+ renderChild: function renderChild(k, child, options) {
1335
+ var _options$dataContext;
1336
+ var dataContext = (_options$dataContext = options == null ? void 0 : options.dataContext) != null ? _options$dataContext : controlDataContext;
1281
1337
  return /*#__PURE__*/React__default["default"].createElement(ControlRenderer, {
1282
1338
  key: k,
1283
- control: controlDataContext.data,
1284
- fields: controlDataContext.fields,
1285
- definition: findChildDefinition(c, child),
1286
- parentPath: path ? [].concat(controlDataContext.path, path) : controlDataContext.path,
1339
+ control: dataContext.data,
1340
+ fields: dataContext.fields,
1341
+ definition: child,
1342
+ parentPath: dataContext.path,
1287
1343
  renderer: renderer,
1288
- options: childOptions
1344
+ options: options ? _extends({}, childOptions, {
1345
+ elementIndex: options == null ? void 0 : options.elementIndex
1346
+ }) : childOptions
1289
1347
  });
1290
1348
  },
1291
1349
  createDataProps: dataProps,
1292
1350
  formOptions: myOptions,
1293
1351
  dataContext: controlDataContext,
1352
+ parentContext: parentDataContext,
1294
1353
  control: displayControl != null ? displayControl : control,
1354
+ elementIndex: _elementIndex,
1295
1355
  labelText: labelText,
1296
- schemaField: _schemaField,
1356
+ field: _schemaField,
1297
1357
  displayControl: displayControl,
1298
1358
  style: customStyle.value,
1299
1359
  allowedOptions: allowedOptions,
1300
- useChildVisibility: function useChildVisibility(child) {
1301
- var childDef = findChildDefinition(c, child);
1302
- var schemaField = lookupSchemaField(childDef, controlDataContext.fields);
1360
+ useChildVisibility: function useChildVisibility(childDef, context) {
1361
+ var schemaField = lookupSchemaField(childDef, (context != null ? context : controlDataContext).fields);
1303
1362
  return useEvalVisibilityHook(useExpr, childDef, schemaField);
1304
1363
  }
1305
1364
  });
@@ -1322,14 +1381,14 @@ function lookupSchemaField(c, fields) {
1322
1381
  var fieldName = isGroupControlsDefinition(c) ? c.compoundField : isDataControlDefinition(c) ? c.field : undefined;
1323
1382
  return fieldName ? findField(fields, fieldName) : undefined;
1324
1383
  }
1325
- function getControlData(schemaField, parentContext) {
1326
- var _parentControl$fields;
1384
+ function getControlData(schemaField, parentContext, elementIndex) {
1385
+ var _parentControl$fields, _childControl$element;
1327
1386
  var data = parentContext.data,
1328
1387
  path = parentContext.path;
1329
1388
  var parentControl = data.lookupControl(path);
1330
- var childPath = schemaField ? [].concat(path, [schemaField.field]) : path;
1389
+ var childPath = schemaField ? elementIndex != null ? [].concat(path, [schemaField.field, elementIndex]) : [].concat(path, [schemaField.field]) : path;
1331
1390
  var childControl = schemaField && parentControl ? (_parentControl$fields = parentControl.fields) == null ? void 0 : _parentControl$fields[schemaField.field] : undefined;
1332
- return [parentControl, childControl, schemaField ? _extends({}, parentContext, {
1391
+ return [parentControl, childControl && elementIndex != null ? (_childControl$element = childControl.elements) == null ? void 0 : _childControl$element[elementIndex] : childControl, schemaField ? _extends({}, parentContext, {
1333
1392
  path: childPath,
1334
1393
  fields: isCompoundField(schemaField) ? schemaField.children : parentContext.fields
1335
1394
  }) : parentContext];
@@ -1352,63 +1411,61 @@ function ControlRenderer(_ref3) {
1352
1411
  _effect();
1353
1412
  }
1354
1413
  }
1355
- function groupProps(definition, renderChild, dataContext, className, style, useChildVisibility) {
1356
- var _definition$children, _definition$groupOpti;
1357
- return {
1358
- childDefinitions: (_definition$children = definition.children) != null ? _definition$children : [],
1359
- renderChild: renderChild,
1360
- dataContext: dataContext,
1361
- renderOptions: (_definition$groupOpti = definition.groupOptions) != null ? _definition$groupOpti : {
1362
- type: "Standard"
1363
- },
1364
- className: cc(className),
1365
- useChildVisibility: useChildVisibility,
1366
- style: style
1367
- };
1368
- }
1369
1414
  function defaultDataProps(_ref4) {
1370
- var _field$options$length, _field$options, _allowedOptions$value, _definition$children2, _definition$renderOpt;
1415
+ var _definition$validator, _field$options$length, _field$options, _allowedOptions$value, _definition$children, _definition$renderOpt;
1371
1416
  var definition = _ref4.definition,
1372
1417
  field = _ref4.field,
1373
1418
  control = _ref4.control,
1374
- options = _ref4.options,
1375
- elementRenderer = _ref4.elementRenderer,
1419
+ formOptions = _ref4.formOptions,
1376
1420
  style = _ref4.style,
1377
1421
  allowedOptions = _ref4.allowedOptions,
1378
- props = _objectWithoutPropertiesLoose(_ref4, _excluded$1);
1422
+ props = _objectWithoutPropertiesLoose(_ref4, _excluded$3);
1423
+ var lengthVal = (_definition$validator = definition.validators) == null ? void 0 : _definition$validator.find(function (x) {
1424
+ return x.type === exports.ValidatorType.Length;
1425
+ });
1379
1426
  var className = cc(definition.styleClass);
1380
1427
  var required = !!definition.required;
1381
1428
  var fieldOptions = ((_field$options$length = (_field$options = field.options) == null ? void 0 : _field$options.length) != null ? _field$options$length : 0) === 0 ? null : field.options;
1382
1429
  var allowed = (_allowedOptions$value = allowedOptions == null ? void 0 : allowedOptions.value) != null ? _allowedOptions$value : [];
1383
1430
  return _extends({
1384
- childDefinitions: (_definition$children2 = definition.children) != null ? _definition$children2 : [],
1431
+ definition: definition,
1432
+ childDefinitions: (_definition$children = definition.children) != null ? _definition$children : [],
1385
1433
  control: control,
1386
1434
  field: field,
1387
1435
  id: "c" + control.uniqueId,
1388
1436
  options: fieldOptions && allowed.length > 0 ? fieldOptions.filter(function (x) {
1389
1437
  return allowed.includes(x.value);
1390
1438
  }) : fieldOptions,
1391
- readonly: !!options.readonly,
1439
+ readonly: !!formOptions.readonly,
1392
1440
  renderOptions: (_definition$renderOpt = definition.renderOptions) != null ? _definition$renderOpt : {
1393
1441
  type: "Standard"
1394
1442
  },
1395
1443
  required: required,
1396
- hidden: !!options.hidden,
1444
+ hidden: !!formOptions.hidden,
1397
1445
  className: className,
1398
1446
  style: style
1399
1447
  }, props, {
1400
- toArrayProps: elementRenderer ? function () {
1401
- return defaultArrayProps(control, field, required, style, className, elementRenderer);
1448
+ toArrayProps: field.collection && props.elementIndex == null ? function () {
1449
+ return defaultArrayProps(control, field, required, style, className, function (elementIndex) {
1450
+ var _control$elements$ele, _control$elements;
1451
+ return props.renderChild((_control$elements$ele = (_control$elements = control.elements) == null ? void 0 : _control$elements[elementIndex].uniqueId) != null ? _control$elements$ele : elementIndex, {
1452
+ type: exports.ControlDefinitionType.Data,
1453
+ field: definition.field,
1454
+ children: definition.children,
1455
+ hideTitle: true
1456
+ }, {
1457
+ elementIndex: elementIndex,
1458
+ dataContext: props.parentContext
1459
+ });
1460
+ }, lengthVal == null ? void 0 : lengthVal.min, lengthVal == null ? void 0 : lengthVal.max);
1402
1461
  } : undefined
1403
1462
  });
1404
1463
  }
1405
- function defaultArrayProps(arrayControl, field, required, style, className, _renderElement) {
1406
- var _field$displayName, _arrayControl$element;
1464
+ function defaultArrayProps(arrayControl, field, required, style, className, _renderElement, min, max) {
1465
+ var _field$displayName;
1407
1466
  var noun = (_field$displayName = field.displayName) != null ? _field$displayName : field.field;
1408
- var elems = (_arrayControl$element = arrayControl.elements) != null ? _arrayControl$element : [];
1409
1467
  return {
1410
1468
  arrayControl: arrayControl,
1411
- elementCount: elems.length,
1412
1469
  required: required,
1413
1470
  addAction: {
1414
1471
  actionId: "add",
@@ -1417,9 +1474,6 @@ function defaultArrayProps(arrayControl, field, required, style, className, _ren
1417
1474
  return core.addElement(arrayControl, elementValueForField(field));
1418
1475
  }
1419
1476
  },
1420
- elementKey: function elementKey(i) {
1421
- return elems[i].uniqueId;
1422
- },
1423
1477
  removeAction: function removeAction(i) {
1424
1478
  return {
1425
1479
  actionId: "",
@@ -1433,28 +1487,29 @@ function defaultArrayProps(arrayControl, field, required, style, className, _ren
1433
1487
  return _renderElement(i);
1434
1488
  },
1435
1489
  className: cc(className),
1436
- style: style
1490
+ style: style,
1491
+ min: min,
1492
+ max: max
1437
1493
  };
1438
1494
  }
1439
- function renderControlLayout(_ref5) {
1440
- var c = _ref5.definition,
1441
- renderer = _ref5.renderer,
1442
- childRenderer = _ref5.renderChild,
1443
- childControl = _ref5.control,
1444
- schemaField = _ref5.schemaField,
1445
- dataContext = _ref5.dataContext,
1446
- dataOptions = _ref5.formOptions,
1447
- dataProps = _ref5.createDataProps,
1448
- displayControl = _ref5.displayControl,
1449
- style = _ref5.style,
1450
- labelText = _ref5.labelText,
1451
- allowedOptions = _ref5.allowedOptions,
1452
- useChildVisibility = _ref5.useChildVisibility;
1495
+ function renderControlLayout(props) {
1496
+ var c = props.definition,
1497
+ renderer = props.renderer,
1498
+ renderChild = props.renderChild,
1499
+ control = props.control,
1500
+ field = props.field,
1501
+ dataContext = props.dataContext,
1502
+ dataProps = props.createDataProps,
1503
+ displayControl = props.displayControl,
1504
+ style = props.style,
1505
+ labelText = props.labelText,
1506
+ parentContext = props.parentContext,
1507
+ useChildVisibility = props.useChildVisibility;
1453
1508
  if (isDataControlDefinition(c)) {
1454
1509
  return renderData(c);
1455
1510
  }
1456
1511
  if (isGroupControlsDefinition(c)) {
1457
- var _labelText$value, _c$groupOptions2;
1512
+ var _c$children, _c$groupOptions2, _labelText$value, _c$groupOptions3;
1458
1513
  if (c.compoundField) {
1459
1514
  var _c$groupOptions;
1460
1515
  return renderData(dataControl(c.compoundField, c.title, {
@@ -1463,20 +1518,32 @@ function renderControlLayout(_ref5) {
1463
1518
  }));
1464
1519
  }
1465
1520
  return {
1466
- processLayout: renderer.renderGroup(groupProps(c, childRenderer, dataContext, c.styleClass, style, useChildVisibility)),
1521
+ processLayout: renderer.renderGroup({
1522
+ childDefinitions: (_c$children = c.children) != null ? _c$children : [],
1523
+ definition: c,
1524
+ parentContext: parentContext,
1525
+ renderChild: renderChild,
1526
+ dataContext: dataContext,
1527
+ renderOptions: (_c$groupOptions2 = c.groupOptions) != null ? _c$groupOptions2 : {
1528
+ type: "Standard"
1529
+ },
1530
+ className: cc(c.styleClass),
1531
+ useChildVisibility: useChildVisibility,
1532
+ style: style
1533
+ }),
1467
1534
  label: {
1468
1535
  label: (_labelText$value = labelText == null ? void 0 : labelText.value) != null ? _labelText$value : c.title,
1469
1536
  className: cc(c.labelClass),
1470
1537
  type: exports.LabelType.Group,
1471
- hide: (_c$groupOptions2 = c.groupOptions) == null ? void 0 : _c$groupOptions2.hideTitle
1538
+ hide: (_c$groupOptions3 = c.groupOptions) == null ? void 0 : _c$groupOptions3.hideTitle
1472
1539
  }
1473
1540
  };
1474
1541
  }
1475
1542
  if (isActionControlsDefinition(c)) {
1476
- var _ref6, _labelText$value2;
1543
+ var _ref5, _labelText$value2;
1477
1544
  return {
1478
1545
  children: renderer.renderAction({
1479
- actionText: (_ref6 = (_labelText$value2 = labelText == null ? void 0 : labelText.value) != null ? _labelText$value2 : c.title) != null ? _ref6 : c.actionId,
1546
+ actionText: (_ref5 = (_labelText$value2 = labelText == null ? void 0 : labelText.value) != null ? _labelText$value2 : c.title) != null ? _ref5 : c.actionId,
1480
1547
  actionId: c.actionId,
1481
1548
  onClick: function onClick() {},
1482
1549
  className: cc(c.styleClass),
@@ -1497,44 +1564,27 @@ function renderControlLayout(_ref5) {
1497
1564
  };
1498
1565
  }
1499
1566
  return {};
1500
- function renderData(c, elemIndex) {
1567
+ function renderData(c) {
1501
1568
  var _labelText$value3;
1502
- if (!schemaField) return {
1569
+ if (!field) return {
1503
1570
  children: "No schema field for: " + c.field
1504
1571
  };
1505
- if (!childControl) return {
1572
+ if (!control) return {
1506
1573
  children: "No control for: " + c.field
1507
1574
  };
1508
- var props = dataProps({
1509
- definition: c,
1510
- field: schemaField,
1511
- dataContext: elemIndex != null ? _extends({}, dataContext, {
1512
- path: [].concat(dataContext.path, [elemIndex])
1513
- }) : dataContext,
1514
- control: elemIndex != null ? childControl.elements[elemIndex] : childControl,
1515
- options: dataOptions,
1516
- style: style,
1517
- allowedOptions: allowedOptions,
1518
- renderChild: elemIndex != null ? function (k, d, p) {
1519
- return childRenderer(k, d, p ? [elemIndex].concat(p) : [elemIndex]);
1520
- } : childRenderer,
1521
- useChildVisibility: useChildVisibility,
1522
- elementRenderer: elemIndex == null && schemaField.collection ? function (ei) {
1523
- return renderLayoutParts(renderData(c, ei), renderer).children;
1524
- } : undefined
1525
- });
1526
- var label = !c.hideTitle ? controlTitle((_labelText$value3 = labelText == null ? void 0 : labelText.value) != null ? _labelText$value3 : c.title, schemaField) : undefined;
1575
+ var rendererProps = dataProps(props);
1576
+ var label = !c.hideTitle ? controlTitle((_labelText$value3 = labelText == null ? void 0 : labelText.value) != null ? _labelText$value3 : c.title, field) : undefined;
1527
1577
  return {
1528
- processLayout: renderer.renderData(props),
1578
+ processLayout: renderer.renderData(rendererProps),
1529
1579
  label: {
1530
1580
  type: exports.LabelType.Control,
1531
1581
  label: label,
1532
- forId: props.id,
1582
+ forId: rendererProps.id,
1533
1583
  required: c.required,
1534
1584
  hide: c.hideTitle,
1535
1585
  className: cc(c.labelClass)
1536
1586
  },
1537
- errorControl: childControl
1587
+ errorControl: control
1538
1588
  };
1539
1589
  }
1540
1590
  }
@@ -1568,13 +1618,13 @@ function wrapMarkupAt(pos, wrap) {
1568
1618
  }
1569
1619
  function renderLayoutParts(props, renderer) {
1570
1620
  var _props$processLayout;
1571
- var _ref7 = (_props$processLayout = props.processLayout == null ? void 0 : props.processLayout(props)) != null ? _props$processLayout : props,
1572
- className = _ref7.className,
1573
- children = _ref7.children,
1574
- style = _ref7.style,
1575
- errorControl = _ref7.errorControl,
1576
- label = _ref7.label,
1577
- adornments = _ref7.adornments;
1621
+ var _ref6 = (_props$processLayout = props.processLayout == null ? void 0 : props.processLayout(props)) != null ? _props$processLayout : props,
1622
+ className = _ref6.className,
1623
+ children = _ref6.children,
1624
+ style = _ref6.style,
1625
+ errorControl = _ref6.errorControl,
1626
+ label = _ref6.label,
1627
+ adornments = _ref6.adornments;
1578
1628
  var layout = {
1579
1629
  children: children,
1580
1630
  errorControl: errorControl,
@@ -1592,268 +1642,128 @@ function renderLayoutParts(props, renderer) {
1592
1642
  function controlTitle(title, field) {
1593
1643
  return title ? title : fieldDisplayName(field);
1594
1644
  }
1595
-
1596
- var _excluded = ["data", "display", "className", "style"],
1597
- _excluded2 = ["control", "convert"],
1598
- _excluded3 = ["errorText", "value", "onChange"],
1599
- _excluded4 = ["state", "options", "className", "convert", "required", "emptyText", "requiredText"];
1600
- function createFormRenderer(customRenderers, defaultRenderers) {
1601
- var _customRenderers$find;
1602
- if (customRenderers === void 0) {
1603
- customRenderers = [];
1604
- }
1605
- if (defaultRenderers === void 0) {
1606
- defaultRenderers = createClassStyledRenderers();
1607
- }
1608
- var dataRegistrations = customRenderers.filter(isDataRegistration);
1609
- var groupRegistrations = customRenderers.filter(isGroupRegistration);
1610
- var adornmentRegistrations = customRenderers.filter(isAdornmentRegistration);
1611
- var displayRegistrations = customRenderers.filter(isDisplayRegistration);
1612
- var labelRenderers = customRenderers.filter(isLabelRegistration);
1613
- var arrayRenderers = customRenderers.filter(isArrayRegistration);
1614
- var actionRenderers = customRenderers.filter(isActionRegistration);
1615
- var layoutRenderers = customRenderers.filter(isLayoutRegistration);
1616
- var visibilityRenderer = (_customRenderers$find = customRenderers.find(isVisibilityRegistration)) != null ? _customRenderers$find : defaultRenderers.visibility;
1617
- var formRenderers = {
1618
- renderAction: renderAction,
1619
- renderData: renderData,
1620
- renderGroup: renderGroup,
1621
- renderDisplay: renderDisplay,
1622
- renderLabel: renderLabel,
1623
- renderArray: renderArray,
1624
- renderAdornment: renderAdornment,
1625
- renderLayout: renderLayout,
1626
- renderVisibility: visibilityRenderer.render
1645
+ function applyArrayLengthRestrictions(_ref7, disable) {
1646
+ var _arrayControl$element, _arrayControl$element2;
1647
+ var arrayControl = _ref7.arrayControl,
1648
+ min = _ref7.min,
1649
+ max = _ref7.max,
1650
+ aa = _ref7.addAction,
1651
+ ra = _ref7.removeAction,
1652
+ required = _ref7.required;
1653
+ var _applyLengthRestricti = applyLengthRestrictions((_arrayControl$element = (_arrayControl$element2 = arrayControl.elements) == null ? void 0 : _arrayControl$element2.length) != null ? _arrayControl$element : 0, min == null && required ? 1 : min, max, true, true),
1654
+ removeAllowed = _applyLengthRestricti[0],
1655
+ addAllowed = _applyLengthRestricti[1];
1656
+ return {
1657
+ addAction: disable || addAllowed ? aa : undefined,
1658
+ removeAction: disable || removeAllowed ? ra : undefined,
1659
+ removeDisabled: !removeAllowed,
1660
+ addDisabled: !addAllowed
1627
1661
  };
1628
- function renderLayout(props) {
1629
- var _layoutRenderers$find;
1630
- var renderer = (_layoutRenderers$find = layoutRenderers.find(function (x) {
1631
- return !x.match || x.match(props);
1632
- })) != null ? _layoutRenderers$find : defaultRenderers.renderLayout;
1633
- return renderer.render(props, formRenderers);
1634
- }
1635
- function renderAdornment(props) {
1636
- var _adornmentRegistratio;
1637
- var renderer = (_adornmentRegistratio = adornmentRegistrations.find(function (x) {
1638
- return isOneOf(x.adornmentType, props.adornment.type);
1639
- })) != null ? _adornmentRegistratio : defaultRenderers.adornment;
1640
- return renderer.render(props);
1641
- }
1642
- function renderArray(props) {
1643
- var _arrayRenderers$;
1644
- return ((_arrayRenderers$ = arrayRenderers[0]) != null ? _arrayRenderers$ : defaultRenderers.array).render(props, formRenderers);
1645
- }
1646
- function renderLabel(props, labelStart, labelEnd) {
1647
- var _labelRenderers$find;
1648
- var renderer = (_labelRenderers$find = labelRenderers.find(function (x) {
1649
- return isOneOf(x.labelType, props.type);
1650
- })) != null ? _labelRenderers$find : defaultRenderers.label;
1651
- return renderer.render(props, labelStart, labelEnd, formRenderers);
1652
- }
1653
- function renderData(props) {
1654
- var _dataRegistrations$fi;
1655
- var renderType = props.renderOptions.type,
1656
- field = props.field;
1657
- var options = hasOptions(props);
1658
- var renderer = (_dataRegistrations$fi = dataRegistrations.find(function (x) {
1659
- var _x$collection, _field$collection, _x$options;
1660
- return ((_x$collection = x.collection) != null ? _x$collection : false) === ((_field$collection = field.collection) != null ? _field$collection : false) && ((_x$options = x.options) != null ? _x$options : false) === options && isOneOf(x.schemaType, field.type) && isOneOf(x.renderType, renderType) && (!x.match || x.match(props));
1661
- })) != null ? _dataRegistrations$fi : defaultRenderers.data;
1662
- var result = renderer.render(props, formRenderers);
1663
- if (typeof result === "function") return result;
1664
- return function (l) {
1665
- return _extends({}, l, {
1666
- children: result
1667
- });
1668
- };
1669
- }
1670
- function renderGroup(props) {
1671
- var _groupRegistrations$f;
1672
- var renderType = props.renderOptions.type;
1673
- var renderer = (_groupRegistrations$f = groupRegistrations.find(function (x) {
1674
- return isOneOf(x.renderType, renderType);
1675
- })) != null ? _groupRegistrations$f : defaultRenderers.group;
1676
- var result = renderer.render(props, formRenderers);
1677
- if (typeof result === "function") return result;
1678
- return function (l) {
1679
- return _extends({}, l, {
1680
- children: result
1681
- });
1682
- };
1683
- }
1684
- function renderAction(props) {
1685
- var _actionRenderers$find;
1686
- var renderer = (_actionRenderers$find = actionRenderers.find(function (x) {
1687
- return isOneOf(x.actionType, props.actionId);
1688
- })) != null ? _actionRenderers$find : defaultRenderers.action;
1689
- return renderer.render(props, formRenderers);
1690
- }
1691
- function renderDisplay(props) {
1692
- var _displayRegistrations;
1693
- var renderType = props.data.type;
1694
- var renderer = (_displayRegistrations = displayRegistrations.find(function (x) {
1695
- return isOneOf(x.renderType, renderType);
1696
- })) != null ? _displayRegistrations : defaultRenderers.display;
1697
- return renderer.render(props, formRenderers);
1698
- }
1699
- return formRenderers;
1700
1662
  }
1701
- function createDefaultActionRenderer(options) {
1663
+
1664
+ function isIconAdornment(a) {
1665
+ return a.type === exports.ControlAdornmentType.Icon;
1666
+ }
1667
+ function createLayoutRenderer(render, options) {
1668
+ return _extends({
1669
+ type: "layout",
1670
+ render: render
1671
+ }, options);
1672
+ }
1673
+ function createArrayRenderer(render, options) {
1674
+ return _extends({
1675
+ type: "array",
1676
+ render: render
1677
+ }, options);
1678
+ }
1679
+ function createDataRenderer(render, options) {
1680
+ return _extends({
1681
+ type: "data",
1682
+ render: render
1683
+ }, options);
1684
+ }
1685
+ function createGroupRenderer(render, options) {
1686
+ return _extends({
1687
+ type: "group",
1688
+ render: render
1689
+ }, options);
1690
+ }
1691
+ function createDisplayRenderer(render, options) {
1692
+ return _extends({
1693
+ type: "display",
1694
+ render: render
1695
+ }, options);
1696
+ }
1697
+ function createLabelRenderer(render, options) {
1698
+ return _extends({
1699
+ type: "label",
1700
+ render: render
1701
+ }, options);
1702
+ }
1703
+ function createVisibilityRenderer(render, options) {
1704
+ return _extends({
1705
+ type: "visibility",
1706
+ render: render
1707
+ }, options);
1708
+ }
1709
+ function createAdornmentRenderer(render, options) {
1710
+ return _extends({
1711
+ type: "adornment"
1712
+ }, options, {
1713
+ render: render
1714
+ });
1715
+ }
1716
+
1717
+ var defaultTailwindTheme = {
1718
+ label: {
1719
+ groupLabelClass: "font-bold",
1720
+ requiredElement: /*#__PURE__*/React__default["default"].createElement("span", {
1721
+ className: "text-red-500"
1722
+ }, " *")
1723
+ },
1724
+ array: {
1725
+ removableClass: "grid grid-cols-[1fr_auto] items-center gap-x-2",
1726
+ childClass: "grow my-2",
1727
+ addActionClass: "my-2"
1728
+ },
1729
+ group: {
1730
+ standardClassName: "flex flex-col gap-4",
1731
+ gridClassName: "gap-x-2 gap-y-4",
1732
+ flexClassName: "gap-2"
1733
+ },
1734
+ action: {
1735
+ className: "bg-primary-500 rounded-lg p-3 text-white"
1736
+ },
1737
+ layout: {
1738
+ className: "flex flex-col",
1739
+ errorClass: "text-sm text-danger-500"
1740
+ },
1741
+ data: {
1742
+ displayOnlyClass: "flex flex-row items-center gap-2"
1743
+ }
1744
+ };
1745
+
1746
+ var _excluded$2 = ["data", "display", "className", "style"];
1747
+ function createDefaultDisplayRenderer(options) {
1702
1748
  if (options === void 0) {
1703
1749
  options = {};
1704
1750
  }
1705
- function render(_ref) {
1706
- var onClick = _ref.onClick,
1707
- actionText = _ref.actionText;
1708
- return /*#__PURE__*/React__default["default"].createElement("button", {
1709
- className: options.className,
1710
- onClick: onClick
1711
- }, actionText);
1712
- }
1713
1751
  return {
1714
- render: render,
1715
- type: "action"
1752
+ render: function render(props) {
1753
+ return /*#__PURE__*/React__default["default"].createElement(DefaultDisplay, _extends({}, options, props));
1754
+ },
1755
+ type: "display"
1716
1756
  };
1717
1757
  }
1718
- function createDefaultLabelRenderer(options) {
1719
- if (options === void 0) {
1720
- options = {
1721
- requiredElement: /*#__PURE__*/React__default["default"].createElement("span", null, " *")
1722
- };
1723
- }
1724
- var _options = options,
1725
- className = _options.className,
1726
- groupLabelClass = _options.groupLabelClass,
1727
- controlLabelClass = _options.controlLabelClass,
1728
- requiredElement = _options.requiredElement;
1729
- return {
1730
- render: function render(props, labelStart, labelEnd) {
1731
- return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, labelStart, /*#__PURE__*/React__default["default"].createElement("label", {
1732
- htmlFor: props.forId,
1733
- className: rendererClass(props.className, clsx__default["default"](className, props.type === exports.LabelType.Group && groupLabelClass, props.type === exports.LabelType.Control && controlLabelClass))
1734
- }, props.label, props.required && requiredElement), labelEnd);
1735
- },
1736
- type: "label"
1737
- };
1738
- }
1739
- function createDefaultArrayRenderer(options) {
1740
- var _ref2 = options != null ? options : {},
1741
- className = _ref2.className,
1742
- removableClass = _ref2.removableClass,
1743
- childClass = _ref2.childClass,
1744
- removableChildClass = _ref2.removableChildClass,
1745
- removeActionClass = _ref2.removeActionClass,
1746
- addActionClass = _ref2.addActionClass;
1747
- function render(_ref3, _ref4) {
1748
- var elementCount = _ref3.elementCount,
1749
- renderElement = _ref3.renderElement,
1750
- addAction = _ref3.addAction,
1751
- removeAction = _ref3.removeAction,
1752
- elementKey = _ref3.elementKey,
1753
- required = _ref3.required;
1754
- var renderAction = _ref4.renderAction;
1755
- var showRemove = !required || elementCount > 1;
1756
- return /*#__PURE__*/React__default["default"].createElement("div", null, /*#__PURE__*/React__default["default"].createElement("div", {
1757
- className: clsx__default["default"](className, removeAction && removableClass)
1758
- }, Array.from({
1759
- length: elementCount
1760
- }, function (_, x) {
1761
- return removeAction ? /*#__PURE__*/React__default["default"].createElement(React.Fragment, {
1762
- key: elementKey(x)
1763
- }, /*#__PURE__*/React__default["default"].createElement("div", {
1764
- className: clsx__default["default"](childClass, removableChildClass)
1765
- }, renderElement(x)), /*#__PURE__*/React__default["default"].createElement("div", {
1766
- className: removeActionClass
1767
- }, showRemove && renderAction(removeAction(x)))) : /*#__PURE__*/React__default["default"].createElement("div", {
1768
- key: elementKey(x),
1769
- className: childClass
1770
- }, renderElement(x));
1771
- })), addAction && /*#__PURE__*/React__default["default"].createElement("div", {
1772
- className: addActionClass
1773
- }, renderAction(addAction)));
1774
- }
1775
- return {
1776
- render: render,
1777
- type: "array"
1778
- };
1779
- }
1780
- function createDefaultGroupRenderer(options) {
1781
- var _ref5 = options != null ? options : {},
1782
- className = _ref5.className,
1783
- _ref5$gridStyles = _ref5.gridStyles,
1784
- gridStyles = _ref5$gridStyles === void 0 ? defaultGridStyles : _ref5$gridStyles,
1785
- _ref5$defaultGridColu = _ref5.defaultGridColumns,
1786
- defaultGridColumns = _ref5$defaultGridColu === void 0 ? 2 : _ref5$defaultGridColu,
1787
- gridClassName = _ref5.gridClassName,
1788
- standardClassName = _ref5.standardClassName,
1789
- flexClassName = _ref5.flexClassName,
1790
- defaultFlexGap = _ref5.defaultFlexGap;
1791
- function defaultGridStyles(_ref6) {
1792
- var _ref6$columns = _ref6.columns,
1793
- columns = _ref6$columns === void 0 ? defaultGridColumns : _ref6$columns;
1794
- return {
1795
- className: gridClassName,
1796
- style: {
1797
- display: "grid",
1798
- gridTemplateColumns: "repeat(" + columns + ", 1fr)"
1799
- }
1800
- };
1801
- }
1802
- function flexStyles(options) {
1803
- return {
1804
- className: flexClassName,
1805
- style: {
1806
- display: "flex",
1807
- gap: options.gap ? options.gap : defaultFlexGap,
1808
- flexDirection: options.direction ? options.direction : undefined
1809
- }
1810
- };
1811
- }
1812
- function render(props) {
1813
- var renderChild = props.renderChild,
1814
- renderOptions = props.renderOptions,
1815
- childDefinitions = props.childDefinitions;
1816
- var _ref7 = isGridRenderer(renderOptions) ? gridStyles(renderOptions) : isFlexRenderer(renderOptions) ? flexStyles(renderOptions) : {
1817
- className: standardClassName
1818
- },
1819
- style = _ref7.style,
1820
- gcn = _ref7.className;
1821
- return function (cp) {
1822
- return _extends({}, cp, {
1823
- children: /*#__PURE__*/React__default["default"].createElement("div", {
1824
- className: rendererClass(props.className, clsx__default["default"](className, gcn)),
1825
- style: style
1826
- }, childDefinitions == null ? void 0 : childDefinitions.map(function (c, i) {
1827
- return renderChild(i, i);
1828
- }))
1829
- });
1830
- };
1831
- }
1832
- return {
1833
- type: "group",
1834
- render: render
1835
- };
1836
- }
1837
- function createDefaultDisplayRenderer(options) {
1838
- if (options === void 0) {
1839
- options = {};
1840
- }
1841
- return {
1842
- render: function render(props) {
1843
- return /*#__PURE__*/React__default["default"].createElement(DefaultDisplay, _extends({}, options, props));
1844
- },
1845
- type: "display"
1846
- };
1847
- }
1848
- function DefaultDisplay(_ref8) {
1758
+ function DefaultDisplay(_ref) {
1849
1759
  var _effect = core.useComponentTracking();
1850
1760
  try {
1851
1761
  var _display$value;
1852
- var data = _ref8.data,
1853
- display = _ref8.display,
1854
- className = _ref8.className,
1855
- style = _ref8.style,
1856
- options = _objectWithoutPropertiesLoose(_ref8, _excluded);
1762
+ var data = _ref.data,
1763
+ display = _ref.display,
1764
+ className = _ref.className,
1765
+ style = _ref.style,
1766
+ options = _objectWithoutPropertiesLoose(_ref, _excluded$2);
1857
1767
  switch (data.type) {
1858
1768
  case exports.DisplayDataType.Icon:
1859
1769
  return /*#__PURE__*/React__default["default"].createElement("i", {
@@ -1880,131 +1790,175 @@ function DefaultDisplay(_ref8) {
1880
1790
  _effect();
1881
1791
  }
1882
1792
  }
1883
- var DefaultBoolOptions = [{
1884
- name: "Yes",
1885
- value: true
1886
- }, {
1887
- name: "No",
1888
- value: false
1889
- }];
1890
- function createDefaultDataRenderer(options) {
1891
- var _options$selectOption;
1793
+
1794
+ function DefaultLayout(_ref) {
1795
+ var _effect = core.useComponentTracking();
1796
+ try {
1797
+ var errorClass = _ref.errorClass,
1798
+ _ref$layout = _ref.layout,
1799
+ controlEnd = _ref$layout.controlEnd,
1800
+ controlStart = _ref$layout.controlStart,
1801
+ label = _ref$layout.label,
1802
+ children = _ref$layout.children,
1803
+ errorControl = _ref$layout.errorControl;
1804
+ var ec = errorControl;
1805
+ var errorText = ec && ec.touched ? ec.error : undefined;
1806
+ return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, label, controlStart, children, errorText && /*#__PURE__*/React__default["default"].createElement("div", {
1807
+ className: errorClass
1808
+ }, errorText), controlEnd);
1809
+ } finally {
1810
+ _effect();
1811
+ }
1812
+ }
1813
+
1814
+ function createDefaultVisibilityRenderer() {
1815
+ return createVisibilityRenderer(function (props) {
1816
+ return /*#__PURE__*/React__default["default"].createElement(DefaultVisibility, props);
1817
+ });
1818
+ }
1819
+ function DefaultVisibility(_ref) {
1820
+ var _effect = core.useComponentTracking();
1821
+ try {
1822
+ var visibility = _ref.visibility,
1823
+ children = _ref.children,
1824
+ className = _ref.className,
1825
+ style = _ref.style,
1826
+ divRef = _ref.divRef;
1827
+ var v = visibility.value;
1828
+ React.useEffect(function () {
1829
+ if (v) {
1830
+ visibility.setValue(function (ex) {
1831
+ return {
1832
+ visible: v.visible,
1833
+ showing: v.visible
1834
+ };
1835
+ });
1836
+ }
1837
+ }, [v == null ? void 0 : v.visible]);
1838
+ return v != null && v.visible ? /*#__PURE__*/React__default["default"].createElement("div", {
1839
+ className: clsx__default["default"](className),
1840
+ style: style,
1841
+ ref: divRef
1842
+ }, children) : /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null);
1843
+ } finally {
1844
+ _effect();
1845
+ }
1846
+ }
1847
+
1848
+ var _excluded$1 = ["state", "options", "className", "convert", "required", "emptyText", "requiredText", "readonly"];
1849
+ function createSelectRenderer(options) {
1892
1850
  if (options === void 0) {
1893
1851
  options = {};
1894
1852
  }
1895
- var selectRenderer = createSelectRenderer((_options$selectOption = options.selectOptions) != null ? _options$selectOption : {});
1896
- var _optionRenderer$boole = _extends({
1897
- optionRenderer: selectRenderer,
1898
- booleanOptions: DefaultBoolOptions
1899
- }, options),
1900
- inputClass = _optionRenderer$boole.inputClass,
1901
- booleanOptions = _optionRenderer$boole.booleanOptions,
1902
- optionRenderer = _optionRenderer$boole.optionRenderer,
1903
- displayOnlyClass = _optionRenderer$boole.displayOnlyClass;
1904
- return createDataRenderer(function (props, renderers) {
1905
- var fieldType = props.field.type;
1906
- if (props.toArrayProps) {
1907
- return function (p) {
1908
- return _extends({}, p, {
1909
- children: renderers.renderArray(props.toArrayProps())
1910
- });
1911
- };
1912
- }
1913
- var renderOptions = props.renderOptions;
1914
- if (fieldType === exports.FieldType.Compound) {
1915
- var groupOptions = isDataGroupRenderer(renderOptions) ? renderOptions.groupOptions : undefined;
1916
- var style = props.style,
1917
- className = props.className,
1918
- childDefinitions = props.childDefinitions,
1919
- renderChild = props.renderChild,
1920
- dataContext = props.dataContext,
1921
- useChildVisibility = props.useChildVisibility;
1922
- return renderers.renderGroup({
1923
- style: style,
1924
- className: className,
1925
- childDefinitions: childDefinitions,
1926
- renderOptions: groupOptions != null ? groupOptions : {
1927
- type: "Standard",
1928
- hideTitle: true
1929
- },
1930
- renderChild: renderChild,
1931
- dataContext: dataContext,
1932
- useChildVisibility: useChildVisibility
1933
- });
1934
- }
1935
- var renderType = renderOptions.type;
1936
- if (fieldType == exports.FieldType.Any) return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, "No control for Any");
1937
- if (isDisplayOnlyRenderer(renderOptions)) return function (p) {
1938
- return _extends({}, p, {
1939
- className: displayOnlyClass,
1940
- children: /*#__PURE__*/React__default["default"].createElement(DefaultDisplayOnly, {
1941
- field: props.field,
1942
- schemaInterface: props.dataContext.schemaInterface,
1943
- control: props.control,
1944
- className: props.className,
1945
- style: props.style,
1946
- emptyText: renderOptions.emptyText
1947
- })
1948
- });
1949
- };
1950
- var isBool = fieldType === exports.FieldType.Bool;
1951
- if (booleanOptions != null && isBool && props.options == null) {
1952
- return renderers.renderData(_extends({}, props, {
1953
- options: booleanOptions
1954
- }));
1955
- }
1956
- if (renderType === exports.DataRenderType.Standard && hasOptions(props)) {
1957
- return optionRenderer.render(props, renderers);
1958
- }
1959
- switch (renderType) {
1960
- case exports.DataRenderType.Dropdown:
1961
- return selectRenderer.render(props, renderers);
1962
- }
1963
- return renderType === exports.DataRenderType.Checkbox ? /*#__PURE__*/React__default["default"].createElement(core.Fcheckbox, {
1964
- style: props.style,
1965
- className: props.className,
1966
- control: props.control
1967
- }) : /*#__PURE__*/React__default["default"].createElement(ControlInput, {
1968
- className: rendererClass(props.className, inputClass),
1969
- style: props.style,
1853
+ return createDataRenderer(function (props, asArray) {
1854
+ return /*#__PURE__*/React__default["default"].createElement(SelectDataRenderer, {
1855
+ className: rendererClass(props.className, options.className),
1856
+ state: props.control,
1970
1857
  id: props.id,
1971
- readOnly: props.readonly,
1972
- control: props.control,
1973
- convert: createInputConversion(props.field.type)
1858
+ readonly: props.readonly,
1859
+ options: props.options,
1860
+ required: props.required,
1861
+ emptyText: options.emptyText,
1862
+ requiredText: options.requiredText,
1863
+ convert: createSelectConversion(props.field.type)
1974
1864
  });
1865
+ }, {
1866
+ options: true
1975
1867
  });
1976
1868
  }
1977
- function DefaultDisplayOnly(_ref9) {
1978
- var _effect2 = core.useComponentTracking();
1869
+ function SelectDataRenderer(_ref) {
1870
+ var _effect = core.useComponentTracking();
1871
+ try {
1872
+ var state = _ref.state,
1873
+ options = _ref.options,
1874
+ className = _ref.className,
1875
+ convert = _ref.convert,
1876
+ required = _ref.required,
1877
+ _ref$emptyText = _ref.emptyText,
1878
+ emptyText = _ref$emptyText === void 0 ? "N/A" : _ref$emptyText,
1879
+ _ref$requiredText = _ref.requiredText,
1880
+ requiredText = _ref$requiredText === void 0 ? "<please select>" : _ref$requiredText,
1881
+ readonly = _ref.readonly,
1882
+ props = _objectWithoutPropertiesLoose(_ref, _excluded$1);
1883
+ var value = state.value,
1884
+ disabled = state.disabled;
1885
+ var _useState = React.useState(!required || value == null),
1886
+ showEmpty = _useState[0];
1887
+ var optionStringMap = React.useMemo(function () {
1888
+ return Object.fromEntries(options.map(function (x) {
1889
+ return [convert(x.value), x.value];
1890
+ }));
1891
+ }, [options]);
1892
+ return /*#__PURE__*/React__default["default"].createElement("select", _extends({}, props, {
1893
+ className: className,
1894
+ onChange: function onChange(v) {
1895
+ return state.value = optionStringMap[v.target.value];
1896
+ },
1897
+ value: convert(value),
1898
+ disabled: disabled || readonly
1899
+ }), showEmpty && /*#__PURE__*/React__default["default"].createElement("option", {
1900
+ value: ""
1901
+ }, required ? requiredText : emptyText), options.map(function (x, i) {
1902
+ return /*#__PURE__*/React__default["default"].createElement("option", {
1903
+ key: i,
1904
+ value: convert(x.value),
1905
+ disabled: !!x.disabled
1906
+ }, x.name);
1907
+ }));
1908
+ } finally {
1909
+ _effect();
1910
+ }
1911
+ }
1912
+ function createSelectConversion(ft) {
1913
+ switch (ft) {
1914
+ case exports.FieldType.String:
1915
+ case exports.FieldType.Int:
1916
+ case exports.FieldType.Double:
1917
+ return function (a) {
1918
+ return a;
1919
+ };
1920
+ default:
1921
+ return function (a) {
1922
+ var _a$toString;
1923
+ return (_a$toString = a == null ? void 0 : a.toString()) != null ? _a$toString : "";
1924
+ };
1925
+ }
1926
+ }
1927
+
1928
+ function DefaultDisplayOnly(_ref) {
1929
+ var _effect = core.useComponentTracking();
1979
1930
  try {
1980
- var _ref10;
1981
- var control = _ref9.control,
1982
- className = _ref9.className,
1983
- emptyText = _ref9.emptyText,
1984
- schemaInterface = _ref9.schemaInterface,
1985
- field = _ref9.field,
1986
- style = _ref9.style;
1931
+ var _ref2;
1932
+ var control = _ref.control,
1933
+ className = _ref.className,
1934
+ emptyText = _ref.emptyText,
1935
+ schemaInterface = _ref.schemaInterface,
1936
+ field = _ref.field,
1937
+ style = _ref.style;
1987
1938
  var v = control.value;
1988
- var text = (_ref10 = schemaInterface.isEmptyValue(field, v) ? emptyText : schemaInterface.textValue(field, v)) != null ? _ref10 : "";
1939
+ var text = (_ref2 = schemaInterface.isEmptyValue(field, v) ? emptyText : schemaInterface.textValue(field, v)) != null ? _ref2 : "";
1989
1940
  return /*#__PURE__*/React__default["default"].createElement("div", {
1990
1941
  style: style,
1991
1942
  className: rendererClass(className)
1992
1943
  }, text);
1993
1944
  } finally {
1994
- _effect2();
1945
+ _effect();
1995
1946
  }
1996
1947
  }
1997
- function ControlInput(_ref11) {
1998
- var _effect3 = core.useComponentTracking();
1948
+
1949
+ var _excluded = ["control", "convert"],
1950
+ _excluded2 = ["errorText", "value", "onChange"];
1951
+ function ControlInput(_ref) {
1952
+ var _effect = core.useComponentTracking();
1999
1953
  try {
2000
- var control = _ref11.control,
2001
- convert = _ref11.convert,
2002
- props = _objectWithoutPropertiesLoose(_ref11, _excluded2);
1954
+ var control = _ref.control,
1955
+ convert = _ref.convert,
1956
+ props = _objectWithoutPropertiesLoose(_ref, _excluded);
2003
1957
  var _formControlProps = core.formControlProps(control),
2004
1958
  errorText = _formControlProps.errorText,
2005
1959
  value = _formControlProps.value,
2006
1960
  onChange = _formControlProps.onChange,
2007
- inputProps = _objectWithoutPropertiesLoose(_formControlProps, _excluded3);
1961
+ inputProps = _objectWithoutPropertiesLoose(_formControlProps, _excluded2);
2008
1962
  return /*#__PURE__*/React__default["default"].createElement("input", _extends({}, inputProps, {
2009
1963
  type: convert[0],
2010
1964
  value: value == null ? "" : convert[2](value),
@@ -2013,19 +1967,332 @@ function ControlInput(_ref11) {
2013
1967
  }
2014
1968
  }, props));
2015
1969
  } finally {
2016
- _effect3();
1970
+ _effect();
2017
1971
  }
2018
1972
  }
2019
- function createDefaultAdornmentRenderer(options) {
2020
- return {
2021
- type: "adornment",
2022
- render: function render(_ref12) {
2023
- var adornment = _ref12.adornment;
2024
- return {
2025
- apply: function apply(rl) {
2026
- if (isIconAdornment(adornment)) {
2027
- var _adornment$placement;
2028
- return appendMarkupAt((_adornment$placement = adornment.placement) != null ? _adornment$placement : exports.AdornmentPlacement.ControlStart, /*#__PURE__*/React__default["default"].createElement("i", {
1973
+ function createInputConversion(ft) {
1974
+ switch (ft) {
1975
+ case exports.FieldType.String:
1976
+ return ["text", function (a) {
1977
+ return a;
1978
+ }, function (a) {
1979
+ return a;
1980
+ }];
1981
+ case exports.FieldType.Bool:
1982
+ return ["text", function (a) {
1983
+ return a === "true";
1984
+ }, function (a) {
1985
+ var _a$toString;
1986
+ return (_a$toString = a == null ? void 0 : a.toString()) != null ? _a$toString : "";
1987
+ }];
1988
+ case exports.FieldType.Int:
1989
+ return ["number", function (a) {
1990
+ return a !== "" ? parseInt(a) : null;
1991
+ }, function (a) {
1992
+ return a == null ? "" : a;
1993
+ }];
1994
+ case exports.FieldType.Date:
1995
+ return ["date", function (a) {
1996
+ return a;
1997
+ }, function (a) {
1998
+ return a;
1999
+ }];
2000
+ case exports.FieldType.Double:
2001
+ return ["number", function (a) {
2002
+ return parseFloat(a);
2003
+ }, function (a) {
2004
+ return a;
2005
+ }];
2006
+ default:
2007
+ return ["text", function (a) {
2008
+ return a;
2009
+ }, function (a) {
2010
+ return a;
2011
+ }];
2012
+ }
2013
+ }
2014
+
2015
+ function createRadioRenderer(options) {
2016
+ if (options === void 0) {
2017
+ options = {};
2018
+ }
2019
+ return createDataRenderer(function (p) {
2020
+ return /*#__PURE__*/React__default["default"].createElement(RadioButtons, _extends({}, options, p, {
2021
+ className: rendererClass(p.className, options.className),
2022
+ control: p.control
2023
+ }));
2024
+ }, {
2025
+ renderType: exports.DataRenderType.Radio
2026
+ });
2027
+ }
2028
+ function RadioButtons(_ref) {
2029
+ var _effect = core.useComponentTracking();
2030
+ try {
2031
+ var control = _ref.control,
2032
+ options = _ref.options,
2033
+ labelClass = _ref.labelClass,
2034
+ radioClass = _ref.radioClass,
2035
+ readonly = _ref.readonly,
2036
+ entryClass = _ref.entryClass,
2037
+ className = _ref.className,
2038
+ id = _ref.id;
2039
+ var disabled = control.disabled;
2040
+ var canChange = !disabled && !readonly;
2041
+ var name = "r" + control.uniqueId;
2042
+ return /*#__PURE__*/React__default["default"].createElement("div", {
2043
+ className: className,
2044
+ id: id
2045
+ }, /*#__PURE__*/React__default["default"].createElement(core.RenderArrayElements, {
2046
+ array: options == null ? void 0 : options.filter(function (x) {
2047
+ return x.value != null;
2048
+ })
2049
+ }, function (o, i) {
2050
+ return /*#__PURE__*/React__default["default"].createElement("div", {
2051
+ key: i,
2052
+ className: entryClass
2053
+ }, /*#__PURE__*/React__default["default"].createElement("input", {
2054
+ id: name + "_" + i,
2055
+ className: radioClass,
2056
+ type: "radio",
2057
+ name: name,
2058
+ readOnly: readonly,
2059
+ disabled: disabled,
2060
+ checked: control.value == o.value,
2061
+ onChange: function onChange(x) {
2062
+ return control.value = o.value;
2063
+ }
2064
+ }), /*#__PURE__*/React__default["default"].createElement("label", {
2065
+ className: labelClass,
2066
+ htmlFor: name + "_" + i
2067
+ }, o.name));
2068
+ }));
2069
+ } finally {
2070
+ _effect();
2071
+ }
2072
+ }
2073
+
2074
+ function createDefaultArrayRenderer(options) {
2075
+ return {
2076
+ render: function render(props, _ref) {
2077
+ var renderAction = _ref.renderAction;
2078
+ return /*#__PURE__*/React__default["default"].createElement(DefaultArrayRenderer, _extends({}, props, options, {
2079
+ renderAction: renderAction
2080
+ }));
2081
+ },
2082
+ type: "array"
2083
+ };
2084
+ }
2085
+ function DefaultArrayRenderer(props) {
2086
+ var _effect = core.useComponentTracking();
2087
+ try {
2088
+ var renderElement = props.renderElement,
2089
+ className = props.className,
2090
+ removableClass = props.removableClass,
2091
+ childClass = props.childClass,
2092
+ removableChildClass = props.removableChildClass,
2093
+ removeActionClass = props.removeActionClass,
2094
+ addActionClass = props.addActionClass,
2095
+ arrayControl = props.arrayControl,
2096
+ renderAction = props.renderAction,
2097
+ style = props.style;
2098
+ var _applyArrayLengthRest = applyArrayLengthRestrictions(props),
2099
+ addAction = _applyArrayLengthRest.addAction,
2100
+ removeAction = _applyArrayLengthRest.removeAction;
2101
+ return /*#__PURE__*/React__default["default"].createElement("div", {
2102
+ style: style
2103
+ }, /*#__PURE__*/React__default["default"].createElement("div", {
2104
+ className: clsx__default["default"](className, removeAction && removableClass)
2105
+ }, /*#__PURE__*/React__default["default"].createElement(core.RenderElements, {
2106
+ control: arrayControl
2107
+ }, function (_, x) {
2108
+ return removeAction ? /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement("div", {
2109
+ className: clsx__default["default"](childClass, removableChildClass)
2110
+ }, renderElement(x)), /*#__PURE__*/React__default["default"].createElement("div", {
2111
+ className: removeActionClass
2112
+ }, renderAction(removeAction(x)))) : /*#__PURE__*/React__default["default"].createElement("div", {
2113
+ className: childClass
2114
+ }, renderElement(x));
2115
+ })), addAction && /*#__PURE__*/React__default["default"].createElement("div", {
2116
+ className: addActionClass
2117
+ }, renderAction(addAction)));
2118
+ } finally {
2119
+ _effect();
2120
+ }
2121
+ }
2122
+
2123
+ function createDefaultActionRenderer(options) {
2124
+ if (options === void 0) {
2125
+ options = {};
2126
+ }
2127
+ function render(_ref) {
2128
+ var onClick = _ref.onClick,
2129
+ actionText = _ref.actionText;
2130
+ return /*#__PURE__*/React__default["default"].createElement("button", {
2131
+ className: options.className,
2132
+ onClick: onClick
2133
+ }, actionText);
2134
+ }
2135
+ return {
2136
+ render: render,
2137
+ type: "action"
2138
+ };
2139
+ }
2140
+ function createDefaultGroupRenderer(options) {
2141
+ var _ref2 = options != null ? options : {},
2142
+ className = _ref2.className,
2143
+ _ref2$gridStyles = _ref2.gridStyles,
2144
+ gridStyles = _ref2$gridStyles === void 0 ? defaultGridStyles : _ref2$gridStyles,
2145
+ _ref2$defaultGridColu = _ref2.defaultGridColumns,
2146
+ defaultGridColumns = _ref2$defaultGridColu === void 0 ? 2 : _ref2$defaultGridColu,
2147
+ gridClassName = _ref2.gridClassName,
2148
+ standardClassName = _ref2.standardClassName,
2149
+ flexClassName = _ref2.flexClassName,
2150
+ defaultFlexGap = _ref2.defaultFlexGap;
2151
+ function defaultGridStyles(_ref3) {
2152
+ var _ref3$columns = _ref3.columns,
2153
+ columns = _ref3$columns === void 0 ? defaultGridColumns : _ref3$columns;
2154
+ return {
2155
+ className: gridClassName,
2156
+ style: {
2157
+ display: "grid",
2158
+ gridTemplateColumns: "repeat(" + columns + ", 1fr)"
2159
+ }
2160
+ };
2161
+ }
2162
+ function flexStyles(options) {
2163
+ return {
2164
+ className: flexClassName,
2165
+ style: {
2166
+ display: "flex",
2167
+ gap: options.gap ? options.gap : defaultFlexGap,
2168
+ flexDirection: options.direction ? options.direction : undefined
2169
+ }
2170
+ };
2171
+ }
2172
+ function render(props) {
2173
+ var renderChild = props.renderChild,
2174
+ renderOptions = props.renderOptions,
2175
+ childDefinitions = props.childDefinitions;
2176
+ var _ref4 = isGridRenderer(renderOptions) ? gridStyles(renderOptions) : isFlexRenderer(renderOptions) ? flexStyles(renderOptions) : {
2177
+ className: standardClassName
2178
+ },
2179
+ style = _ref4.style,
2180
+ gcn = _ref4.className;
2181
+ return function (cp) {
2182
+ return _extends({}, cp, {
2183
+ children: /*#__PURE__*/React__default["default"].createElement("div", {
2184
+ className: rendererClass(props.className, clsx__default["default"](className, gcn)),
2185
+ style: style
2186
+ }, childDefinitions == null ? void 0 : childDefinitions.map(function (c, i) {
2187
+ return renderChild(i, c);
2188
+ }))
2189
+ });
2190
+ };
2191
+ }
2192
+ return {
2193
+ type: "group",
2194
+ render: render
2195
+ };
2196
+ }
2197
+ var DefaultBoolOptions = [{
2198
+ name: "Yes",
2199
+ value: true
2200
+ }, {
2201
+ name: "No",
2202
+ value: false
2203
+ }];
2204
+ function createDefaultDataRenderer(options) {
2205
+ if (options === void 0) {
2206
+ options = {};
2207
+ }
2208
+ var selectRenderer = createSelectRenderer(options.selectOptions);
2209
+ var radioRenderer = createRadioRenderer(options.radioOptions);
2210
+ var _optionRenderer$boole = _extends({
2211
+ optionRenderer: selectRenderer,
2212
+ booleanOptions: DefaultBoolOptions
2213
+ }, options),
2214
+ inputClass = _optionRenderer$boole.inputClass,
2215
+ booleanOptions = _optionRenderer$boole.booleanOptions,
2216
+ optionRenderer = _optionRenderer$boole.optionRenderer,
2217
+ displayOnlyClass = _optionRenderer$boole.displayOnlyClass;
2218
+ return createDataRenderer(function (props, renderers) {
2219
+ var fieldType = props.field.type;
2220
+ if (props.toArrayProps) {
2221
+ return function (p) {
2222
+ return _extends({}, p, {
2223
+ children: renderers.renderArray(props.toArrayProps())
2224
+ });
2225
+ };
2226
+ }
2227
+ var renderOptions = props.renderOptions;
2228
+ if (fieldType === exports.FieldType.Compound) {
2229
+ var _ref5;
2230
+ var groupOptions = (_ref5 = isDataGroupRenderer(renderOptions) ? renderOptions.groupOptions : undefined) != null ? _ref5 : {
2231
+ type: "Standard",
2232
+ hideTitle: true
2233
+ };
2234
+ return renderers.renderGroup(_extends({}, props, {
2235
+ renderOptions: groupOptions
2236
+ }));
2237
+ }
2238
+ var renderType = renderOptions.type;
2239
+ if (fieldType == exports.FieldType.Any) return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, "No control for Any");
2240
+ if (isDisplayOnlyRenderer(renderOptions)) return function (p) {
2241
+ return _extends({}, p, {
2242
+ className: displayOnlyClass,
2243
+ children: /*#__PURE__*/React__default["default"].createElement(DefaultDisplayOnly, {
2244
+ field: props.field,
2245
+ schemaInterface: props.dataContext.schemaInterface,
2246
+ control: props.control,
2247
+ className: props.className,
2248
+ style: props.style,
2249
+ emptyText: renderOptions.emptyText
2250
+ })
2251
+ });
2252
+ };
2253
+ var isBool = fieldType === exports.FieldType.Bool;
2254
+ if (booleanOptions != null && isBool && props.options == null) {
2255
+ return renderers.renderData(_extends({}, props, {
2256
+ options: booleanOptions
2257
+ }));
2258
+ }
2259
+ if (renderType === exports.DataRenderType.Standard && hasOptions(props)) {
2260
+ return optionRenderer.render(props, renderers);
2261
+ }
2262
+ switch (renderType) {
2263
+ case exports.DataRenderType.Dropdown:
2264
+ return selectRenderer.render(props, renderers);
2265
+ case exports.DataRenderType.Radio:
2266
+ return radioRenderer.render(props, renderers);
2267
+ case exports.DataRenderType.Checkbox:
2268
+ return /*#__PURE__*/React__default["default"].createElement(core.Fcheckbox, {
2269
+ style: props.style,
2270
+ className: props.className,
2271
+ control: props.control
2272
+ });
2273
+ }
2274
+ var placeholder = isTextfieldRenderer(renderOptions) ? renderOptions.placeholder : undefined;
2275
+ return /*#__PURE__*/React__default["default"].createElement(ControlInput, {
2276
+ className: rendererClass(props.className, inputClass),
2277
+ style: props.style,
2278
+ id: props.id,
2279
+ readOnly: props.readonly,
2280
+ control: props.control,
2281
+ placeholder: placeholder != null ? placeholder : undefined,
2282
+ convert: createInputConversion(props.field.type)
2283
+ });
2284
+ });
2285
+ }
2286
+ function createDefaultAdornmentRenderer(options) {
2287
+ return {
2288
+ type: "adornment",
2289
+ render: function render(_ref6) {
2290
+ var adornment = _ref6.adornment;
2291
+ return {
2292
+ apply: function apply(rl) {
2293
+ if (isIconAdornment(adornment)) {
2294
+ var _adornment$placement;
2295
+ return appendMarkupAt((_adornment$placement = adornment.placement) != null ? _adornment$placement : exports.AdornmentPlacement.ControlStart, /*#__PURE__*/React__default["default"].createElement("i", {
2029
2296
  className: adornment.iconClass
2030
2297
  }))(rl);
2031
2298
  }
@@ -2036,22 +2303,6 @@ function createDefaultAdornmentRenderer(options) {
2036
2303
  }
2037
2304
  };
2038
2305
  }
2039
- function createDefaultRenderers(options) {
2040
- if (options === void 0) {
2041
- options = {};
2042
- }
2043
- return {
2044
- data: createDefaultDataRenderer(options.data),
2045
- display: createDefaultDisplayRenderer(options.display),
2046
- action: createDefaultActionRenderer(options.action),
2047
- array: createDefaultArrayRenderer(options.array),
2048
- group: createDefaultGroupRenderer(options.group),
2049
- label: createDefaultLabelRenderer(options.label),
2050
- adornment: createDefaultAdornmentRenderer(),
2051
- renderLayout: createDefaultLayoutRenderer(options.layout),
2052
- visibility: createDefaultVisibilityRenderer()
2053
- };
2054
- }
2055
2306
  function createDefaultLayoutRenderer(options) {
2056
2307
  if (options === void 0) {
2057
2308
  options = {};
@@ -2070,7 +2321,147 @@ function createDefaultLayoutRenderer(options) {
2070
2321
  return e && props.errorControl ? props.errorControl.meta.scrollElement = e : undefined;
2071
2322
  }
2072
2323
  };
2073
- });
2324
+ });
2325
+ }
2326
+ function createDefaultLabelRenderer(options) {
2327
+ var _requiredElement$labe = _extends({
2328
+ requiredElement: /*#__PURE__*/React__default["default"].createElement("span", null, " *"),
2329
+ labelContainer: function labelContainer(c) {
2330
+ return c;
2331
+ }
2332
+ }, options),
2333
+ className = _requiredElement$labe.className,
2334
+ groupLabelClass = _requiredElement$labe.groupLabelClass,
2335
+ controlLabelClass = _requiredElement$labe.controlLabelClass,
2336
+ requiredElement = _requiredElement$labe.requiredElement,
2337
+ labelContainer = _requiredElement$labe.labelContainer;
2338
+ return {
2339
+ render: function render(props, labelStart, labelEnd) {
2340
+ return labelContainer( /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, labelStart, /*#__PURE__*/React__default["default"].createElement("label", {
2341
+ htmlFor: props.forId,
2342
+ className: rendererClass(props.className, clsx__default["default"](className, props.type === exports.LabelType.Group && groupLabelClass, props.type === exports.LabelType.Control && controlLabelClass))
2343
+ }, props.label, props.required && requiredElement), labelEnd));
2344
+ },
2345
+ type: "label"
2346
+ };
2347
+ }
2348
+ function createDefaultRenderers(options) {
2349
+ if (options === void 0) {
2350
+ options = {};
2351
+ }
2352
+ return {
2353
+ data: createDefaultDataRenderer(options.data),
2354
+ display: createDefaultDisplayRenderer(options.display),
2355
+ action: createDefaultActionRenderer(options.action),
2356
+ array: createDefaultArrayRenderer(options.array),
2357
+ group: createDefaultGroupRenderer(options.group),
2358
+ label: createDefaultLabelRenderer(options.label),
2359
+ adornment: createDefaultAdornmentRenderer(),
2360
+ renderLayout: createDefaultLayoutRenderer(options.layout),
2361
+ visibility: createDefaultVisibilityRenderer()
2362
+ };
2363
+ }
2364
+
2365
+ function createFormRenderer(customRenderers, defaultRenderers) {
2366
+ var _customRenderers$find;
2367
+ if (customRenderers === void 0) {
2368
+ customRenderers = [];
2369
+ }
2370
+ if (defaultRenderers === void 0) {
2371
+ defaultRenderers = createClassStyledRenderers();
2372
+ }
2373
+ var dataRegistrations = customRenderers.filter(isDataRegistration);
2374
+ var groupRegistrations = customRenderers.filter(isGroupRegistration);
2375
+ var adornmentRegistrations = customRenderers.filter(isAdornmentRegistration);
2376
+ var displayRegistrations = customRenderers.filter(isDisplayRegistration);
2377
+ var labelRenderers = customRenderers.filter(isLabelRegistration);
2378
+ var arrayRenderers = customRenderers.filter(isArrayRegistration);
2379
+ var actionRenderers = customRenderers.filter(isActionRegistration);
2380
+ var layoutRenderers = customRenderers.filter(isLayoutRegistration);
2381
+ var visibilityRenderer = (_customRenderers$find = customRenderers.find(isVisibilityRegistration)) != null ? _customRenderers$find : defaultRenderers.visibility;
2382
+ var formRenderers = {
2383
+ renderAction: renderAction,
2384
+ renderData: renderData,
2385
+ renderGroup: renderGroup,
2386
+ renderDisplay: renderDisplay,
2387
+ renderLabel: renderLabel,
2388
+ renderArray: renderArray,
2389
+ renderAdornment: renderAdornment,
2390
+ renderLayout: renderLayout,
2391
+ renderVisibility: visibilityRenderer.render
2392
+ };
2393
+ function renderLayout(props) {
2394
+ var _layoutRenderers$find;
2395
+ var renderer = (_layoutRenderers$find = layoutRenderers.find(function (x) {
2396
+ return !x.match || x.match(props);
2397
+ })) != null ? _layoutRenderers$find : defaultRenderers.renderLayout;
2398
+ return renderer.render(props, formRenderers);
2399
+ }
2400
+ function renderAdornment(props) {
2401
+ var _adornmentRegistratio;
2402
+ var renderer = (_adornmentRegistratio = adornmentRegistrations.find(function (x) {
2403
+ return isOneOf(x.adornmentType, props.adornment.type);
2404
+ })) != null ? _adornmentRegistratio : defaultRenderers.adornment;
2405
+ return renderer.render(props);
2406
+ }
2407
+ function renderArray(props) {
2408
+ var _arrayRenderers$;
2409
+ return ((_arrayRenderers$ = arrayRenderers[0]) != null ? _arrayRenderers$ : defaultRenderers.array).render(props, formRenderers);
2410
+ }
2411
+ function renderLabel(props, labelStart, labelEnd) {
2412
+ var _labelRenderers$find;
2413
+ var renderer = (_labelRenderers$find = labelRenderers.find(function (x) {
2414
+ return isOneOf(x.labelType, props.type);
2415
+ })) != null ? _labelRenderers$find : defaultRenderers.label;
2416
+ return renderer.render(props, labelStart, labelEnd, formRenderers);
2417
+ }
2418
+ function renderData(props) {
2419
+ var _dataRegistrations$fi;
2420
+ var renderType = props.renderOptions.type,
2421
+ field = props.field;
2422
+ var options = hasOptions(props);
2423
+ var renderer = (_dataRegistrations$fi = dataRegistrations.find(function (x) {
2424
+ var _x$collection, _field$collection, _x$options;
2425
+ return ((_x$collection = x.collection) != null ? _x$collection : false) === (props.elementIndex == null && ((_field$collection = field.collection) != null ? _field$collection : false)) && ((_x$options = x.options) != null ? _x$options : false) === options && (x.schemaType && isOneOf(x.schemaType, field.type) || x.renderType && isOneOf(x.renderType, renderType) || x.match && x.match(props));
2426
+ })) != null ? _dataRegistrations$fi : defaultRenderers.data;
2427
+ var result = renderer.render(props, formRenderers);
2428
+ if (typeof result === "function") return result;
2429
+ return function (l) {
2430
+ return _extends({}, l, {
2431
+ children: result
2432
+ });
2433
+ };
2434
+ }
2435
+ function renderGroup(props) {
2436
+ var _groupRegistrations$f;
2437
+ var renderType = props.renderOptions.type;
2438
+ var renderer = (_groupRegistrations$f = groupRegistrations.find(function (x) {
2439
+ return isOneOf(x.renderType, renderType);
2440
+ })) != null ? _groupRegistrations$f : defaultRenderers.group;
2441
+ var result = renderer.render(props, formRenderers);
2442
+ if (typeof result === "function") return result;
2443
+ return function (l) {
2444
+ return _extends({}, l, {
2445
+ children: result
2446
+ });
2447
+ };
2448
+ }
2449
+ function renderAction(props) {
2450
+ var _actionRenderers$find;
2451
+ var renderer = (_actionRenderers$find = actionRenderers.find(function (x) {
2452
+ return isOneOf(x.actionType, props.actionId);
2453
+ })) != null ? _actionRenderers$find : defaultRenderers.action;
2454
+ return renderer.render(props, formRenderers);
2455
+ }
2456
+ function renderDisplay(props) {
2457
+ var _displayRegistrations;
2458
+ var renderType = props.data.type;
2459
+ var renderer = (_displayRegistrations = displayRegistrations.find(function (x) {
2460
+ return isOneOf(x.renderType, renderType);
2461
+ })) != null ? _displayRegistrations : defaultRenderers.display;
2462
+ return renderer.render(props, formRenderers);
2463
+ }
2464
+ return formRenderers;
2074
2465
  }
2075
2466
  function createClassStyledRenderers() {
2076
2467
  return createDefaultRenderers({
@@ -2095,6 +2486,9 @@ function createClassStyledRenderers() {
2095
2486
  }
2096
2487
  });
2097
2488
  }
2489
+ function isOneOf(x, v) {
2490
+ return x == null ? true : Array.isArray(x) ? x.includes(v) : v === x;
2491
+ }
2098
2492
  function isAdornmentRegistration(x) {
2099
2493
  return x.type === "adornment";
2100
2494
  }
@@ -2122,259 +2516,6 @@ function isDisplayRegistration(x) {
2122
2516
  function isArrayRegistration(x) {
2123
2517
  return x.type === "array";
2124
2518
  }
2125
- function isOneOf(x, v) {
2126
- return x == null ? true : Array.isArray(x) ? x.includes(v) : v === x;
2127
- }
2128
- function isIconAdornment(a) {
2129
- return a.type === exports.ControlAdornmentType.Icon;
2130
- }
2131
- function createLayoutRenderer(render, options) {
2132
- return _extends({
2133
- type: "layout",
2134
- render: render
2135
- }, options);
2136
- }
2137
- function createArrayRenderer(render, options) {
2138
- return _extends({
2139
- type: "array",
2140
- render: render
2141
- }, options);
2142
- }
2143
- function createDataRenderer(render, options) {
2144
- return _extends({
2145
- type: "data",
2146
- render: render
2147
- }, options);
2148
- }
2149
- function createGroupRenderer(render, options) {
2150
- return _extends({
2151
- type: "group",
2152
- render: render
2153
- }, options);
2154
- }
2155
- function createDisplayRenderer(render, options) {
2156
- return _extends({
2157
- type: "display",
2158
- render: render
2159
- }, options);
2160
- }
2161
- function createLabelRenderer(render, options) {
2162
- return _extends({
2163
- type: "label",
2164
- render: render
2165
- }, options);
2166
- }
2167
- function createVisibilityRenderer(render, options) {
2168
- return _extends({
2169
- type: "visibility",
2170
- render: render
2171
- }, options);
2172
- }
2173
- function createAdornmentRenderer(render, options) {
2174
- return _extends({
2175
- type: "adornment"
2176
- }, options, {
2177
- render: render
2178
- });
2179
- }
2180
- function createSelectRenderer(options) {
2181
- if (options === void 0) {
2182
- options = {};
2183
- }
2184
- return createDataRenderer(function (props, asArray) {
2185
- return /*#__PURE__*/React__default["default"].createElement(SelectDataRenderer, {
2186
- className: rendererClass(props.className, options.className),
2187
- state: props.control,
2188
- id: props.id,
2189
- options: props.options,
2190
- required: props.required,
2191
- emptyText: options.emptyText,
2192
- requiredText: options.requiredText,
2193
- convert: createSelectConversion(props.field.type)
2194
- });
2195
- }, {
2196
- options: true
2197
- });
2198
- }
2199
- function SelectDataRenderer(_ref13) {
2200
- var _effect4 = core.useComponentTracking();
2201
- try {
2202
- var state = _ref13.state,
2203
- options = _ref13.options,
2204
- className = _ref13.className,
2205
- convert = _ref13.convert,
2206
- required = _ref13.required,
2207
- _ref13$emptyText = _ref13.emptyText,
2208
- emptyText = _ref13$emptyText === void 0 ? "N/A" : _ref13$emptyText,
2209
- _ref13$requiredText = _ref13.requiredText,
2210
- requiredText = _ref13$requiredText === void 0 ? "<please select>" : _ref13$requiredText,
2211
- props = _objectWithoutPropertiesLoose(_ref13, _excluded4);
2212
- var value = state.value,
2213
- disabled = state.disabled;
2214
- var _useState = React.useState(!required || value == null),
2215
- showEmpty = _useState[0];
2216
- var optionStringMap = React.useMemo(function () {
2217
- return Object.fromEntries(options.map(function (x) {
2218
- return [convert(x.value), x.value];
2219
- }));
2220
- }, [options]);
2221
- return /*#__PURE__*/React__default["default"].createElement("select", _extends({}, props, {
2222
- className: className,
2223
- onChange: function onChange(v) {
2224
- return state.value = optionStringMap[v.target.value];
2225
- },
2226
- value: convert(value),
2227
- disabled: disabled
2228
- }), showEmpty && /*#__PURE__*/React__default["default"].createElement("option", {
2229
- value: ""
2230
- }, required ? requiredText : emptyText), options.map(function (x, i) {
2231
- return /*#__PURE__*/React__default["default"].createElement("option", {
2232
- key: i,
2233
- value: convert(x.value),
2234
- disabled: x.disabled
2235
- }, x.name);
2236
- }));
2237
- } finally {
2238
- _effect4();
2239
- }
2240
- }
2241
- function createSelectConversion(ft) {
2242
- switch (ft) {
2243
- case exports.FieldType.String:
2244
- case exports.FieldType.Int:
2245
- case exports.FieldType.Double:
2246
- return function (a) {
2247
- return a;
2248
- };
2249
- default:
2250
- return function (a) {
2251
- var _a$toString;
2252
- return (_a$toString = a == null ? void 0 : a.toString()) != null ? _a$toString : "";
2253
- };
2254
- }
2255
- }
2256
- function createInputConversion(ft) {
2257
- switch (ft) {
2258
- case exports.FieldType.String:
2259
- return ["text", function (a) {
2260
- return a;
2261
- }, function (a) {
2262
- return a;
2263
- }];
2264
- case exports.FieldType.Bool:
2265
- return ["text", function (a) {
2266
- return a === "true";
2267
- }, function (a) {
2268
- var _a$toString2;
2269
- return (_a$toString2 = a == null ? void 0 : a.toString()) != null ? _a$toString2 : "";
2270
- }];
2271
- case exports.FieldType.Int:
2272
- return ["number", function (a) {
2273
- return a !== "" ? parseInt(a) : null;
2274
- }, function (a) {
2275
- return a == null ? "" : a;
2276
- }];
2277
- case exports.FieldType.Date:
2278
- return ["date", function (a) {
2279
- return a;
2280
- }, function (a) {
2281
- return a;
2282
- }];
2283
- case exports.FieldType.Double:
2284
- return ["number", function (a) {
2285
- return parseFloat(a);
2286
- }, function (a) {
2287
- return a;
2288
- }];
2289
- default:
2290
- return ["text", function (a) {
2291
- return a;
2292
- }, function (a) {
2293
- return a;
2294
- }];
2295
- }
2296
- }
2297
- function createDefaultVisibilityRenderer() {
2298
- return createVisibilityRenderer(function (props) {
2299
- return /*#__PURE__*/React__default["default"].createElement(DefaultVisibility, props);
2300
- });
2301
- }
2302
- function DefaultVisibility(_ref14) {
2303
- var _effect5 = core.useComponentTracking();
2304
- try {
2305
- var visibility = _ref14.visibility,
2306
- children = _ref14.children,
2307
- className = _ref14.className,
2308
- style = _ref14.style,
2309
- divRef = _ref14.divRef;
2310
- var v = visibility.value;
2311
- React.useEffect(function () {
2312
- if (v) {
2313
- visibility.setValue(function (ex) {
2314
- return {
2315
- visible: v.visible,
2316
- showing: v.visible
2317
- };
2318
- });
2319
- }
2320
- }, [v == null ? void 0 : v.visible]);
2321
- return v != null && v.visible ? /*#__PURE__*/React__default["default"].createElement("div", {
2322
- className: clsx__default["default"](className),
2323
- style: style,
2324
- ref: divRef
2325
- }, children) : /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null);
2326
- } finally {
2327
- _effect5();
2328
- }
2329
- }
2330
- function DefaultLayout(_ref15) {
2331
- var _effect6 = core.useComponentTracking();
2332
- try {
2333
- var errorClass = _ref15.errorClass,
2334
- _ref15$layout = _ref15.layout,
2335
- controlEnd = _ref15$layout.controlEnd,
2336
- controlStart = _ref15$layout.controlStart,
2337
- label = _ref15$layout.label,
2338
- children = _ref15$layout.children,
2339
- errorControl = _ref15$layout.errorControl;
2340
- var ec = errorControl;
2341
- var errorText = ec && ec.touched ? ec.error : undefined;
2342
- return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, label, controlStart, children, errorText && /*#__PURE__*/React__default["default"].createElement("div", {
2343
- className: errorClass
2344
- }, errorText), controlEnd);
2345
- } finally {
2346
- _effect6();
2347
- }
2348
- }
2349
-
2350
- var defaultTailwindTheme = {
2351
- label: {
2352
- groupLabelClass: "font-bold",
2353
- requiredElement: /*#__PURE__*/React__default["default"].createElement("span", {
2354
- className: "text-red-500"
2355
- }, " *")
2356
- },
2357
- array: {
2358
- removableClass: "grid grid-cols-[1fr_auto] items-center gap-x-2",
2359
- childClass: "grow my-2",
2360
- addActionClass: "my-2"
2361
- },
2362
- group: {
2363
- standardClassName: "flex flex-col gap-4",
2364
- gridClassName: "gap-x-2 gap-y-4",
2365
- flexClassName: "gap-2"
2366
- },
2367
- action: {
2368
- className: "bg-primary rounded-lg p-3 text-white"
2369
- },
2370
- layout: {
2371
- className: "flex flex-col",
2372
- errorClass: "text-sm text-danger-500"
2373
- },
2374
- data: {
2375
- displayOnlyClass: "flex flex-row items-center gap-2"
2376
- }
2377
- };
2378
2519
 
2379
2520
  exports.AppendAdornmentPriority = AppendAdornmentPriority;
2380
2521
  exports.ControlInput = ControlInput;
@@ -2383,17 +2524,22 @@ exports.DefaultBoolOptions = DefaultBoolOptions;
2383
2524
  exports.DefaultDisplay = DefaultDisplay;
2384
2525
  exports.DefaultDisplayOnly = DefaultDisplayOnly;
2385
2526
  exports.DefaultLayout = DefaultLayout;
2527
+ exports.DefaultSchemaInterface = DefaultSchemaInterface;
2386
2528
  exports.DefaultVisibility = DefaultVisibility;
2529
+ exports.RadioButtons = RadioButtons;
2387
2530
  exports.SelectDataRenderer = SelectDataRenderer;
2388
2531
  exports.WrapAdornmentPriority = WrapAdornmentPriority;
2389
2532
  exports.addFieldOption = addFieldOption;
2390
2533
  exports.addMissingControls = addMissingControls;
2534
+ exports.appendElementIndex = appendElementIndex;
2391
2535
  exports.appendMarkup = appendMarkup;
2392
2536
  exports.appendMarkupAt = appendMarkupAt;
2537
+ exports.applyArrayLengthRestrictions = applyArrayLengthRestrictions;
2393
2538
  exports.applyDefaultForField = applyDefaultForField;
2394
2539
  exports.applyDefaultValues = applyDefaultValues;
2395
2540
  exports.applyExtensionToSchema = applyExtensionToSchema;
2396
2541
  exports.applyExtensionsToSchema = applyExtensionsToSchema;
2542
+ exports.applyLengthRestrictions = applyLengthRestrictions;
2397
2543
  exports.boolField = boolField;
2398
2544
  exports.buildSchema = buildSchema;
2399
2545
  exports.cleanDataForSchema = cleanDataForSchema;
@@ -2406,7 +2552,6 @@ exports.createArrayRenderer = createArrayRenderer;
2406
2552
  exports.createDataRenderer = createDataRenderer;
2407
2553
  exports.createDefaultActionRenderer = createDefaultActionRenderer;
2408
2554
  exports.createDefaultAdornmentRenderer = createDefaultAdornmentRenderer;
2409
- exports.createDefaultArrayRenderer = createDefaultArrayRenderer;
2410
2555
  exports.createDefaultDataRenderer = createDefaultDataRenderer;
2411
2556
  exports.createDefaultDisplayRenderer = createDefaultDisplayRenderer;
2412
2557
  exports.createDefaultGroupRenderer = createDefaultGroupRenderer;
@@ -2419,6 +2564,7 @@ exports.createGroupRenderer = createGroupRenderer;
2419
2564
  exports.createInputConversion = createInputConversion;
2420
2565
  exports.createLabelRenderer = createLabelRenderer;
2421
2566
  exports.createLayoutRenderer = createLayoutRenderer;
2567
+ exports.createRadioRenderer = createRadioRenderer;
2422
2568
  exports.createSelectConversion = createSelectConversion;
2423
2569
  exports.createSelectRenderer = createSelectRenderer;
2424
2570
  exports.createVisibilityRenderer = createVisibilityRenderer;
@@ -2428,11 +2574,9 @@ exports.defaultCompoundField = defaultCompoundField;
2428
2574
  exports.defaultControlForField = defaultControlForField;
2429
2575
  exports.defaultDataProps = defaultDataProps;
2430
2576
  exports.defaultEvalHooks = defaultEvalHooks;
2431
- exports.defaultIsEmpty = defaultIsEmpty;
2432
2577
  exports.defaultScalarField = defaultScalarField;
2433
2578
  exports.defaultSchemaInterface = defaultSchemaInterface;
2434
2579
  exports.defaultTailwindTheme = defaultTailwindTheme;
2435
- exports.defaultTextValue = defaultTextValue;
2436
2580
  exports.defaultUseEvalExpressionHook = defaultUseEvalExpressionHook;
2437
2581
  exports.defaultValueForField = defaultValueForField;
2438
2582
  exports.defaultValueForFields = defaultValueForFields;
@@ -2473,6 +2617,7 @@ exports.isGroupControl = isGroupControl;
2473
2617
  exports.isGroupControlsDefinition = isGroupControlsDefinition;
2474
2618
  exports.isIconAdornment = isIconAdornment;
2475
2619
  exports.isScalarField = isScalarField;
2620
+ exports.isTextfieldRenderer = isTextfieldRenderer;
2476
2621
  exports.jsonPathString = jsonPathString;
2477
2622
  exports.jsonataExpr = jsonataExpr;
2478
2623
  exports.layoutKeyForPlacement = layoutKeyForPlacement;