@react-typed-forms/schemas 1.0.0-dev.2 → 1.0.0-dev.20

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
@@ -1,20 +1,1622 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
1
+ var React = require('react');
2
+ var core = require('@react-typed-forms/core');
3
+ var jsonata = require('jsonata');
4
+ var clsx = require('clsx');
5
+
6
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
7
+
8
+ var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
9
+ var jsonata__default = /*#__PURE__*/_interopDefaultLegacy(jsonata);
10
+ var clsx__default = /*#__PURE__*/_interopDefaultLegacy(clsx);
11
+
12
+ function _extends() {
13
+ _extends = Object.assign ? Object.assign.bind() : function (target) {
14
+ for (var i = 1; i < arguments.length; i++) {
15
+ var source = arguments[i];
16
+ for (var key in source) {
17
+ if (Object.prototype.hasOwnProperty.call(source, key)) {
18
+ target[key] = source[key];
19
+ }
20
+ }
21
+ }
22
+ return target;
23
+ };
24
+ return _extends.apply(this, arguments);
25
+ }
26
+ function _objectWithoutPropertiesLoose(source, excluded) {
27
+ if (source == null) return {};
28
+ var target = {};
29
+ var sourceKeys = Object.keys(source);
30
+ var key, i;
31
+ for (i = 0; i < sourceKeys.length; i++) {
32
+ key = sourceKeys[i];
33
+ if (excluded.indexOf(key) >= 0) continue;
34
+ target[key] = source[key];
35
+ }
36
+ return target;
37
+ }
38
+ function _unsupportedIterableToArray(o, minLen) {
39
+ if (!o) return;
40
+ if (typeof o === "string") return _arrayLikeToArray(o, minLen);
41
+ var n = Object.prototype.toString.call(o).slice(8, -1);
42
+ if (n === "Object" && o.constructor) n = o.constructor.name;
43
+ if (n === "Map" || n === "Set") return Array.from(o);
44
+ if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
45
+ }
46
+ function _arrayLikeToArray(arr, len) {
47
+ if (len == null || len > arr.length) len = arr.length;
48
+ for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
49
+ return arr2;
50
+ }
51
+ function _createForOfIteratorHelperLoose(o, allowArrayLike) {
52
+ var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"];
53
+ if (it) return (it = it.call(o)).next.bind(it);
54
+ if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") {
55
+ if (it) o = it;
56
+ var i = 0;
57
+ return function () {
58
+ if (i >= o.length) return {
59
+ done: true
60
+ };
61
+ return {
62
+ done: false,
63
+ value: o[i++]
64
+ };
65
+ };
66
+ }
67
+ throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
68
+ }
69
+
70
+ exports.FieldType = void 0;
71
+ (function (FieldType) {
72
+ FieldType["String"] = "String";
73
+ FieldType["Bool"] = "Bool";
74
+ FieldType["Int"] = "Int";
75
+ FieldType["Date"] = "Date";
76
+ FieldType["DateTime"] = "DateTime";
77
+ FieldType["Double"] = "Double";
78
+ FieldType["EntityRef"] = "EntityRef";
79
+ FieldType["Compound"] = "Compound";
80
+ FieldType["AutoId"] = "AutoId";
81
+ FieldType["Image"] = "Image";
82
+ FieldType["Any"] = "Any";
83
+ })(exports.FieldType || (exports.FieldType = {}));
84
+ exports.ControlDefinitionType = void 0;
85
+ (function (ControlDefinitionType) {
86
+ ControlDefinitionType["Data"] = "Data";
87
+ ControlDefinitionType["Group"] = "Group";
88
+ ControlDefinitionType["Display"] = "Display";
89
+ ControlDefinitionType["Action"] = "Action";
90
+ })(exports.ControlDefinitionType || (exports.ControlDefinitionType = {}));
91
+ exports.DynamicPropertyType = void 0;
92
+ (function (DynamicPropertyType) {
93
+ DynamicPropertyType["Visible"] = "Visible";
94
+ DynamicPropertyType["DefaultValue"] = "DefaultValue";
95
+ })(exports.DynamicPropertyType || (exports.DynamicPropertyType = {}));
96
+ exports.ExpressionType = void 0;
97
+ (function (ExpressionType) {
98
+ ExpressionType["Jsonata"] = "Jsonata";
99
+ ExpressionType["FieldValue"] = "FieldValue";
100
+ ExpressionType["UserMatch"] = "UserMatch";
101
+ })(exports.ExpressionType || (exports.ExpressionType = {}));
102
+ exports.AdornmentPlacement = void 0;
103
+ (function (AdornmentPlacement) {
104
+ AdornmentPlacement["ControlStart"] = "ControlStart";
105
+ AdornmentPlacement["ControlEnd"] = "ControlEnd";
106
+ AdornmentPlacement["LabelStart"] = "LabelStart";
107
+ AdornmentPlacement["LabelEnd"] = "LabelEnd";
108
+ })(exports.AdornmentPlacement || (exports.AdornmentPlacement = {}));
109
+ exports.ControlAdornmentType = void 0;
110
+ (function (ControlAdornmentType) {
111
+ ControlAdornmentType["Tooltip"] = "Tooltip";
112
+ ControlAdornmentType["Accordion"] = "Accordion";
113
+ ControlAdornmentType["HelpText"] = "HelpText";
114
+ })(exports.ControlAdornmentType || (exports.ControlAdornmentType = {}));
115
+ exports.DataRenderType = void 0;
116
+ (function (DataRenderType) {
117
+ DataRenderType["Standard"] = "Standard";
118
+ DataRenderType["Radio"] = "Radio";
119
+ DataRenderType["HtmlEditor"] = "HtmlEditor";
120
+ DataRenderType["IconList"] = "IconList";
121
+ DataRenderType["CheckList"] = "CheckList";
122
+ DataRenderType["UserSelection"] = "UserSelection";
123
+ DataRenderType["Synchronised"] = "Synchronised";
124
+ DataRenderType["IconSelector"] = "IconSelector";
125
+ DataRenderType["DateTime"] = "DateTime";
126
+ DataRenderType["Checkbox"] = "Checkbox";
127
+ DataRenderType["Dropdown"] = "Dropdown";
128
+ })(exports.DataRenderType || (exports.DataRenderType = {}));
129
+ exports.SyncTextType = void 0;
130
+ (function (SyncTextType) {
131
+ SyncTextType["Camel"] = "Camel";
132
+ SyncTextType["Snake"] = "Snake";
133
+ SyncTextType["Pascal"] = "Pascal";
134
+ })(exports.SyncTextType || (exports.SyncTextType = {}));
135
+ exports.GroupRenderType = void 0;
136
+ (function (GroupRenderType) {
137
+ GroupRenderType["Standard"] = "Standard";
138
+ GroupRenderType["Grid"] = "Grid";
139
+ GroupRenderType["GroupElement"] = "GroupElement";
140
+ })(exports.GroupRenderType || (exports.GroupRenderType = {}));
141
+ exports.DisplayDataType = void 0;
142
+ (function (DisplayDataType) {
143
+ DisplayDataType["Text"] = "Text";
144
+ DisplayDataType["Html"] = "Html";
145
+ })(exports.DisplayDataType || (exports.DisplayDataType = {}));
146
+ exports.ValidatorType = void 0;
147
+ (function (ValidatorType) {
148
+ ValidatorType["Jsonata"] = "Jsonata";
149
+ ValidatorType["Date"] = "Date";
150
+ })(exports.ValidatorType || (exports.ValidatorType = {}));
151
+ exports.DateComparison = void 0;
152
+ (function (DateComparison) {
153
+ DateComparison["NotBefore"] = "NotBefore";
154
+ DateComparison["NotAfter"] = "NotAfter";
155
+ })(exports.DateComparison || (exports.DateComparison = {}));
156
+ function isDataControlDefinition(x) {
157
+ return x.type === exports.ControlDefinitionType.Data;
158
+ }
159
+ function isGroupControlsDefinition(x) {
160
+ return x.type === exports.ControlDefinitionType.Group;
161
+ }
162
+ function isDisplayControlsDefinition(x) {
163
+ return x.type === exports.ControlDefinitionType.Display;
164
+ }
165
+ function isActionControlsDefinition(x) {
166
+ return x.type === exports.ControlDefinitionType.Action;
167
+ }
168
+ function visitControlDefinition(x, visitor, defaultValue) {
169
+ switch (x.type) {
170
+ case exports.ControlDefinitionType.Action:
171
+ return visitor.action(x);
172
+ case exports.ControlDefinitionType.Data:
173
+ return visitor.data(x);
174
+ case exports.ControlDefinitionType.Display:
175
+ return visitor.display(x);
176
+ case exports.ControlDefinitionType.Group:
177
+ return visitor.group(x);
178
+ default:
179
+ return defaultValue(x);
180
+ }
181
+ }
182
+ function dataControl(field, options) {
183
+ return _extends({
184
+ type: exports.ControlDefinitionType.Data,
185
+ field: field
186
+ }, options);
187
+ }
188
+ function fieldValueExpr(field, value) {
189
+ return {
190
+ type: exports.ExpressionType.FieldValue,
191
+ field: field,
192
+ value: value
193
+ };
194
+ }
195
+ function visibility(expr) {
196
+ return {
197
+ type: exports.DynamicPropertyType.Visible,
198
+ expr: expr
199
+ };
200
+ }
201
+ function isGridRenderer(options) {
202
+ return options.type === exports.GroupRenderType.Grid;
203
+ }
204
+
205
+ function buildSchema(def) {
206
+ return Object.entries(def).map(function (x) {
207
+ return x[1](x[0]);
208
+ });
209
+ }
210
+ function stringField(displayName, options) {
211
+ return makeScalarField(_extends({
212
+ type: exports.FieldType.String,
213
+ displayName: displayName
214
+ }, options));
215
+ }
216
+ function stringOptionsField(displayName) {
217
+ return makeScalarField({
218
+ type: exports.FieldType.String,
219
+ displayName: displayName,
220
+ options: [].slice.call(arguments, 1)
221
+ });
222
+ }
223
+ function withScalarOptions(options, v) {
224
+ return function (n) {
225
+ return _extends({}, v(n), options);
226
+ };
227
+ }
228
+ function makeScalarField(options) {
229
+ return function (n) {
230
+ return _extends({}, defaultScalarField(n, n), options);
231
+ };
232
+ }
233
+ function makeCompoundField(options) {
234
+ return function (n) {
235
+ return _extends({}, defaultCompoundField(n, n, false), options);
236
+ };
237
+ }
238
+ function intField(displayName, options) {
239
+ return makeScalarField(_extends({
240
+ type: exports.FieldType.Int,
241
+ displayName: displayName
242
+ }, options));
243
+ }
244
+ function boolField(displayName, options) {
245
+ return makeScalarField(_extends({
246
+ type: exports.FieldType.Bool,
247
+ displayName: displayName
248
+ }, options));
249
+ }
250
+ function compoundField(displayName, fields, other) {
251
+ return function (field) {
252
+ return _extends({}, defaultCompoundField(field, displayName, false), other, {
253
+ children: fields
254
+ });
255
+ };
256
+ }
257
+ function defaultScalarField(field, displayName) {
258
+ return {
259
+ field: field,
260
+ displayName: displayName,
261
+ type: exports.FieldType.String
262
+ };
263
+ }
264
+ function defaultCompoundField(field, displayName, collection) {
265
+ return {
266
+ tags: [],
267
+ field: field,
268
+ displayName: displayName,
269
+ type: exports.FieldType.Compound,
270
+ collection: collection,
271
+ system: false,
272
+ treeChildren: false,
273
+ children: [],
274
+ onlyForTypes: [],
275
+ required: true
276
+ };
277
+ }
278
+
279
+ function applyDefaultValues(v, fields) {
280
+ if (!v) return defaultValueForFields(fields);
281
+ var applyValue = fields.filter(function (x) {
282
+ return isCompoundField(x) || !(x.field in v);
283
+ });
284
+ if (!applyValue.length) return v;
285
+ var out = _extends({}, v);
286
+ applyValue.forEach(function (x) {
287
+ out[x.field] = x.field in v ? applyDefaultForField(v[x.field], x, fields) : defaultValueForField(x);
288
+ });
289
+ return out;
290
+ }
291
+ function applyDefaultForField(v, field, parent, notElement) {
292
+ if (field.collection && !notElement) {
293
+ return (v != null ? v : []).map(function (x) {
294
+ return applyDefaultForField(x, field, parent, true);
295
+ });
296
+ }
297
+ if (isCompoundField(field)) {
298
+ if (!v && !field.required) return v;
299
+ return applyDefaultValues(v, field.treeChildren ? parent : field.children);
300
+ }
301
+ return defaultValueForField(field);
302
+ }
303
+ function defaultValueForFields(fields) {
304
+ return Object.fromEntries(fields.map(function (x) {
305
+ return [x.field, defaultValueForField(x)];
306
+ }));
307
+ }
308
+ function defaultValueForField(sf) {
309
+ if (isCompoundField(sf)) {
310
+ return sf.required ? sf.collection ? [] : defaultValueForFields(sf.children) : undefined;
311
+ }
312
+ if (sf.collection) return [];
313
+ return sf.defaultValue;
314
+ }
315
+ function elementValueForField(sf) {
316
+ if (isCompoundField(sf)) {
317
+ return defaultValueForFields(sf.children);
318
+ }
319
+ return sf.defaultValue;
320
+ }
321
+ function findScalarField(fields, field) {
322
+ return findField(fields, field);
323
+ }
324
+ function findCompoundField(fields, field) {
325
+ return findField(fields, field);
326
+ }
327
+ function findField(fields, field) {
328
+ return fields.find(function (x) {
329
+ return x.field === field;
330
+ });
331
+ }
332
+ function isScalarField(sf) {
333
+ return !isCompoundField(sf);
334
+ }
335
+ function isCompoundField(sf) {
336
+ return sf.type === exports.FieldType.Compound;
337
+ }
338
+ function isDataControl(c) {
339
+ return c.type === exports.ControlDefinitionType.Data;
340
+ }
341
+ function isGroupControl(c) {
342
+ return c.type === exports.ControlDefinitionType.Group;
343
+ }
344
+ function fieldHasTag(field, tag) {
345
+ var _field$tags;
346
+ return Boolean((_field$tags = field.tags) == null ? void 0 : _field$tags.includes(tag));
347
+ }
348
+ function fieldDisplayName(field) {
349
+ var _field$displayName;
350
+ return (_field$displayName = field.displayName) != null ? _field$displayName : field.field;
351
+ }
352
+ function hasOptions(o) {
353
+ var _o$options$length, _o$options;
354
+ return ((_o$options$length = (_o$options = o.options) == null ? void 0 : _o$options.length) != null ? _o$options$length : 0) > 0;
355
+ }
356
+ function defaultControlForField(sf) {
357
+ if (isCompoundField(sf)) {
358
+ return {
359
+ type: exports.ControlDefinitionType.Group,
360
+ title: sf.displayName,
361
+ compoundField: sf.field,
362
+ groupOptions: {
363
+ type: exports.GroupRenderType.Grid,
364
+ hideTitle: false
365
+ },
366
+ children: sf.children.map(defaultControlForField)
367
+ };
368
+ } else if (isScalarField(sf)) {
369
+ var _sf$tags;
370
+ var htmlEditor = (_sf$tags = sf.tags) == null ? void 0 : _sf$tags.includes("_HtmlEditor");
371
+ return {
372
+ type: exports.ControlDefinitionType.Data,
373
+ title: sf.displayName,
374
+ field: sf.field,
375
+ required: sf.required,
376
+ renderOptions: {
377
+ type: htmlEditor ? exports.DataRenderType.HtmlEditor : exports.DataRenderType.Standard
378
+ }
379
+ };
380
+ }
381
+ throw "Unknown schema field";
382
+ }
383
+ function findReferencedControl(field, control) {
384
+ if (isDataControl(control) && field === control.field) return control;
385
+ if (isGroupControl(control)) {
386
+ if (control.compoundField) return field === control.compoundField ? control : undefined;
387
+ return findReferencedControlInArray(field, control.children);
388
+ }
389
+ return undefined;
390
+ }
391
+ function findReferencedControlInArray(field, controls) {
392
+ for (var _iterator = _createForOfIteratorHelperLoose(controls), _step; !(_step = _iterator()).done;) {
393
+ var c = _step.value;
394
+ var ref = findReferencedControl(field, c);
395
+ if (ref) return ref;
396
+ }
397
+ return undefined;
398
+ }
399
+ function addMissingControls(fields, controls) {
400
+ var changes = fields.flatMap(function (x) {
401
+ if (fieldHasTag(x, "_NoControl")) return [];
402
+ var existing = findReferencedControlInArray(x.field, controls);
403
+ if (!existing || isCompoundField(x)) return {
404
+ field: x,
405
+ existing: existing
406
+ };
407
+ return [];
408
+ });
409
+ var changedCompounds = controls.map(function (x) {
410
+ var ex = changes.find(function (c) {
411
+ return c.existing === x;
412
+ });
413
+ if (!ex) return x;
414
+ var cf = x;
415
+ return _extends({}, cf, {
416
+ children: addMissingControls(ex.field.children, cf.children)
417
+ });
418
+ });
419
+ return changedCompounds.concat(changes.filter(function (x) {
420
+ return !x.existing;
421
+ }).map(function (x) {
422
+ return defaultControlForField(x.field);
423
+ }));
424
+ }
425
+
426
+ var _FormRendererComponentsContext = null;
427
+ function FormRendererComponentsContext() {
428
+ if (!_FormRendererComponentsContext) {
429
+ _FormRendererComponentsContext = React.createContext(undefined);
430
+ }
431
+ return _FormRendererComponentsContext;
432
+ }
433
+ function FormRendererProvider(_ref) {
434
+ var _effect = core.useComponentTracking();
435
+ try {
436
+ var value = _ref.value,
437
+ children = _ref.children;
438
+ var _FormRendererComponen = FormRendererComponentsContext(),
439
+ Provider = _FormRendererComponen.Provider;
440
+ return /*#__PURE__*/React__default["default"].createElement(Provider, {
441
+ value: value,
442
+ children: children
443
+ });
444
+ } finally {
445
+ _effect();
446
+ }
447
+ }
448
+ function useFormRendererComponents() {
449
+ var c = React.useContext(FormRendererComponentsContext());
450
+ if (!c) {
451
+ throw "Need to use FormRendererComponentContext.Provider";
452
+ }
453
+ return c;
454
+ }
455
+ function controlTitle(title, field) {
456
+ return title ? title : fieldDisplayName(field);
457
+ }
458
+ function renderControl(definition, formState, hooks, key) {
459
+ var fields = formState.fields;
460
+ return visitControlDefinition(definition, {
461
+ data: function data(def) {
462
+ var fieldData = findScalarField(fields, def.field);
463
+ if (!fieldData) return /*#__PURE__*/React__default["default"].createElement("h1", {
464
+ key: key
465
+ }, "No schema field for: ", def.field);
466
+ return /*#__PURE__*/React__default["default"].createElement(DataRenderer, {
467
+ key: key,
468
+ formState: formState,
469
+ hooks: hooks,
470
+ controlDef: def,
471
+ fieldData: fieldData
472
+ });
473
+ },
474
+ group: function group(d) {
475
+ return /*#__PURE__*/React__default["default"].createElement(GroupRenderer, {
476
+ key: key,
477
+ hooks: hooks,
478
+ groupDef: d,
479
+ formState: formState
480
+ });
481
+ },
482
+ action: function action(d) {
483
+ return /*#__PURE__*/React__default["default"].createElement(ActionRenderer, {
484
+ key: key,
485
+ hooks: hooks,
486
+ formState: formState,
487
+ actionDef: d
488
+ });
489
+ },
490
+ display: function display(d) {
491
+ return /*#__PURE__*/React__default["default"].createElement(DisplayRenderer, {
492
+ key: key,
493
+ hooks: hooks,
494
+ formState: formState,
495
+ displayDef: d
496
+ });
497
+ }
498
+ }, function () {
499
+ return /*#__PURE__*/React__default["default"].createElement("h1", null, "Unknown control: ", definition.type);
500
+ });
501
+ }
502
+ /** @trackControls */
503
+ function DataRenderer(_ref2) {
504
+ var _effect2 = core.useComponentTracking();
505
+ try {
506
+ var _props$customRender;
507
+ var hooks = _ref2.hooks,
508
+ formState = _ref2.formState,
509
+ controlDef = _ref2.controlDef,
510
+ fieldData = _ref2.fieldData;
511
+ var renderer = useFormRendererComponents();
512
+ var props = hooks.useDataProperties(formState, controlDef, fieldData, renderer);
513
+ return ((_props$customRender = props.customRender) != null ? _props$customRender : renderer.renderData)(props);
514
+ } finally {
515
+ _effect2();
516
+ }
517
+ }
518
+ /** @trackControls */ /** @trackControls */
519
+ function ActionRenderer(_ref3) {
520
+ var _effect3 = core.useComponentTracking();
521
+ try {
522
+ var hooks = _ref3.hooks,
523
+ formState = _ref3.formState,
524
+ actionDef = _ref3.actionDef;
525
+ var _useFormRendererCompo = useFormRendererComponents(),
526
+ renderAction = _useFormRendererCompo.renderAction;
527
+ var actionControlProperties = hooks.useActionProperties(formState, actionDef);
528
+ return renderAction(actionControlProperties);
529
+ } finally {
530
+ _effect3();
531
+ }
532
+ }
533
+ /** @trackControls */ /** @trackControls */
534
+ function GroupRenderer(_ref4) {
535
+ var _effect4 = core.useComponentTracking();
536
+ try {
537
+ var hooks = _ref4.hooks,
538
+ formState = _ref4.formState,
539
+ groupDef = _ref4.groupDef;
540
+ var renderers = useFormRendererComponents();
541
+ var groupProps = hooks.useGroupProperties(formState, groupDef, hooks, renderers);
542
+ return renderers.renderGroup(groupProps);
543
+ } finally {
544
+ _effect4();
545
+ }
546
+ }
547
+ /** @trackControls */ /** @trackControls */
548
+ function DisplayRenderer(_ref5) {
549
+ var _effect5 = core.useComponentTracking();
550
+ try {
551
+ var hooks = _ref5.hooks,
552
+ formState = _ref5.formState,
553
+ displayDef = _ref5.displayDef;
554
+ var _useFormRendererCompo2 = useFormRendererComponents(),
555
+ renderDisplay = _useFormRendererCompo2.renderDisplay;
556
+ var displayProps = hooks.useDisplayProperties(formState, displayDef);
557
+ return renderDisplay(displayProps);
558
+ } finally {
559
+ _effect5();
560
+ }
561
+ }
562
+ function controlForField(field, formState) {
563
+ var _ref6;
564
+ var refField = findField(formState.fields, field);
565
+ return (_ref6 = refField && formState.data.fields[refField.field]) != null ? _ref6 : core.newControl(undefined);
566
+ }
567
+ function fieldForControl(c) {
568
+ return isDataControl(c) ? c.field : isGroupControl(c) ? c.compoundField : undefined;
569
+ }
570
+ var AlwaysVisible = {
571
+ value: true,
572
+ canChange: false
573
+ };
574
+ function createAction(label, onClick, actionId) {
575
+ return {
576
+ definition: {
577
+ type: exports.ControlDefinitionType.Action,
578
+ actionId: actionId != null ? actionId : label,
579
+ title: label
580
+ },
581
+ visible: AlwaysVisible,
582
+ onClick: onClick
583
+ };
584
+ }
585
+ function visitControlData(definition, _ref7, cb) {
586
+ var fields = _ref7.fields,
587
+ _data = _ref7.data;
588
+ return visitControlDefinition(definition, {
589
+ data: function data(def) {
590
+ var fieldData = findScalarField(fields, def.field);
591
+ if (!fieldData) return undefined;
592
+ return cb(def, _data.fields[fieldData.field]);
593
+ },
594
+ group: function group(d) {
595
+ if (d.compoundField) {
596
+ var compound = findCompoundField(fields, d.compoundField);
597
+ if (!compound) return;
598
+ fields = compound.children;
599
+ _data = _data.fields[compound.field];
600
+ }
601
+ var childState = {
602
+ fields: fields,
603
+ data: _data
604
+ };
605
+ for (var _iterator = _createForOfIteratorHelperLoose(d.children), _step; !(_step = _iterator()).done;) {
606
+ var c = _step.value;
607
+ var res = visitControlData(c, childState, cb);
608
+ if (res !== undefined) return res;
609
+ }
610
+ return undefined;
611
+ },
612
+ action: function action(d) {
613
+ return undefined;
614
+ },
615
+ display: function display(d) {
616
+ return undefined;
617
+ }
618
+ }, function () {
619
+ return undefined;
620
+ });
621
+ }
622
+
623
+ function useDefaultValue(definition, field, formState, hooks) {
624
+ var _definition$dynamic;
625
+ var valueExpression = (_definition$dynamic = definition.dynamic) == null ? void 0 : _definition$dynamic.find(function (x) {
626
+ return x.type === exports.DynamicPropertyType.DefaultValue;
627
+ });
628
+ if (valueExpression) {
629
+ return hooks.useExpression(valueExpression.expr, formState).value;
630
+ }
631
+ return field.defaultValue;
632
+ }
633
+ function useIsControlVisible(definition, formState, hooks) {
634
+ var _definition$dynamic2, _ref2, _onlyForTypes$length;
635
+ var visibleExpression = (_definition$dynamic2 = definition.dynamic) == null ? void 0 : _definition$dynamic2.find(function (x) {
636
+ return x.type === exports.DynamicPropertyType.Visible;
637
+ });
638
+ if (visibleExpression && visibleExpression.expr) {
639
+ var exprValue = hooks.useExpression(visibleExpression.expr, formState).value;
640
+ return {
641
+ value: Boolean(exprValue),
642
+ canChange: true
643
+ };
644
+ }
645
+ var schemaFields = formState.fields;
646
+ var _useMemo = React.useMemo(function () {
647
+ var _ref, _formState$data$field;
648
+ var typeField = schemaFields.find(function (x) {
649
+ return isScalarField(x) && x.isTypeField;
650
+ });
651
+ var typeControl = (_ref = typeField && ((_formState$data$field = formState.data.fields) == null ? void 0 : _formState$data$field[typeField.field])) != null ? _ref : core.newControl(undefined);
652
+ var compoundField = isGroupControl(definition) && definition.compoundField ? formState.data.fields[definition.compoundField] : undefined;
653
+ return {
654
+ typeControl: typeControl,
655
+ compoundField: compoundField
656
+ };
657
+ }, [schemaFields, formState.data]),
658
+ typeControl = _useMemo.typeControl,
659
+ compoundField = _useMemo.compoundField;
660
+ var fieldName = fieldForControl(definition);
661
+ var onlyForTypes = (_ref2 = fieldName ? findField(schemaFields, fieldName) : undefined) == null ? void 0 : _ref2.onlyForTypes;
662
+ var canChange = Boolean(compoundField || ((_onlyForTypes$length = onlyForTypes == null ? void 0 : onlyForTypes.length) != null ? _onlyForTypes$length : 0) > 0);
663
+ var value = (!compoundField || compoundField.value != null) && (!onlyForTypes || onlyForTypes.length === 0 || Boolean(typeControl.value && onlyForTypes.includes(typeControl.value)));
664
+ return {
665
+ value: value,
666
+ canChange: canChange
667
+ };
668
+ }
669
+ function getDefaultScalarControlProperties(definition, field, visible, defaultValue, control, formState) {
670
+ var _definition$renderOpt, _definition$required, _ref3, _formState$readonly;
671
+ return {
672
+ definition: definition,
673
+ field: field,
674
+ defaultValue: defaultValue,
675
+ options: getOptionsForScalarField(field),
676
+ renderOptions: (_definition$renderOpt = definition.renderOptions) != null ? _definition$renderOpt : {
677
+ type: exports.DataRenderType.Standard
678
+ },
679
+ required: (_definition$required = definition.required) != null ? _definition$required : false,
680
+ visible: visible,
681
+ readonly: (_ref3 = (_formState$readonly = formState.readonly) != null ? _formState$readonly : definition.readonly) != null ? _ref3 : false,
682
+ control: control,
683
+ formState: formState
684
+ };
685
+ }
686
+ function getOptionsForScalarField(field) {
687
+ var _opts$length;
688
+ var opts = field.options;
689
+ if ((_opts$length = opts == null ? void 0 : opts.length) != null ? _opts$length : 0 > 0) {
690
+ return opts;
691
+ }
692
+ return undefined;
693
+ }
694
+ function createDefaultSchemaHooks() {
695
+ function useExpression(expr, formState) {
696
+ switch (expr.type) {
697
+ case exports.ExpressionType.Jsonata:
698
+ var jExpr = expr;
699
+ var compiledExpr = React.useMemo(function () {
700
+ return jsonata__default["default"](jExpr.expression);
701
+ }, [jExpr.expression]);
702
+ var control = core.useControl();
703
+ core.useControlEffect(function () {
704
+ return formState.data.value;
705
+ }, function (v) {
706
+ try {
707
+ return Promise.resolve(compiledExpr.evaluate(v)).then(function (_compiledExpr$evaluat) {
708
+ control.value = _compiledExpr$evaluat;
709
+ });
710
+ } catch (e) {
711
+ return Promise.reject(e);
712
+ }
713
+ });
714
+ return control;
715
+ case exports.ExpressionType.FieldValue:
716
+ var fvExpr = expr;
717
+ return core.useComputed(function () {
718
+ var fv = controlForField(fvExpr.field, formState).value;
719
+ return Array.isArray(fv) ? fv.includes(fvExpr.value) : fv === fvExpr.value;
720
+ });
721
+ default:
722
+ return core.useControl(undefined);
723
+ }
724
+ }
725
+ function useValidators(formState, isVisible, control, required, validators) {
726
+ if (required) core.useValidator(control, function (v) {
727
+ return isVisible && (v == null || v == "") ? "Please enter a value" : null;
728
+ }, "required");
729
+ validators == null || validators.forEach(function (v, i) {
730
+ switch (v.type) {
731
+ case exports.ValidatorType.Date:
732
+ processDateValidator(v);
733
+ break;
734
+ case exports.ValidatorType.Jsonata:
735
+ var errorMsg = useExpression(v, formState);
736
+ core.useControlEffect(function () {
737
+ return [isVisible, errorMsg.value];
738
+ }, function (_ref4) {
739
+ var isVisible = _ref4[0],
740
+ msg = _ref4[1];
741
+ return control.setError(v.type + i, isVisible ? msg : null);
742
+ }, true);
743
+ break;
744
+ }
745
+ function processDateValidator(dv) {
746
+ var comparisonDate;
747
+ if (dv.fixedDate) {
748
+ comparisonDate = Date.parse(dv.fixedDate);
749
+ } else {
750
+ var nowDate = new Date();
751
+ comparisonDate = Date.UTC(nowDate.getFullYear(), nowDate.getMonth(), nowDate.getDate());
752
+ if (dv.daysFromCurrent) {
753
+ comparisonDate += dv.daysFromCurrent * 86400000;
754
+ }
755
+ }
756
+ core.useValidator(control, function (v) {
757
+ if (v) {
758
+ var selDate = Date.parse(v);
759
+ var notAfter = dv.comparison === exports.DateComparison.NotAfter;
760
+ if (notAfter ? selDate > comparisonDate : selDate < comparisonDate) {
761
+ return "Date must not be " + (notAfter ? "after" : "before") + " " + new Date(comparisonDate).toDateString();
762
+ }
763
+ }
764
+ return null;
765
+ }, "date" + i);
766
+ }
767
+ });
768
+ }
769
+ return {
770
+ useExpression: useExpression,
771
+ useValidators: useValidators
772
+ };
773
+ }
774
+ var defaultFormEditHooks = createFormEditHooks(createDefaultSchemaHooks());
775
+ function createFormEditHooks(schemaHooks) {
776
+ return {
777
+ schemaHooks: schemaHooks,
778
+ useDataProperties: function useDataProperties(formState, definition, field, renderer) {
779
+ var visible = useIsControlVisible(definition, formState, schemaHooks);
780
+ var isVisible = visible.value && !formState.invisible;
781
+ var defaultValue = useDefaultValue(definition, field, formState, schemaHooks);
782
+ var scalarControl = formState.data.fields[field.field];
783
+ React.useEffect(function () {
784
+ if (!isVisible) scalarControl.value = null;else if (scalarControl.current.value == null) {
785
+ scalarControl.value = defaultValue;
786
+ }
787
+ }, [isVisible, defaultValue]);
788
+ var dataProps = getDefaultScalarControlProperties(definition, field, visible, defaultValue, scalarControl, formState);
789
+ schemaHooks.useValidators(formState, isVisible, scalarControl, dataProps.required, definition.validators);
790
+ React.useEffect(function () {
791
+ var subscription = scalarControl.subscribe(function (c) {
792
+ return c.touched = true;
793
+ }, core.ControlChange.Validate);
794
+ return function () {
795
+ return scalarControl.unsubscribe(subscription);
796
+ };
797
+ }, []);
798
+ if (!field.collection) return dataProps;
799
+ return _extends({}, dataProps, {
800
+ array: defaultArrayRendererProps(scalarControl, field, definition, dataProps.readonly, function (c) {
801
+ return renderer.renderData(_extends({}, dataProps, {
802
+ control: c
803
+ }));
804
+ })
805
+ });
806
+ },
807
+ useDisplayProperties: function useDisplayProperties(fs, definition) {
808
+ var visible = useIsControlVisible(definition, fs, schemaHooks);
809
+ return {
810
+ visible: visible,
811
+ definition: definition
812
+ };
813
+ },
814
+ useGroupProperties: function useGroupProperties(fs, definition, hooks, renderers) {
815
+ var _definition$groupOpti;
816
+ var visible = useIsControlVisible(definition, fs, schemaHooks);
817
+ var field = definition.compoundField ? findCompoundField(fs.fields, definition.compoundField) : undefined;
818
+ var newFs = _extends({}, fs, {
819
+ fields: field ? field.children : fs.fields,
820
+ data: field ? fs.data.fields[field.field] : fs.data,
821
+ invisible: !visible.value || fs.invisible
822
+ });
823
+ var groupProps = {
824
+ visible: visible,
825
+ hooks: hooks,
826
+ hideTitle: (_definition$groupOpti = definition.groupOptions.hideTitle) != null ? _definition$groupOpti : false,
827
+ childCount: definition.children.length,
828
+ renderChild: function renderChild(i) {
829
+ return renderControl(definition.children[i], newFs, hooks, i);
830
+ },
831
+ definition: definition
832
+ };
833
+ if (field != null && field.collection) {
834
+ return _extends({}, groupProps, {
835
+ array: defaultArrayRendererProps(newFs.data, field, definition, fs.readonly, function (e) {
836
+ return renderers.renderGroup(_extends({}, groupProps, {
837
+ hideTitle: true,
838
+ renderChild: function renderChild(i) {
839
+ return renderControl(definition.children[i], _extends({}, newFs, {
840
+ data: e
841
+ }), hooks, i);
842
+ }
843
+ }));
844
+ })
845
+ });
846
+ }
847
+ return groupProps;
848
+ },
849
+ useActionProperties: function useActionProperties(formState, definition) {
850
+ var visible = useIsControlVisible(definition, formState, schemaHooks);
851
+ return {
852
+ visible: visible,
853
+ onClick: function onClick() {},
854
+ definition: definition
855
+ };
856
+ }
857
+ };
858
+ }
859
+ function defaultArrayRendererProps(control, field, definition, readonly, renderElem) {
860
+ var _control$elements$len, _control$elements;
861
+ return {
862
+ control: control,
863
+ childCount: (_control$elements$len = (_control$elements = control.elements) == null ? void 0 : _control$elements.length) != null ? _control$elements$len : 0,
864
+ field: field,
865
+ definition: definition,
866
+ addAction: !readonly ? {
867
+ definition: {
868
+ title: "Add " + controlTitle(definition.title, field),
869
+ type: exports.ControlDefinitionType.Action,
870
+ actionId: "addElement"
871
+ },
872
+ visible: {
873
+ value: true,
874
+ canChange: false
875
+ },
876
+ onClick: function onClick() {
877
+ return core.addElement(control, elementValueForField(field));
878
+ }
879
+ } : undefined,
880
+ removeAction: !readonly ? function (i) {
881
+ return {
882
+ definition: {
883
+ title: "Remove",
884
+ type: exports.ControlDefinitionType.Action,
885
+ actionId: "removeElement"
886
+ },
887
+ visible: {
888
+ value: true,
889
+ canChange: false
890
+ },
891
+ onClick: function onClick() {
892
+ return core.removeElement(control, control.elements[i]);
893
+ }
894
+ };
895
+ } : undefined,
896
+ childKey: function childKey(i) {
897
+ return control.elements[i].uniqueId;
898
+ },
899
+ renderChild: function renderChild(i) {
900
+ var c = control.elements[i];
901
+ return /*#__PURE__*/React__default["default"].createElement(React.Fragment, {
902
+ key: c.uniqueId
903
+ }, renderElem(c));
904
+ }
905
+ };
906
+ }
907
+ function useControlsWithDefaults(definition, sf) {
908
+ return React.useMemo(function () {
909
+ return definition.children.length ? definition : _extends({}, definition, {
910
+ children: addMissingControls(sf, [])
911
+ });
912
+ }, [sf, definition]);
913
+ }
914
+
915
+ var _excluded = ["control", "convert"],
916
+ _excluded2 = ["errorText", "value", "onChange"],
917
+ _excluded3 = ["state", "options", "className", "convert", "required", "emptyText", "requiredText"];
918
+ function createFormRenderer(customRenderers, defaultRenderers) {
919
+ var _customRenderers$find, _customRenderers$find2, _customRenderers$find3;
920
+ if (customRenderers === void 0) {
921
+ customRenderers = [];
922
+ }
923
+ if (defaultRenderers === void 0) {
924
+ defaultRenderers = createClassStyledRenderers();
925
+ }
926
+ var dataRegistrations = customRenderers.filter(isDataRegistration);
927
+ var adornmentRegistrations = customRenderers.filter(isAdornmentRegistration);
928
+ var labelRenderer = (_customRenderers$find = customRenderers.find(isLabelRegistration)) != null ? _customRenderers$find : defaultRenderers.label;
929
+ var arrayRenderer = (_customRenderers$find2 = customRenderers.find(isArrayRegistration)) != null ? _customRenderers$find2 : defaultRenderers.array;
930
+ var renderVisibility = ((_customRenderers$find3 = customRenderers.find(isVisibilityRegistration)) != null ? _customRenderers$find3 : defaultRenderers.visibility).render;
931
+ var formRenderers = {
932
+ renderAction: renderAction,
933
+ renderData: _renderData,
934
+ renderGroup: _renderGroup,
935
+ renderDisplay: renderDisplay,
936
+ renderLabel: renderLabel,
937
+ renderArray: renderArray,
938
+ renderVisibility: renderVisibility,
939
+ renderAdornment: renderAdornment
940
+ };
941
+ function renderAdornment(props) {
942
+ var _adornmentRegistratio;
943
+ var renderer = (_adornmentRegistratio = adornmentRegistrations.find(function (x) {
944
+ return isOneOf(x.adornmentType, props.definition.type);
945
+ })) != null ? _adornmentRegistratio : defaultRenderers.adornment;
946
+ return renderer.render(props);
947
+ }
948
+ function renderArray(props) {
949
+ return arrayRenderer.render(props, formRenderers);
950
+ }
951
+ function renderLabel(props, elem) {
952
+ return labelRenderer.render(props, elem, formRenderers);
953
+ }
954
+ function withAdornments(definition, adornments) {
955
+ var _definition$adornment, _definition$adornment2;
956
+ var rAdornments = adornments ? adornments : (_definition$adornment = (_definition$adornment2 = definition.adornments) == null ? void 0 : _definition$adornment2.map(function (x, i) {
957
+ return renderAdornment({
958
+ definition: x,
959
+ key: i
960
+ });
961
+ })) != null ? _definition$adornment : [];
962
+ function combineAdornments(placement) {
963
+ return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, rAdornments.filter(function (x) {
964
+ return x.child && x.child[0] === placement;
965
+ }).map(function (x) {
966
+ return x.child[1];
967
+ }));
968
+ }
969
+ return [rAdornments, combineAdornments, function (mainElem) {
970
+ return !adornments ? mainElem : rAdornments.reduce(function (e, n) {
971
+ var _n$wrap;
972
+ return (_n$wrap = n.wrap == null ? void 0 : n.wrap(e)) != null ? _n$wrap : e;
973
+ }, mainElem);
974
+ }];
975
+ }
976
+ function _renderData(props, adornments) {
977
+ var _dataRegistrations$fi;
978
+ var definition = props.definition,
979
+ renderType = props.renderOptions.type,
980
+ visible = props.visible,
981
+ required = props.required,
982
+ control = props.control,
983
+ field = props.field;
984
+ var options = hasOptions(props);
985
+ var renderer = (_dataRegistrations$fi = dataRegistrations.find(function (x) {
986
+ var _x$collection, _field$collection, _x$options;
987
+ 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));
988
+ })) != null ? _dataRegistrations$fi : defaultRenderers.data;
989
+ var _withAdornments = withAdornments(definition, adornments),
990
+ rAdornments = _withAdornments[0],
991
+ renderAdornment = _withAdornments[1],
992
+ wrapElem = _withAdornments[2];
993
+ return wrapElem(renderer.render(props, createLabel, _extends({}, formRenderers, {
994
+ renderData: function renderData(p) {
995
+ return _renderData(p, rAdornments);
996
+ }
997
+ })));
998
+ function createLabel(labelProps) {
999
+ var _labelProps$title;
1000
+ return _extends({
1001
+ visible: visible,
1002
+ required: required,
1003
+ control: control,
1004
+ forId: "c" + control.uniqueId,
1005
+ renderAdornment: renderAdornment
1006
+ }, labelProps, {
1007
+ title: (_labelProps$title = labelProps == null ? void 0 : labelProps.title) != null ? _labelProps$title : controlTitle(definition.title, field)
1008
+ });
1009
+ }
1010
+ }
1011
+ function _renderGroup(props, adornments) {
1012
+ var definition = props.definition,
1013
+ visible = props.visible,
1014
+ field = props.field;
1015
+ var _withAdornments2 = withAdornments(props.definition, adornments),
1016
+ rAdornments = _withAdornments2[0],
1017
+ renderAdornment = _withAdornments2[1],
1018
+ wrapElem = _withAdornments2[2];
1019
+ var title = props.hideTitle ? undefined : field ? controlTitle(definition.title, field) : definition.title;
1020
+ return wrapElem(defaultRenderers.group.render(props, createLabel, _extends({}, formRenderers, {
1021
+ renderGroup: function renderGroup(p) {
1022
+ return _renderGroup(p, rAdornments);
1023
+ }
1024
+ })));
1025
+ function createLabel(labelProps) {
1026
+ return _extends({
1027
+ required: false,
1028
+ visible: visible,
1029
+ group: true,
1030
+ renderAdornment: renderAdornment,
1031
+ title: title
1032
+ }, labelProps);
1033
+ }
1034
+ }
1035
+ function renderAction(props, adornments) {
1036
+ var _customRenderers$find4;
1037
+ var renderer = (_customRenderers$find4 = customRenderers.find(isActionRegistration)) != null ? _customRenderers$find4 : defaultRenderers.action;
1038
+ var _withAdornments3 = withAdornments(props.definition, adornments),
1039
+ wrapElem = _withAdornments3[2];
1040
+ return wrapElem(renderer.render(props, formRenderers));
1041
+ }
1042
+ function renderDisplay(props, adornments) {
1043
+ var _withAdornments4 = withAdornments(props.definition, adornments),
1044
+ wrapElem = _withAdornments4[2];
1045
+ return wrapElem(defaultRenderers.display.render(props, formRenderers));
1046
+ }
1047
+ return formRenderers;
1048
+ }
1049
+ function createDefaultActionRenderer(options) {
1050
+ if (options === void 0) {
1051
+ options = {};
1052
+ }
1053
+ function render(_ref, _ref2) {
1054
+ var visible = _ref.visible,
1055
+ onClick = _ref.onClick,
1056
+ title = _ref.definition.title;
1057
+ var renderVisibility = _ref2.renderVisibility;
1058
+ return renderVisibility(visible, /*#__PURE__*/React__default["default"].createElement("button", {
1059
+ className: options.className,
1060
+ onClick: onClick
1061
+ }, title));
1062
+ }
1063
+ return {
1064
+ render: render,
1065
+ type: "action"
1066
+ };
1067
+ }
1068
+ function createDefaultLabelRenderer(options) {
1069
+ if (options === void 0) {
1070
+ options = {
1071
+ requiredElement: /*#__PURE__*/React__default["default"].createElement("span", null, " *")
1072
+ };
1073
+ }
1074
+ return {
1075
+ render: function render(p, elem, _ref3) {
1076
+ var renderVisibility = _ref3.renderVisibility;
1077
+ return renderVisibility(p.visible, /*#__PURE__*/React__default["default"].createElement(DefaultLabelRenderer, _extends({}, p, options, {
1078
+ children: elem
1079
+ })));
1080
+ },
1081
+ type: "label"
1082
+ };
1083
+ }
1084
+ function DefaultLabelRenderer(_ref4) {
1085
+ var _effect = core.useComponentTracking();
1086
+ try {
1087
+ var className = _ref4.className,
1088
+ labelClass = _ref4.labelClass,
1089
+ title = _ref4.title,
1090
+ forId = _ref4.forId,
1091
+ required = _ref4.required,
1092
+ children = _ref4.children,
1093
+ group = _ref4.group,
1094
+ groupLabelClass = _ref4.groupLabelClass,
1095
+ renderAdornment = _ref4.renderAdornment,
1096
+ requiredElement = _ref4.requiredElement;
1097
+ return title ? /*#__PURE__*/React__default["default"].createElement("div", {
1098
+ className: className
1099
+ }, renderAdornment(exports.AdornmentPlacement.LabelStart), /*#__PURE__*/React__default["default"].createElement("label", {
1100
+ htmlFor: forId,
1101
+ className: clsx__default["default"](labelClass, group && groupLabelClass)
1102
+ }, title, required && requiredElement), renderAdornment(exports.AdornmentPlacement.LabelEnd), renderAdornment(exports.AdornmentPlacement.ControlStart), children, renderAdornment(exports.AdornmentPlacement.ControlEnd)) : /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, children);
1103
+ } finally {
1104
+ _effect();
1105
+ }
1106
+ }
1107
+ function createDefaultArrayRenderer(options) {
1108
+ var _ref5 = options != null ? options : {},
1109
+ className = _ref5.className,
1110
+ removableClass = _ref5.removableClass,
1111
+ childClass = _ref5.childClass,
1112
+ removableChildClass = _ref5.removableChildClass,
1113
+ removeActionClass = _ref5.removeActionClass,
1114
+ addActionClass = _ref5.addActionClass;
1115
+ function render(_ref6, _ref7) {
1116
+ var childCount = _ref6.childCount,
1117
+ renderChild = _ref6.renderChild,
1118
+ addAction = _ref6.addAction,
1119
+ removeAction = _ref6.removeAction,
1120
+ childKey = _ref6.childKey;
1121
+ var renderAction = _ref7.renderAction;
1122
+ return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement("div", {
1123
+ className: clsx__default["default"](className, removeAction && removableClass)
1124
+ }, Array.from({
1125
+ length: childCount
1126
+ }, function (_, x) {
1127
+ return removeAction ? /*#__PURE__*/React__default["default"].createElement(React.Fragment, {
1128
+ key: childKey(x)
1129
+ }, /*#__PURE__*/React__default["default"].createElement("div", {
1130
+ className: clsx__default["default"](childClass, removableChildClass)
1131
+ }, renderChild(x)), /*#__PURE__*/React__default["default"].createElement("div", {
1132
+ className: removeActionClass
1133
+ }, renderAction(removeAction(x)))) : /*#__PURE__*/React__default["default"].createElement("div", {
1134
+ key: childKey(x),
1135
+ className: childClass
1136
+ }, renderChild(x));
1137
+ })), addAction && /*#__PURE__*/React__default["default"].createElement("div", {
1138
+ className: addActionClass
1139
+ }, renderAction(addAction)));
1140
+ }
1141
+ return {
1142
+ render: render,
1143
+ type: "array"
1144
+ };
1145
+ }
1146
+ function createDefaultGroupRenderer(options) {
1147
+ var _ref8 = options != null ? options : {},
1148
+ className = _ref8.className,
1149
+ _ref8$gridStyles = _ref8.gridStyles,
1150
+ gridStyles = _ref8$gridStyles === void 0 ? defaultGridStyles : _ref8$gridStyles,
1151
+ _ref8$defaultGridColu = _ref8.defaultGridColumns,
1152
+ defaultGridColumns = _ref8$defaultGridColu === void 0 ? 2 : _ref8$defaultGridColu,
1153
+ gridClassName = _ref8.gridClassName,
1154
+ standardClassName = _ref8.standardClassName;
1155
+ function defaultGridStyles(_ref9) {
1156
+ var _ref9$columns = _ref9.columns,
1157
+ columns = _ref9$columns === void 0 ? defaultGridColumns : _ref9$columns;
1158
+ return {
1159
+ className: gridClassName,
1160
+ style: {
1161
+ display: "grid",
1162
+ gridTemplateColumns: "repeat(" + columns + ", 1fr)"
1163
+ }
1164
+ };
1165
+ }
1166
+ function render(props, defaultLabel, _ref10) {
1167
+ var renderLabel = _ref10.renderLabel,
1168
+ renderArray = _ref10.renderArray;
1169
+ var childCount = props.childCount,
1170
+ renderChild = props.renderChild,
1171
+ definition = props.definition;
1172
+ return renderLabel(defaultLabel(), props.array ? renderArray(props.array) : renderChildren());
1173
+ function renderChildren() {
1174
+ var groupOptions = definition.groupOptions;
1175
+ var _ref11 = isGridRenderer(groupOptions) ? gridStyles(groupOptions) : {
1176
+ className: standardClassName
1177
+ },
1178
+ style = _ref11.style,
1179
+ gcn = _ref11.className;
1180
+ return /*#__PURE__*/React__default["default"].createElement("div", {
1181
+ className: clsx__default["default"](className, gcn),
1182
+ style: style
1183
+ }, Array.from({
1184
+ length: childCount
1185
+ }, function (_, x) {
1186
+ return renderChild(x);
1187
+ }));
1188
+ }
1189
+ }
1190
+ return {
1191
+ type: "group",
1192
+ render: render
1193
+ };
1194
+ }
1195
+ function createDefaultDisplayRenderer(options) {
1196
+ if (options === void 0) {
1197
+ options = {};
1198
+ }
1199
+ function doRender(_ref12) {
1200
+ var displayData = _ref12.definition.displayData;
1201
+ switch (displayData.type) {
1202
+ case exports.DisplayDataType.Text:
1203
+ return /*#__PURE__*/React__default["default"].createElement("div", {
1204
+ className: options.textClassName
1205
+ }, displayData.text);
1206
+ case exports.DisplayDataType.Html:
1207
+ return /*#__PURE__*/React__default["default"].createElement("div", {
1208
+ className: options.htmlClassName,
1209
+ dangerouslySetInnerHTML: {
1210
+ __html: displayData.html
1211
+ }
1212
+ });
1213
+ default:
1214
+ return /*#__PURE__*/React__default["default"].createElement("h1", null, "Unknown display type: ", displayData.type);
1215
+ }
1216
+ }
1217
+ return {
1218
+ render: function render(p, _ref13) {
1219
+ var renderVisibility = _ref13.renderVisibility;
1220
+ return renderVisibility(p.visible, doRender(p));
1221
+ },
1222
+ type: "display"
1223
+ };
1224
+ }
1225
+ var DefaultBoolOptions = [{
1226
+ name: "Yes",
1227
+ value: true
1228
+ }, {
1229
+ name: "No",
1230
+ value: false
1231
+ }];
1232
+ function createDefaultDataRenderer(options) {
1233
+ var _options$selectOption;
1234
+ if (options === void 0) {
1235
+ options = {};
1236
+ }
1237
+ var selectRenderer = createSelectRenderer((_options$selectOption = options.selectOptions) != null ? _options$selectOption : {});
1238
+ var _optionRenderer$boole = _extends({
1239
+ optionRenderer: selectRenderer,
1240
+ booleanOptions: DefaultBoolOptions
1241
+ }, options),
1242
+ inputClass = _optionRenderer$boole.inputClass,
1243
+ booleanOptions = _optionRenderer$boole.booleanOptions,
1244
+ optionRenderer = _optionRenderer$boole.optionRenderer;
1245
+ return createDataRenderer(function (props, defaultLabel, renderers) {
1246
+ if (props.array) {
1247
+ return renderers.renderArray(props.array);
1248
+ }
1249
+ var renderType = props.renderOptions.type;
1250
+ var fieldType = props.field.type;
1251
+ var isBool = fieldType === exports.FieldType.Bool;
1252
+ if (booleanOptions != null && isBool && props.options == null) {
1253
+ return renderers.renderData(_extends({}, props, {
1254
+ options: booleanOptions
1255
+ }));
1256
+ }
1257
+ if (renderType === exports.DataRenderType.Standard && hasOptions(props)) {
1258
+ return optionRenderer.render(props, defaultLabel, renderers);
1259
+ }
1260
+ switch (renderType) {
1261
+ case exports.DataRenderType.Dropdown:
1262
+ return selectRenderer.render(props, defaultLabel, renderers);
1263
+ }
1264
+ var l = defaultLabel();
1265
+ return renderers.renderLabel(l, renderType === exports.DataRenderType.Checkbox ? /*#__PURE__*/React__default["default"].createElement(core.Fcheckbox, {
1266
+ control: props.control
1267
+ }) : /*#__PURE__*/React__default["default"].createElement(ControlInput, {
1268
+ className: inputClass,
1269
+ id: l.forId,
1270
+ readOnly: props.readonly,
1271
+ control: props.control,
1272
+ convert: createInputConversion(props.field.type)
1273
+ }));
1274
+ });
1275
+ }
1276
+ function ControlInput(_ref14) {
1277
+ var _effect2 = core.useComponentTracking();
1278
+ try {
1279
+ var control = _ref14.control,
1280
+ convert = _ref14.convert,
1281
+ props = _objectWithoutPropertiesLoose(_ref14, _excluded);
1282
+ var _formControlProps = core.formControlProps(control),
1283
+ errorText = _formControlProps.errorText,
1284
+ value = _formControlProps.value,
1285
+ onChange = _formControlProps.onChange,
1286
+ inputProps = _objectWithoutPropertiesLoose(_formControlProps, _excluded2);
1287
+ return /*#__PURE__*/React__default["default"].createElement("input", _extends({}, inputProps, {
1288
+ type: convert[0],
1289
+ value: value == null ? "" : convert[2](value),
1290
+ onChange: function onChange(e) {
1291
+ control.value = convert[1](e.target.value);
1292
+ }
1293
+ }, props));
1294
+ } finally {
1295
+ _effect2();
1296
+ }
1297
+ }
1298
+ function createDefaultAdornmentRenderer(options) {
1299
+ return {
1300
+ type: "adornment",
1301
+ render: function render() {
1302
+ return {};
1303
+ }
1304
+ };
1305
+ }
1306
+ function createDefaultVisibilityRenderer(options) {
1307
+ return {
1308
+ type: "visibility",
1309
+ render: function render(visible, children) {
1310
+ return visible.value ? children : /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null);
1311
+ }
1312
+ };
1313
+ }
1314
+ function createDefaultRenderers(options) {
1315
+ if (options === void 0) {
1316
+ options = {};
1317
+ }
1318
+ return {
1319
+ data: createDefaultDataRenderer(options.data),
1320
+ display: createDefaultDisplayRenderer(options.display),
1321
+ action: createDefaultActionRenderer(options.action),
1322
+ array: createDefaultArrayRenderer(options.array),
1323
+ group: createDefaultGroupRenderer(options.group),
1324
+ label: createDefaultLabelRenderer(options.label),
1325
+ visibility: createDefaultVisibilityRenderer(),
1326
+ adornment: createDefaultAdornmentRenderer()
1327
+ };
1328
+ }
1329
+ function createClassStyledRenderers() {
1330
+ return createDefaultRenderers({
1331
+ label: {
1332
+ className: "control"
1333
+ },
1334
+ group: {
1335
+ className: "group"
1336
+ },
1337
+ array: {
1338
+ className: "control-array"
1339
+ },
1340
+ action: {
1341
+ className: "action"
1342
+ },
1343
+ data: {
1344
+ inputClass: "data"
1345
+ },
1346
+ display: {
1347
+ htmlClassName: "html",
1348
+ textClassName: "text"
1349
+ }
1350
+ });
1351
+ }
1352
+ function isAdornmentRegistration(x) {
1353
+ return x.type === "adornment";
1354
+ }
1355
+ function isDataRegistration(x) {
1356
+ return x.type === "data";
1357
+ }
1358
+ function isLabelRegistration(x) {
1359
+ return x.type === "label";
1360
+ }
1361
+ function isActionRegistration(x) {
1362
+ return x.type === "action";
1363
+ }
1364
+ function isArrayRegistration(x) {
1365
+ return x.type === "array";
1366
+ }
1367
+ function isVisibilityRegistration(x) {
1368
+ return x.type === "visibility";
1369
+ }
1370
+ function isOneOf(x, v) {
1371
+ return x == null ? true : Array.isArray(x) ? x.includes(v) : v === x;
1372
+ }
1373
+ function createArrayRenderer(render, options) {
1374
+ return _extends({
1375
+ type: "array",
1376
+ render: render
1377
+ }, options);
1378
+ }
1379
+ function createDataRenderer(render, options) {
1380
+ return _extends({
1381
+ type: "data",
1382
+ render: render
1383
+ }, options);
1384
+ }
1385
+ function createDataRendererLabelled(_render, options) {
1386
+ return _extends({
1387
+ type: "data",
1388
+ render: function render(props, defaultLabel, renderers) {
1389
+ var dl = defaultLabel();
1390
+ return renderers.renderLabel(dl, _render(props, dl.forId, renderers));
1391
+ }
1392
+ }, options);
1393
+ }
1394
+ function createLabelRenderer(options) {
1395
+ return _extends({
1396
+ type: "label"
1397
+ }, options);
1398
+ }
1399
+ function createAdornmentRenderer(render, options) {
1400
+ return _extends({
1401
+ type: "adornment"
1402
+ }, options, {
1403
+ render: render
1404
+ });
1405
+ }
1406
+ function createSelectRenderer(options) {
1407
+ if (options === void 0) {
1408
+ options = {};
1409
+ }
1410
+ return createDataRendererLabelled(function (props, id) {
1411
+ return /*#__PURE__*/React__default["default"].createElement(SelectDataRenderer, {
1412
+ className: options.className,
1413
+ state: props.control,
1414
+ id: id,
1415
+ options: props.options,
1416
+ required: props.required,
1417
+ emptyText: options.emptyText,
1418
+ requiredText: options.requiredText,
1419
+ convert: createSelectConversion(props.field.type)
1420
+ });
1421
+ }, {
1422
+ options: true
1423
+ });
1424
+ }
1425
+ function SelectDataRenderer(_ref15) {
1426
+ var _effect3 = core.useComponentTracking();
1427
+ try {
1428
+ var state = _ref15.state,
1429
+ options = _ref15.options,
1430
+ className = _ref15.className,
1431
+ convert = _ref15.convert,
1432
+ required = _ref15.required,
1433
+ _ref15$emptyText = _ref15.emptyText,
1434
+ emptyText = _ref15$emptyText === void 0 ? "N/A" : _ref15$emptyText,
1435
+ _ref15$requiredText = _ref15.requiredText,
1436
+ requiredText = _ref15$requiredText === void 0 ? "<please select>" : _ref15$requiredText,
1437
+ props = _objectWithoutPropertiesLoose(_ref15, _excluded3);
1438
+ var value = state.value,
1439
+ disabled = state.disabled;
1440
+ var _useState = React.useState(!required || value == null),
1441
+ showEmpty = _useState[0];
1442
+ var optionStringMap = React.useMemo(function () {
1443
+ return Object.fromEntries(options.map(function (x) {
1444
+ return [convert(x.value), x.value];
1445
+ }));
1446
+ }, [options]);
1447
+ return /*#__PURE__*/React__default["default"].createElement("select", _extends({}, props, {
1448
+ className: className,
1449
+ onChange: function onChange(v) {
1450
+ return state.value = optionStringMap[v.target.value];
1451
+ },
1452
+ value: convert(value),
1453
+ disabled: disabled
1454
+ }), showEmpty && /*#__PURE__*/React__default["default"].createElement("option", {
1455
+ value: ""
1456
+ }, required ? requiredText : emptyText), options.map(function (x, i) {
1457
+ return /*#__PURE__*/React__default["default"].createElement("option", {
1458
+ key: i,
1459
+ value: convert(x.value),
1460
+ disabled: x.disabled
1461
+ }, x.name);
1462
+ }));
1463
+ } finally {
1464
+ _effect3();
1465
+ }
1466
+ }
1467
+ function createSelectConversion(ft) {
1468
+ switch (ft) {
1469
+ case exports.FieldType.String:
1470
+ case exports.FieldType.Int:
1471
+ case exports.FieldType.Double:
1472
+ return function (a) {
1473
+ return a;
1474
+ };
1475
+ default:
1476
+ return function (a) {
1477
+ var _a$toString;
1478
+ return (_a$toString = a == null ? void 0 : a.toString()) != null ? _a$toString : "";
1479
+ };
1480
+ }
1481
+ }
1482
+ function createInputConversion(ft) {
1483
+ switch (ft) {
1484
+ case exports.FieldType.String:
1485
+ return ["text", function (a) {
1486
+ return a;
1487
+ }, function (a) {
1488
+ return a;
1489
+ }];
1490
+ case exports.FieldType.Bool:
1491
+ return ["text", function (a) {
1492
+ return a === "true";
1493
+ }, function (a) {
1494
+ var _a$toString2;
1495
+ return (_a$toString2 = a == null ? void 0 : a.toString()) != null ? _a$toString2 : "";
1496
+ }];
1497
+ case exports.FieldType.Int:
1498
+ return ["number", function (a) {
1499
+ return a !== "" ? parseInt(a) : null;
1500
+ }, function (a) {
1501
+ return a == null ? "" : a;
1502
+ }];
1503
+ case exports.FieldType.Date:
1504
+ return ["date", function (a) {
1505
+ return a;
1506
+ }, function (a) {
1507
+ return a;
1508
+ }];
1509
+ case exports.FieldType.Double:
1510
+ return ["number", function (a) {
1511
+ return parseFloat(a);
1512
+ }, function (a) {
1513
+ return a;
1514
+ }];
1515
+ default:
1516
+ return ["text", function (a) {
1517
+ return a;
1518
+ }, function (a) {
1519
+ return a;
1520
+ }];
1521
+ }
1522
+ }
1523
+
1524
+ var defaultTailwindTheme = {
1525
+ label: {
1526
+ className: "flex flex-col",
1527
+ groupLabelClass: "font-bold",
1528
+ requiredElement: /*#__PURE__*/React__default["default"].createElement("span", {
1529
+ className: "text-red-500"
1530
+ }, " *")
1531
+ },
1532
+ array: {
1533
+ removableClass: "grid grid-cols-[1fr_auto] items-center gap-x-2",
1534
+ childClass: "grow"
1535
+ },
1536
+ group: {
1537
+ standardClassName: "space-y-4",
1538
+ gridClassName: "gap-x-2 gap-y-4"
1539
+ },
1540
+ action: {
1541
+ className: "bg-primary rounded-lg p-3 text-white"
1542
+ }
15
1543
  };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./types"), exports);
