@sudobility/components 4.0.114 → 4.0.116
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/hooks/index.d.ts +1 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/useFormValidation.d.ts +116 -0
- package/dist/hooks/useFormValidation.d.ts.map +1 -0
- package/dist/index.d.ts +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.esm.js +5672 -5319
- package/dist/index.umd.js +13 -13
- package/dist/interactive/index.d.ts +0 -1
- package/dist/interactive/index.d.ts.map +1 -1
- package/dist/navigation/index.d.ts +1 -0
- package/dist/navigation/index.d.ts.map +1 -1
- package/dist/navigation/preload-link.d.ts +79 -0
- package/dist/navigation/preload-link.d.ts.map +1 -0
- package/dist/primitives/feedback/action-banner.d.ts +51 -0
- package/dist/primitives/feedback/action-banner.d.ts.map +1 -0
- package/dist/primitives/feedback/data-skeleton.d.ts +51 -0
- package/dist/primitives/feedback/data-skeleton.d.ts.map +1 -0
- package/dist/primitives/feedback/full-page-spinner.d.ts +34 -0
- package/dist/primitives/feedback/full-page-spinner.d.ts.map +1 -0
- package/dist/primitives/feedback/index.d.ts +3 -0
- package/dist/primitives/feedback/index.d.ts.map +1 -1
- package/dist/primitives/layout/index.d.ts +0 -1
- package/dist/primitives/layout/index.d.ts.map +1 -1
- package/dist/seo/SEO.d.ts +75 -0
- package/dist/seo/SEO.d.ts.map +1 -0
- package/dist/seo/index.d.ts +1 -0
- package/dist/seo/index.d.ts.map +1 -1
- package/dist/ui/breadcrumb-nav.d.ts +3 -0
- package/dist/ui/breadcrumb-nav.d.ts.map +1 -1
- package/dist/ui/design-system-components.d.ts +1 -1
- package/dist/ui/index.d.ts +0 -3
- package/dist/ui/index.d.ts.map +1 -1
- package/dist/ui/progress.d.ts +3 -0
- package/dist/ui/progress.d.ts.map +1 -1
- package/package.json +2 -2
- package/dist/ui/animated-counter.d.ts +0 -33
- package/dist/ui/animated-counter.d.ts.map +0 -1
- package/dist/ui/flex-container.d.ts +0 -20
- package/dist/ui/flex-container.d.ts.map +0 -1
- package/dist/ui/hover-tooltip.d.ts +0 -33
- package/dist/ui/hover-tooltip.d.ts.map +0 -1
package/dist/hooks/index.d.ts
CHANGED
|
@@ -9,4 +9,5 @@ export { useCopyToClipboard, useMultipleCopyToClipboard, type CopyToClipboardOpt
|
|
|
9
9
|
export { useLocalizedNavigate, addLanguageToPath, removeLanguageFromPath, } from './useLocalizedNavigate';
|
|
10
10
|
export type { UseLocalizedNavigateOptions, UseLocalizedNavigateReturn, } from './useLocalizedNavigate';
|
|
11
11
|
export { useRoutePerformance } from './useRoutePerformance';
|
|
12
|
+
export { useFormValidation, type ValidationRule, type FieldConfig, type FormFieldState, type UseFormValidationOptions, type UseFormValidationResult, } from './useFormValidation';
|
|
12
13
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EACL,iBAAiB,EACjB,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,GAC7B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,EACL,kBAAkB,EAClB,0BAA0B,EAC1B,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,GAC3B,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,wBAAwB,CAAC;AAChC,YAAY,EACV,2BAA2B,EAC3B,0BAA0B,GAC3B,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EACL,iBAAiB,EACjB,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,GAC7B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,EACL,kBAAkB,EAClB,0BAA0B,EAC1B,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,GAC3B,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,wBAAwB,CAAC;AAChC,YAAY,EACV,2BAA2B,EAC3B,0BAA0B,GAC3B,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAG5D,OAAO,EACL,iBAAiB,EACjB,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,GAC7B,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
export type ValidationRule<T> = (value: T) => string | undefined;
|
|
2
|
+
export interface FieldConfig<T> {
|
|
3
|
+
/** Initial value */
|
|
4
|
+
initialValue: T;
|
|
5
|
+
/** Validation rules (return error string or undefined) */
|
|
6
|
+
validate?: ValidationRule<T>[];
|
|
7
|
+
/** Whether field is required */
|
|
8
|
+
required?: boolean;
|
|
9
|
+
/** Custom required message */
|
|
10
|
+
requiredMessage?: string;
|
|
11
|
+
}
|
|
12
|
+
export interface FormFieldState<T> {
|
|
13
|
+
value: T;
|
|
14
|
+
error?: string;
|
|
15
|
+
touched: boolean;
|
|
16
|
+
dirty: boolean;
|
|
17
|
+
}
|
|
18
|
+
export interface UseFormValidationOptions<T extends Record<string, unknown>> {
|
|
19
|
+
/** Field configurations */
|
|
20
|
+
fields: {
|
|
21
|
+
[K in keyof T]: FieldConfig<T[K]>;
|
|
22
|
+
};
|
|
23
|
+
/** Validate on change (default: only after blur) */
|
|
24
|
+
validateOnChange?: boolean;
|
|
25
|
+
/** Validate on blur (default: true) */
|
|
26
|
+
validateOnBlur?: boolean;
|
|
27
|
+
}
|
|
28
|
+
export interface UseFormValidationResult<T extends Record<string, unknown>> {
|
|
29
|
+
/** Current form values */
|
|
30
|
+
values: T;
|
|
31
|
+
/** Field errors */
|
|
32
|
+
errors: Partial<Record<keyof T, string>>;
|
|
33
|
+
/** Which fields have been touched (blurred) */
|
|
34
|
+
touched: Partial<Record<keyof T, boolean>>;
|
|
35
|
+
/** Which fields have been modified */
|
|
36
|
+
dirty: Partial<Record<keyof T, boolean>>;
|
|
37
|
+
/** Whether the form is valid */
|
|
38
|
+
isValid: boolean;
|
|
39
|
+
/** Whether any field has been modified */
|
|
40
|
+
isDirty: boolean;
|
|
41
|
+
/** Set a field value */
|
|
42
|
+
setValue: <K extends keyof T>(field: K, value: T[K]) => void;
|
|
43
|
+
/** Set multiple values at once */
|
|
44
|
+
setValues: (values: Partial<T>) => void;
|
|
45
|
+
/** Mark a field as touched (trigger validation) */
|
|
46
|
+
setTouched: (field: keyof T) => void;
|
|
47
|
+
/** Validate a single field */
|
|
48
|
+
validateField: (field: keyof T) => string | undefined;
|
|
49
|
+
/** Validate all fields */
|
|
50
|
+
validateAll: () => boolean;
|
|
51
|
+
/** Reset form to initial values */
|
|
52
|
+
reset: () => void;
|
|
53
|
+
/** Reset a single field */
|
|
54
|
+
resetField: (field: keyof T) => void;
|
|
55
|
+
/** Get props for an input field */
|
|
56
|
+
getFieldProps: <K extends keyof T>(field: K) => {
|
|
57
|
+
value: T[K];
|
|
58
|
+
onChange: (e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement>) => void;
|
|
59
|
+
onBlur: () => void;
|
|
60
|
+
name: string;
|
|
61
|
+
'aria-invalid': boolean;
|
|
62
|
+
};
|
|
63
|
+
/** Get error message for a field (only if touched) */
|
|
64
|
+
getFieldError: (field: keyof T) => string | undefined;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* useFormValidation Hook
|
|
68
|
+
*
|
|
69
|
+
* A comprehensive form validation hook with touched state tracking,
|
|
70
|
+
* field-level validation, and accessibility support.
|
|
71
|
+
*
|
|
72
|
+
* @example
|
|
73
|
+
* ```tsx
|
|
74
|
+
* const { values, errors, getFieldProps, getFieldError, validateAll, isValid } = useFormValidation({
|
|
75
|
+
* fields: {
|
|
76
|
+
* email: {
|
|
77
|
+
* initialValue: '',
|
|
78
|
+
* required: true,
|
|
79
|
+
* requiredMessage: 'Email is required',
|
|
80
|
+
* validate: [
|
|
81
|
+
* (v) => !v.includes('@') ? 'Invalid email format' : undefined,
|
|
82
|
+
* ],
|
|
83
|
+
* },
|
|
84
|
+
* password: {
|
|
85
|
+
* initialValue: '',
|
|
86
|
+
* required: true,
|
|
87
|
+
* validate: [
|
|
88
|
+
* (v) => v.length < 8 ? 'Password must be at least 8 characters' : undefined,
|
|
89
|
+
* ],
|
|
90
|
+
* },
|
|
91
|
+
* },
|
|
92
|
+
* });
|
|
93
|
+
*
|
|
94
|
+
* const handleSubmit = (e: FormEvent) => {
|
|
95
|
+
* e.preventDefault();
|
|
96
|
+
* if (validateAll()) {
|
|
97
|
+
* // Submit form
|
|
98
|
+
* }
|
|
99
|
+
* };
|
|
100
|
+
*
|
|
101
|
+
* return (
|
|
102
|
+
* <form onSubmit={handleSubmit}>
|
|
103
|
+
* <input {...getFieldProps('email')} type="email" />
|
|
104
|
+
* {getFieldError('email') && <span>{getFieldError('email')}</span>}
|
|
105
|
+
*
|
|
106
|
+
* <input {...getFieldProps('password')} type="password" />
|
|
107
|
+
* {getFieldError('password') && <span>{getFieldError('password')}</span>}
|
|
108
|
+
*
|
|
109
|
+
* <button type="submit" disabled={!isValid}>Submit</button>
|
|
110
|
+
* </form>
|
|
111
|
+
* );
|
|
112
|
+
* ```
|
|
113
|
+
*/
|
|
114
|
+
export declare function useFormValidation<T extends Record<string, unknown>>({ fields, validateOnChange, validateOnBlur, }: UseFormValidationOptions<T>): UseFormValidationResult<T>;
|
|
115
|
+
export default useFormValidation;
|
|
116
|
+
//# sourceMappingURL=useFormValidation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useFormValidation.d.ts","sourceRoot":"","sources":["../../src/hooks/useFormValidation.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -13,7 +13,6 @@ export * from './primitives';
|
|
|
13
13
|
export * from './forms';
|
|
14
14
|
export * from './ui/action-button';
|
|
15
15
|
export * from './ui/address-link';
|
|
16
|
-
export * from './ui/animated-counter';
|
|
17
16
|
export * from './ui/animated-section';
|
|
18
17
|
export * from './ui/backdrop';
|
|
19
18
|
export * from './ui/banner';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAGjC,cAAc,cAAc,CAAC;AAG7B,cAAc,SAAS,CAAC;AAGxB,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAGjC,cAAc,cAAc,CAAC;AAG7B,cAAc,SAAS,CAAC;AAGxB,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,+BAA+B,CAAC;AAC9C,cAAc,sBAAsB,CAAC;AACrC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,wBAAwB,CAAC;AACvC,cAAc,WAAW,CAAC;AAC1B,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAG9B,cAAc,cAAc,CAAC;AAG7B,cAAc,gBAAgB,CAAC;AAG/B,cAAc,UAAU,CAAC;AAGzB,cAAc,SAAS,CAAC;AAGxB,cAAc,UAAU,CAAC;AAGzB,cAAc,eAAe,CAAC;AAG9B,cAAc,QAAQ,CAAC;AAGvB,cAAc,YAAY,CAAC;AAG3B,cAAc,OAAO,CAAC;AAGtB,cAAc,UAAU,CAAC;AAGzB,cAAc,OAAO,CAAC;AAGtB,cAAc,gBAAgB,CAAC;AAG/B,cAAc,aAAa,CAAC;AAG5B,cAAc,SAAS,CAAC;AAGxB,OAAO,EACL,cAAc,EACd,eAAe,EACf,aAAa,GACd,MAAM,wBAAwB,CAAC;AAGhC,cAAc,SAAS,CAAC;AAGxB,OAAO,EACL,qBAAqB,EACrB,+BAA+B,EAC/B,KAAK,kBAAkB,GACxB,MAAM,uCAAuC,CAAC;AAY/C,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;;;;;;AAEjC,wBAIE"}
|