@connect-soft/form-generator 1.1.0-alpha7 → 1.1.0-alpha9

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/dist/index.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  import { jsx, jsxs, Fragment as Fragment$1 } from 'react/jsx-runtime';
2
- import React, { createElement, Fragment, memo, useCallback, useRef, useMemo, useImperativeHandle } from 'react';
2
+ import React, { createElement, Fragment, memo, useCallback, useContext, createContext, useRef, useMemo, useImperativeHandle } from 'react';
3
3
  import * as n$1 from 'zod/v4/core';
4
4
  import { c } from 'react/compiler-runtime';
5
5
  import { z } from 'zod';
@@ -2775,6 +2775,49 @@ function t(r,e){try{var o=r();}catch(r){return e(r)}return o&&o.then?o.then(void
2775
2775
  function isArrayField(field) {
2776
2776
  return field.type === 'array' && 'fields' in field;
2777
2777
  }
2778
+ function createField(field) {
2779
+ return field;
2780
+ }
2781
+ function createArrayField(field) {
2782
+ return {
2783
+ ...field,
2784
+ type: 'array'
2785
+ };
2786
+ }
2787
+ function strictFields(fields) {
2788
+ return fields;
2789
+ }
2790
+ function validateFieldType(type, registeredTypes) {
2791
+ if (!registeredTypes.includes(type) && type !== 'array') {
2792
+ throw new Error(`Unregistered field type: "${type}". ` + `Registered types: ${registeredTypes.join(', ')}. ` + `Use registerField("${type}", YourComponent) to register it.`);
2793
+ }
2794
+ return type;
2795
+ }
2796
+ function validateFieldTypes(fields, registeredTypes, options = {}) {
2797
+ const {
2798
+ throwOnError = false,
2799
+ warn = true
2800
+ } = options;
2801
+ const invalidTypes = [];
2802
+ const checkField = field => {
2803
+ if (field.type === 'array' && 'fields' in field) {
2804
+ field.fields.forEach(checkField);
2805
+ } else if (!registeredTypes.includes(field.type) && field.type !== 'array') {
2806
+ invalidTypes.push(field.type);
2807
+ }
2808
+ };
2809
+ fields.forEach(checkField);
2810
+ if (invalidTypes.length > 0) {
2811
+ const uniqueInvalid = [...new Set(invalidTypes)];
2812
+ const message = `Unregistered field type(s): ${uniqueInvalid.map(t => `"${t}"`).join(', ')}. ` + `Registered types: ${registeredTypes.join(', ')}. ` + 'Register custom types with registerField() or use module augmentation for TypeScript support.';
2813
+ if (throwOnError) {
2814
+ throw new Error(message);
2815
+ } else if (warn && typeof console !== 'undefined') {
2816
+ console.warn(`[FormGenerator] ${message}`);
2817
+ }
2818
+ }
2819
+ return fields;
2820
+ }
2778
2821
 
2779
2822
  const fieldRegistry = new Map();
2780
2823
  const componentRegistry = {};
@@ -2937,27 +2980,15 @@ function createDefaultFieldComponent(type) {
2937
2980
  };
2938
2981
  return FallbackComponent;
2939
2982
  }
2940
- function registerField(type, component, options = {}, config = {}) {
2941
- const {
2942
- override = true
2943
- } = config;
2944
- const exists = fieldRegistry.has(type);
2945
- if (override === 'only' && !exists) return;
2946
- if (override === false && exists) return;
2983
+ function registerField(type, component, options = {}) {
2947
2984
  fieldRegistry.set(type, {
2948
2985
  component,
2949
2986
  options
2950
2987
  });
2951
2988
  }
2952
- function registerFields(fields, config = {}) {
2953
- const {
2954
- override = true
2955
- } = config;
2989
+ function registerFields(fields) {
2956
2990
  Object.entries(fields).forEach(([type, definition]) => {
2957
2991
  var _a;
2958
- const exists = fieldRegistry.has(type);
2959
- if (override === 'only' && !exists) return;
2960
- if (override === false && exists) return;
2961
2992
  if (typeof definition === 'function') {
2962
2993
  fieldRegistry.set(type, {
2963
2994
  component: definition,
@@ -2992,24 +3023,12 @@ function unregisterField(type) {
2992
3023
  function getRegisteredFieldTypes() {
2993
3024
  return Array.from(fieldRegistry.keys());
2994
3025
  }
2995
- function registerFormComponents(components, config = {}) {
2996
- const {
2997
- override = true
2998
- } = config;
3026
+ function registerFormComponents(components) {
2999
3027
  Object.keys(components).forEach(key => {
3000
- const exists = key in componentRegistry;
3001
- if (override === 'only' && !exists) return;
3002
- if (override === false && exists) return;
3003
3028
  componentRegistry[key] = components[key];
3004
3029
  });
3005
3030
  }
3006
- function registerFormComponent(name, component, config = {}) {
3007
- const {
3008
- override = true
3009
- } = config;
3010
- const exists = name in componentRegistry;
3011
- if (override === 'only' && !exists) return;
3012
- if (override === false && exists) return;
3031
+ function registerFormComponent(name, component) {
3013
3032
  componentRegistry[name] = component;
3014
3033
  }
3015
3034
  function getFormComponent(name) {
@@ -3368,6 +3387,167 @@ function createTemplateFields(fieldEntries) {
3368
3387
  return new Proxy({}, handler);
3369
3388
  }
3370
3389
 
3390
+ const FieldsContext = /*#__PURE__*/createContext(null);
3391
+ function FieldsProvider(t0) {
3392
+ const $ = c(9);
3393
+ const {
3394
+ children,
3395
+ fields,
3396
+ namePrefix
3397
+ } = t0;
3398
+ let map;
3399
+ if ($[0] !== fields || $[1] !== namePrefix) {
3400
+ map = new Map();
3401
+ const addFields = (items, prefix) => {
3402
+ items.forEach(item => {
3403
+ if ("fields" in item && Array.isArray(item.fields)) {
3404
+ const arrayPrefix = prefix ? `${prefix}.${item.name}` : item.name;
3405
+ addFields(item.fields, arrayPrefix);
3406
+ } else {
3407
+ const fieldName = prefix ? `${prefix}.${item.name}` : item.name;
3408
+ map.set(fieldName, item);
3409
+ if (prefix) {
3410
+ map.set(item.name, item);
3411
+ }
3412
+ }
3413
+ });
3414
+ };
3415
+ addFields(fields, namePrefix);
3416
+ $[0] = fields;
3417
+ $[1] = namePrefix;
3418
+ $[2] = map;
3419
+ } else {
3420
+ map = $[2];
3421
+ }
3422
+ const fieldsMap = map;
3423
+ let t1;
3424
+ if ($[3] !== fieldsMap || $[4] !== namePrefix) {
3425
+ t1 = {
3426
+ fields: fieldsMap,
3427
+ namePrefix
3428
+ };
3429
+ $[3] = fieldsMap;
3430
+ $[4] = namePrefix;
3431
+ $[5] = t1;
3432
+ } else {
3433
+ t1 = $[5];
3434
+ }
3435
+ const value = t1;
3436
+ let t2;
3437
+ if ($[6] !== children || $[7] !== value) {
3438
+ t2 = jsx(FieldsContext.Provider, {
3439
+ value,
3440
+ children
3441
+ });
3442
+ $[6] = children;
3443
+ $[7] = value;
3444
+ $[8] = t2;
3445
+ } else {
3446
+ t2 = $[8];
3447
+ }
3448
+ return t2;
3449
+ }
3450
+ function useFieldProps(name) {
3451
+ const $ = c(23);
3452
+ const context = useContext(FieldsContext);
3453
+ const form = useFormContext();
3454
+ if (!context) {
3455
+ throw new Error("useFieldProps must be used within FormGenerator or FieldsProvider");
3456
+ }
3457
+ if (!form) {
3458
+ throw new Error("useFieldProps must be used within a FormProvider context");
3459
+ }
3460
+ const {
3461
+ fields,
3462
+ namePrefix
3463
+ } = context;
3464
+ const fullName = namePrefix ? `${namePrefix}.${name}` : name;
3465
+ let t0;
3466
+ if ($[0] !== fields || $[1] !== fullName || $[2] !== name) {
3467
+ t0 = fields.get(fullName) || fields.get(name);
3468
+ $[0] = fields;
3469
+ $[1] = fullName;
3470
+ $[2] = name;
3471
+ $[3] = t0;
3472
+ } else {
3473
+ t0 = $[3];
3474
+ }
3475
+ const field = t0;
3476
+ if (!field) {
3477
+ throw new Error(`Field "${name}" not found in form fields. ` + `Available fields: ${Array.from(fields.keys()).join(", ")}`);
3478
+ }
3479
+ let t1;
3480
+ if ($[4] !== form.control || $[5] !== fullName) {
3481
+ t1 = {
3482
+ control: form.control,
3483
+ name: fullName
3484
+ };
3485
+ $[4] = form.control;
3486
+ $[5] = fullName;
3487
+ $[6] = t1;
3488
+ } else {
3489
+ t1 = $[6];
3490
+ }
3491
+ const {
3492
+ field: controllerField,
3493
+ fieldState
3494
+ } = useController(t1);
3495
+ let t2;
3496
+ if ($[7] !== field || $[8] !== fullName) {
3497
+ t2 = {
3498
+ ...field,
3499
+ name: fullName
3500
+ };
3501
+ $[7] = field;
3502
+ $[8] = fullName;
3503
+ $[9] = t2;
3504
+ } else {
3505
+ t2 = $[9];
3506
+ }
3507
+ let t3;
3508
+ if ($[10] !== fieldState.error || $[11] !== fieldState.invalid || $[12] !== fieldState.isDirty || $[13] !== fieldState.isTouched) {
3509
+ t3 = {
3510
+ invalid: fieldState.invalid,
3511
+ error: fieldState.error,
3512
+ isDirty: fieldState.isDirty,
3513
+ isTouched: fieldState.isTouched
3514
+ };
3515
+ $[10] = fieldState.error;
3516
+ $[11] = fieldState.invalid;
3517
+ $[12] = fieldState.isDirty;
3518
+ $[13] = fieldState.isTouched;
3519
+ $[14] = t3;
3520
+ } else {
3521
+ t3 = $[14];
3522
+ }
3523
+ let t4;
3524
+ if ($[15] !== controllerField.name || $[16] !== controllerField.onBlur || $[17] !== controllerField.onChange || $[18] !== controllerField.ref || $[19] !== controllerField.value || $[20] !== t2 || $[21] !== t3) {
3525
+ t4 = {
3526
+ name: controllerField.name,
3527
+ value: controllerField.value,
3528
+ onChange: controllerField.onChange,
3529
+ onBlur: controllerField.onBlur,
3530
+ ref: controllerField.ref,
3531
+ field: t2,
3532
+ fieldState: t3
3533
+ };
3534
+ $[15] = controllerField.name;
3535
+ $[16] = controllerField.onBlur;
3536
+ $[17] = controllerField.onChange;
3537
+ $[18] = controllerField.ref;
3538
+ $[19] = controllerField.value;
3539
+ $[20] = t2;
3540
+ $[21] = t3;
3541
+ $[22] = t4;
3542
+ } else {
3543
+ t4 = $[22];
3544
+ }
3545
+ return t4;
3546
+ }
3547
+ function useFieldsContext() {
3548
+ return useContext(FieldsContext);
3549
+ }
3550
+
3371
3551
  function deepMerge(target, source) {
3372
3552
  const result = {
3373
3553
  ...target
@@ -3478,10 +3658,7 @@ function buildDefaultValues(fields) {
3478
3658
  return values;
3479
3659
  }
3480
3660
 
3481
- function hasSchema(props) {
3482
- return props.schema !== undefined;
3483
- }
3484
- function FormGeneratorImpl(props) {
3661
+ function FormGenerator(props) {
3485
3662
  const {
3486
3663
  fields,
3487
3664
  defaultValues,
@@ -3494,17 +3671,22 @@ function FormGeneratorImpl(props) {
3494
3671
  showReset = false,
3495
3672
  resetText = 'Reset',
3496
3673
  children,
3497
- ref
3674
+ ref,
3675
+ validateTypes
3498
3676
  } = props;
3499
- const userSchema = hasSchema(props) ? props.schema : undefined;
3500
3677
  const onSubmit = props.onSubmit;
3501
3678
  const formRef = useRef(null);
3502
- const schema = useMemo(() => {
3503
- if (userSchema) {
3504
- return userSchema;
3679
+ useMemo(() => {
3680
+ if (validateTypes) {
3681
+ const registeredTypes = getRegisteredFieldTypes();
3682
+ const options = typeof validateTypes === 'object' ? validateTypes : {
3683
+ throwOnError: false,
3684
+ warn: true
3685
+ };
3686
+ validateFieldTypes(fields, registeredTypes, options);
3505
3687
  }
3506
- return buildSchema(fields);
3507
- }, [fields, userSchema]);
3688
+ }, [fields, validateTypes]);
3689
+ const schema = useMemo(() => buildSchema(fields), [fields]);
3508
3690
  const mergedDefaultValues = useMemo(() => {
3509
3691
  const builtDefaults = buildDefaultValues(fields);
3510
3692
  return defaultValues ? deepMerge(builtDefaults, defaultValues) : builtDefaults;
@@ -3607,40 +3789,251 @@ function FormGeneratorImpl(props) {
3607
3789
  }
3608
3790
  return result;
3609
3791
  }, [SubmitButton, disabled, form.formState.isSubmitting, submitText, showReset, resetText, handleReset]);
3610
- const renderField = useCallback((field_1, options) => {
3792
+ const renderField = useCallback((field_1, options_0) => {
3611
3793
  return jsx(FieldRenderer, {
3612
3794
  field: field_1,
3613
- namePrefix: options === null || options === void 0 ? void 0 : options.namePrefix
3795
+ namePrefix: options_0 === null || options_0 === void 0 ? void 0 : options_0.namePrefix
3614
3796
  });
3615
3797
  }, []);
3616
3798
  if (!children) {
3617
3799
  return jsx(FormProvider, {
3618
3800
  ...form,
3619
- children: jsxs("form", {
3801
+ children: jsx(FieldsProvider, {
3802
+ fields: fields,
3803
+ children: jsxs("form", {
3804
+ ref: formRef,
3805
+ onSubmit: handleSubmit,
3806
+ className: className,
3807
+ children: [jsxs(FieldsWrapper, {
3808
+ children: [regularFields.map((field_2, index_0) => jsx(FieldWrapper, {
3809
+ name: field_2.name,
3810
+ type: field_2.type,
3811
+ className: field_2.className,
3812
+ children: jsx(FieldRenderer, {
3813
+ field: field_2
3814
+ })
3815
+ }, field_2.name || `field-${index_0}`)), arrayFields.map(arrayField => jsx(FieldWrapper, {
3816
+ name: arrayField.name,
3817
+ type: "array",
3818
+ className: arrayField.className,
3819
+ children: jsx(ArrayFieldRenderer, {
3820
+ field: arrayField
3821
+ })
3822
+ }, arrayField.name))]
3823
+ }), jsx(SubmitButton, {
3824
+ disabled: disabled || form.formState.isSubmitting,
3825
+ isSubmitting: form.formState.isSubmitting,
3826
+ children: submitText
3827
+ })]
3828
+ })
3829
+ })
3830
+ });
3831
+ }
3832
+ const renderProps = {
3833
+ fields: templateFields,
3834
+ arrays: Object.fromEntries(arrayFields.map(arrayField_0 => [arrayField_0.name, {
3835
+ field: arrayField_0
3836
+ }])),
3837
+ buttons,
3838
+ title,
3839
+ description,
3840
+ form: form,
3841
+ isSubmitting: form.formState.isSubmitting,
3842
+ isValid: form.formState.isValid,
3843
+ isDirty: form.formState.isDirty,
3844
+ renderField,
3845
+ FieldWrapper,
3846
+ FieldsWrapper
3847
+ };
3848
+ const renderFn = children;
3849
+ return jsx(FormProvider, {
3850
+ ...form,
3851
+ children: jsx(FieldsProvider, {
3852
+ fields: fields,
3853
+ children: jsx("form", {
3620
3854
  ref: formRef,
3621
3855
  onSubmit: handleSubmit,
3622
3856
  className: className,
3623
- children: [jsxs(FieldsWrapper, {
3624
- children: [regularFields.map((field_2, index_0) => jsx(FieldWrapper, {
3625
- name: field_2.name,
3626
- type: field_2.type,
3627
- className: field_2.className,
3628
- children: jsx(FieldRenderer, {
3629
- field: field_2
3630
- })
3631
- }, field_2.name || `field-${index_0}`)), arrayFields.map(arrayField => jsx(FieldWrapper, {
3632
- name: arrayField.name,
3633
- type: "array",
3634
- className: arrayField.className,
3635
- children: jsx(ArrayFieldRenderer, {
3636
- field: arrayField
3637
- })
3638
- }, arrayField.name))]
3639
- }), jsx(SubmitButton, {
3640
- disabled: disabled || form.formState.isSubmitting,
3641
- isSubmitting: form.formState.isSubmitting,
3642
- children: submitText
3643
- })]
3857
+ children: renderFn(renderProps)
3858
+ })
3859
+ })
3860
+ });
3861
+ }
3862
+
3863
+ function typedField() {
3864
+ return field => field;
3865
+ }
3866
+ function typedFields(fields) {
3867
+ return fields;
3868
+ }
3869
+ function StrictFormGenerator(props) {
3870
+ const {
3871
+ schema,
3872
+ fields,
3873
+ onSubmit,
3874
+ defaultValues,
3875
+ className,
3876
+ submitText = 'Submit',
3877
+ disabled,
3878
+ mode = 'onChange',
3879
+ title,
3880
+ description,
3881
+ showReset = false,
3882
+ resetText = 'Reset',
3883
+ children,
3884
+ ref,
3885
+ validateTypes
3886
+ } = props;
3887
+ const formRef = useRef(null);
3888
+ useMemo(() => {
3889
+ if (validateTypes) {
3890
+ const registeredTypes = getRegisteredFieldTypes();
3891
+ const options = typeof validateTypes === 'object' ? validateTypes : {
3892
+ throwOnError: false,
3893
+ warn: true
3894
+ };
3895
+ validateFieldTypes(fields, registeredTypes, options);
3896
+ }
3897
+ }, [fields, validateTypes]);
3898
+ const mergedDefaultValues = useMemo(() => {
3899
+ const builtDefaults = buildDefaultValues(fields);
3900
+ return defaultValues ? deepMerge(builtDefaults, defaultValues) : builtDefaults;
3901
+ }, [fields, defaultValues]);
3902
+ const form = useForm({
3903
+ resolver: a(schema),
3904
+ defaultValues: mergedDefaultValues,
3905
+ mode
3906
+ });
3907
+ const handleSubmit = form.handleSubmit(async data => {
3908
+ await onSubmit(data);
3909
+ });
3910
+ const handleReset = useCallback(() => {
3911
+ form.reset(mergedDefaultValues);
3912
+ }, [form, mergedDefaultValues]);
3913
+ useImperativeHandle(ref, () => ({
3914
+ setValues: values => {
3915
+ Object.entries(values).forEach(([key, value]) => {
3916
+ form.setValue(key, value, {
3917
+ shouldValidate: true,
3918
+ shouldDirty: true
3919
+ });
3920
+ });
3921
+ },
3922
+ getValues: () => form.getValues(),
3923
+ reset: values_0 => {
3924
+ if (values_0) {
3925
+ form.reset(deepMerge(mergedDefaultValues, values_0));
3926
+ } else {
3927
+ form.reset(mergedDefaultValues);
3928
+ }
3929
+ },
3930
+ submit: async () => {
3931
+ await handleSubmit();
3932
+ },
3933
+ clearErrors: () => form.clearErrors(),
3934
+ setError: (name, error) => form.setError(name, error),
3935
+ isValid: () => form.formState.isValid,
3936
+ isDirty: () => form.formState.isDirty,
3937
+ form: form
3938
+ }), [form, handleSubmit, mergedDefaultValues]);
3939
+ const SubmitButton = getFormComponent('SubmitButton');
3940
+ const FieldWrapper = getFormComponent('FieldWrapper');
3941
+ const FieldsWrapper = getFormComponent('FieldsWrapper');
3942
+ const {
3943
+ regularFields,
3944
+ arrayFields
3945
+ } = useMemo(() => {
3946
+ const regular = [];
3947
+ const arrays = [];
3948
+ fields.forEach(field => {
3949
+ if (isArrayField(field)) {
3950
+ arrays.push(field);
3951
+ } else {
3952
+ regular.push(field);
3953
+ }
3954
+ });
3955
+ return {
3956
+ regularFields: regular,
3957
+ arrayFields: arrays
3958
+ };
3959
+ }, [fields]);
3960
+ const fieldEntries = useMemo(() => {
3961
+ const entries = new Map();
3962
+ regularFields.forEach((field_0, index) => {
3963
+ if (!field_0.hidden) {
3964
+ const element = jsx(FieldWrapper, {
3965
+ name: field_0.name,
3966
+ type: field_0.type,
3967
+ className: field_0.className,
3968
+ children: jsx(FieldRenderer, {
3969
+ field: field_0
3970
+ })
3971
+ }, field_0.name || `field-${index}`);
3972
+ entries.set(field_0.name, {
3973
+ field: field_0,
3974
+ element,
3975
+ accessed: false
3976
+ });
3977
+ }
3978
+ });
3979
+ return entries;
3980
+ }, [regularFields, FieldWrapper]);
3981
+ const templateFields = useMemo(() => createTemplateFields(fieldEntries), [fieldEntries]);
3982
+ const buttons = useMemo(() => {
3983
+ const result = {
3984
+ submit: jsx(SubmitButton, {
3985
+ disabled: disabled || form.formState.isSubmitting,
3986
+ isSubmitting: form.formState.isSubmitting,
3987
+ children: submitText
3988
+ }, "submit")
3989
+ };
3990
+ if (showReset) {
3991
+ result.reset = jsx("button", {
3992
+ type: "button",
3993
+ onClick: handleReset,
3994
+ disabled: disabled,
3995
+ children: resetText
3996
+ }, "reset");
3997
+ }
3998
+ return result;
3999
+ }, [SubmitButton, disabled, form.formState.isSubmitting, submitText, showReset, resetText, handleReset]);
4000
+ const renderField = useCallback((field_1, options_0) => {
4001
+ return jsx(FieldRenderer, {
4002
+ field: field_1,
4003
+ namePrefix: options_0 === null || options_0 === void 0 ? void 0 : options_0.namePrefix
4004
+ });
4005
+ }, []);
4006
+ if (!children) {
4007
+ return jsx(FormProvider, {
4008
+ ...form,
4009
+ children: jsx(FieldsProvider, {
4010
+ fields: fields,
4011
+ children: jsxs("form", {
4012
+ ref: formRef,
4013
+ onSubmit: handleSubmit,
4014
+ className: className,
4015
+ children: [jsxs(FieldsWrapper, {
4016
+ children: [regularFields.map((field_2, index_0) => jsx(FieldWrapper, {
4017
+ name: field_2.name,
4018
+ type: field_2.type,
4019
+ className: field_2.className,
4020
+ children: jsx(FieldRenderer, {
4021
+ field: field_2
4022
+ })
4023
+ }, field_2.name || `field-${index_0}`)), arrayFields.map(arrayField => jsx(FieldWrapper, {
4024
+ name: arrayField.name,
4025
+ type: "array",
4026
+ className: arrayField.className,
4027
+ children: jsx(ArrayFieldRenderer, {
4028
+ field: arrayField
4029
+ })
4030
+ }, arrayField.name))]
4031
+ }), jsx(SubmitButton, {
4032
+ disabled: disabled || form.formState.isSubmitting,
4033
+ isSubmitting: form.formState.isSubmitting,
4034
+ children: submitText
4035
+ })]
4036
+ })
3644
4037
  })
3645
4038
  });
3646
4039
  }
@@ -3663,17 +4056,20 @@ function FormGeneratorImpl(props) {
3663
4056
  const renderFn = children;
3664
4057
  return jsx(FormProvider, {
3665
4058
  ...form,
3666
- children: jsx("form", {
3667
- ref: formRef,
3668
- onSubmit: handleSubmit,
3669
- className: className,
3670
- children: renderFn(renderProps)
4059
+ children: jsx(FieldsProvider, {
4060
+ fields: fields,
4061
+ children: jsx("form", {
4062
+ ref: formRef,
4063
+ onSubmit: handleSubmit,
4064
+ className: className,
4065
+ children: renderFn(renderProps)
4066
+ })
3671
4067
  })
3672
4068
  });
3673
4069
  }
3674
- function FormGenerator(props) {
3675
- return FormGeneratorImpl(props);
4070
+ function createFieldFactory(_schema) {
4071
+ return field => field;
3676
4072
  }
3677
4073
 
3678
- export { ArrayFieldRenderer, Controller, FieldRenderer, FormGenerator, FormProvider, clearAllRegistries, clearFieldRegistry, clearFormComponentRegistry, getFieldComponent, getFormComponent, getFormComponents, getRegisteredFieldTypes, hasFieldType, hasFormComponent, isArrayField, registerField, registerFields, registerFormComponent, registerFormComponents, resetFormComponentRegistry, unregisterField, useArrayField, useFieldArray, useForm, useFormContext, useWatch };
4074
+ export { ArrayFieldRenderer, Controller, FieldRenderer, FieldsProvider, FormGenerator, FormProvider, StrictFormGenerator, clearAllRegistries, clearFieldRegistry, clearFormComponentRegistry, createArrayField, createField, createFieldFactory, getFieldComponent, getFormComponent, getFormComponents, getRegisteredFieldTypes, hasFieldType, hasFormComponent, isArrayField, registerField, registerFields, registerFormComponent, registerFormComponents, resetFormComponentRegistry, strictFields, typedField, typedFields, unregisterField, useArrayField, useFieldArray, useFieldProps, useFieldsContext, useForm, useFormContext, useWatch, validateFieldType, validateFieldTypes };
3679
4075
  //# sourceMappingURL=index.mjs.map