@companix/formkit 0.0.1 → 0.0.3
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/Condition.d.ts +7 -0
- package/dist/Extra.d.ts +7 -0
- package/dist/Form.d.ts +7 -0
- package/dist/SchemeBuilder.d.ts +7 -0
- package/dist/context.d.ts +2 -0
- package/dist/core/builders/create-extra-form.d.ts +8 -0
- package/dist/core/builders/create-form.d.ts +27 -0
- package/dist/core/builders/create-layout.d.ts +5 -0
- package/dist/core/builders/syntax.d.ts +5 -0
- package/dist/core/extract.d.ts +13 -0
- package/dist/core/types.d.ts +42 -0
- package/dist/index.d.ts +6 -0
- package/dist/manager/create-value.d.ts +3 -0
- package/dist/manager/manager.d.ts +43 -0
- package/dist/manager/read-scheme.d.ts +5 -0
- package/dist/manager/subject.d.ts +10 -0
- package/dist/types.d.ts +12 -0
- package/dist/useForm.d.ts +61 -0
- package/dist/useValue.d.ts +1 -0
- package/dist/utils/get-error.d.ts +7 -0
- package/dist/utils/get-items-names.d.ts +2 -0
- package/dist/utils/typescript.d.ts +5 -0
- package/package.json +4 -3
package/dist/Extra.d.ts
ADDED
package/dist/Form.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { SchemeItems } from './core/types';
|
|
2
|
+
export interface SchemeBuilderProps {
|
|
3
|
+
scheme: SchemeItems.All[];
|
|
4
|
+
path: string[];
|
|
5
|
+
}
|
|
6
|
+
declare const SchemeBuilder: ({ scheme, path }: SchemeBuilderProps) => import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export { SchemeBuilder };
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { SchemeItems } from '../types';
|
|
2
|
+
type Registry = <N extends string>(name: N) => <T extends SchemeItems.All>(getItem: (name: N, remove: () => void) => T) => SchemeItems.Registry<N, T>;
|
|
3
|
+
export interface ExtraFormBuilder<N extends string, T extends SchemeItems.Registry<N, SchemeItems.All>[]> {
|
|
4
|
+
getItems: (registry: Registry) => T;
|
|
5
|
+
getController: (append: (name: N) => void, visable: N[]) => React.ReactNode;
|
|
6
|
+
}
|
|
7
|
+
export declare const createExtraForm: <N extends string, T extends SchemeItems.Registry<N>[]>({ getItems, getController }: ExtraFormBuilder<N, T>) => SchemeItems.Extra<N, T>;
|
|
8
|
+
export {};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { FieldError, SchemeItems } from '../types';
|
|
2
|
+
import { RefCallBack } from '../../types';
|
|
3
|
+
export interface FieldControl<V> {
|
|
4
|
+
value: V;
|
|
5
|
+
onChange: (value: V) => void;
|
|
6
|
+
onBlur: () => void;
|
|
7
|
+
ref: RefCallBack;
|
|
8
|
+
disabled?: boolean;
|
|
9
|
+
}
|
|
10
|
+
export interface FormControl<V> {
|
|
11
|
+
field: FieldControl<V>;
|
|
12
|
+
isDirty: boolean;
|
|
13
|
+
disabled?: boolean;
|
|
14
|
+
error: FieldError | null;
|
|
15
|
+
}
|
|
16
|
+
export interface Rules<V> {
|
|
17
|
+
$rules?: {
|
|
18
|
+
required?: boolean;
|
|
19
|
+
validate?: (value: V) => void;
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
export interface FormBuilder<P, V> {
|
|
23
|
+
defaultValue: V;
|
|
24
|
+
getRequireCheck: (params: P) => (value: V) => void;
|
|
25
|
+
getForm: (params: P) => (control: FormControl<V>) => React.ReactNode;
|
|
26
|
+
}
|
|
27
|
+
export declare const createForm: <V, P>(builder: FormBuilder<P, V>) => <N extends string>(name: N, params: P & Rules<V>) => SchemeItems.Form<N, V, P>;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { SchemeItems } from '../types';
|
|
2
|
+
export type LayoutBuilder = (props: {
|
|
3
|
+
children: React.ReactNode;
|
|
4
|
+
}) => React.ReactNode;
|
|
5
|
+
export declare const createLayout: <P = void>(getLayout: (params: P) => LayoutBuilder) => (params: P) => <T extends SchemeItems.All[]>(...childs: T) => SchemeItems.Layout<T>;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { SchemeItems } from '../types';
|
|
2
|
+
export declare const Context: <N extends string>(context: N) => <T extends SchemeItems.All[]>(...childs: T) => SchemeItems.Context<N, T>;
|
|
3
|
+
export declare const Condition: (depended: string, props: {
|
|
4
|
+
canActivate: (value: any) => boolean;
|
|
5
|
+
}) => <T extends SchemeItems.All[]>(...childs: T) => SchemeItems.Condition<T>;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { SchemeItems } from './types';
|
|
2
|
+
import { Compute, UnionToIntersection } from '../utils/typescript';
|
|
3
|
+
type ExtractValue<T> = T extends SchemeItems.Form<infer N, infer V> ? {
|
|
4
|
+
[K in N]: V;
|
|
5
|
+
} : T extends SchemeItems.Layout<infer C> ? ExtractValue<C[number]> : T extends SchemeItems.Context<infer N, infer C> ? {
|
|
6
|
+
[K in N]: Compute<UnionToIntersection<ExtractValue<C[number]>>>;
|
|
7
|
+
} : T extends SchemeItems.Condition<infer C> ? Partial<ExtractValue<C[number]>> : T extends SchemeItems.Extra<string, infer C> ? Partial<ExtractValue<ReturnType<C[number]['getForm']>>> : never;
|
|
8
|
+
type ExtractValues<T> = Compute<UnionToIntersection<ExtractValue<T>>>;
|
|
9
|
+
type ExtractFlatValue<T, A extends string | null> = T extends SchemeItems.Form<infer N, infer V> ? {
|
|
10
|
+
[K in A extends null ? N : `${A}.${N}`]: V;
|
|
11
|
+
} : T extends SchemeItems.Layout<infer C> ? ExtractFlatValue<C[number], A> : T extends SchemeItems.Context<infer N, infer C> ? ExtractFlatValue<C[number], A extends null ? N : `${A}.${N}`> : T extends SchemeItems.Condition<infer C> ? Partial<ExtractFlatValue<C[number], A>> : T extends SchemeItems.Extra<string, infer C> ? Partial<ExtractValue<ReturnType<C[number]['getForm']>>> : never;
|
|
12
|
+
type ExtractFlatValues<T> = Compute<UnionToIntersection<ExtractFlatValue<T, null>>>;
|
|
13
|
+
export type { ExtractValues, ExtractFlatValues };
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { LayoutBuilder } from './builders/create-layout';
|
|
2
|
+
import { FormBuilder } from './builders/create-form';
|
|
3
|
+
export interface FieldError {
|
|
4
|
+
error: boolean;
|
|
5
|
+
messages?: string[];
|
|
6
|
+
}
|
|
7
|
+
export declare namespace SchemeItems {
|
|
8
|
+
type All = Form | Layout | Context | Condition | Extra;
|
|
9
|
+
interface Form<N extends string = string, V extends any = any, P extends any = any> {
|
|
10
|
+
type: 'form';
|
|
11
|
+
name: N;
|
|
12
|
+
defaultValue: V;
|
|
13
|
+
validate: (value: V) => FieldError | void;
|
|
14
|
+
Form: ReturnType<FormBuilder<P, V>['getForm']>;
|
|
15
|
+
}
|
|
16
|
+
interface Layout<T extends All[] = All[]> {
|
|
17
|
+
type: 'layout';
|
|
18
|
+
Layout: LayoutBuilder;
|
|
19
|
+
childs: T;
|
|
20
|
+
}
|
|
21
|
+
interface Context<N extends string = string, T extends All[] = All[]> {
|
|
22
|
+
type: 'context';
|
|
23
|
+
context: N;
|
|
24
|
+
childs: T;
|
|
25
|
+
}
|
|
26
|
+
interface Extra<N extends string = string, T extends Registry<N>[] = Registry<N>[]> {
|
|
27
|
+
type: 'extra';
|
|
28
|
+
items: T;
|
|
29
|
+
getController: (append: (name: N) => void, visable: N[]) => React.ReactNode;
|
|
30
|
+
}
|
|
31
|
+
interface Registry<N extends string = string, T extends All = All> {
|
|
32
|
+
type: 'registry';
|
|
33
|
+
name: N;
|
|
34
|
+
getForm: <Q extends N>(name: Q, remove: () => void) => T;
|
|
35
|
+
}
|
|
36
|
+
interface Condition<T extends All[] = All[]> {
|
|
37
|
+
type: 'condition';
|
|
38
|
+
depended: string;
|
|
39
|
+
canActivate: (value: any) => boolean;
|
|
40
|
+
childs: T;
|
|
41
|
+
}
|
|
42
|
+
}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { useForm } from './useForm';
|
|
2
|
+
export { createForm } from './core/builders/create-form';
|
|
3
|
+
export { createLayout } from './core/builders/create-layout';
|
|
4
|
+
export { createExtraForm } from './core/builders/create-extra-form';
|
|
5
|
+
export { Condition, Context } from './core/builders/syntax';
|
|
6
|
+
export type { FieldError } from './core/types';
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { DeepPartial, FieldValues } from '../types';
|
|
2
|
+
import { FieldError, SchemeItems } from '../core/types';
|
|
3
|
+
import { MainOptions, SetError } from '../useForm';
|
|
4
|
+
interface FormItem {
|
|
5
|
+
isDirty: boolean;
|
|
6
|
+
error: FieldError | null;
|
|
7
|
+
initValue: any;
|
|
8
|
+
defaultValue: any;
|
|
9
|
+
value: any;
|
|
10
|
+
rerender: () => void;
|
|
11
|
+
focus?: () => void;
|
|
12
|
+
validate: (value: any) => FieldError | void;
|
|
13
|
+
subscribers: {
|
|
14
|
+
callback: () => void;
|
|
15
|
+
}[];
|
|
16
|
+
}
|
|
17
|
+
export interface Forms {
|
|
18
|
+
[name: string]: FormItem;
|
|
19
|
+
}
|
|
20
|
+
export interface FormManager<FlattenValues, ClonedValues> {
|
|
21
|
+
disabled?: boolean;
|
|
22
|
+
activate: () => void;
|
|
23
|
+
disactivate: () => void;
|
|
24
|
+
handleSubmit: () => Promise<void>;
|
|
25
|
+
registry: (name: string, callback: () => void) => {
|
|
26
|
+
unregistry: () => void;
|
|
27
|
+
};
|
|
28
|
+
subscribeToForm: (name: string, callback: () => void) => {
|
|
29
|
+
unsubscribe: () => void;
|
|
30
|
+
};
|
|
31
|
+
registryExtraForm: (names: string[], callback: () => void) => {
|
|
32
|
+
unregistry: () => void;
|
|
33
|
+
};
|
|
34
|
+
getForm: (name: string) => FormItem;
|
|
35
|
+
onChange: (name: string, value: any) => void;
|
|
36
|
+
setFocus: (name: keyof FlattenValues) => void;
|
|
37
|
+
setValue: <K extends keyof FlattenValues>(name: K, value: FlattenValues[K]) => void;
|
|
38
|
+
setError: SetError<FlattenValues>;
|
|
39
|
+
reset: (v: DeepPartial<ClonedValues>) => void;
|
|
40
|
+
getValues: () => DeepPartial<ClonedValues>;
|
|
41
|
+
}
|
|
42
|
+
export declare const createFormManager: <Values extends FieldValues, Flatten, Cloned>(scheme: SchemeItems.All[], opts: MainOptions<Values, Flatten, Cloned>) => FormManager<Flatten, Cloned>;
|
|
43
|
+
export {};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { FieldValues } from '../types';
|
|
2
|
+
import { SchemeItems } from '../core/types';
|
|
3
|
+
type cb = (item: SchemeItems.Form, name: string, value?: any) => void;
|
|
4
|
+
declare const readScheme: (scheme: SchemeItems.All[], path: string[], values: FieldValues, callback: cb) => void;
|
|
5
|
+
export { readScheme };
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export type RefCallBack = (instance: any) => void;
|
|
2
|
+
export type FieldValues = Record<string, any>;
|
|
3
|
+
export type ExtractObjects<T> = T extends infer U ? (U extends object ? U : never) : never;
|
|
4
|
+
declare const $NestedValue: unique symbol;
|
|
5
|
+
export type BrowserNativeObject = Date | FileList | File;
|
|
6
|
+
export type NestedValue<TValue extends object = object> = {
|
|
7
|
+
[$NestedValue]: never;
|
|
8
|
+
} & TValue;
|
|
9
|
+
export type DeepPartial<T> = T extends BrowserNativeObject | NestedValue ? T : {
|
|
10
|
+
[K in keyof T]?: ExtractObjects<T[K]> extends never ? T[K] : DeepPartial<T[K]>;
|
|
11
|
+
};
|
|
12
|
+
export {};
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { ExtractValues, ExtractFlatValues } from './core/extract';
|
|
2
|
+
import { SchemeItems } from './core/types';
|
|
3
|
+
import { DeepPartial, FieldValues } from './types';
|
|
4
|
+
export type Copy<T> = {
|
|
5
|
+
[K in keyof T]: T[K];
|
|
6
|
+
};
|
|
7
|
+
export type ChangeEvent<T> = Required<{
|
|
8
|
+
[K in keyof T]: {
|
|
9
|
+
name: K;
|
|
10
|
+
value: T[K];
|
|
11
|
+
};
|
|
12
|
+
}[keyof T]>;
|
|
13
|
+
export type DirtyEvent<T> = Required<{
|
|
14
|
+
[K in keyof T]: {
|
|
15
|
+
name: K;
|
|
16
|
+
isDirty: boolean;
|
|
17
|
+
};
|
|
18
|
+
}[keyof T]>;
|
|
19
|
+
export type SetError<V> = (name: keyof V, error: {
|
|
20
|
+
message: string;
|
|
21
|
+
}) => void;
|
|
22
|
+
export interface MainOptions<Values extends FieldValues, FlattenValues, ClonedValues> {
|
|
23
|
+
disabled?: boolean;
|
|
24
|
+
defaultValues?: DeepPartial<ClonedValues>;
|
|
25
|
+
onEqual?: () => void;
|
|
26
|
+
onDirty?: (event: DirtyEvent<FlattenValues>) => void;
|
|
27
|
+
onChangeEvent?: (event: ChangeEvent<FlattenValues>) => void;
|
|
28
|
+
onFormDirty?: (isDirty: boolean) => void;
|
|
29
|
+
onSubmit: (values: Values, { setError }: {
|
|
30
|
+
setError: SetError<FlattenValues>;
|
|
31
|
+
}) => Promise<void>;
|
|
32
|
+
}
|
|
33
|
+
declare const useDynamicForm: (scheme: SchemeItems.All[], opts: MainOptions<FieldValues, FieldValues, FieldValues>) => {
|
|
34
|
+
useValue: <K extends string>(name: K) => any;
|
|
35
|
+
reset: (values: {
|
|
36
|
+
[x: string]: any;
|
|
37
|
+
}) => void;
|
|
38
|
+
setFocus: (name: string) => void;
|
|
39
|
+
setError: (name: string, error: {
|
|
40
|
+
message: string;
|
|
41
|
+
}) => void;
|
|
42
|
+
setValue: <K extends string>(name: K, value: any) => void;
|
|
43
|
+
getValues: () => {
|
|
44
|
+
[x: string]: any;
|
|
45
|
+
};
|
|
46
|
+
handleSubmit: () => Promise<void>;
|
|
47
|
+
Form: import("react/jsx-runtime").JSX.Element;
|
|
48
|
+
};
|
|
49
|
+
declare const useForm: <Items extends SchemeItems.All[], Values extends ExtractValues<Items[number]>, FlattenValues extends ExtractFlatValues<Items[number]>, Cloned extends Copy<Values>>(scheme: Items, opts: MainOptions<Values, FlattenValues, Cloned>) => {
|
|
50
|
+
useValue: <K extends keyof FlattenValues>(name: K) => FlattenValues[K];
|
|
51
|
+
reset: (values: DeepPartial<Cloned>) => void;
|
|
52
|
+
setFocus: (name: keyof FlattenValues) => void;
|
|
53
|
+
setError: (name: keyof FlattenValues, error: {
|
|
54
|
+
message: string;
|
|
55
|
+
}) => void;
|
|
56
|
+
setValue: <K extends keyof FlattenValues>(name: K, value: FlattenValues[K]) => void;
|
|
57
|
+
getValues: () => DeepPartial<Cloned>;
|
|
58
|
+
handleSubmit: () => Promise<void>;
|
|
59
|
+
Form: import("react/jsx-runtime").JSX.Element;
|
|
60
|
+
};
|
|
61
|
+
export { useForm, useDynamicForm };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const useValue: (name: string) => any;
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@companix/formkit",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.03",
|
|
4
4
|
"module": "./dist/bundle.es.js",
|
|
5
|
-
"types": "./
|
|
5
|
+
"types": "./dist/index.d.ts",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"author": "Pavel Victorov",
|
|
8
8
|
"files": [
|
|
@@ -39,6 +39,7 @@
|
|
|
39
39
|
"sass": "^1.96.0",
|
|
40
40
|
"sass-embedded": "^1.96.0",
|
|
41
41
|
"vite": "^7.0.0",
|
|
42
|
-
"vite-plugin-checker": "^0.9.3"
|
|
42
|
+
"vite-plugin-checker": "^0.9.3",
|
|
43
|
+
"vite-plugin-dts": "^4.5.4"
|
|
43
44
|
}
|
|
44
45
|
}
|