@rjsf/utils 6.0.0-beta.8 → 6.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.
Files changed (113) hide show
  1. package/dist/{index.js → index.cjs} +563 -200
  2. package/dist/index.cjs.map +7 -0
  3. package/dist/utils.esm.js +562 -199
  4. package/dist/utils.esm.js.map +4 -4
  5. package/dist/utils.umd.js +533 -193
  6. package/lib/ErrorSchemaBuilder.d.ts +2 -2
  7. package/lib/constants.d.ts +3 -0
  8. package/lib/constants.js +3 -0
  9. package/lib/constants.js.map +1 -1
  10. package/lib/createSchemaUtils.js +25 -18
  11. package/lib/createSchemaUtils.js.map +1 -1
  12. package/lib/enums.d.ts +13 -3
  13. package/lib/enums.js +13 -3
  14. package/lib/enums.js.map +1 -1
  15. package/lib/findSchemaDefinition.d.ts +6 -0
  16. package/lib/findSchemaDefinition.js +44 -3
  17. package/lib/findSchemaDefinition.js.map +1 -1
  18. package/lib/getDateElementProps.d.ts +1 -2
  19. package/lib/getTestIds.js +2 -2
  20. package/lib/getTestIds.js.map +1 -1
  21. package/lib/getUiOptions.js +4 -0
  22. package/lib/getUiOptions.js.map +1 -1
  23. package/lib/getWidget.js +3 -3
  24. package/lib/getWidget.js.map +1 -1
  25. package/lib/guessType.d.ts +1 -1
  26. package/lib/idGenerators.d.ts +22 -15
  27. package/lib/idGenerators.js +17 -8
  28. package/lib/idGenerators.js.map +1 -1
  29. package/lib/index.d.ts +16 -6
  30. package/lib/index.js +13 -4
  31. package/lib/index.js.map +1 -1
  32. package/lib/isFormDataAvailable.d.ts +7 -0
  33. package/lib/isFormDataAvailable.js +13 -0
  34. package/lib/isFormDataAvailable.js.map +1 -0
  35. package/lib/isRootSchema.d.ts +13 -0
  36. package/lib/isRootSchema.js +25 -0
  37. package/lib/isRootSchema.js.map +1 -0
  38. package/lib/mergeDefaultsWithFormData.js +14 -2
  39. package/lib/mergeDefaultsWithFormData.js.map +1 -1
  40. package/lib/nameGenerators.d.ts +13 -0
  41. package/lib/nameGenerators.js +30 -0
  42. package/lib/nameGenerators.js.map +1 -0
  43. package/lib/schema/getDefaultFormState.d.ts +17 -3
  44. package/lib/schema/getDefaultFormState.js +66 -26
  45. package/lib/schema/getDefaultFormState.js.map +1 -1
  46. package/lib/schema/getDisplayLabel.js +2 -2
  47. package/lib/schema/getDisplayLabel.js.map +1 -1
  48. package/lib/schema/index.d.ts +1 -2
  49. package/lib/schema/index.js +1 -2
  50. package/lib/schema/index.js.map +1 -1
  51. package/lib/schema/retrieveSchema.d.ts +10 -5
  52. package/lib/schema/retrieveSchema.js +40 -17
  53. package/lib/schema/retrieveSchema.js.map +1 -1
  54. package/lib/shallowEquals.d.ts +8 -0
  55. package/lib/shallowEquals.js +36 -0
  56. package/lib/shallowEquals.js.map +1 -0
  57. package/lib/shouldRender.d.ts +8 -2
  58. package/lib/shouldRender.js +17 -2
  59. package/lib/shouldRender.js.map +1 -1
  60. package/lib/shouldRenderOptionalField.d.ts +18 -0
  61. package/lib/shouldRenderOptionalField.js +47 -0
  62. package/lib/shouldRenderOptionalField.js.map +1 -0
  63. package/lib/toFieldPathId.d.ts +14 -0
  64. package/lib/toFieldPathId.js +26 -0
  65. package/lib/toFieldPathId.js.map +1 -0
  66. package/lib/tsconfig.tsbuildinfo +1 -1
  67. package/lib/types.d.ts +196 -105
  68. package/lib/useAltDateWidgetProps.d.ts +39 -0
  69. package/lib/useAltDateWidgetProps.js +71 -0
  70. package/lib/useAltDateWidgetProps.js.map +1 -0
  71. package/lib/useDeepCompareMemo.d.ts +8 -0
  72. package/lib/useDeepCompareMemo.js +17 -0
  73. package/lib/useDeepCompareMemo.js.map +1 -0
  74. package/lib/useFileWidgetProps.d.ts +29 -0
  75. package/lib/useFileWidgetProps.js +119 -0
  76. package/lib/useFileWidgetProps.js.map +1 -0
  77. package/lib/validationDataMerge.d.ts +2 -1
  78. package/lib/validationDataMerge.js +3 -2
  79. package/lib/validationDataMerge.js.map +1 -1
  80. package/package.json +13 -14
  81. package/src/ErrorSchemaBuilder.ts +2 -2
  82. package/src/constants.ts +3 -0
  83. package/src/createSchemaUtils.ts +25 -26
  84. package/src/enums.ts +13 -3
  85. package/src/findSchemaDefinition.ts +51 -3
  86. package/src/getDateElementProps.ts +1 -1
  87. package/src/getTestIds.ts +2 -2
  88. package/src/getUiOptions.ts +4 -0
  89. package/src/getWidget.tsx +3 -3
  90. package/src/idGenerators.ts +35 -25
  91. package/src/index.ts +36 -5
  92. package/src/isFormDataAvailable.ts +13 -0
  93. package/src/isRootSchema.ts +30 -0
  94. package/src/mergeDefaultsWithFormData.ts +16 -2
  95. package/src/nameGenerators.ts +43 -0
  96. package/src/schema/getDefaultFormState.ts +87 -31
  97. package/src/schema/getDisplayLabel.ts +2 -2
  98. package/src/schema/index.ts +0 -2
  99. package/src/schema/retrieveSchema.ts +43 -7
  100. package/src/shallowEquals.ts +41 -0
  101. package/src/shouldRender.ts +27 -2
  102. package/src/shouldRenderOptionalField.ts +56 -0
  103. package/src/toFieldPathId.ts +34 -0
  104. package/src/types.ts +229 -113
  105. package/src/useAltDateWidgetProps.tsx +163 -0
  106. package/src/useDeepCompareMemo.ts +17 -0
  107. package/src/useFileWidgetProps.ts +155 -0
  108. package/src/validationDataMerge.ts +7 -1
  109. package/dist/index.js.map +0 -7
  110. package/lib/schema/toIdSchema.d.ts +0 -14
  111. package/lib/schema/toIdSchema.js +0 -62
  112. package/lib/schema/toIdSchema.js.map +0 -1
  113. package/src/schema/toIdSchema.ts +0 -131
package/dist/utils.esm.js CHANGED
@@ -66,6 +66,8 @@ var REQUIRED_KEY = "required";
66
66
  var SUBMIT_BTN_OPTIONS_KEY = "submitButtonOptions";
67
67
  var REF_KEY = "$ref";
68
68
  var SCHEMA_KEY = "$schema";
69
+ var DEFAULT_ID_PREFIX = "root";
70
+ var DEFAULT_ID_SEPARATOR = "_";
69
71
  var DISCRIMINATOR_PATH = ["discriminator", "propertyName"];
70
72
  var FORM_CONTEXT_NAME = "formContext";
71
73
  var LOOKUP_MAP_NAME = "layoutGridLookupMap";
@@ -75,10 +77,14 @@ var UI_FIELD_KEY = "ui:field";
75
77
  var UI_WIDGET_KEY = "ui:widget";
76
78
  var UI_OPTIONS_KEY = "ui:options";
77
79
  var UI_GLOBAL_OPTIONS_KEY = "ui:globalOptions";
80
+ var JSON_SCHEMA_DRAFT_2019_09 = "https://json-schema.org/draft/2019-09/schema";
78
81
  var JSON_SCHEMA_DRAFT_2020_12 = "https://json-schema.org/draft/2020-12/schema";
79
82
 
80
83
  // src/getUiOptions.ts
