@xfc/vue3-form-render
Version:
Convert JSON to Vue Form
123 lines (114 loc) • 3.62 kB
TypeScript
import { ComponentOptionsMixin } from 'vue';
import { ComponentProvideOptions } from 'vue';
import { ComponentType } from '@xfc/vue3-json-render';
import { DefineComponent } from 'vue';
import { ExtractPropTypes } from 'vue';
import { Field } from '@xfc/vue3-json-render';
import { Hook } from '@xfc/vue3-json-render';
import { PropType } from 'vue';
import { PublicProps } from 'vue';
import { Recordable } from '@xfc/vue3-json-render';
import { Ref } from 'vue';
import { RendererElement } from 'vue';
import { RendererNode } from 'vue';
import { ShallowRef } from 'vue';
import { VNode } from 'vue';
import { WritableComputedRef } from 'vue';
export declare type BeRef<T = any> = T | Ref<T> | ShallowRef<T> | WritableComputedRef<T>;
export declare type FieldType = 'formItem' | 'container';
export declare interface FormField extends Field {
id: string;
type: FieldType;
icon?: string;
value?: any;
label: string;
hideLabel?: boolean;
readonly?: boolean;
required?: boolean;
hidden: boolean;
rules?: Recordable[];
children?: FormField[];
}
export declare interface FormRenderOptions {
globalHook?: Hook<FormField>;
renders?: Recordable<(field: FormField) => VNode | undefined>;
injects?: Recordable;
}
export declare function useFormRender(options?: BeRef<FormRenderOptions>): {
Render: DefineComponent<ExtractPropTypes< {
field: {
type: PropType<FormField>;
required: true;
};
modelValue: {
type: PropType<any>;
required: false;
};
readonly: {
type: PropType<boolean>;
required: false;
default: boolean;
};
}>, () => VNode<RendererNode, RendererElement, {
[key: string]: any;
}>, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {
'update:modelValue': (value: any) => true;
input: (value: any) => true;
}, string, PublicProps, Readonly<ExtractPropTypes< {
field: {
type: PropType<FormField>;
required: true;
};
modelValue: {
type: PropType<any>;
required: false;
};
readonly: {
type: PropType<boolean>;
required: false;
default: boolean;
};
}>> & Readonly<{
"onUpdate:modelValue"?: ((value: any) => any) | undefined;
onInput?: ((value: any) => any) | undefined;
}>, {
readonly: boolean;
}, {}, {}, {}, string, ComponentProvideOptions, true, {}, any>;
FormRender: DefineComponent<ExtractPropTypes< {
field: {
type: PropType<FormField>;
required: true;
};
formData: {
type: PropType<Recordable>;
required: true;
};
readonly: {
type: BooleanConstructor;
default: boolean;
};
}>, () => VNode<RendererNode, RendererElement, {
[key: string]: any;
}> | undefined, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<ExtractPropTypes< {
field: {
type: PropType<FormField>;
required: true;
};
formData: {
type: PropType<Recordable>;
required: true;
};
readonly: {
type: BooleanConstructor;
default: boolean;
};
}>> & Readonly<{}>, {
readonly: boolean;
}, {}, {}, {}, string, ComponentProvideOptions, true, {}, any>;
addComponent: (name: string, component: ComponentType, hook?: Hook<FormField> | undefined) => void;
removeComponent: (name: string) => void;
components: Recordable<ComponentType>;
hooks: Recordable<Hook<FormField>>;
};
export * from "@xfc/vue3-json-render";
export { }