18
- __exportStar(require("./schemaBuilder"), exports);
19
- __exportStar(require("./controlRender"), exports);
20
- __exportStar(require("./hooks"), exports);
1544
+
1545
+ exports.AlwaysVisible = AlwaysVisible;
1546
+ exports.ControlInput = ControlInput;
1547
+ exports.DefaultBoolOptions = DefaultBoolOptions;
1548
+ exports.DefaultLabelRenderer = DefaultLabelRenderer;
1549
+ exports.FormRendererProvider = FormRendererProvider;
1550
+ exports.SelectDataRenderer = SelectDataRenderer;
1551
+ exports.addMissingControls = addMissingControls;
1552
+ exports.applyDefaultForField = applyDefaultForField;
1553
+ exports.applyDefaultValues = applyDefaultValues;
1554
+ exports.boolField = boolField;
1555
+ exports.buildSchema = buildSchema;
1556
+ exports.compoundField = compoundField;
1557
+ exports.controlForField = controlForField;
1558
+ exports.controlTitle = controlTitle;
1559
+ exports.createAction = createAction;
1560
+ exports.createAdornmentRenderer = createAdornmentRenderer;
1561
+ exports.createArrayRenderer = createArrayRenderer;
1562
+ exports.createDataRenderer = createDataRenderer;
1563
+ exports.createDataRendererLabelled = createDataRendererLabelled;
1564
+ exports.createDefaultActionRenderer = createDefaultActionRenderer;
1565
+ exports.createDefaultAdornmentRenderer = createDefaultAdornmentRenderer;
1566
+ exports.createDefaultArrayRenderer = createDefaultArrayRenderer;
1567
+ exports.createDefaultDataRenderer = createDefaultDataRenderer;
1568
+ exports.createDefaultDisplayRenderer = createDefaultDisplayRenderer;
1569
+ exports.createDefaultGroupRenderer = createDefaultGroupRenderer;
1570
+ exports.createDefaultLabelRenderer = createDefaultLabelRenderer;
1571
+ exports.createDefaultRenderers = createDefaultRenderers;
1572
+ exports.createDefaultSchemaHooks = createDefaultSchemaHooks;
1573
+ exports.createDefaultVisibilityRenderer = createDefaultVisibilityRenderer;
1574
+ exports.createFormEditHooks = createFormEditHooks;
1575
+ exports.createFormRenderer = createFormRenderer;
1576
+ exports.createInputConversion = createInputConversion;
1577
+ exports.createLabelRenderer = createLabelRenderer;
1578
+ exports.createSelectConversion = createSelectConversion;
1579
+ exports.createSelectRenderer = createSelectRenderer;
1580
+ exports.dataControl = dataControl;
1581
+ exports.defaultCompoundField = defaultCompoundField;
1582
+ exports.defaultControlForField = defaultControlForField;
1583
+ exports.defaultFormEditHooks = defaultFormEditHooks;
1584
+ exports.defaultScalarField = defaultScalarField;
1585
+ exports.defaultTailwindTheme = defaultTailwindTheme;
1586
+ exports.defaultValueForField = defaultValueForField;
1587
+ exports.defaultValueForFields = defaultValueForFields;
1588
+ exports.elementValueForField = elementValueForField;
1589
+ exports.fieldDisplayName = fieldDisplayName;
1590
+ exports.fieldForControl = fieldForControl;
1591
+ exports.fieldHasTag = fieldHasTag;
1592
+ exports.fieldValueExpr = fieldValueExpr;
1593
+ exports.findCompoundField = findCompoundField;
1594
+ exports.findField = findField;
1595
+ exports.findScalarField = findScalarField;
1596
+ exports.getDefaultScalarControlProperties = getDefaultScalarControlProperties;
1597
+ exports.getOptionsForScalarField = getOptionsForScalarField;
1598
+ exports.hasOptions = hasOptions;
1599
+ exports.intField = intField;
1600
+ exports.isActionControlsDefinition = isActionControlsDefinition;
1601
+ exports.isCompoundField = isCompoundField;
1602
+ exports.isDataControl = isDataControl;
1603
+ exports.isDataControlDefinition = isDataControlDefinition;
1604
+ exports.isDisplayControlsDefinition = isDisplayControlsDefinition;
1605
+ exports.isGridRenderer = isGridRenderer;
1606
+ exports.isGroupControl = isGroupControl;
1607
+ exports.isGroupControlsDefinition = isGroupControlsDefinition;
1608
+ exports.isScalarField = isScalarField;
1609
+ exports.makeCompoundField = makeCompoundField;
1610
+ exports.makeScalarField = makeScalarField;
1611
+ exports.renderControl = renderControl;
1612
+ exports.stringField = stringField;
1613
+ exports.stringOptionsField = stringOptionsField;
1614
+ exports.useControlsWithDefaults = useControlsWithDefaults;
1615
+ exports.useDefaultValue = useDefaultValue;
1616
+ exports.useFormRendererComponents = useFormRendererComponents;
1617
+ exports.useIsControlVisible = useIsControlVisible;
1618
+ exports.visibility = visibility;
1619
+ exports.visitControlData = visitControlData;
1620
+ exports.visitControlDefinition = visitControlDefinition;
1621
+ exports.withScalarOptions = withScalarOptions;
1622
+ //# sourceMappingURL=index.js.map