81
84
  function getUiOptions(uiSchema = {}, globalOptions = {}) {
85
+ if (!uiSchema) {
86
+ return { ...globalOptions };
87
+ }
82
88
  return Object.keys(uiSchema).filter((key) => key.indexOf("ui:") === 0).reduce(
83
89
  (options, key) => {
84
90
  const value = uiSchema[key];
@@ -177,7 +183,16 @@ function findEmbeddedSchemaRecursive(schema, ref) {
177
183
  return schema;
178
184
  }
179
185
  for (const subSchema of Object.values(schema)) {
180
- if (isObject2(subSchema)) {
186
+ if (Array.isArray(subSchema)) {
187
+ for (const item of subSchema) {
188
+ if (isObject2(item)) {
189
+ const result = findEmbeddedSchemaRecursive(item, ref);
190
+ if (result !== void 0) {
191
+ return result;
192
+ }
193
+ }
194
+ }
195
+ } else if (isObject2(subSchema)) {
181
196
  const result = findEmbeddedSchemaRecursive(subSchema, ref);
182
197
  if (result !== void 0) {
183
198
  return result;
@@ -186,6 +201,23 @@ function findEmbeddedSchemaRecursive(schema, ref) {
186
201
  }
187
202
  return void 0;
188
203
  }
204
+ function makeAllReferencesAbsolute(schema, baseURI) {
205
+ const currentURI = get(schema, ID_KEY, baseURI);
206
+ if (REF_KEY in schema) {
207
+ schema = { ...schema, [REF_KEY]: UriResolver.resolve(currentURI, schema[REF_KEY]) };
208
+ }
209
+ for (const [key, subSchema] of Object.entries(schema)) {
210
+ if (Array.isArray(subSchema)) {
211
+ schema = {
212
+ ...schema,
213
+ [key]: subSchema.map((item) => isObject2(item) ? makeAllReferencesAbsolute(item, currentURI) : item)
214
+ };
215
+ } else if (isObject2(subSchema)) {
216
+ schema = { ...schema, [key]: makeAllReferencesAbsolute(subSchema, currentURI) };
217
+ }
218
+ }
219
+ return schema;
220
+ }
189
221
  function splitKeyElementFromObject(key, object) {
190
222
  const value = object[key];
191
223
  const remaining = omit(object, [key]);
@@ -231,7 +263,11 @@ function findSchemaDefinitionRecursive($ref, rootSchema = {}, recurseList = [],
231
263
  const [remaining, theRef] = splitKeyElementFromObject(REF_KEY, current);
232
264
  const subSchema = findSchemaDefinitionRecursive(theRef, rootSchema, [...recurseList, ref], baseURI);
233
265
  if (Object.keys(remaining).length > 0) {
234
- return { ...remaining, ...subSchema };
266
+ if (rootSchema[SCHEMA_KEY] === JSON_SCHEMA_DRAFT_2019_09 || rootSchema[SCHEMA_KEY] === JSON_SCHEMA_DRAFT_2020_12) {
267
+ return { [ALL_OF_KEY]: [remaining, subSchema] };
268
+ } else {
269
+ return { ...remaining, ...subSchema };
270
+ }
235
271
  }
236
272
  return subSchema;
237
273
  }
@@ -399,7 +435,7 @@ function getFirstMatchingOption(validator, formData, options, rootSchema, discri
399
435
 
400
436
  // src/schema/retrieveSchema.ts
401
437
  import isEmpty2 from "lodash/isEmpty";
402
- function retrieveSchema(validator, schema, rootSchema = {}, rawFormData, experimental_customMergeAllOf) {
438
+ function retrieveSchema(validator, schema, rootSchema = {}, rawFormData, experimental_customMergeAllOf, resolveAnyOfOrOneOfRefs = false) {
403
439
  return retrieveSchemaInternal(
404
440
  validator,
405
441
  schema,
@@ -407,7 +443,8 @@ function retrieveSchema(validator, schema, rootSchema = {}, rawFormData, experim
407
443
  rawFormData,
408
444
  void 0,
409
445
  void 0,
410
- experimental_customMergeAllOf
446
+ experimental_customMergeAllOf,
447
+ resolveAnyOfOrOneOfRefs
411
448
  )[0];
412
449
  }
413
450
  function resolveCondition(validator, schema, rootSchema, expandAllBranches, recurseList, formData, experimental_customMergeAllOf) {
@@ -496,14 +533,16 @@ function getMatchingPatternProperties(schema, key) {
496
533
  {}
497
534
  );
498
535
  }
499
- function resolveSchema(validator, schema, rootSchema, expandAllBranches, recurseList, formData, experimental_customMergeAllOf) {
536
+ function resolveSchema(validator, schema, rootSchema, expandAllBranches, recurseList, formData, experimental_customMergeAllOf, resolveAnyOfOrOneOfRefs) {
500
537
  const updatedSchemas = resolveReference(
501
538
  validator,
502
539
  schema,
503
540
  rootSchema,
504
541
  expandAllBranches,
505
542
  recurseList,
506
- formData
543
+ formData,
544
+ experimental_customMergeAllOf,
545
+ resolveAnyOfOrOneOfRefs
507
546
  );
508
547
  if (updatedSchemas.length > 1 || updatedSchemas[0] !== schema) {
509
548
  return updatedSchemas;
@@ -515,7 +554,8 @@ function resolveSchema(validator, schema, rootSchema, expandAllBranches, recurse
515
554
  rootSchema,
516
555
  expandAllBranches,
517
556
  recurseList,
518
- formData
557
+ formData,
558
+ experimental_customMergeAllOf
519
559
  );
520
560
  return resolvedSchemas.flatMap((s) => {
521
561
  return retrieveSchemaInternal(
@@ -529,7 +569,7 @@ function resolveSchema(validator, schema, rootSchema, expandAllBranches, recurse
529
569
  );
530
570
  });
531
571
  }
532
- if (ALL_OF_KEY in schema && Array.isArray(schema.allOf)) {
572
+ if (ALL_OF_KEY in schema && Array.isArray(schema[ALL_OF_KEY])) {
533
573
  const allOfSchemaElements = schema.allOf.map(
534
574
  (allOfSubschema) => retrieveSchemaInternal(
535
575
  validator,
@@ -549,8 +589,8 @@ function resolveSchema(validator, schema, rootSchema, expandAllBranches, recurse
549
589
  }
550
590
  return [schema];
551
591
  }
552
- function resolveReference(validator, schema, rootSchema, expandAllBranches, recurseList, formData, experimental_customMergeAllOf) {
553
- const updatedSchema = resolveAllReferences(schema, rootSchema, recurseList);
592
+ function resolveReference(validator, schema, rootSchema, expandAllBranches, recurseList, formData, experimental_customMergeAllOf, resolveAnyOfOrOneOfRefs) {
593
+ const updatedSchema = resolveAllReferences(schema, rootSchema, recurseList, void 0, resolveAnyOfOrOneOfRefs);
554
594
  if (updatedSchema !== schema) {
555
595
  return retrieveSchemaInternal(
556
596
  validator,
@@ -559,12 +599,13 @@ function resolveReference(validator, schema, rootSchema, expandAllBranches, recu
559
599
  formData,
560
600
  expandAllBranches,
561
601
  recurseList,
562
- experimental_customMergeAllOf
602
+ experimental_customMergeAllOf,
603
+ resolveAnyOfOrOneOfRefs
563
604
  );
564
605
  }
565
606
  return [schema];
566
607
  }
567
- function resolveAllReferences(schema, rootSchema, recurseList, baseURI) {
608
+ function resolveAllReferences(schema, rootSchema, recurseList, baseURI, resolveAnyOfOrOneOfRefs) {
568
609
  if (!isObject(schema)) {
569
610
  return schema;
570
611
  }
@@ -587,7 +628,7 @@ function resolveAllReferences(schema, rootSchema, recurseList, baseURI) {
587
628
  resolvedSchema[PROPERTIES_KEY],
588
629
  (result, value, key) => {
589
630
  const childList = [...recurseList];
590
- result[key] = resolveAllReferences(value, rootSchema, childList, baseURI);
631
+ result[key] = resolveAllReferences(value, rootSchema, childList, baseURI, resolveAnyOfOrOneOfRefs);
591
632
  childrenLists.push(childList);
592
633
  },
593
634
  {}
@@ -598,9 +639,28 @@ function resolveAllReferences(schema, rootSchema, recurseList, baseURI) {
598
639
  if (ITEMS_KEY in resolvedSchema && !Array.isArray(resolvedSchema.items) && typeof resolvedSchema.items !== "boolean") {
599
640
  resolvedSchema = {
600
641
  ...resolvedSchema,
601
- items: resolveAllReferences(resolvedSchema.items, rootSchema, recurseList, baseURI)
642
+ items: resolveAllReferences(resolvedSchema.items, rootSchema, recurseList, baseURI, resolveAnyOfOrOneOfRefs)
602
643
  };
603
644
  }
645
+ if (resolveAnyOfOrOneOfRefs) {
646
+ let key;
647
+ let schemas;
648
+ if (ANY_OF_KEY in schema && Array.isArray(schema[ANY_OF_KEY])) {
649
+ key = ANY_OF_KEY;
650
+ schemas = resolvedSchema[ANY_OF_KEY];
651
+ } else if (ONE_OF_KEY in schema && Array.isArray(schema[ONE_OF_KEY])) {
652
+ key = ONE_OF_KEY;
653
+ schemas = resolvedSchema[ONE_OF_KEY];
654
+ }
655
+ if (key && schemas) {
656
+ resolvedSchema = {
657
+ ...resolvedSchema,
658
+ [key]: schemas.map(
659
+ (s) => resolveAllReferences(s, rootSchema, recurseList, baseURI, resolveAnyOfOrOneOfRefs)
660
+ )
661
+ };
662
+ }
663
+ }
604
664
  return deepEquals(schema, resolvedSchema) ? schema : resolvedSchema;
605
665
  }
606
666
  function stubExistingAdditionalProperties(validator, theSchema, rootSchema, aFormData, experimental_customMergeAllOf) {
@@ -618,7 +678,7 @@ function stubExistingAdditionalProperties(validator, theSchema, rootSchema, aFor
618
678
  if (!isEmpty2(matchingProperties)) {
619
679
  schema.properties[key] = retrieveSchema(
620
680
  validator,
621
- { allOf: Object.values(matchingProperties) },
681
+ { [ALL_OF_KEY]: Object.values(matchingProperties) },
622
682
  rootSchema,
623
683
  get5(formData, [key]),
624
684
  experimental_customMergeAllOf
@@ -628,12 +688,12 @@ function stubExistingAdditionalProperties(validator, theSchema, rootSchema, aFor
628
688
  }
629
689
  }
630
690
  if (ADDITIONAL_PROPERTIES_KEY in schema && schema.additionalProperties !== false) {
631
- let additionalProperties = {};
691
+ let additionalProperties;
632
692
  if (typeof schema.additionalProperties !== "boolean") {
633
693
  if (REF_KEY in schema.additionalProperties) {
634
694
  additionalProperties = retrieveSchema(
635
695
  validator,
636
- { $ref: get5(schema.additionalProperties, [REF_KEY]) },
696
+ { [REF_KEY]: get5(schema.additionalProperties, [REF_KEY]) },
637
697
  rootSchema,
638
698
  formData,
639
699
  experimental_customMergeAllOf
@@ -660,7 +720,7 @@ function stubExistingAdditionalProperties(validator, theSchema, rootSchema, aFor
660
720
  });
661
721
  return schema;
662
722
  }
663
- function retrieveSchemaInternal(validator, schema, rootSchema, rawFormData, expandAllBranches = false, recurseList = [], experimental_customMergeAllOf) {
723
+ function retrieveSchemaInternal(validator, schema, rootSchema, rawFormData, expandAllBranches = false, recurseList = [], experimental_customMergeAllOf, resolveAnyOfOrOneOfRefs) {
664
724
  if (!isObject(schema)) {
665
725
  return [{}];
666
726
  }
@@ -671,7 +731,8 @@ function retrieveSchemaInternal(validator, schema, rootSchema, rawFormData, expa
671
731
  expandAllBranches,
672
732
  recurseList,
673
733
  rawFormData,
674
- experimental_customMergeAllOf
734
+ experimental_customMergeAllOf,
735
+ resolveAnyOfOrOneOfRefs
675
736
  );
676
737
  return resolvedSchemas.flatMap((s) => {
677
738
  let resolvedSchema = s;
@@ -1228,8 +1289,19 @@ function mergeDefaultsWithFormData(defaults, formData, mergeExtraArrayDefaults =
1228
1289
  const keyValue = get10(formData, key);
1229
1290
  const keyExistsInDefaults = isObject(defaults) && key in defaults;
1230
1291
  const keyExistsInFormData = key in formData;
1292
+ const keyDefault = get10(defaults, key) ?? {};
1293
+ const defaultValueIsNestedObject = keyExistsInDefaults && Object.entries(keyDefault).some(([, v]) => isObject(v));
1294
+ const keyDefaultIsObject = keyExistsInDefaults && isObject(get10(defaults, key));
1295
+ const keyHasFormDataObject = keyExistsInFormData && isObject(keyValue);
1296
+ if (keyDefaultIsObject && keyHasFormDataObject && !defaultValueIsNestedObject) {
1297
+ acc2[key] = {
1298
+ ...get10(defaults, key),
1299
+ ...keyValue
1300
+ };
1301
+ return acc2;
1302
+ }
1231
1303
  acc2[key] = mergeDefaultsWithFormData(
1232
- defaults ? get10(defaults, key) : {},
1304
+ get10(defaults, key),
1233
1305
  keyValue,
1234
1306
  mergeExtraArrayDefaults,
1235
1307
  defaultSupercedesUndefined,
@@ -1240,7 +1312,7 @@ function mergeDefaultsWithFormData(defaults, formData, mergeExtraArrayDefaults =
1240
1312
  return acc2;
1241
1313
  }, acc);
1242
1314
  }
1243
- if (defaultSupercedesUndefined && (!isNil(defaults) && isNil(formData) || typeof formData === "number" && isNaN(formData)) || overrideFormDataWithDefaults && !isNil(formData)) {
1315
+ if (defaultSupercedesUndefined && (!(defaults === void 0) && isNil(formData) || typeof formData === "number" && isNaN(formData)) || overrideFormDataWithDefaults && !isNil(formData)) {
1244
1316
  return defaults;
1245
1317
  }
1246
1318
  return formData;
@@ -1387,10 +1459,19 @@ function getInnerSchemaForArrayItem(schema, additionalItems = 0 /* Ignore */, id
1387
1459
  }
1388
1460
  return {};
1389
1461
  }
1462
+ function computeDefaultBasedOnSchemaTypeAndDefaults(schema, computedDefault) {
1463
+ const { default: schemaDefault, type } = schema;
1464
+ const shouldReturnNullAsDefault = Array.isArray(type) && type.includes("null") && isEmpty4(computedDefault) && schemaDefault === null;
1465
+ return shouldReturnNullAsDefault ? null : computedDefault;
1466
+ }
1390
1467
  function maybeAddDefaultToObject(obj, key, computedDefault, includeUndefinedValues, isParentRequired, requiredFields = [], experimental_defaultFormStateBehavior = {}, isConst = false) {
1391
1468
  const { emptyObjectFields = "populateAllDefaults" } = experimental_defaultFormStateBehavior;
1392
- if (includeUndefinedValues || isConst) {
1469
+ if (includeUndefinedValues === true || isConst) {
1393
1470
  obj[key] = computedDefault;
1471
+ } else if (includeUndefinedValues === "excludeObjectChildren") {
1472
+ if (!isObject(computedDefault) || !isEmpty4(computedDefault)) {
1473
+ obj[key] = computedDefault;
1474
+ }
1394
1475
  } else if (emptyObjectFields !== "skipDefaults") {
1395
1476
  const isSelfOrParentRequired = isParentRequired === void 0 ? requiredFields.includes(key) : isParentRequired;
1396
1477
  if (isObject(computedDefault)) {
@@ -1422,7 +1503,8 @@ function computeDefaults(validator, rawSchema, computeDefaultsProps = {}) {
1422
1503
  experimental_defaultFormStateBehavior = void 0,
1423
1504
  experimental_customMergeAllOf = void 0,
1424
1505
  required,
1425
- shouldMergeDefaultsIntoFormData = false
1506
+ shouldMergeDefaultsIntoFormData = false,
1507
+ initialDefaultsGenerated
1426
1508
  } = computeDefaultsProps;
1427
1509
  let formData = isObject(rawFormData) ? rawFormData : {};
1428
1510
  const schema = isObject(rawSchema) ? rawSchema : {};
@@ -1430,7 +1512,7 @@ function computeDefaults(validator, rawSchema, computeDefaultsProps = {}) {
1430
1512
  let schemaToCompute = null;
1431
1513
  let experimental_dfsb_to_compute = experimental_defaultFormStateBehavior;
1432
1514
  let updatedRecurseList = _recurseList;
1433
- if (schema[CONST_KEY] && experimental_defaultFormStateBehavior?.constAsDefaults !== "never" && !constIsAjvDataReference(schema)) {
1515
+ if (schema[CONST_KEY] !== void 0 && experimental_defaultFormStateBehavior?.constAsDefaults !== "never" && !constIsAjvDataReference(schema)) {
1434
1516
  defaults = schema[CONST_KEY];
1435
1517
  } else if (isObject(defaults) && isObject(schema.default)) {
1436
1518
  defaults = mergeObjects(defaults, schema.default);
@@ -1525,9 +1607,10 @@ function computeDefaults(validator, rawSchema, computeDefaultsProps = {}) {
1525
1607
  experimental_defaultFormStateBehavior: experimental_dfsb_to_compute,
1526
1608
  experimental_customMergeAllOf,
1527
1609
  parentDefaults: defaults,
1528
- rawFormData: formData,
1610
+ rawFormData: rawFormData ?? formData,
1529
1611
  required,
1530
- shouldMergeDefaultsIntoFormData
1612
+ shouldMergeDefaultsIntoFormData,
1613
+ initialDefaultsGenerated
1531
1614
  });
1532
1615
  }
1533
1616
  if (defaults === void 0) {
@@ -1579,7 +1662,8 @@ function getObjectDefaults(validator, rawSchema, {
1579
1662
  experimental_defaultFormStateBehavior = void 0,
1580
1663
  experimental_customMergeAllOf = void 0,
1581
1664
  required,
1582
- shouldMergeDefaultsIntoFormData
1665
+ shouldMergeDefaultsIntoFormData,
1666
+ initialDefaultsGenerated
1583
1667
  } = {}, defaults) {
1584
1668
  {
1585
1669
  const formData = isObject(rawFormData) ? rawFormData : {};
@@ -1600,7 +1684,8 @@ function getObjectDefaults(validator, rawSchema, {
1600
1684
  parentDefaults: get12(defaults, [key]),
1601
1685
  rawFormData: get12(formData, [key]),
1602
1686
  required: retrievedSchema.required?.includes(key),
1603
- shouldMergeDefaultsIntoFormData
1687
+ shouldMergeDefaultsIntoFormData,
1688
+ initialDefaultsGenerated
1604
1689
  });
1605
1690
  maybeAddDefaultToObject(
1606
1691
  acc,
@@ -1616,7 +1701,7 @@ function getObjectDefaults(validator, rawSchema, {
1616
1701
  },
1617
1702
  {}
1618
1703
  );
1619
- if (retrievedSchema.additionalProperties) {
1704
+ if (retrievedSchema.additionalProperties && !initialDefaultsGenerated) {
1620
1705
  const additionalPropertiesSchema = isObject(retrievedSchema.additionalProperties) ? retrievedSchema.additionalProperties : {};
1621
1706
  const keys2 = /* @__PURE__ */ new Set();
1622
1707
  if (isObject(defaults)) {
@@ -1637,7 +1722,8 @@ function getObjectDefaults(validator, rawSchema, {
1637
1722
  parentDefaults: get12(defaults, [key]),
1638
1723
  rawFormData: get12(formData, [key]),
1639
1724
  required: retrievedSchema.required?.includes(key),
1640
- shouldMergeDefaultsIntoFormData
1725
+ shouldMergeDefaultsIntoFormData,
1726
+ initialDefaultsGenerated
1641
1727
  });
1642
1728
  maybeAddDefaultToObject(
1643
1729
  objectDefaults,
@@ -1649,7 +1735,7 @@ function getObjectDefaults(validator, rawSchema, {
1649
1735
  );
1650
1736
  });
1651
1737
  }
1652
- return objectDefaults;
1738
+ return computeDefaultBasedOnSchemaTypeAndDefaults(rawSchema, objectDefaults);
1653
1739
  }
1654
1740
  }
1655
1741
  function getArrayDefaults(validator, rawSchema, {
@@ -1659,7 +1745,9 @@ function getArrayDefaults(validator, rawSchema, {
1659
1745
  experimental_defaultFormStateBehavior = void 0,
1660
1746
  experimental_customMergeAllOf = void 0,
1661
1747
  required,
1662
- shouldMergeDefaultsIntoFormData
1748
+ requiredAsRoot = false,
1749
+ shouldMergeDefaultsIntoFormData,
1750
+ initialDefaultsGenerated
1663
1751
  } = {}, defaults) {
1664
1752
  const schema = rawSchema;
1665
1753
  const arrayMinItemsStateBehavior = experimental_defaultFormStateBehavior?.arrayMinItems ?? {};
@@ -1680,7 +1768,8 @@ function getArrayDefaults(validator, rawSchema, {
1680
1768
  experimental_customMergeAllOf,
1681
1769
  parentDefaults: item,
1682
1770
  required,
1683
- shouldMergeDefaultsIntoFormData
1771
+ shouldMergeDefaultsIntoFormData,
1772
+ initialDefaultsGenerated
1684
1773
  });
1685
1774
  });
1686
1775
  }
@@ -1698,7 +1787,8 @@ function getArrayDefaults(validator, rawSchema, {
1698
1787
  rawFormData: item,
1699
1788
  parentDefaults: get12(defaults, [idx]),
1700
1789
  required,
1701
- shouldMergeDefaultsIntoFormData
1790
+ shouldMergeDefaultsIntoFormData,
1791
+ initialDefaultsGenerated
1702
1792
  });
1703
1793
  });
1704
1794
  const mergeExtraDefaults = (ignoreMinItemsFlagSet && required || isPopulateAll) && arrayMergeExtraDefaults;
@@ -1714,25 +1804,29 @@ function getArrayDefaults(validator, rawSchema, {
1714
1804
  return defaults ? defaults : void 0;
1715
1805
  }
1716
1806
  }
1807
+ let arrayDefault;
1717
1808
  const defaultsLength = Array.isArray(defaults) ? defaults.length : 0;
1718
1809
  if (!schema.minItems || isMultiSelect(validator, schema, rootSchema, experimental_customMergeAllOf) || computeSkipPopulate(validator, schema, rootSchema) || schema.minItems <= defaultsLength) {
1719
- return defaults ? defaults : emptyDefault;
1720
- }
1721
- const defaultEntries = defaults || [];
1722
- const fillerSchema = getInnerSchemaForArrayItem(schema, 1 /* Invert */);
1723
- const fillerDefault = fillerSchema.default;
1724
- const fillerEntries = new Array(schema.minItems - defaultsLength).fill(
1725
- computeDefaults(validator, fillerSchema, {
1726
- parentDefaults: fillerDefault,
1727
- rootSchema,
1728
- _recurseList,
1729
- experimental_defaultFormStateBehavior,
1730
- experimental_customMergeAllOf,
1731
- required,
1732
- shouldMergeDefaultsIntoFormData
1733
- })
1734
- );
1735
- return defaultEntries.concat(fillerEntries);
1810
+ arrayDefault = defaults || !required && !requiredAsRoot ? defaults : emptyDefault;
1811
+ } else {
1812
+ const defaultEntries = defaults || [];
1813
+ const fillerSchema = getInnerSchemaForArrayItem(schema, 1 /* Invert */);
1814
+ const fillerDefault = fillerSchema.default;
1815
+ const fillerEntries = Array.from(
1816
+ { length: schema.minItems - defaultsLength },
1817
+ () => computeDefaults(validator, fillerSchema, {
1818
+ parentDefaults: fillerDefault,
1819
+ rootSchema,
1820
+ _recurseList,
1821
+ experimental_defaultFormStateBehavior,
1822
+ experimental_customMergeAllOf,
1823
+ required,
1824
+ shouldMergeDefaultsIntoFormData
1825
+ })
1826
+ );
1827
+ arrayDefault = defaultEntries.concat(fillerEntries);
1828
+ }
1829
+ return computeDefaultBasedOnSchemaTypeAndDefaults(rawSchema, arrayDefault);
1736
1830
  }
1737
1831
  function getDefaultBasedOnSchemaType(validator, rawSchema, computeDefaultsProps = {}, defaults) {
1738
1832
  switch (getSchemaType(rawSchema)) {
@@ -1745,7 +1839,7 @@ function getDefaultBasedOnSchemaType(validator, rawSchema, computeDefaultsProps
1745
1839
  }
1746
1840
  }
1747
1841
  }
1748
- function getDefaultFormState(validator, theSchema, formData, rootSchema, includeUndefinedValues = false, experimental_defaultFormStateBehavior, experimental_customMergeAllOf) {
1842
+ function getDefaultFormState(validator, theSchema, formData, rootSchema, includeUndefinedValues = false, experimental_defaultFormStateBehavior, experimental_customMergeAllOf, initialDefaultsGenerated) {
1749
1843
  if (!isObject(theSchema)) {
1750
1844
  throw new Error("Invalid schema: " + theSchema);
1751
1845
  }
@@ -1756,8 +1850,16 @@ function getDefaultFormState(validator, theSchema, formData, rootSchema, include
1756
1850
  experimental_defaultFormStateBehavior,
1757
1851
  experimental_customMergeAllOf,
1758
1852
  rawFormData: formData,
1759
- shouldMergeDefaultsIntoFormData: true
1853
+ shouldMergeDefaultsIntoFormData: true,
1854
+ initialDefaultsGenerated,
1855
+ requiredAsRoot: true
1760
1856
  });
1857
+ if (schema.type !== "object" && isObject(schema.default)) {
1858
+ return {
1859
+ ...defaults,
1860
+ ...formData
1861
+ };
1862
+ }
1761
1863
  if (isObject(formData) || Array.isArray(formData)) {
1762
1864
  const { mergeDefaultsIntoFormData } = experimental_defaultFormStateBehavior || {};
1763
1865
  const defaultSupercedesUndefined = mergeDefaultsIntoFormData === "useDefaultIfFormDataUndefined";
@@ -1814,10 +1916,10 @@ function getDisplayLabel(validator, schema, uiSchema = {}, rootSchema, globalOpt
1814
1916
  if (schemaType === "object") {
1815
1917
  displayLabel = false;
1816
1918
  }
1817
- if (schemaType === "boolean" && !uiSchema[UI_WIDGET_KEY]) {
1919
+ if (schemaType === "boolean" && uiSchema && !uiSchema[UI_WIDGET_KEY]) {
1818
1920
  displayLabel = false;
1819
1921
  }
1820
- if (uiSchema[UI_FIELD_KEY]) {
1922
+ if (uiSchema && uiSchema[UI_FIELD_KEY]) {
1821
1923
  displayLabel = false;
1822
1924
  }
1823
1925
  return displayLabel;
@@ -1956,80 +2058,8 @@ function sanitizeDataForNewSchema(validator, rootSchema, newSchema, oldSchema, d
1956
2058
  return newFormData;
1957
2059
  }
1958
2060
 
1959
- // src/schema/toIdSchema.ts
1960
- import get14 from "lodash/get";
1961
- function toIdSchemaInternal(validator, schema, idPrefix, idSeparator, id, rootSchema, formData, _recurseList = [], experimental_customMergeAllOf) {
1962
- const $id = id || idPrefix;
1963
- const idSchema = { $id };
1964
- if (typeof schema === "object") {
1965
- if (REF_KEY in schema || DEPENDENCIES_KEY in schema || ALL_OF_KEY in schema) {
1966
- const _schema = retrieveSchema(validator, schema, rootSchema, formData, experimental_customMergeAllOf);
1967
- const sameSchemaIndex = _recurseList.findIndex((item) => deepEquals(item, _schema));
1968
- if (sameSchemaIndex === -1) {
1969
- return toIdSchemaInternal(
1970
- validator,
1971
- _schema,
1972
- idPrefix,
1973
- idSeparator,
1974
- id,
1975
- rootSchema,
1976
- formData,
1977
- _recurseList.concat(_schema),
1978
- experimental_customMergeAllOf
1979
- );
1980
- }
1981
- }
1982
- if (ITEMS_KEY in schema && !get14(schema, [ITEMS_KEY, REF_KEY])) {
1983
- return toIdSchemaInternal(
1984
- validator,
1985
- get14(schema, ITEMS_KEY),
1986
- idPrefix,
1987
- idSeparator,
1988
- id,
1989
- rootSchema,
1990
- formData,
1991
- _recurseList,
1992
- experimental_customMergeAllOf
1993
- );
1994
- }
1995
- if (getSchemaType(schema) === "object" && PROPERTIES_KEY in schema) {
1996
- for (const name in schema.properties) {
1997
- const field = schema[PROPERTIES_KEY][name];
1998
- const fieldId = idSchema[ID_KEY] + idSeparator + name;
1999
- idSchema[name] = toIdSchemaInternal(
2000
- validator,
2001
- field,
2002
- idPrefix,
2003
- idSeparator,
2004
- fieldId,
2005
- rootSchema,
2006
- // It's possible that formData is not an object -- this can happen if an
2007
- // array item has just been added, but not populated with data yet
2008
- get14(formData, [name]),
2009
- _recurseList,
2010
- experimental_customMergeAllOf
2011
- );
2012
- }
2013
- }
2014
- }
2015
- return idSchema;
2016
- }
2017
- function toIdSchema(validator, schema, id, rootSchema, formData, idPrefix = "root", idSeparator = "_", experimental_customMergeAllOf) {
2018
- return toIdSchemaInternal(
2019
- validator,
2020
- schema,
2021
- idPrefix,
2022
- idSeparator,
2023
- id,
2024
- rootSchema,
2025
- formData,
2026
- void 0,
2027
- experimental_customMergeAllOf
2028
- );
2029
- }
2030
-
2031
2061
  // src/schema/toPathSchema.ts
2032
- import get15 from "lodash/get";
2062
+ import get14 from "lodash/get";
2033
2063
  import set2 from "lodash/set";
2034
2064
  function toPathSchemaInternal(validator, schema, name, rootSchema, formData, _recurseList = [], experimental_customMergeAllOf) {
2035
2065
  if (REF_KEY in schema || DEPENDENCIES_KEY in schema || ALL_OF_KEY in schema) {
@@ -2122,7 +2152,7 @@ function toPathSchemaInternal(validator, schema, name, rootSchema, formData, _re
2122
2152
  }
2123
2153
  } else if (PROPERTIES_KEY in schema) {
2124
2154
  for (const property in schema.properties) {
2125
- const field = get15(schema, [PROPERTIES_KEY, property], {});
2155
+ const field = get14(schema, [PROPERTIES_KEY, property], {});
2126
2156
  pathSchema[property] = toPathSchemaInternal(
2127
2157
  validator,
2128
2158
  field,
@@ -2130,7 +2160,7 @@ function toPathSchemaInternal(validator, schema, name, rootSchema, formData, _re
2130
2160
  rootSchema,
2131
2161
  // It's possible that formData is not an object -- this can happen if an
2132
2162
  // array item has just been added, but not populated with data yet
2133
- get15(formData, [property]),
2163
+ get14(formData, [property]),
2134
2164
  _recurseList,
2135
2165
  experimental_customMergeAllOf
2136
2166
  );
@@ -2143,6 +2173,7 @@ function toPathSchema(validator, schema, name = "", rootSchema, formData, experi
2143
2173
  }
2144
2174
 
2145
2175
  // src/createSchemaUtils.ts
2176
+ import get15 from "lodash/get";
2146
2177
  var SchemaUtils = class {
2147
2178
  /** Constructs the `SchemaUtils` instance with the given `validator` and `rootSchema` stored as instance variables
2148
2179
  *
@@ -2152,11 +2183,22 @@ var SchemaUtils = class {
2152
2183
  * @param [experimental_customMergeAllOf] - Optional function that allows for custom merging of `allOf` schemas
2153
2184
  */
2154
2185
  constructor(validator, rootSchema, experimental_defaultFormStateBehavior, experimental_customMergeAllOf) {
2155
- this.rootSchema = rootSchema;
2186
+ if (rootSchema && rootSchema[SCHEMA_KEY] === JSON_SCHEMA_DRAFT_2020_12) {
2187
+ this.rootSchema = makeAllReferencesAbsolute(rootSchema, get15(rootSchema, ID_KEY, "#"));
2188
+ } else {
2189
+ this.rootSchema = rootSchema;
2190
+ }
2156
2191
  this.validator = validator;
2157
2192
  this.experimental_defaultFormStateBehavior = experimental_defaultFormStateBehavior;
2158
2193
  this.experimental_customMergeAllOf = experimental_customMergeAllOf;
2159
2194
  }
2195
+ /** Returns the `rootSchema` in the `SchemaUtilsType`
2196
+ *
2197
+ * @returns - The `rootSchema`
2198
+ */
2199
+ getRootSchema() {
2200
+ return this.rootSchema;
2201
+ }
2160
2202
  /** Returns the `ValidatorType` in the `SchemaUtilsType`
2161
2203
  *
2162
2204
  * @returns - The `ValidatorType`
@@ -2229,9 +2271,10 @@ var SchemaUtils = class {
2229
2271
  * @param [includeUndefinedValues=false] - Optional flag, if true, cause undefined values to be added as defaults.
2230
2272
  * If "excludeObjectChildren", pass `includeUndefinedValues` as false when computing defaults for any nested
2231
2273
  * object properties.
2274
+ * @param initialDefaultsGenerated - Indicates whether or not initial defaults have been generated
2232
2275
  * @returns - The resulting `formData` with all the defaults provided
2233
2276
  */
2234
- getDefaultFormState(schema, formData, includeUndefinedValues = false) {
2277
+ getDefaultFormState(schema, formData, includeUndefinedValues = false, initialDefaultsGenerated) {
2235
2278
  return getDefaultFormState(
2236
2279
  this.validator,
2237
2280
  schema,
@@ -2239,7 +2282,8 @@ var SchemaUtils = class {
2239
2282
  this.rootSchema,
2240
2283
  includeUndefinedValues,
2241
2284
  this.experimental_defaultFormStateBehavior,
2242
- this.experimental_customMergeAllOf
2285
+ this.experimental_customMergeAllOf,
2286
+ initialDefaultsGenerated
2243
2287
  );
2244
2288
  }
2245
2289
  /** Determines whether the combination of `schema` and `uiSchema` properties indicates that the label for the `schema`
@@ -2338,15 +2382,17 @@ var SchemaUtils = class {
2338
2382
  *
2339
2383
  * @param schema - The schema for which retrieving a schema is desired
2340
2384
  * @param [rawFormData] - The current formData, if any, to assist retrieving a schema
2385
+ * @param [resolveAnyOfOrOneOfRefs] - Optional flag indicating whether to resolved refs in anyOf/oneOf lists
2341
2386
  * @returns - The schema having its conditions, additional properties, references and dependencies resolved
2342
2387
  */
2343
- retrieveSchema(schema, rawFormData) {
2388
+ retrieveSchema(schema, rawFormData, resolveAnyOfOrOneOfRefs) {
2344
2389
  return retrieveSchema(
2345
2390
  this.validator,
2346
2391
  schema,
2347
2392
  this.rootSchema,
2348
2393
  rawFormData,
2349
- this.experimental_customMergeAllOf
2394
+ this.experimental_customMergeAllOf,
2395
+ resolveAnyOfOrOneOfRefs
2350
2396
  );
2351
2397
  }
2352
2398
  /** Sanitize the `data` associated with the `oldSchema` so it is considered appropriate for the `newSchema`. If the
@@ -2370,27 +2416,6 @@ var SchemaUtils = class {
2370
2416
  this.experimental_customMergeAllOf
2371
2417
  );
2372
2418
  }
2373
- /** Generates an `IdSchema` object for the `schema`, recursively
2374
- *
2375
- * @param schema - The schema for which the display label flag is desired
2376
- * @param [id] - The base id for the schema
2377
- * @param [formData] - The current formData, if any, onto which to provide any missing defaults
2378
- * @param [idPrefix='root'] - The prefix to use for the id
2379
- * @param [idSeparator='_'] - The separator to use for the path segments in the id
2380
- * @returns - The `IdSchema` object for the `schema`
2381
- */
2382
- toIdSchema(schema, id, formData, idPrefix = "root", idSeparator = "_") {
2383
- return toIdSchema(
2384
- this.validator,
2385
- schema,
2386
- id,
2387
- this.rootSchema,
2388
- formData,
2389
- idPrefix,
2390
- idSeparator,
2391
- this.experimental_customMergeAllOf
2392
- );
2393
- }
2394
2419
  /** Generates an `PathSchema` object for the `schema`, recursively
2395
2420
  *
2396
2421
  * @param schema - The schema for which the display label flag is desired
@@ -2476,6 +2501,31 @@ function dateRangeOptions(start, stop) {
2476
2501
  return options;
2477
2502
  }
2478
2503
 
2504
+ // src/shallowEquals.ts
2505
+ function shallowEquals(a, b) {
2506
+ if (Object.is(a, b)) {
2507
+ return true;
2508
+ }
2509
+ if (a == null || b == null) {
2510
+ return false;
2511
+ }
2512
+ if (typeof a !== "object" || typeof b !== "object") {
2513
+ return false;
2514
+ }
2515
+ const keysA = Object.keys(a);
2516
+ const keysB = Object.keys(b);
2517
+ if (keysA.length !== keysB.length) {
2518
+ return false;
2519
+ }
2520
+ for (let i = 0; i < keysA.length; i++) {
2521
+ const key = keysA[i];
2522
+ if (!Object.prototype.hasOwnProperty.call(b, key) || !Object.is(a[key], b[key])) {
2523
+ return false;
2524
+ }
2525
+ }
2526
+ return true;
2527
+ }
2528
+
2479
2529
  // src/replaceStringParameters.ts
2480
2530
  function replaceStringParameters(inputString, params) {
2481
2531
  let output = inputString;
@@ -2643,6 +2693,29 @@ var ErrorSchemaBuilder = class {
2643
2693
  }
2644
2694
  };
2645
2695
 
2696
+ // src/getChangedFields.ts
2697
+ import keys from "lodash/keys";
2698
+ import pickBy from "lodash/pickBy";
2699
+ import isPlainObject2 from "lodash/isPlainObject";
2700
+ import get17 from "lodash/get";
2701
+ import difference from "lodash/difference";
2702
+ function getChangedFields(a, b) {
2703
+ const aIsPlainObject = isPlainObject2(a);
2704
+ const bIsPlainObject = isPlainObject2(b);
2705
+ if (a === b || !aIsPlainObject && !bIsPlainObject) {
2706
+ return [];
2707
+ }
2708
+ if (aIsPlainObject && !bIsPlainObject) {
2709
+ return keys(a);
2710
+ } else if (!aIsPlainObject && bIsPlainObject) {
2711
+ return keys(b);
2712
+ } else {
2713
+ const unequalFields = keys(pickBy(a, (value, key) => !deepEquals(value, get17(b, key))));
2714
+ const diffFields = difference(keys(b), keys(a));
2715
+ return [...unequalFields, ...diffFields];
2716
+ }
2717
+ }
2718
+
2646
2719
  // src/getDateElementProps.ts
2647
2720
  function getDateElementProps(date, time, yearRange = [1900, (/* @__PURE__ */ new Date()).getFullYear() + 2], format = "YMD") {
2648
2721
  const { day, month, year, hour, minute, second } = date;
@@ -2751,10 +2824,10 @@ function getTemplate(name, registry, uiOptions = {}) {
2751
2824
  }
2752
2825
 
2753
2826
  // src/getTestIds.ts
2754
- import { nanoid } from "nanoid";
2755
- import get17 from "lodash/get";
2827
+ import get18 from "lodash/get";
2828
+ import uniqueId from "lodash/uniqueId";
2756
2829
  function getTestIds() {
2757
- if (typeof process === "undefined" || get17(process, "env.NODE_ENV") !== "test") {
2830
+ if (typeof process === "undefined" || get18(process, "env.NODE_ENV") !== "test") {
2758
2831
  return {};
2759
2832
  }
2760
2833
  const ids = /* @__PURE__ */ new Map();
@@ -2763,7 +2836,7 @@ function getTestIds() {
2763
2836
  {
2764
2837
  get(_obj, prop) {
2765
2838
  if (!ids.has(prop)) {
2766
- ids.set(prop, nanoid());
2839
+ ids.set(prop, uniqueId("test-id-"));
2767
2840
  }
2768
2841
  return ids.get(prop);
2769
2842
  }
@@ -2774,7 +2847,7 @@ function getTestIds() {
2774
2847
  // src/getWidget.tsx
2775
2848
  import { createElement } from "react";
2776
2849
  import ReactIs from "react-is";
2777
- import get18 from "lodash/get";
2850
+ import get19 from "lodash/get";
2778
2851
  import set4 from "lodash/set";
2779
2852
  import { jsx } from "react/jsx-runtime";
2780
2853
  var widgetMap = {
@@ -2830,7 +2903,7 @@ var widgetMap = {
2830
2903
  }
2831
2904
  };
2832
2905
  function mergeWidgetOptions(AWidget) {
2833
- let MergedWidget = get18(AWidget, "MergedWidget");
2906
+ let MergedWidget = get19(AWidget, "MergedWidget");
2834
2907
  if (!MergedWidget) {
2835
2908
  const defaultOptions = AWidget.defaultProps && AWidget.defaultProps.options || {};
2836
2909
  MergedWidget = ({ options, ...props }) => {
@@ -2846,7 +2919,7 @@ function getWidget(schema, widget, registeredWidgets = {}) {
2846
2919
  return mergeWidgetOptions(widget);
2847
2920
  }
2848
2921
  if (typeof widget !== "string") {
2849
- throw new Error(`Unsupported widget definition: ${typeof widget}`);
2922
+ throw new Error(`Unsupported widget definition: ${typeof widget} in schema: ${JSON.stringify(schema)}`);
2850
2923
  }
2851
2924
  if (widget in registeredWidgets) {
2852
2925
  const registeredWidget = registeredWidgets[widget];
@@ -2854,14 +2927,14 @@ function getWidget(schema, widget, registeredWidgets = {}) {
2854
2927
  }
2855
2928
  if (typeof type === "string") {
2856
2929
  if (!(type in widgetMap)) {
2857
- throw new Error(`No widget for type '${type}'`);
2930
+ throw new Error(`No widget for type '${type}' in schema: ${JSON.stringify(schema)}`);
2858
2931
  }
2859
2932
  if (widget in widgetMap[type]) {
2860
2933
  const registeredWidget = registeredWidgets[widgetMap[type][widget]];
2861
2934
  return getWidget(schema, registeredWidget, registeredWidgets);
2862
2935
  }
2863
2936
  }
2864
- throw new Error(`No widget '${widget}' for type '${type}'`);
2937
+ throw new Error(`No widget '${widget}' for type '${type}' in schema: ${JSON.stringify(schema)}`);
2865
2938
  }
2866
2939
 
2867
2940
  // src/hashForSchema.ts
@@ -2931,6 +3004,31 @@ function optionId(id, optionIndex) {
2931
3004
  function buttonId(id, btn) {
2932
3005
  return idGenerator(id, btn);
2933
3006
  }
3007
+ function optionalControlsId(id, element) {
3008
+ return idGenerator(id, `optional${element}`);
3009
+ }
3010
+
3011
+ // src/isFormDataAvailable.ts
3012
+ import isNil3 from "lodash/isNil";
3013
+ import isEmpty5 from "lodash/isEmpty";
3014
+ import isObject4 from "lodash/isObject";
3015
+ function isFormDataAvailable(formData) {
3016
+ return !isNil3(formData) && (!isObject4(formData) || Array.isArray(formData) || !isEmpty5(formData));
3017
+ }
3018
+
3019
+ // src/isRootSchema.ts
3020
+ import isEqual2 from "lodash/isEqual";
3021
+ function isRootSchema(registry, schemaToCompare) {
3022
+ const { rootSchema, schemaUtils } = registry;
3023
+ if (isEqual2(schemaToCompare, rootSchema)) {
3024
+ return true;
3025
+ }
3026
+ if (REF_KEY in rootSchema) {
3027
+ const resolvedSchema = schemaUtils.retrieveSchema(rootSchema);
3028
+ return isEqual2(schemaToCompare, resolvedSchema);
3029
+ }
3030
+ return false;
3031
+ }
2934
3032
 
2935
3033
  // src/labelValue.ts
2936
3034
  function labelValue(label, hideLabel, fallback) {
@@ -2943,14 +3041,14 @@ function localToUTC(dateString) {
2943
3041
  }
2944
3042
 
2945
3043
  // src/lookupFromFormContext.ts
2946
- import get19 from "lodash/get";
3044
+ import get20 from "lodash/get";
2947
3045
  import has6 from "lodash/has";
2948
3046
  function lookupFromFormContext(regOrFc, toLookup, fallback) {
2949
3047
  const lookupPath = [LOOKUP_MAP_NAME];
2950
3048
  if (has6(regOrFc, FORM_CONTEXT_NAME)) {
2951
3049
  lookupPath.unshift(FORM_CONTEXT_NAME);
2952
3050
  }
2953
- return get19(regOrFc, [...lookupPath, toLookup], fallback);
3051
+ return get20(regOrFc, [...lookupPath, toLookup], fallback);
2954
3052
  }
2955
3053
 
2956
3054
  // src/orderProperties.ts
@@ -3031,11 +3129,40 @@ function schemaRequiresTrueValue(schema) {
3031
3129
  }
3032
3130
 
3033
3131
  // src/shouldRender.ts
3034
- function shouldRender(component, nextProps, nextState) {
3132
+ function shouldRender(component, nextProps, nextState, updateStrategy = "customDeep") {
3133
+ if (updateStrategy === "always") {
3134
+ return true;
3135
+ }
3136
+ if (updateStrategy === "shallow") {
3137
+ const { props: props2, state: state2 } = component;
3138
+ return !shallowEquals(props2, nextProps) || !shallowEquals(state2, nextState);
3139
+ }
3035
3140
  const { props, state } = component;
3036
3141
  return !deepEquals(props, nextProps) || !deepEquals(state, nextState);
3037
3142
  }
3038
3143
 
3144
+ // src/shouldRenderOptionalField.ts
3145
+ import isObject5 from "lodash/isObject";
3146
+ import uniq2 from "lodash/uniq";
3147
+ function getSchemaTypesForXxxOf(schemas) {
3148
+ const allTypes = uniq2(
3149
+ schemas.map((s) => isObject5(s) ? getSchemaType(s) : void 0).flat().filter((t) => t !== void 0)
3150
+ );
3151
+ return allTypes.length === 1 ? allTypes[0] : allTypes;
3152
+ }
3153
+ function shouldRenderOptionalField(registry, schema, required, uiSchema) {
3154
+ const { enableOptionalDataFieldForType = [] } = getUiOptions(uiSchema, registry.globalUiOptions);
3155
+ let schemaType;
3156
+ if (ANY_OF_KEY in schema && Array.isArray(schema[ANY_OF_KEY])) {
3157
+ schemaType = getSchemaTypesForXxxOf(schema[ANY_OF_KEY]);
3158
+ } else if (ONE_OF_KEY in schema && Array.isArray(schema[ONE_OF_KEY])) {
3159
+ schemaType = getSchemaTypesForXxxOf(schema[ONE_OF_KEY]);
3160
+ } else {
3161
+ schemaType = getSchemaType(schema);
3162
+ }
3163
+ return !isRootSchema(registry, schema) && !required && !!schemaType && !Array.isArray(schemaType) && !!enableOptionalDataFieldForType.find((val) => val === schemaType);
3164
+ }
3165
+
3039
3166
  // src/toDateString.ts
3040
3167
  function toDateString(dateObject, time = true) {
3041
3168
  const { year, month, day, hour = 0, minute = 0, second = 0 } = dateObject;
@@ -3045,7 +3172,7 @@ function toDateString(dateObject, time = true) {
3045
3172
  }
3046
3173
 
3047
3174
  // src/toErrorList.ts
3048
- import isPlainObject2 from "lodash/isPlainObject";
3175
+ import isPlainObject3 from "lodash/isPlainObject";
3049
3176
  function toErrorList(errorSchema, fieldPath = []) {
3050
3177
  if (!errorSchema) {
3051
3178
  return [];
@@ -3066,7 +3193,7 @@ function toErrorList(errorSchema, fieldPath = []) {
3066
3193
  return Object.keys(errorSchema).reduce((acc, key) => {
3067
3194
  if (key !== ERRORS_KEY) {
3068
3195
  const childSchema = errorSchema[key];
3069
- if (isPlainObject2(childSchema)) {
3196
+ if (isPlainObject3(childSchema)) {
3070
3197
  acc = acc.concat(toErrorList(childSchema, [...fieldPath, key]));
3071
3198
  }
3072
3199
  }
@@ -3093,15 +3220,28 @@ function toErrorSchema(errors) {
3093
3220
  return builder.ErrorSchema;
3094
3221
  }
3095
3222
 
3223
+ // src/toFieldPathId.ts
3224
+ function toFieldPathId(fieldPath, globalFormOptions, parentPath, isMultiValue) {
3225
+ const basePath = Array.isArray(parentPath) ? parentPath : parentPath?.path;
3226
+ const childPath = fieldPath === "" ? [] : [fieldPath];
3227
+ const path = basePath ? basePath.concat(...childPath) : childPath;
3228
+ const id = [globalFormOptions.idPrefix, ...path].join(globalFormOptions.idSeparator);
3229
+ let name;
3230
+ if (globalFormOptions.nameGenerator && path.length > 0) {
3231
+ name = globalFormOptions.nameGenerator(path, globalFormOptions.idPrefix, isMultiValue);
3232
+ }
3233
+ return { path, [ID_KEY]: id, ...name !== void 0 && { name } };
3234
+ }
3235
+
3096
3236
  // src/unwrapErrorHandler.ts
3097
- import isPlainObject3 from "lodash/isPlainObject";
3237
+ import isPlainObject4 from "lodash/isPlainObject";
3098
3238
  function unwrapErrorHandler(errorHandler) {
3099
3239
  return Object.keys(errorHandler).reduce((acc, key) => {
3100
3240
  if (key === "addError") {
3101
3241
  return acc;
3102
3242
  } else {
3103
3243
  const childSchema = errorHandler[key];
3104
- if (isPlainObject3(childSchema)) {
3244
+ if (isPlainObject4(childSchema)) {
3105
3245
  return {
3106
3246
  ...acc,
3107
3247
  [key]: unwrapErrorHandler(childSchema)
@@ -3112,6 +3252,209 @@ function unwrapErrorHandler(errorHandler) {
3112
3252
  }, {});
3113
3253
  }
3114
3254
 
3255
+ // src/useAltDateWidgetProps.tsx
3256
+ import { useCallback, useEffect, useMemo, useState } from "react";
3257
+ import { jsx as jsx2 } from "react/jsx-runtime";
3258
+ function readyForChange(state) {
3259
+ return Object.values(state).every((value) => value !== -1);
3260
+ }
3261
+ function DateElement(props) {
3262
+ const {
3263
+ className = "form-control",
3264
+ type,
3265
+ range,
3266
+ value,
3267
+ select,
3268
+ rootId,
3269
+ name,
3270
+ disabled,
3271
+ readonly,
3272
+ autofocus,
3273
+ registry,
3274
+ onBlur,
3275
+ onFocus
3276
+ } = props;
3277
+ const id = `${rootId}_${type}`;
3278
+ const { SelectWidget } = registry.widgets;
3279
+ const onChange = useCallback((value2) => select(type, value2), [select, type]);
3280
+ return /* @__PURE__ */ jsx2(
3281
+ SelectWidget,
3282
+ {
3283
+ schema: { type: "integer" },
3284
+ id,
3285
+ name,
3286
+ className,
3287
+ options: { enumOptions: dateRangeOptions(range[0], range[1]) },
3288
+ placeholder: type,
3289
+ value,
3290
+ disabled,
3291
+ readonly,
3292
+ autofocus,
3293
+ onChange,
3294
+ onBlur,
3295
+ onFocus,
3296
+ registry,
3297
+ label: "",
3298
+ "aria-describedby": ariaDescribedByIds(rootId)
3299
+ }
3300
+ );
3301
+ }
3302
+ function useAltDateWidgetProps(props) {
3303
+ const { time = false, disabled = false, readonly = false, options, onChange, value } = props;
3304
+ const [state, setState] = useState(parseDateString(value, time));
3305
+ useEffect(() => {
3306
+ setState(parseDateString(value, time));
3307
+ }, [time, value]);
3308
+ const handleChange = useCallback(
3309
+ (property, value2) => {
3310
+ const nextState = {
3311
+ ...state,
3312
+ [property]: typeof value2 === "undefined" ? -1 : value2
3313
+ };
3314
+ if (readyForChange(nextState)) {
3315
+ onChange(toDateString(nextState, time));
3316
+ } else {
3317
+ setState(nextState);
3318
+ }
3319
+ },
3320
+ [state, onChange, time]
3321
+ );
3322
+ const handleClear = useCallback(
3323
+ (event) => {
3324
+ event.preventDefault();
3325
+ if (disabled || readonly) {
3326
+ return;
3327
+ }
3328
+ onChange(void 0);
3329
+ },
3330
+ [disabled, readonly, onChange]
3331
+ );
3332
+ const handleSetNow = useCallback(
3333
+ (event) => {
3334
+ event.preventDefault();
3335
+ if (disabled || readonly) {
3336
+ return;
3337
+ }
3338
+ const nextState = parseDateString((/* @__PURE__ */ new Date()).toJSON(), time);
3339
+ onChange(toDateString(nextState, time));
3340
+ },
3341
+ [disabled, readonly, time, onChange]
3342
+ );
3343
+ const elements = useMemo(
3344
+ () => getDateElementProps(
3345
+ state,
3346
+ time,
3347
+ options.yearsRange,
3348
+ options.format
3349
+ ),
3350
+ [state, time, options.yearsRange, options.format]
3351
+ );
3352
+ return { elements, handleChange, handleClear, handleSetNow };
3353
+ }
3354
+
3355
+ // src/useDeepCompareMemo.ts
3356
+ import { useRef } from "react";
3357
+ import isEqual3 from "lodash/isEqual";
3358
+ function useDeepCompareMemo(newValue) {
3359
+ const valueRef = useRef(newValue);
3360
+ if (!isEqual3(newValue, valueRef.current)) {
3361
+ valueRef.current = newValue;
3362
+ }
3363
+ return valueRef.current;
3364
+ }
3365
+
3366
+ // src/useFileWidgetProps.ts
3367
+ import { useCallback as useCallback2, useMemo as useMemo2 } from "react";
3368
+ function addNameToDataURL(dataURL, name) {
3369
+ return dataURL.replace(";base64", `;name=${encodeURIComponent(name)};base64`);
3370
+ }
3371
+ function processFile(file) {
3372
+ const { name, size, type } = file;
3373
+ return new Promise((resolve, reject) => {
3374
+ const reader = new window.FileReader();
3375
+ reader.onerror = reject;
3376
+ reader.onload = (event) => {
3377
+ if (typeof event.target?.result === "string") {
3378
+ resolve({
3379
+ dataURL: addNameToDataURL(event.target.result, name),
3380
+ name,
3381
+ size,
3382
+ type
3383
+ });
3384
+ } else {
3385
+ resolve({
3386
+ dataURL: null,
3387
+ name,
3388
+ size,
3389
+ type
3390
+ });
3391
+ }
3392
+ };
3393
+ reader.readAsDataURL(file);
3394
+ });
3395
+ }
3396
+ function processFiles(files) {
3397
+ return Promise.all(Array.from(files).map(processFile));
3398
+ }
3399
+ function extractFileInfo(dataURLs) {
3400
+ return dataURLs.reduce((acc, dataURL) => {
3401
+ if (!dataURL) {
3402
+ return acc;
3403
+ }
3404
+ try {
3405
+ const { blob, name } = dataURItoBlob(dataURL);
3406
+ return [
3407
+ ...acc,
3408
+ {
3409
+ dataURL,
3410
+ name,
3411
+ size: blob.size,
3412
+ type: blob.type
3413
+ }
3414
+ ];
3415
+ } catch {
3416
+ return acc;
3417
+ }
3418
+ }, []);
3419
+ }
3420
+ function useFileWidgetProps(value, onChange, multiple = false) {
3421
+ const values = useMemo2(() => {
3422
+ if (multiple && value) {
3423
+ return Array.isArray(value) ? value : [value];
3424
+ }
3425
+ return [];
3426
+ }, [value, multiple]);
3427
+ const filesInfo = useMemo2(
3428
+ () => Array.isArray(value) ? extractFileInfo(value) : extractFileInfo([value || ""]),
3429
+ [value]
3430
+ );
3431
+ const handleChange = useCallback2(
3432
+ (files) => {
3433
+ processFiles(files).then((filesInfoEvent) => {
3434
+ const newValue = filesInfoEvent.map((fileInfo) => fileInfo.dataURL || null);
3435
+ if (multiple) {
3436
+ onChange(values.concat(...newValue));
3437
+ } else {
3438
+ onChange(newValue[0]);
3439
+ }
3440
+ });
3441
+ },
3442
+ [values, multiple, onChange]
3443
+ );
3444
+ const handleRemove = useCallback2(
3445
+ (index) => {
3446
+ if (multiple) {
3447
+ const newValue = values.filter((_, i) => i !== index);
3448
+ onChange(newValue);
3449
+ } else {
3450
+ onChange(void 0);
3451
+ }
3452
+ },
3453
+ [values, multiple, onChange]
3454
+ );
3455
+ return { filesInfo, handleChange, handleRemove };
3456
+ }
3457
+
3115
3458
  // src/utcToLocal.ts
3116
3459
  function utcToLocal(jsonDate) {
3117
3460
  if (!jsonDate) {
@@ -3129,23 +3472,27 @@ function utcToLocal(jsonDate) {
3129
3472
  }
3130
3473
 
3131
3474
  // src/validationDataMerge.ts
3132
- import isEmpty5 from "lodash/isEmpty";
3133
- function validationDataMerge(validationData, additionalErrorSchema) {
3475
+ import isEmpty6 from "lodash/isEmpty";
3476
+ function validationDataMerge(validationData, additionalErrorSchema, preventDuplicates = false) {
3134
3477
  if (!additionalErrorSchema) {
3135
3478
  return validationData;
3136
3479
  }
3137
3480
  const { errors: oldErrors, errorSchema: oldErrorSchema } = validationData;
3138
3481
  let errors = toErrorList(additionalErrorSchema);
3139
3482
  let errorSchema = additionalErrorSchema;
3140
- if (!isEmpty5(oldErrorSchema)) {
3141
- errorSchema = mergeObjects(oldErrorSchema, additionalErrorSchema, true);
3483
+ if (!isEmpty6(oldErrorSchema)) {
3484
+ errorSchema = mergeObjects(
3485
+ oldErrorSchema,
3486
+ additionalErrorSchema,
3487
+ preventDuplicates ? "preventDuplicates" : true
3488
+ );
3142
3489
  errors = [...oldErrors].concat(errors);
3143
3490
  }
3144
3491
  return { errorSchema, errors };
3145
3492
  }
3146
3493
 
3147
3494
  // src/withIdRefPrefix.ts
3148
- import isObject4 from "lodash/isObject";
3495
+ import isObject6 from "lodash/isObject";
3149
3496
  function withIdRefPrefixObject(node) {
3150
3497
  for (const key in node) {
3151
3498
  const realObj = node;
@@ -3168,34 +3515,31 @@ function withIdRefPrefix(schemaNode) {
3168
3515
  if (Array.isArray(schemaNode)) {
3169
3516
  return withIdRefPrefixArray([...schemaNode]);
3170
3517
  }
3171
- if (isObject4(schemaNode)) {
3518
+ if (isObject6(schemaNode)) {
3172
3519
  return withIdRefPrefixObject({ ...schemaNode });
3173
3520
  }
3174
3521
  return schemaNode;
3175
3522
  }
3176
3523
 
3177
- // src/getChangedFields.ts
3178
- import keys from "lodash/keys";
3179
- import pickBy from "lodash/pickBy";
3180
- import isPlainObject4 from "lodash/isPlainObject";
3181
- import get20 from "lodash/get";
3182
- import difference from "lodash/difference";
3183
- function getChangedFields(a, b) {
3184
- const aIsPlainObject = isPlainObject4(a);
3185
- const bIsPlainObject = isPlainObject4(b);
3186
- if (a === b || !aIsPlainObject && !bIsPlainObject) {
3187
- return [];
3524
+ // src/nameGenerators.ts
3525
+ var bracketNameGenerator = (path, idPrefix, isMultiValue) => {
3526
+ if (!path || path.length === 0) {
3527
+ return idPrefix;
3188
3528
  }
3189
- if (aIsPlainObject && !bIsPlainObject) {
3190
- return keys(a);
3191
- } else if (!aIsPlainObject && bIsPlainObject) {
3192
- return keys(b);
3193
- } else {
3194
- const unequalFields = keys(pickBy(a, (value, key) => !deepEquals(value, get20(b, key))));
3195
- const diffFields = difference(keys(b), keys(a));
3196
- return [...unequalFields, ...diffFields];
3529
+ const baseName = path.reduce((acc, pathUnit, index) => {
3530
+ if (index === 0) {
3531
+ return `${idPrefix}[${String(pathUnit)}]`;
3532
+ }
3533
+ return `${acc}[${String(pathUnit)}]`;
3534
+ }, "");
3535
+ return isMultiValue ? `${baseName}[]` : baseName;
3536
+ };
3537
+ var dotNotationNameGenerator = (path, idPrefix, _isMultiValue) => {
3538
+ if (!path || path.length === 0) {
3539
+ return idPrefix;
3197
3540
  }
3198
- }
3541
+ return `${idPrefix}.${path.map(String).join(".")}`;
3542
+ };
3199
3543
 
3200
3544
  // src/enums.ts
3201
3545
  var TranslatableString = /* @__PURE__ */ ((TranslatableString2) => {
@@ -3219,6 +3563,11 @@ var TranslatableString = /* @__PURE__ */ ((TranslatableString2) => {
3219
3563
  TranslatableString2["PreviewLabel"] = "Preview";
3220
3564
  TranslatableString2["DecrementAriaLabel"] = "Decrease value by 1";
3221
3565
  TranslatableString2["IncrementAriaLabel"] = "Increase value by 1";
3566
+ TranslatableString2["OptionalObjectAdd"] = "Add data for optional field";
3567
+ TranslatableString2["OptionalObjectRemove"] = "Remove data for optional field";
3568
+ TranslatableString2["OptionalObjectEmptyMsg"] = "No data for optional field";
3569
+ TranslatableString2["Type"] = "Type";
3570
+ TranslatableString2["Value"] = "Value";
3222
3571
  TranslatableString2["UnknownFieldType"] = "Unknown field type %1";
3223
3572
  TranslatableString2["OptionPrefix"] = "Option %1";
3224
3573
  TranslatableString2["TitleOptionPrefix"] = "%1 option %2";
@@ -3358,10 +3707,13 @@ export {
3358
3707
  ALL_OF_KEY,
3359
3708
  ANY_OF_KEY,
3360
3709
  CONST_KEY,
3710
+ DEFAULT_ID_PREFIX,
3711
+ DEFAULT_ID_SEPARATOR,
3361
3712
  DEFAULT_KEY,
3362
3713
  DEFINITIONS_KEY,
3363
3714
  DEPENDENCIES_KEY,
3364
3715
  DISCRIMINATOR_PATH,
3716
+ DateElement,
3365
3717
  ENUM_KEY,
3366
3718
  ERRORS_KEY,
3367
3719
  ErrorSchemaBuilder,
@@ -3369,6 +3721,7 @@ export {
3369
3721
  ID_KEY,
3370
3722
  IF_KEY,
3371
3723
  ITEMS_KEY,
3724
+ JSON_SCHEMA_DRAFT_2019_09,
3372
3725
  JSON_SCHEMA_DRAFT_2020_12,
3373
3726
  JUNK_OPTION_ID,
3374
3727
  LOOKUP_MAP_NAME,
@@ -3391,6 +3744,7 @@ export {
3391
3744
  allowAdditionalItems,
3392
3745
  ariaDescribedByIds,
3393
3746
  asNumber,
3747
+ bracketNameGenerator,
3394
3748
  buttonId,
3395
3749
  canExpand,
3396
3750
  createErrorHandler,
@@ -3399,6 +3753,7 @@ export {
3399
3753
  dateRangeOptions,
3400
3754
  deepEquals,
3401
3755
  descriptionId,
3756
+ dotNotationNameGenerator,
3402
3757
  englishStringTranslator,
3403
3758
  enumOptionsDeselectValue,
3404
3759
  enumOptionsIndexForValue,
@@ -3436,8 +3791,10 @@ export {
3436
3791
  isCustomWidget,
3437
3792
  isFilesArray,
3438
3793
  isFixedItems,
3794
+ isFormDataAvailable,
3439
3795
  isMultiSelect,
3440
3796
  isObject,
3797
+ isRootSchema,
3441
3798
  isSelect,
3442
3799
  labelValue,
3443
3800
  localToUTC,
@@ -3446,6 +3803,7 @@ export {
3446
3803
  mergeObjects,
3447
3804
  mergeSchemas,
3448
3805
  optionId,
3806
+ optionalControlsId,
3449
3807
  optionsList,
3450
3808
  orderProperties,
3451
3809
  pad,
@@ -3456,16 +3814,21 @@ export {
3456
3814
  sanitizeDataForNewSchema,
3457
3815
  schemaParser,
3458
3816
  schemaRequiresTrueValue,
3817
+ shallowEquals,
3459
3818
  shouldRender,
3819
+ shouldRenderOptionalField,
3460
3820
  sortedJSONStringify,
3461
3821
  titleId,
3462
3822
  toConstant,
3463
3823
  toDateString,
3464
3824
  toErrorList,
3465
3825
  toErrorSchema,
3466
- toIdSchema,
3826
+ toFieldPathId,
3467
3827
  toPathSchema,
3468
3828
  unwrapErrorHandler,
3829
+ useAltDateWidgetProps,
3830
+ useDeepCompareMemo,
3831
+ useFileWidgetProps,
3469
3832
  utcToLocal,
3470
3833
  validationDataMerge,
3471
3834
  withIdRefPrefix