@connect-soft/form-generator 1.1.0-alpha6 → 1.1.0-alpha8
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/README.md +172 -1
- package/dist/index.js +103 -41
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +102 -45
- package/dist/index.mjs.map +1 -1
- package/dist/types/components/form/form-generator.d.ts +5 -0
- package/dist/types/components/form/form-generator.d.ts.map +1 -1
- package/dist/types/index.d.ts +3 -3
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/lib/field-registry.d.ts +22 -10
- package/dist/types/lib/field-registry.d.ts.map +1 -1
- package/dist/types/lib/field-types.d.ts +25 -0
- package/dist/types/lib/field-types.d.ts.map +1 -1
- package/dist/types/lib/index.d.ts +1 -1
- package/dist/types/lib/index.d.ts.map +1 -1
- package/dist/types/lib/template-types.d.ts +4 -1
- package/dist/types/lib/template-types.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
2
|
-
import React, { createElement, memo, useCallback,
|
|
1
|
+
import { jsx, jsxs, Fragment as Fragment$1 } from 'react/jsx-runtime';
|
|
2
|
+
import React, { createElement, Fragment, memo, useCallback, useMemo, useRef, 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 = {};
|
|
@@ -2788,7 +2831,13 @@ const defaultFormComponents = {
|
|
|
2788
2831
|
type: 'submit',
|
|
2789
2832
|
className: className !== null && className !== void 0 ? className : 'form-submit',
|
|
2790
2833
|
disabled: disabled || isSubmitting
|
|
2791
|
-
}, isSubmitting ? 'Submitting...' : children)
|
|
2834
|
+
}, isSubmitting ? 'Submitting...' : children),
|
|
2835
|
+
FieldWrapper: ({
|
|
2836
|
+
children
|
|
2837
|
+
}) => /*#__PURE__*/createElement(Fragment, null, children),
|
|
2838
|
+
FieldsWrapper: ({
|
|
2839
|
+
children
|
|
2840
|
+
}) => /*#__PURE__*/createElement(Fragment, null, children)
|
|
2792
2841
|
};
|
|
2793
2842
|
const htmlInputTypes = {
|
|
2794
2843
|
text: 'text',
|
|
@@ -2931,27 +2980,15 @@ function createDefaultFieldComponent(type) {
|
|
|
2931
2980
|
};
|
|
2932
2981
|
return FallbackComponent;
|
|
2933
2982
|
}
|
|
2934
|
-
function registerField(type, component, options = {}
|
|
2935
|
-
const {
|
|
2936
|
-
override = true
|
|
2937
|
-
} = config;
|
|
2938
|
-
const exists = fieldRegistry.has(type);
|
|
2939
|
-
if (override === 'only' && !exists) return;
|
|
2940
|
-
if (override === false && exists) return;
|
|
2983
|
+
function registerField(type, component, options = {}) {
|
|
2941
2984
|
fieldRegistry.set(type, {
|
|
2942
2985
|
component,
|
|
2943
2986
|
options
|
|
2944
2987
|
});
|
|
2945
2988
|
}
|
|
2946
|
-
function registerFields(fields
|
|
2947
|
-
const {
|
|
2948
|
-
override = true
|
|
2949
|
-
} = config;
|
|
2989
|
+
function registerFields(fields) {
|
|
2950
2990
|
Object.entries(fields).forEach(([type, definition]) => {
|
|
2951
2991
|
var _a;
|
|
2952
|
-
const exists = fieldRegistry.has(type);
|
|
2953
|
-
if (override === 'only' && !exists) return;
|
|
2954
|
-
if (override === false && exists) return;
|
|
2955
2992
|
if (typeof definition === 'function') {
|
|
2956
2993
|
fieldRegistry.set(type, {
|
|
2957
2994
|
component: definition,
|
|
@@ -2986,24 +3023,12 @@ function unregisterField(type) {
|
|
|
2986
3023
|
function getRegisteredFieldTypes() {
|
|
2987
3024
|
return Array.from(fieldRegistry.keys());
|
|
2988
3025
|
}
|
|
2989
|
-
function registerFormComponents(components
|
|
2990
|
-
const {
|
|
2991
|
-
override = true
|
|
2992
|
-
} = config;
|
|
3026
|
+
function registerFormComponents(components) {
|
|
2993
3027
|
Object.keys(components).forEach(key => {
|
|
2994
|
-
const exists = key in componentRegistry;
|
|
2995
|
-
if (override === 'only' && !exists) return;
|
|
2996
|
-
if (override === false && exists) return;
|
|
2997
3028
|
componentRegistry[key] = components[key];
|
|
2998
3029
|
});
|
|
2999
3030
|
}
|
|
3000
|
-
function registerFormComponent(name, component
|
|
3001
|
-
const {
|
|
3002
|
-
override = true
|
|
3003
|
-
} = config;
|
|
3004
|
-
const exists = name in componentRegistry;
|
|
3005
|
-
if (override === 'only' && !exists) return;
|
|
3006
|
-
if (override === false && exists) return;
|
|
3031
|
+
function registerFormComponent(name, component) {
|
|
3007
3032
|
componentRegistry[name] = component;
|
|
3008
3033
|
}
|
|
3009
3034
|
function getFormComponent(name) {
|
|
@@ -3144,7 +3169,7 @@ function useArrayField(field) {
|
|
|
3144
3169
|
const childField = field.fields.find(f_0 => f_0.name === fieldName);
|
|
3145
3170
|
if (!childField) {
|
|
3146
3171
|
console.warn(`Field "${fieldName}" not found in array field "${field.name}"`);
|
|
3147
|
-
return jsx(Fragment, {});
|
|
3172
|
+
return jsx(Fragment$1, {});
|
|
3148
3173
|
}
|
|
3149
3174
|
return jsx(FieldRenderer, {
|
|
3150
3175
|
field: childField,
|
|
@@ -3488,8 +3513,19 @@ function FormGeneratorImpl(props) {
|
|
|
3488
3513
|
showReset = false,
|
|
3489
3514
|
resetText = 'Reset',
|
|
3490
3515
|
children,
|
|
3491
|
-
ref
|
|
3516
|
+
ref,
|
|
3517
|
+
validateTypes
|
|
3492
3518
|
} = props;
|
|
3519
|
+
useMemo(() => {
|
|
3520
|
+
if (validateTypes) {
|
|
3521
|
+
const registeredTypes = getRegisteredFieldTypes();
|
|
3522
|
+
const options = typeof validateTypes === 'object' ? validateTypes : {
|
|
3523
|
+
throwOnError: false,
|
|
3524
|
+
warn: true
|
|
3525
|
+
};
|
|
3526
|
+
validateFieldTypes(fields, registeredTypes, options);
|
|
3527
|
+
}
|
|
3528
|
+
}, [fields, validateTypes]);
|
|
3493
3529
|
const userSchema = hasSchema(props) ? props.schema : undefined;
|
|
3494
3530
|
const onSubmit = props.onSubmit;
|
|
3495
3531
|
const formRef = useRef(null);
|
|
@@ -3541,6 +3577,8 @@ function FormGeneratorImpl(props) {
|
|
|
3541
3577
|
form: form
|
|
3542
3578
|
}), [form, handleSubmit, mergedDefaultValues]);
|
|
3543
3579
|
const SubmitButton = getFormComponent('SubmitButton');
|
|
3580
|
+
const FieldWrapper = getFormComponent('FieldWrapper');
|
|
3581
|
+
const FieldsWrapper = getFormComponent('FieldsWrapper');
|
|
3544
3582
|
const {
|
|
3545
3583
|
regularFields,
|
|
3546
3584
|
arrayFields
|
|
@@ -3563,8 +3601,13 @@ function FormGeneratorImpl(props) {
|
|
|
3563
3601
|
const entries = new Map();
|
|
3564
3602
|
regularFields.forEach((field_0, index) => {
|
|
3565
3603
|
if (!field_0.hidden) {
|
|
3566
|
-
const element = jsx(
|
|
3567
|
-
|
|
3604
|
+
const element = jsx(FieldWrapper, {
|
|
3605
|
+
name: field_0.name,
|
|
3606
|
+
type: field_0.type,
|
|
3607
|
+
className: field_0.className,
|
|
3608
|
+
children: jsx(FieldRenderer, {
|
|
3609
|
+
field: field_0
|
|
3610
|
+
})
|
|
3568
3611
|
}, field_0.name || `field-${index}`);
|
|
3569
3612
|
entries.set(field_0.name, {
|
|
3570
3613
|
field: field_0,
|
|
@@ -3574,7 +3617,7 @@ function FormGeneratorImpl(props) {
|
|
|
3574
3617
|
}
|
|
3575
3618
|
});
|
|
3576
3619
|
return entries;
|
|
3577
|
-
}, [regularFields]);
|
|
3620
|
+
}, [regularFields, FieldWrapper]);
|
|
3578
3621
|
const templateFields = useMemo(() => createTemplateFields(fieldEntries), [fieldEntries]);
|
|
3579
3622
|
const buttons = useMemo(() => {
|
|
3580
3623
|
const result = {
|
|
@@ -3594,10 +3637,10 @@ function FormGeneratorImpl(props) {
|
|
|
3594
3637
|
}
|
|
3595
3638
|
return result;
|
|
3596
3639
|
}, [SubmitButton, disabled, form.formState.isSubmitting, submitText, showReset, resetText, handleReset]);
|
|
3597
|
-
const renderField = useCallback((field_1,
|
|
3640
|
+
const renderField = useCallback((field_1, options_0) => {
|
|
3598
3641
|
return jsx(FieldRenderer, {
|
|
3599
3642
|
field: field_1,
|
|
3600
|
-
namePrefix:
|
|
3643
|
+
namePrefix: options_0 === null || options_0 === void 0 ? void 0 : options_0.namePrefix
|
|
3601
3644
|
});
|
|
3602
3645
|
}, []);
|
|
3603
3646
|
if (!children) {
|
|
@@ -3607,11 +3650,23 @@ function FormGeneratorImpl(props) {
|
|
|
3607
3650
|
ref: formRef,
|
|
3608
3651
|
onSubmit: handleSubmit,
|
|
3609
3652
|
className: className,
|
|
3610
|
-
children: [
|
|
3611
|
-
|
|
3612
|
-
|
|
3613
|
-
|
|
3614
|
-
|
|
3653
|
+
children: [jsxs(FieldsWrapper, {
|
|
3654
|
+
children: [regularFields.map((field_2, index_0) => jsx(FieldWrapper, {
|
|
3655
|
+
name: field_2.name,
|
|
3656
|
+
type: field_2.type,
|
|
3657
|
+
className: field_2.className,
|
|
3658
|
+
children: jsx(FieldRenderer, {
|
|
3659
|
+
field: field_2
|
|
3660
|
+
})
|
|
3661
|
+
}, field_2.name || `field-${index_0}`)), arrayFields.map(arrayField => jsx(FieldWrapper, {
|
|
3662
|
+
name: arrayField.name,
|
|
3663
|
+
type: "array",
|
|
3664
|
+
className: arrayField.className,
|
|
3665
|
+
children: jsx(ArrayFieldRenderer, {
|
|
3666
|
+
field: arrayField
|
|
3667
|
+
})
|
|
3668
|
+
}, arrayField.name))]
|
|
3669
|
+
}), jsx(SubmitButton, {
|
|
3615
3670
|
disabled: disabled || form.formState.isSubmitting,
|
|
3616
3671
|
isSubmitting: form.formState.isSubmitting,
|
|
3617
3672
|
children: submitText
|
|
@@ -3631,7 +3686,9 @@ function FormGeneratorImpl(props) {
|
|
|
3631
3686
|
isSubmitting: form.formState.isSubmitting,
|
|
3632
3687
|
isValid: form.formState.isValid,
|
|
3633
3688
|
isDirty: form.formState.isDirty,
|
|
3634
|
-
renderField
|
|
3689
|
+
renderField,
|
|
3690
|
+
FieldWrapper,
|
|
3691
|
+
FieldsWrapper
|
|
3635
3692
|
};
|
|
3636
3693
|
const renderFn = children;
|
|
3637
3694
|
return jsx(FormProvider, {
|
|
@@ -3648,5 +3705,5 @@ function FormGenerator(props) {
|
|
|
3648
3705
|
return FormGeneratorImpl(props);
|
|
3649
3706
|
}
|
|
3650
3707
|
|
|
3651
|
-
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 };
|
|
3708
|
+
export { ArrayFieldRenderer, Controller, FieldRenderer, FormGenerator, FormProvider, clearAllRegistries, clearFieldRegistry, clearFormComponentRegistry, createArrayField, createField, getFieldComponent, getFormComponent, getFormComponents, getRegisteredFieldTypes, hasFieldType, hasFormComponent, isArrayField, registerField, registerFields, registerFormComponent, registerFormComponents, resetFormComponentRegistry, strictFields, unregisterField, useArrayField, useFieldArray, useForm, useFormContext, useWatch, validateFieldType, validateFieldTypes };
|
|
3652
3709
|
//# sourceMappingURL=index.mjs.map
|