react-native-mantine 0.7.0 → 0.8.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.
- package/README.md +37 -5
- package/lib/commonjs/components/Group/index.js.map +1 -1
- package/lib/commonjs/components/Radio/index.js +62 -6
- package/lib/commonjs/components/Radio/index.js.map +1 -1
- package/lib/commonjs/hooks/index.js +28 -0
- package/lib/commonjs/hooks/index.js.map +1 -0
- package/lib/commonjs/hooks/use-form/index.js +40 -0
- package/lib/commonjs/hooks/use-form/index.js.map +1 -0
- package/lib/commonjs/hooks/use-form/types.js +2 -0
- package/lib/commonjs/hooks/use-form/types.js.map +1 -0
- package/lib/commonjs/hooks/use-form/useForm.js +418 -0
- package/lib/commonjs/hooks/use-form/useForm.js.map +1 -0
- package/lib/commonjs/hooks/use-form/validators.js +135 -0
- package/lib/commonjs/hooks/use-form/validators.js.map +1 -0
- package/lib/commonjs/index.js +11 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/module/components/Group/index.js.map +1 -1
- package/lib/module/components/Radio/index.js +64 -8
- package/lib/module/components/Radio/index.js.map +1 -1
- package/lib/module/hooks/index.js +5 -0
- package/lib/module/hooks/index.js.map +1 -0
- package/lib/module/hooks/use-form/index.js +6 -0
- package/lib/module/hooks/use-form/index.js.map +1 -0
- package/lib/module/hooks/use-form/types.js +2 -0
- package/lib/module/hooks/use-form/types.js.map +1 -0
- package/lib/module/hooks/use-form/useForm.js +414 -0
- package/lib/module/hooks/use-form/useForm.js.map +1 -0
- package/lib/module/hooks/use-form/validators.js +122 -0
- package/lib/module/hooks/use-form/validators.js.map +1 -0
- package/lib/module/index.js +1 -0
- package/lib/module/index.js.map +1 -1
- package/lib/typescript/commonjs/src/components/Group/index.d.ts +1 -0
- package/lib/typescript/commonjs/src/components/Group/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/components/Radio/index.d.ts +22 -1
- package/lib/typescript/commonjs/src/components/Radio/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/hooks/index.d.ts +3 -0
- package/lib/typescript/commonjs/src/hooks/index.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/hooks/use-form/index.d.ts +4 -0
- package/lib/typescript/commonjs/src/hooks/use-form/index.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/hooks/use-form/types.d.ts +119 -0
- package/lib/typescript/commonjs/src/hooks/use-form/types.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/hooks/use-form/useForm.d.ts +30 -0
- package/lib/typescript/commonjs/src/hooks/use-form/useForm.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/hooks/use-form/validators.d.ts +41 -0
- package/lib/typescript/commonjs/src/hooks/use-form/validators.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/index.d.ts +1 -0
- package/lib/typescript/commonjs/src/index.d.ts.map +1 -1
- package/lib/typescript/module/src/components/Group/index.d.ts +1 -0
- package/lib/typescript/module/src/components/Group/index.d.ts.map +1 -1
- package/lib/typescript/module/src/components/Radio/index.d.ts +22 -1
- package/lib/typescript/module/src/components/Radio/index.d.ts.map +1 -1
- package/lib/typescript/module/src/hooks/index.d.ts +3 -0
- package/lib/typescript/module/src/hooks/index.d.ts.map +1 -0
- package/lib/typescript/module/src/hooks/use-form/index.d.ts +4 -0
- package/lib/typescript/module/src/hooks/use-form/index.d.ts.map +1 -0
- package/lib/typescript/module/src/hooks/use-form/types.d.ts +119 -0
- package/lib/typescript/module/src/hooks/use-form/types.d.ts.map +1 -0
- package/lib/typescript/module/src/hooks/use-form/useForm.d.ts +30 -0
- package/lib/typescript/module/src/hooks/use-form/useForm.d.ts.map +1 -0
- package/lib/typescript/module/src/hooks/use-form/validators.d.ts +41 -0
- package/lib/typescript/module/src/hooks/use-form/validators.d.ts.map +1 -0
- package/lib/typescript/module/src/index.d.ts +1 -0
- package/lib/typescript/module/src/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/components/Group/index.tsx +1 -0
- package/src/components/Radio/index.tsx +99 -8
- package/src/hooks/index.ts +2 -0
- package/src/hooks/use-form/index.ts +3 -0
- package/src/hooks/use-form/types.ts +169 -0
- package/src/hooks/use-form/useForm.ts +436 -0
- package/src/hooks/use-form/validators.ts +143 -0
- package/src/index.tsx +1 -0
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Built-in validators
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Validates that a value is not empty
|
|
9
|
+
*/
|
|
10
|
+
export const isNotEmpty = (message = 'This field is required') => {
|
|
11
|
+
return value => {
|
|
12
|
+
if (value === null || value === undefined || value === '') {
|
|
13
|
+
return message;
|
|
14
|
+
}
|
|
15
|
+
if (Array.isArray(value) && value.length === 0) {
|
|
16
|
+
return message;
|
|
17
|
+
}
|
|
18
|
+
if (typeof value === 'string' && value.trim().length === 0) {
|
|
19
|
+
return message;
|
|
20
|
+
}
|
|
21
|
+
return null;
|
|
22
|
+
};
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Validates minimum length
|
|
27
|
+
*/
|
|
28
|
+
export const minLength = (min, message) => {
|
|
29
|
+
return value => {
|
|
30
|
+
if (!value) return null;
|
|
31
|
+
if (value.length < min) {
|
|
32
|
+
return message || `Must be at least ${min} characters`;
|
|
33
|
+
}
|
|
34
|
+
return null;
|
|
35
|
+
};
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Validates maximum length
|
|
40
|
+
*/
|
|
41
|
+
export const maxLength = (max, message) => {
|
|
42
|
+
return value => {
|
|
43
|
+
if (!value) return null;
|
|
44
|
+
if (value.length > max) {
|
|
45
|
+
return message || `Must be at most ${max} characters`;
|
|
46
|
+
}
|
|
47
|
+
return null;
|
|
48
|
+
};
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Validates that value matches a pattern
|
|
53
|
+
*/
|
|
54
|
+
export const matches = (pattern, message = 'Invalid format') => {
|
|
55
|
+
return value => {
|
|
56
|
+
if (!value) return null;
|
|
57
|
+
if (!pattern.test(value)) {
|
|
58
|
+
return message;
|
|
59
|
+
}
|
|
60
|
+
return null;
|
|
61
|
+
};
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Validates email format
|
|
66
|
+
*/
|
|
67
|
+
export const isEmail = (message = 'Invalid email') => {
|
|
68
|
+
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
|
69
|
+
return matches(emailRegex, message);
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Validates minimum value
|
|
74
|
+
*/
|
|
75
|
+
export const min = (minValue, message) => {
|
|
76
|
+
return value => {
|
|
77
|
+
if (value === null || value === undefined) return null;
|
|
78
|
+
if (value < minValue) {
|
|
79
|
+
return message || `Must be at least ${minValue}`;
|
|
80
|
+
}
|
|
81
|
+
return null;
|
|
82
|
+
};
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Validates maximum value
|
|
87
|
+
*/
|
|
88
|
+
export const max = (maxValue, message) => {
|
|
89
|
+
return value => {
|
|
90
|
+
if (value === null || value === undefined) return null;
|
|
91
|
+
if (value > maxValue) {
|
|
92
|
+
return message || `Must be at most ${maxValue}`;
|
|
93
|
+
}
|
|
94
|
+
return null;
|
|
95
|
+
};
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Validates that value is in a range
|
|
100
|
+
*/
|
|
101
|
+
export const inRange = (minValue, maxValue, message) => {
|
|
102
|
+
return value => {
|
|
103
|
+
if (value === null || value === undefined) return null;
|
|
104
|
+
if (value < minValue || value > maxValue) {
|
|
105
|
+
return message || `Must be between ${minValue} and ${maxValue}`;
|
|
106
|
+
}
|
|
107
|
+
return null;
|
|
108
|
+
};
|
|
109
|
+
};
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Validates that value is in a list
|
|
113
|
+
*/
|
|
114
|
+
export const isInArray = (array, message = 'Invalid value') => {
|
|
115
|
+
return value => {
|
|
116
|
+
if (!array.includes(value)) {
|
|
117
|
+
return message;
|
|
118
|
+
}
|
|
119
|
+
return null;
|
|
120
|
+
};
|
|
121
|
+
};
|
|
122
|
+
//# sourceMappingURL=validators.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["isNotEmpty","message","value","undefined","Array","isArray","length","trim","minLength","min","maxLength","max","matches","pattern","test","isEmail","emailRegex","minValue","maxValue","inRange","isInArray","array","includes"],"sourceRoot":"../../../../src","sources":["hooks/use-form/validators.ts"],"mappings":"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","ignoreList":[]}
|
package/lib/module/index.js
CHANGED
package/lib/module/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AAAA,cAAc,kBAAS;AACvB,cAAc,uBAAc","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AAAA,cAAc,kBAAS;AACvB,cAAc,uBAAc;AAC5B,cAAc,kBAAS","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/components/Group/index.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/components/Group/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,eAAO,MAAM,KAAK,GAAI,0FAUnB,SAAS,GAAG;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,GAAG,UAAU,GAAG,SAAS,CAAC;IAC5D,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,KAAG,KAAK,CAAC,YA4CT,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
+
import { View } from 'react-native';
|
|
2
3
|
import type { DefaultProps, MantineColor, MantineSize } from '../../theme/types';
|
|
3
4
|
export interface RadioProps extends DefaultProps {
|
|
4
5
|
/** Radio label */
|
|
@@ -20,5 +21,25 @@ export interface RadioProps extends DefaultProps {
|
|
|
20
21
|
/** Wrapper style */
|
|
21
22
|
wrapperStyle?: any;
|
|
22
23
|
}
|
|
23
|
-
export
|
|
24
|
+
export interface RadioGroupProps {
|
|
25
|
+
/** Current selected value */
|
|
26
|
+
value?: string;
|
|
27
|
+
/** Called when value changes */
|
|
28
|
+
onChange?: (value: string) => void;
|
|
29
|
+
/** Radio group children */
|
|
30
|
+
children: React.ReactNode;
|
|
31
|
+
/** Radio group name for accessibility */
|
|
32
|
+
name?: string;
|
|
33
|
+
/** Radio size for all children */
|
|
34
|
+
size?: MantineSize;
|
|
35
|
+
/** Radio color for all children */
|
|
36
|
+
color?: MantineColor;
|
|
37
|
+
/** Wrapper style */
|
|
38
|
+
style?: any;
|
|
39
|
+
/** Spacing between radio buttons */
|
|
40
|
+
spacing?: number;
|
|
41
|
+
}
|
|
42
|
+
export declare const Radio: React.ForwardRefExoticComponent<RadioProps & React.RefAttributes<any>> & {
|
|
43
|
+
Group: React.ForwardRefExoticComponent<RadioGroupProps & React.RefAttributes<View>>;
|
|
44
|
+
};
|
|
24
45
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/components/Radio/index.tsx"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/components/Radio/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmE,MAAM,OAAO,CAAC;AACxF,OAAO,EAAuB,IAAI,EAAE,MAAM,cAAc,CAAC;AAGzD,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAKjF,MAAM,WAAW,UAAW,SAAQ,YAAY;IAC9C,kBAAkB;IAClB,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAExB,iBAAiB;IACjB,IAAI,CAAC,EAAE,WAAW,CAAC;IAEnB,6BAA6B;IAC7B,KAAK,CAAC,EAAE,YAAY,CAAC;IAErB,kBAAkB;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,oBAAoB;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB,sCAAsC;IACtC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAEnC,qBAAqB;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,wBAAwB;IACxB,KAAK,CAAC,EAAE,GAAG,CAAC;IAEZ,oBAAoB;IACpB,YAAY,CAAC,EAAE,GAAG,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,6BAA6B;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,gCAAgC;IAChC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAEnC,2BAA2B;IAC3B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAE1B,yCAAyC;IACzC,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,kCAAkC;IAClC,IAAI,CAAC,EAAE,WAAW,CAAC;IAEnB,mCAAmC;IACnC,KAAK,CAAC,EAAE,YAAY,CAAC;IAErB,oBAAoB;IACpB,KAAK,CAAC,EAAE,GAAG,CAAC;IAEZ,oCAAoC;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAmMD,eAAO,MAAM,KAAK;;CAEhB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/hooks/use-form/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,cAAc,SAAS,CAAC;AACxB,cAAc,cAAc,CAAC"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Form field validation function
|
|
3
|
+
*/
|
|
4
|
+
export type FormValidator<T> = (value: T) => string | null;
|
|
5
|
+
/**
|
|
6
|
+
* Form validation rules
|
|
7
|
+
*/
|
|
8
|
+
export type FormValidationRules<Values> = {
|
|
9
|
+
[K in keyof Values]?: FormValidator<Values[K]> | FormValidator<Values[K]>[];
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* Form errors
|
|
13
|
+
*/
|
|
14
|
+
export type FormErrors<Values = Record<string, any>> = Partial<Record<keyof Values, string>>;
|
|
15
|
+
/**
|
|
16
|
+
* Form touched state
|
|
17
|
+
*/
|
|
18
|
+
export type FormTouched<Values = Record<string, any>> = Partial<Record<keyof Values, boolean>>;
|
|
19
|
+
/**
|
|
20
|
+
* Form dirty state
|
|
21
|
+
*/
|
|
22
|
+
export type FormDirty<Values = Record<string, any>> = Partial<Record<keyof Values, boolean>>;
|
|
23
|
+
/**
|
|
24
|
+
* Form field status
|
|
25
|
+
*/
|
|
26
|
+
export interface FormFieldStatus {
|
|
27
|
+
hasError: boolean;
|
|
28
|
+
isTouched: boolean;
|
|
29
|
+
isDirty: boolean;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Props to be spread on input components
|
|
33
|
+
*/
|
|
34
|
+
export interface FormInputProps<T = any> {
|
|
35
|
+
value: T;
|
|
36
|
+
onChange?: (value: T) => void;
|
|
37
|
+
onChangeText?: (text: string) => void;
|
|
38
|
+
error?: string;
|
|
39
|
+
onBlur?: () => void;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Form submit handler
|
|
43
|
+
*/
|
|
44
|
+
export type FormSubmitHandler<Values> = (values: Values, event?: any) => void | Promise<void>;
|
|
45
|
+
/**
|
|
46
|
+
* useForm hook input parameters
|
|
47
|
+
*/
|
|
48
|
+
export interface UseFormInput<Values = Record<string, any>> {
|
|
49
|
+
/** Initial form values */
|
|
50
|
+
initialValues?: Values;
|
|
51
|
+
/** Initial form errors */
|
|
52
|
+
initialErrors?: FormErrors<Values>;
|
|
53
|
+
/** Initial touched state */
|
|
54
|
+
initialTouched?: FormTouched<Values>;
|
|
55
|
+
/** Initial dirty state */
|
|
56
|
+
initialDirty?: FormDirty<Values>;
|
|
57
|
+
/** Form validation rules */
|
|
58
|
+
validate?: FormValidationRules<Values>;
|
|
59
|
+
/** Clear input error on change */
|
|
60
|
+
clearInputErrorOnChange?: boolean;
|
|
61
|
+
/** Validate input on change */
|
|
62
|
+
validateInputOnChange?: boolean;
|
|
63
|
+
/** Validate input on blur */
|
|
64
|
+
validateInputOnBlur?: boolean;
|
|
65
|
+
/** Transform values before submit */
|
|
66
|
+
transformValues?: (values: Values) => any;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* useForm hook return type
|
|
70
|
+
*/
|
|
71
|
+
export interface UseFormReturnType<Values = Record<string, any>> {
|
|
72
|
+
/** Current form values */
|
|
73
|
+
values: Values;
|
|
74
|
+
/** Current form errors */
|
|
75
|
+
errors: FormErrors<Values>;
|
|
76
|
+
/** Current touched state */
|
|
77
|
+
touched: FormTouched<Values>;
|
|
78
|
+
/** Current dirty state */
|
|
79
|
+
dirty: FormDirty<Values>;
|
|
80
|
+
/** Set a single field value */
|
|
81
|
+
setFieldValue: <K extends keyof Values>(field: K, value: Values[K]) => void;
|
|
82
|
+
/** Set multiple values */
|
|
83
|
+
setValues: (values: Partial<Values>) => void;
|
|
84
|
+
/** Set a single field error */
|
|
85
|
+
setFieldError: <K extends keyof Values>(field: K, error: string | null) => void;
|
|
86
|
+
/** Set multiple errors */
|
|
87
|
+
setErrors: (errors: FormErrors<Values>) => void;
|
|
88
|
+
/** Clear a specific field error */
|
|
89
|
+
clearFieldError: <K extends keyof Values>(field: K) => void;
|
|
90
|
+
/** Clear all errors */
|
|
91
|
+
clearErrors: () => void;
|
|
92
|
+
/** Reset form to initial values */
|
|
93
|
+
reset: () => void;
|
|
94
|
+
/** Validate a specific field */
|
|
95
|
+
validateField: <K extends keyof Values>(field: K) => boolean;
|
|
96
|
+
/** Validate entire form */
|
|
97
|
+
validate: () => boolean;
|
|
98
|
+
/** Check if form is valid */
|
|
99
|
+
isValid: () => boolean;
|
|
100
|
+
/** Check if form is dirty */
|
|
101
|
+
isDirty: () => boolean;
|
|
102
|
+
/** Get field status */
|
|
103
|
+
getFieldStatus: <K extends keyof Values>(field: K) => FormFieldStatus;
|
|
104
|
+
/** Get props to spread on input component */
|
|
105
|
+
getInputProps: <K extends keyof Values>(field: K, options?: {
|
|
106
|
+
type?: 'input' | 'checkbox' | 'radio' | 'select';
|
|
107
|
+
withError?: boolean;
|
|
108
|
+
withFocus?: boolean;
|
|
109
|
+
}) => FormInputProps<Values[K]>;
|
|
110
|
+
/** Handle form submit */
|
|
111
|
+
onSubmit: (handleSubmit: FormSubmitHandler<Values>) => (event?: any) => void | Promise<void>;
|
|
112
|
+
/** Reset touched state */
|
|
113
|
+
resetTouched: () => void;
|
|
114
|
+
/** Reset dirty state */
|
|
115
|
+
resetDirty: () => void;
|
|
116
|
+
/** Mark field as touched */
|
|
117
|
+
setFieldTouched: <K extends keyof Values>(field: K, touched?: boolean) => void;
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../../src/hooks/use-form/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { UseFormInput, UseFormReturnType } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* Form state management hook for React Native
|
|
4
|
+
*
|
|
5
|
+
* @example
|
|
6
|
+
* ```tsx
|
|
7
|
+
* const form = useForm({
|
|
8
|
+
* initialValues: {
|
|
9
|
+
* email: '',
|
|
10
|
+
* password: '',
|
|
11
|
+
* },
|
|
12
|
+
* validate: {
|
|
13
|
+
* email: isEmail('Invalid email'),
|
|
14
|
+
* password: minLength(6, 'Password must be at least 6 characters'),
|
|
15
|
+
* },
|
|
16
|
+
* });
|
|
17
|
+
*
|
|
18
|
+
* return (
|
|
19
|
+
* <View>
|
|
20
|
+
* <TextInput {...form.getInputProps('email')} />
|
|
21
|
+
* <TextInput {...form.getInputProps('password')} />
|
|
22
|
+
* <Button onPress={form.onSubmit((values) => console.log(values))}>
|
|
23
|
+
* Submit
|
|
24
|
+
* </Button>
|
|
25
|
+
* </View>
|
|
26
|
+
* );
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
export declare function useForm<Values extends Record<string, any> = Record<string, any>>({ initialValues, initialErrors, initialTouched, initialDirty, validate: validationRules, clearInputErrorOnChange, validateInputOnChange, validateInputOnBlur, transformValues, }?: UseFormInput<Values>): UseFormReturnType<Values>;
|
|
30
|
+
//# sourceMappingURL=useForm.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useForm.d.ts","sourceRoot":"","sources":["../../../../../../src/hooks/use-form/useForm.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAQV,YAAY,EACZ,iBAAiB,EAClB,MAAM,SAAS,CAAC;AA4DjB;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,OAAO,CAAC,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,EAChF,aAA4B,EAC5B,aAAkB,EAClB,cAAmB,EACnB,YAAiB,EACjB,QAAQ,EAAE,eAAe,EACzB,uBAA8B,EAC9B,qBAA6B,EAC7B,mBAA2B,EAC3B,eAA4C,GAC7C,GAAE,YAAY,CAAC,MAAM,CAAM,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAuUvD"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { FormValidator } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* Built-in validators
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Validates that a value is not empty
|
|
7
|
+
*/
|
|
8
|
+
export declare const isNotEmpty: (message?: string) => FormValidator<any>;
|
|
9
|
+
/**
|
|
10
|
+
* Validates minimum length
|
|
11
|
+
*/
|
|
12
|
+
export declare const minLength: (min: number, message?: string) => FormValidator<string>;
|
|
13
|
+
/**
|
|
14
|
+
* Validates maximum length
|
|
15
|
+
*/
|
|
16
|
+
export declare const maxLength: (max: number, message?: string) => FormValidator<string>;
|
|
17
|
+
/**
|
|
18
|
+
* Validates that value matches a pattern
|
|
19
|
+
*/
|
|
20
|
+
export declare const matches: (pattern: RegExp, message?: string) => FormValidator<string>;
|
|
21
|
+
/**
|
|
22
|
+
* Validates email format
|
|
23
|
+
*/
|
|
24
|
+
export declare const isEmail: (message?: string) => FormValidator<string>;
|
|
25
|
+
/**
|
|
26
|
+
* Validates minimum value
|
|
27
|
+
*/
|
|
28
|
+
export declare const min: (minValue: number, message?: string) => FormValidator<number>;
|
|
29
|
+
/**
|
|
30
|
+
* Validates maximum value
|
|
31
|
+
*/
|
|
32
|
+
export declare const max: (maxValue: number, message?: string) => FormValidator<number>;
|
|
33
|
+
/**
|
|
34
|
+
* Validates that value is in a range
|
|
35
|
+
*/
|
|
36
|
+
export declare const inRange: (minValue: number, maxValue: number, message?: string) => FormValidator<number>;
|
|
37
|
+
/**
|
|
38
|
+
* Validates that value is in a list
|
|
39
|
+
*/
|
|
40
|
+
export declare const isInArray: <T>(array: T[], message?: string) => FormValidator<T>;
|
|
41
|
+
//# sourceMappingURL=validators.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validators.d.ts","sourceRoot":"","sources":["../../../../../../src/hooks/use-form/validators.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE7C;;GAEG;AAEH;;GAEG;AACH,eAAO,MAAM,UAAU,GAAI,gBAAkC,KAAG,aAAa,CAAC,GAAG,CAahF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,SAAS,GACpB,KAAK,MAAM,EACX,UAAU,MAAM,KACf,aAAa,CAAC,MAAM,CAQtB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,SAAS,GACpB,KAAK,MAAM,EACX,UAAU,MAAM,KACf,aAAa,CAAC,MAAM,CAQtB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,OAAO,GAClB,SAAS,MAAM,EACf,gBAA0B,KACzB,aAAa,CAAC,MAAM,CAQtB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,OAAO,GAAI,gBAAyB,KAAG,aAAa,CAAC,MAAM,CAGvE,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,GAAG,GACd,UAAU,MAAM,EAChB,UAAU,MAAM,KACf,aAAa,CAAC,MAAM,CAQtB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,GAAG,GACd,UAAU,MAAM,EAChB,UAAU,MAAM,KACf,aAAa,CAAC,MAAM,CAQtB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,OAAO,GAClB,UAAU,MAAM,EAChB,UAAU,MAAM,EAChB,UAAU,MAAM,KACf,aAAa,CAAC,MAAM,CAQtB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,SAAS,GAAI,CAAC,EACzB,OAAO,CAAC,EAAE,EACV,gBAAyB,KACxB,aAAa,CAAC,CAAC,CAOjB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/index.tsx"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,cAAc,CAAC;AAC7B,mBAAmB,eAAe,CAAC;AACnC,mBAAmB,eAAe,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/index.tsx"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC;AACxB,mBAAmB,eAAe,CAAC;AACnC,mBAAmB,eAAe,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/components/Group/index.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/components/Group/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,eAAO,MAAM,KAAK,GAAI,0FAUnB,SAAS,GAAG;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,GAAG,UAAU,GAAG,SAAS,CAAC;IAC5D,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,KAAG,KAAK,CAAC,YA4CT,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
+
import { View } from 'react-native';
|
|
2
3
|
import type { DefaultProps, MantineColor, MantineSize } from '../../theme/types';
|
|
3
4
|
export interface RadioProps extends DefaultProps {
|
|
4
5
|
/** Radio label */
|
|
@@ -20,5 +21,25 @@ export interface RadioProps extends DefaultProps {
|
|
|
20
21
|
/** Wrapper style */
|
|
21
22
|
wrapperStyle?: any;
|
|
22
23
|
}
|
|
23
|
-
export
|
|
24
|
+
export interface RadioGroupProps {
|
|
25
|
+
/** Current selected value */
|
|
26
|
+
value?: string;
|
|
27
|
+
/** Called when value changes */
|
|
28
|
+
onChange?: (value: string) => void;
|
|
29
|
+
/** Radio group children */
|
|
30
|
+
children: React.ReactNode;
|
|
31
|
+
/** Radio group name for accessibility */
|
|
32
|
+
name?: string;
|
|
33
|
+
/** Radio size for all children */
|
|
34
|
+
size?: MantineSize;
|
|
35
|
+
/** Radio color for all children */
|
|
36
|
+
color?: MantineColor;
|
|
37
|
+
/** Wrapper style */
|
|
38
|
+
style?: any;
|
|
39
|
+
/** Spacing between radio buttons */
|
|
40
|
+
spacing?: number;
|
|
41
|
+
}
|
|
42
|
+
export declare const Radio: React.ForwardRefExoticComponent<RadioProps & React.RefAttributes<any>> & {
|
|
43
|
+
Group: React.ForwardRefExoticComponent<RadioGroupProps & React.RefAttributes<View>>;
|
|
44
|
+
};
|
|
24
45
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/components/Radio/index.tsx"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/components/Radio/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmE,MAAM,OAAO,CAAC;AACxF,OAAO,EAAuB,IAAI,EAAE,MAAM,cAAc,CAAC;AAGzD,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAKjF,MAAM,WAAW,UAAW,SAAQ,YAAY;IAC9C,kBAAkB;IAClB,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAExB,iBAAiB;IACjB,IAAI,CAAC,EAAE,WAAW,CAAC;IAEnB,6BAA6B;IAC7B,KAAK,CAAC,EAAE,YAAY,CAAC;IAErB,kBAAkB;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,oBAAoB;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB,sCAAsC;IACtC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAEnC,qBAAqB;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,wBAAwB;IACxB,KAAK,CAAC,EAAE,GAAG,CAAC;IAEZ,oBAAoB;IACpB,YAAY,CAAC,EAAE,GAAG,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,6BAA6B;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,gCAAgC;IAChC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAEnC,2BAA2B;IAC3B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAE1B,yCAAyC;IACzC,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,kCAAkC;IAClC,IAAI,CAAC,EAAE,WAAW,CAAC;IAEnB,mCAAmC;IACnC,KAAK,CAAC,EAAE,YAAY,CAAC;IAErB,oBAAoB;IACpB,KAAK,CAAC,EAAE,GAAG,CAAC;IAEZ,oCAAoC;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAmMD,eAAO,MAAM,KAAK;;CAEhB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/hooks/use-form/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,cAAc,SAAS,CAAC;AACxB,cAAc,cAAc,CAAC"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Form field validation function
|
|
3
|
+
*/
|
|
4
|
+
export type FormValidator<T> = (value: T) => string | null;
|
|
5
|
+
/**
|
|
6
|
+
* Form validation rules
|
|
7
|
+
*/
|
|
8
|
+
export type FormValidationRules<Values> = {
|
|
9
|
+
[K in keyof Values]?: FormValidator<Values[K]> | FormValidator<Values[K]>[];
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* Form errors
|
|
13
|
+
*/
|
|
14
|
+
export type FormErrors<Values = Record<string, any>> = Partial<Record<keyof Values, string>>;
|
|
15
|
+
/**
|
|
16
|
+
* Form touched state
|
|
17
|
+
*/
|
|
18
|
+
export type FormTouched<Values = Record<string, any>> = Partial<Record<keyof Values, boolean>>;
|
|
19
|
+
/**
|
|
20
|
+
* Form dirty state
|
|
21
|
+
*/
|
|
22
|
+
export type FormDirty<Values = Record<string, any>> = Partial<Record<keyof Values, boolean>>;
|
|
23
|
+
/**
|
|
24
|
+
* Form field status
|
|
25
|
+
*/
|
|
26
|
+
export interface FormFieldStatus {
|
|
27
|
+
hasError: boolean;
|
|
28
|
+
isTouched: boolean;
|
|
29
|
+
isDirty: boolean;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Props to be spread on input components
|
|
33
|
+
*/
|
|
34
|
+
export interface FormInputProps<T = any> {
|
|
35
|
+
value: T;
|
|
36
|
+
onChange?: (value: T) => void;
|
|
37
|
+
onChangeText?: (text: string) => void;
|
|
38
|
+
error?: string;
|
|
39
|
+
onBlur?: () => void;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Form submit handler
|
|
43
|
+
*/
|
|
44
|
+
export type FormSubmitHandler<Values> = (values: Values, event?: any) => void | Promise<void>;
|
|
45
|
+
/**
|
|
46
|
+
* useForm hook input parameters
|
|
47
|
+
*/
|
|
48
|
+
export interface UseFormInput<Values = Record<string, any>> {
|
|
49
|
+
/** Initial form values */
|
|
50
|
+
initialValues?: Values;
|
|
51
|
+
/** Initial form errors */
|
|
52
|
+
initialErrors?: FormErrors<Values>;
|
|
53
|
+
/** Initial touched state */
|
|
54
|
+
initialTouched?: FormTouched<Values>;
|
|
55
|
+
/** Initial dirty state */
|
|
56
|
+
initialDirty?: FormDirty<Values>;
|
|
57
|
+
/** Form validation rules */
|
|
58
|
+
validate?: FormValidationRules<Values>;
|
|
59
|
+
/** Clear input error on change */
|
|
60
|
+
clearInputErrorOnChange?: boolean;
|
|
61
|
+
/** Validate input on change */
|
|
62
|
+
validateInputOnChange?: boolean;
|
|
63
|
+
/** Validate input on blur */
|
|
64
|
+
validateInputOnBlur?: boolean;
|
|
65
|
+
/** Transform values before submit */
|
|
66
|
+
transformValues?: (values: Values) => any;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* useForm hook return type
|
|
70
|
+
*/
|
|
71
|
+
export interface UseFormReturnType<Values = Record<string, any>> {
|
|
72
|
+
/** Current form values */
|
|
73
|
+
values: Values;
|
|
74
|
+
/** Current form errors */
|
|
75
|
+
errors: FormErrors<Values>;
|
|
76
|
+
/** Current touched state */
|
|
77
|
+
touched: FormTouched<Values>;
|
|
78
|
+
/** Current dirty state */
|
|
79
|
+
dirty: FormDirty<Values>;
|
|
80
|
+
/** Set a single field value */
|
|
81
|
+
setFieldValue: <K extends keyof Values>(field: K, value: Values[K]) => void;
|
|
82
|
+
/** Set multiple values */
|
|
83
|
+
setValues: (values: Partial<Values>) => void;
|
|
84
|
+
/** Set a single field error */
|
|
85
|
+
setFieldError: <K extends keyof Values>(field: K, error: string | null) => void;
|
|
86
|
+
/** Set multiple errors */
|
|
87
|
+
setErrors: (errors: FormErrors<Values>) => void;
|
|
88
|
+
/** Clear a specific field error */
|
|
89
|
+
clearFieldError: <K extends keyof Values>(field: K) => void;
|
|
90
|
+
/** Clear all errors */
|
|
91
|
+
clearErrors: () => void;
|
|
92
|
+
/** Reset form to initial values */
|
|
93
|
+
reset: () => void;
|
|
94
|
+
/** Validate a specific field */
|
|
95
|
+
validateField: <K extends keyof Values>(field: K) => boolean;
|
|
96
|
+
/** Validate entire form */
|
|
97
|
+
validate: () => boolean;
|
|
98
|
+
/** Check if form is valid */
|
|
99
|
+
isValid: () => boolean;
|
|
100
|
+
/** Check if form is dirty */
|
|
101
|
+
isDirty: () => boolean;
|
|
102
|
+
/** Get field status */
|
|
103
|
+
getFieldStatus: <K extends keyof Values>(field: K) => FormFieldStatus;
|
|
104
|
+
/** Get props to spread on input component */
|
|
105
|
+
getInputProps: <K extends keyof Values>(field: K, options?: {
|
|
106
|
+
type?: 'input' | 'checkbox' | 'radio' | 'select';
|
|
107
|
+
withError?: boolean;
|
|
108
|
+
withFocus?: boolean;
|
|
109
|
+
}) => FormInputProps<Values[K]>;
|
|
110
|
+
/** Handle form submit */
|
|
111
|
+
onSubmit: (handleSubmit: FormSubmitHandler<Values>) => (event?: any) => void | Promise<void>;
|
|
112
|
+
/** Reset touched state */
|
|
113
|
+
resetTouched: () => void;
|
|
114
|
+
/** Reset dirty state */
|
|
115
|
+
resetDirty: () => void;
|
|
116
|
+
/** Mark field as touched */
|
|
117
|
+
setFieldTouched: <K extends keyof Values>(field: K, touched?: boolean) => void;
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../../src/hooks/use-form/types.ts"],"names":[],"mappings":"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"}
|