@webority-technologies/mobile 0.0.22 → 0.0.23

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.
Files changed (181) hide show
  1. package/lib/commonjs/components/Accordion/Accordion.js +4 -2
  2. package/lib/commonjs/components/Avatar/Avatar.js +4 -2
  3. package/lib/commonjs/components/Badge/Badge.js +5 -5
  4. package/lib/commonjs/components/Banner/Banner.js +8 -4
  5. package/lib/commonjs/components/BottomNavigation/BottomNavigation.js +6 -4
  6. package/lib/commonjs/components/BottomSheet/BottomSheet.js +8 -9
  7. package/lib/commonjs/components/Box/Box.js +162 -0
  8. package/lib/commonjs/components/Box/index.js +37 -0
  9. package/lib/commonjs/components/Button/Button.js +7 -7
  10. package/lib/commonjs/components/Carousel/Carousel.js +4 -2
  11. package/lib/commonjs/components/Checkbox/Checkbox.js +14 -5
  12. package/lib/commonjs/components/DatePicker/DatePicker.js +9 -7
  13. package/lib/commonjs/components/DateRangePicker/DateRangePicker.js +5 -2
  14. package/lib/commonjs/components/Dialog/Dialog.js +2 -2
  15. package/lib/commonjs/components/FieldBase/FieldBase.js +8 -4
  16. package/lib/commonjs/components/FloatingActionButton/FloatingActionButton.js +13 -5
  17. package/lib/commonjs/components/FormField/FormField.js +61 -25
  18. package/lib/commonjs/components/Input/Input.js +41 -29
  19. package/lib/commonjs/components/KeyboardAwareScrollView/KeyboardAwareScrollView.js +102 -0
  20. package/lib/commonjs/components/KeyboardAwareScrollView/index.js +13 -0
  21. package/lib/commonjs/components/KeyboardToolbar/KeyboardToolbar.js +130 -0
  22. package/lib/commonjs/components/KeyboardToolbar/index.js +13 -0
  23. package/lib/commonjs/components/Modal/Modal.js +17 -6
  24. package/lib/commonjs/components/NumberInput/NumberInput.js +35 -28
  25. package/lib/commonjs/components/OTPInput/OTPInput.js +33 -18
  26. package/lib/commonjs/components/Radio/Radio.js +7 -5
  27. package/lib/commonjs/components/Radio/RadioGroup.js +10 -3
  28. package/lib/commonjs/components/SearchBar/SearchBar.js +4 -2
  29. package/lib/commonjs/components/SegmentedControl/SegmentedControl.js +20 -10
  30. package/lib/commonjs/components/Select/Select.js +33 -32
  31. package/lib/commonjs/components/Skeleton/SkeletonContent.js +5 -2
  32. package/lib/commonjs/components/Slider/Slider.js +42 -26
  33. package/lib/commonjs/components/Spinner/Spinner.js +5 -5
  34. package/lib/commonjs/components/Switch/Switch.js +29 -16
  35. package/lib/commonjs/components/Tabs/Tabs.js +4 -2
  36. package/lib/commonjs/components/Text/Text.js +142 -0
  37. package/lib/commonjs/components/Text/index.js +13 -0
  38. package/lib/commonjs/components/TimePicker/TimePicker.js +10 -7
  39. package/lib/commonjs/components/Toast/Toast.js +22 -10
  40. package/lib/commonjs/components/Tooltip/Tooltip.js +6 -2
  41. package/lib/commonjs/components/index.js +135 -89
  42. package/lib/commonjs/form/FormContext.js +40 -0
  43. package/lib/commonjs/form/index.js +68 -0
  44. package/lib/commonjs/form/path.js +79 -0
  45. package/lib/commonjs/form/rules.js +67 -0
  46. package/lib/commonjs/form/types.js +2 -0
  47. package/lib/commonjs/form/useField.js +54 -0
  48. package/lib/commonjs/form/useForm.js +316 -0
  49. package/lib/commonjs/hooks/index.js +14 -0
  50. package/lib/commonjs/hooks/useControllableState.js +30 -0
  51. package/lib/commonjs/hooks/useReducedMotion.js +31 -0
  52. package/lib/commonjs/index.js +96 -11
  53. package/lib/commonjs/theme/ThemeContext.js +30 -2
  54. package/lib/commonjs/theme/tokens.js +12 -0
  55. package/lib/module/components/Accordion/Accordion.js +4 -2
  56. package/lib/module/components/Avatar/Avatar.js +4 -2
  57. package/lib/module/components/Badge/Badge.js +5 -5
  58. package/lib/module/components/Banner/Banner.js +8 -4
  59. package/lib/module/components/BottomNavigation/BottomNavigation.js +6 -4
  60. package/lib/module/components/BottomSheet/BottomSheet.js +8 -9
  61. package/lib/module/components/Box/Box.js +156 -0
  62. package/lib/module/components/Box/index.js +4 -0
  63. package/lib/module/components/Button/Button.js +7 -7
  64. package/lib/module/components/Carousel/Carousel.js +4 -2
  65. package/lib/module/components/Checkbox/Checkbox.js +14 -5
  66. package/lib/module/components/DatePicker/DatePicker.js +9 -7
  67. package/lib/module/components/DateRangePicker/DateRangePicker.js +5 -2
  68. package/lib/module/components/Dialog/Dialog.js +2 -2
  69. package/lib/module/components/FieldBase/FieldBase.js +8 -4
  70. package/lib/module/components/FloatingActionButton/FloatingActionButton.js +13 -5
  71. package/lib/module/components/FormField/FormField.js +62 -26
  72. package/lib/module/components/Input/Input.js +41 -29
  73. package/lib/module/components/KeyboardAwareScrollView/KeyboardAwareScrollView.js +98 -0
  74. package/lib/module/components/KeyboardAwareScrollView/index.js +4 -0
  75. package/lib/module/components/KeyboardToolbar/KeyboardToolbar.js +125 -0
  76. package/lib/module/components/KeyboardToolbar/index.js +4 -0
  77. package/lib/module/components/Modal/Modal.js +17 -6
  78. package/lib/module/components/NumberInput/NumberInput.js +30 -23
  79. package/lib/module/components/OTPInput/OTPInput.js +30 -15
  80. package/lib/module/components/Radio/Radio.js +7 -5
  81. package/lib/module/components/Radio/RadioGroup.js +10 -3
  82. package/lib/module/components/SearchBar/SearchBar.js +4 -2
  83. package/lib/module/components/SegmentedControl/SegmentedControl.js +20 -10
  84. package/lib/module/components/Select/Select.js +33 -32
  85. package/lib/module/components/Skeleton/SkeletonContent.js +5 -2
  86. package/lib/module/components/Slider/Slider.js +42 -26
  87. package/lib/module/components/Spinner/Spinner.js +5 -5
  88. package/lib/module/components/Switch/Switch.js +29 -16
  89. package/lib/module/components/Tabs/Tabs.js +4 -2
  90. package/lib/module/components/Text/Text.js +138 -0
  91. package/lib/module/components/Text/index.js +4 -0
  92. package/lib/module/components/TimePicker/TimePicker.js +10 -7
  93. package/lib/module/components/Toast/Toast.js +22 -10
  94. package/lib/module/components/Tooltip/Tooltip.js +6 -2
  95. package/lib/module/components/index.js +4 -0
  96. package/lib/module/form/FormContext.js +32 -0
  97. package/lib/module/form/index.js +12 -0
  98. package/lib/module/form/path.js +72 -0
  99. package/lib/module/form/rules.js +52 -0
  100. package/lib/module/form/types.js +2 -0
  101. package/lib/module/form/useField.js +49 -0
  102. package/lib/module/form/useForm.js +312 -0
  103. package/lib/module/hooks/index.js +2 -0
  104. package/lib/module/hooks/useControllableState.js +26 -0
  105. package/lib/module/hooks/useReducedMotion.js +27 -0
  106. package/lib/module/index.js +3 -1
  107. package/lib/module/theme/ThemeContext.js +30 -2
  108. package/lib/module/theme/tokens.js +12 -0
  109. package/lib/typescript/commonjs/components/BottomNavigation/BottomNavigation.d.ts +1 -1
  110. package/lib/typescript/commonjs/components/Box/Box.d.ts +60 -0
  111. package/lib/typescript/commonjs/components/Box/index.d.ts +3 -0
  112. package/lib/typescript/commonjs/components/Button/Button.d.ts +1 -1
  113. package/lib/typescript/commonjs/components/Checkbox/Checkbox.d.ts +3 -2
  114. package/lib/typescript/commonjs/components/DatePicker/DatePicker.d.ts +3 -3
  115. package/lib/typescript/commonjs/components/Dialog/Dialog.d.ts +2 -2
  116. package/lib/typescript/commonjs/components/FormField/FormField.d.ts +13 -2
  117. package/lib/typescript/commonjs/components/KeyboardAwareScrollView/KeyboardAwareScrollView.d.ts +20 -0
  118. package/lib/typescript/commonjs/components/KeyboardAwareScrollView/index.d.ts +3 -0
  119. package/lib/typescript/commonjs/components/KeyboardToolbar/KeyboardToolbar.d.ts +29 -0
  120. package/lib/typescript/commonjs/components/KeyboardToolbar/index.d.ts +3 -0
  121. package/lib/typescript/commonjs/components/NumberInput/NumberInput.d.ts +3 -2
  122. package/lib/typescript/commonjs/components/OTPInput/OTPInput.d.ts +3 -2
  123. package/lib/typescript/commonjs/components/Radio/Radio.d.ts +2 -2
  124. package/lib/typescript/commonjs/components/Radio/RadioGroup.d.ts +3 -2
  125. package/lib/typescript/commonjs/components/SegmentedControl/SegmentedControl.d.ts +3 -2
  126. package/lib/typescript/commonjs/components/Slider/Slider.d.ts +6 -4
  127. package/lib/typescript/commonjs/components/Spinner/Spinner.d.ts +1 -1
  128. package/lib/typescript/commonjs/components/Switch/Switch.d.ts +3 -2
  129. package/lib/typescript/commonjs/components/Text/Text.d.ts +25 -0
  130. package/lib/typescript/commonjs/components/Text/index.d.ts +3 -0
  131. package/lib/typescript/commonjs/components/TimePicker/TimePicker.d.ts +3 -3
  132. package/lib/typescript/commonjs/components/index.d.ts +8 -0
  133. package/lib/typescript/commonjs/form/FormContext.d.ts +17 -0
  134. package/lib/typescript/commonjs/form/index.d.ts +9 -0
  135. package/lib/typescript/commonjs/form/path.d.ts +10 -0
  136. package/lib/typescript/commonjs/form/rules.d.ts +31 -0
  137. package/lib/typescript/commonjs/form/types.d.ts +94 -0
  138. package/lib/typescript/commonjs/form/useField.d.ts +27 -0
  139. package/lib/typescript/commonjs/form/useForm.d.ts +10 -0
  140. package/lib/typescript/commonjs/hooks/index.d.ts +3 -0
  141. package/lib/typescript/commonjs/hooks/useControllableState.d.ts +17 -0
  142. package/lib/typescript/commonjs/hooks/useReducedMotion.d.ts +8 -0
  143. package/lib/typescript/commonjs/index.d.ts +4 -2
  144. package/lib/typescript/commonjs/theme/types.d.ts +15 -0
  145. package/lib/typescript/module/components/BottomNavigation/BottomNavigation.d.ts +1 -1
  146. package/lib/typescript/module/components/Box/Box.d.ts +60 -0
  147. package/lib/typescript/module/components/Box/index.d.ts +3 -0
  148. package/lib/typescript/module/components/Button/Button.d.ts +1 -1
  149. package/lib/typescript/module/components/Checkbox/Checkbox.d.ts +3 -2
  150. package/lib/typescript/module/components/DatePicker/DatePicker.d.ts +3 -3
  151. package/lib/typescript/module/components/Dialog/Dialog.d.ts +2 -2
  152. package/lib/typescript/module/components/FormField/FormField.d.ts +13 -2
  153. package/lib/typescript/module/components/KeyboardAwareScrollView/KeyboardAwareScrollView.d.ts +20 -0
  154. package/lib/typescript/module/components/KeyboardAwareScrollView/index.d.ts +3 -0
  155. package/lib/typescript/module/components/KeyboardToolbar/KeyboardToolbar.d.ts +29 -0
  156. package/lib/typescript/module/components/KeyboardToolbar/index.d.ts +3 -0
  157. package/lib/typescript/module/components/NumberInput/NumberInput.d.ts +3 -2
  158. package/lib/typescript/module/components/OTPInput/OTPInput.d.ts +3 -2
  159. package/lib/typescript/module/components/Radio/Radio.d.ts +2 -2
  160. package/lib/typescript/module/components/Radio/RadioGroup.d.ts +3 -2
  161. package/lib/typescript/module/components/SegmentedControl/SegmentedControl.d.ts +3 -2
  162. package/lib/typescript/module/components/Slider/Slider.d.ts +6 -4
  163. package/lib/typescript/module/components/Spinner/Spinner.d.ts +1 -1
  164. package/lib/typescript/module/components/Switch/Switch.d.ts +3 -2
  165. package/lib/typescript/module/components/Text/Text.d.ts +25 -0
  166. package/lib/typescript/module/components/Text/index.d.ts +3 -0
  167. package/lib/typescript/module/components/TimePicker/TimePicker.d.ts +3 -3
  168. package/lib/typescript/module/components/index.d.ts +8 -0
  169. package/lib/typescript/module/form/FormContext.d.ts +17 -0
  170. package/lib/typescript/module/form/index.d.ts +9 -0
  171. package/lib/typescript/module/form/path.d.ts +10 -0
  172. package/lib/typescript/module/form/rules.d.ts +31 -0
  173. package/lib/typescript/module/form/types.d.ts +94 -0
  174. package/lib/typescript/module/form/useField.d.ts +27 -0
  175. package/lib/typescript/module/form/useForm.d.ts +10 -0
  176. package/lib/typescript/module/hooks/index.d.ts +3 -0
  177. package/lib/typescript/module/hooks/useControllableState.d.ts +17 -0
  178. package/lib/typescript/module/hooks/useReducedMotion.d.ts +8 -0
  179. package/lib/typescript/module/index.d.ts +4 -2
  180. package/lib/typescript/module/theme/types.d.ts +15 -0
  181. package/package.json +1 -1
@@ -0,0 +1,17 @@
1
+ import React from 'react';
2
+ import type { FormApi, FormValues } from './types';
3
+ export interface FormProps {
4
+ /** The object returned by {@link useForm}. */
5
+ form: FormApi<FormValues>;
6
+ children: React.ReactNode;
7
+ }
8
+ /**
9
+ * Provides a {@link useForm} instance to descendants so `<FormField name>`,
10
+ * {@link useField} and {@link useFieldArray} can bind by name.
11
+ */
12
+ export declare const Form: React.FC<FormProps>;
13
+ /** Read the surrounding form. Throws if there is no `<Form>` ancestor. */
14
+ export declare function useFormContext<Values extends FormValues = FormValues>(): FormApi<Values>;
15
+ /** Read the surrounding form, or null when there is no `<Form>` ancestor. */
16
+ export declare function useOptionalFormContext(): FormApi<FormValues> | null;
17
+ //# sourceMappingURL=FormContext.d.ts.map
@@ -0,0 +1,9 @@
1
+ export { useForm } from './useForm';
2
+ export { useField, useFieldArray } from './useField';
3
+ export type { FieldArrayApi } from './useField';
4
+ export { Form, useFormContext, useOptionalFormContext } from './FormContext';
5
+ export type { FormProps } from './FormContext';
6
+ export { getPath, setPath, deletePath } from './path';
7
+ export * as rules from './rules';
8
+ export type { FormApi, FormConfig, FormValues, FormErrors, FormTouched, FieldState, FieldInputProps, FocusableNode, ValidationRule, ValidationResult, FieldRules, ValidationSchema, FormValidateFn, ValidateOn, SubmitHelpers } from './types';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Immutable get/set/delete for dot- and bracket-notation field paths
3
+ * ("address.city", "phones[0]", "items[2].qty"). Lets a single flat `name`
4
+ * string address nested values and array items, so the form engine can treat
5
+ * every field uniformly regardless of how deep it lives in the value tree.
6
+ */
7
+ export declare const getPath: (obj: unknown, path: string) => unknown;
8
+ export declare const setPath: <T>(obj: T, path: string, value: unknown) => T;
9
+ export declare const deletePath: <T>(obj: T, path: string) => T;
10
+ //# sourceMappingURL=path.d.ts.map
@@ -0,0 +1,31 @@
1
+ import type { PasswordRules } from '../validators';
2
+ import type { FormValues, ValidationRule } from './types';
3
+ export declare const required: (message?: string) => ValidationRule;
4
+ export declare const email: (message?: string) => ValidationRule;
5
+ export declare const mobile: (message?: string) => ValidationRule;
6
+ export declare const phone: (message?: string) => ValidationRule;
7
+ export declare const url: (message?: string) => ValidationRule;
8
+ export declare const numeric: (message?: string) => ValidationRule;
9
+ export declare const integer: (message?: string) => ValidationRule;
10
+ export declare const alphanumeric: (message?: string) => ValidationRule;
11
+ export declare const pincode: (message?: string) => ValidationRule;
12
+ export declare const pan: (message?: string) => ValidationRule;
13
+ export declare const gstin: (message?: string) => ValidationRule;
14
+ export declare const aadhaar: (message?: string) => ValidationRule;
15
+ export declare const ifsc: (message?: string) => ValidationRule;
16
+ export declare const minLength: (length: number, message?: string) => ValidationRule;
17
+ export declare const maxLength: (length: number, message?: string) => ValidationRule;
18
+ export declare const min: (n: number, message?: string) => ValidationRule;
19
+ export declare const max: (n: number, message?: string) => ValidationRule;
20
+ export declare const pattern: (regex: RegExp, message?: string) => ValidationRule;
21
+ export declare const oneOf: (allowed: readonly unknown[], message?: string) => ValidationRule;
22
+ /** Cross-field equality (e.g. confirm-password). `otherField` is a field path. */
23
+ export declare const matches: (otherField: string, message?: string) => ValidationRule<unknown, FormValues>;
24
+ export declare const strongPassword: (rules?: PasswordRules, message?: string) => ValidationRule;
25
+ /**
26
+ * Wrap any custom check. Return `true` (valid), `false` (invalid → default
27
+ * message), or a string (invalid → that message). Async is supported — return
28
+ * a Promise of the same.
29
+ */
30
+ export declare const custom: (fn: (value: any, allValues: FormValues) => boolean | string | Promise<boolean | string>, message?: string) => ValidationRule;
31
+ //# sourceMappingURL=rules.d.ts.map
@@ -0,0 +1,94 @@
1
+ export type FormValues = Record<string, unknown>;
2
+ export type FormErrors = Record<string, string | undefined>;
3
+ export type FormTouched = Record<string, boolean>;
4
+ export type ValidationResult = string | undefined | null | false;
5
+ /**
6
+ * A single validation rule. Receives the field value and the whole values
7
+ * object (so cross-field rules work). Return an error message string when
8
+ * invalid, or any falsy value when valid. May be async — return a Promise for
9
+ * server-side checks ("is this email already registered?").
10
+ */
11
+ export type ValidationRule<V = any, Values extends FormValues = FormValues> = (value: V, allValues: Values) => ValidationResult | Promise<ValidationResult>;
12
+ export type FieldRules<V = any, Values extends FormValues = FormValues> = ValidationRule<V, Values> | ValidationRule<V, Values>[];
13
+ /** Per-field rule map keyed by field path (e.g. `{ email: [rules.required(), rules.email()] }`). */
14
+ export type ValidationSchema<Values extends FormValues = FormValues> = Record<string, FieldRules<any, Values>>;
15
+ /** Form-level validate function returning an errors map keyed by field path. */
16
+ export type FormValidateFn<Values extends FormValues = FormValues> = (values: Values) => FormErrors | Promise<FormErrors>;
17
+ export type ValidateOn = 'change' | 'blur' | 'submit';
18
+ export interface SubmitHelpers<Values extends FormValues = FormValues> {
19
+ setErrors: (errors: FormErrors) => void;
20
+ setFieldError: (name: string, error?: string) => void;
21
+ reset: (nextValues?: Partial<Values>) => void;
22
+ setSubmitting: (submitting: boolean) => void;
23
+ }
24
+ export interface FormConfig<Values extends FormValues = FormValues> {
25
+ initialValues: Values;
26
+ /** Either a per-field rule map or a single form-level validate function. */
27
+ validate?: ValidationSchema<Values> | FormValidateFn<Values>;
28
+ /** When validation first runs for a field. Library default: 'submit'. */
29
+ validateOn?: ValidateOn;
30
+ /** After a field has surfaced an error once, how it re-validates. Library default: 'change'. */
31
+ revalidateOn?: 'change' | 'blur';
32
+ onSubmit: (values: Values, helpers: SubmitHelpers<Values>) => void | Promise<void>;
33
+ /** Re-initialise values when `initialValues` changes (e.g. async-loaded edit form). Default: false. */
34
+ enableReinitialize?: boolean;
35
+ }
36
+ export interface FieldState<V = unknown> {
37
+ value: V;
38
+ /** Error the UI should show (gated by touched / submit). */
39
+ error: string | undefined;
40
+ /** Error regardless of touched — useful for `isValid`-style logic. */
41
+ rawError: string | undefined;
42
+ touched: boolean;
43
+ dirty: boolean;
44
+ }
45
+ /** Props an input needs to bind to a form field. Covers text and non-text controls. */
46
+ export interface FieldInputProps<V = unknown> {
47
+ name: string;
48
+ value: V;
49
+ error: string | undefined;
50
+ touched: boolean;
51
+ /** Generic change handler (Select/Switch/DatePicker/Slider…). */
52
+ onChange: (value: V) => void;
53
+ /** Text-input alias of `onChange` (TextInput's `onChangeText`). */
54
+ onChangeText: (text: string) => void;
55
+ onBlur: () => void;
56
+ /** Marks this field as the focused one (drives KeyboardToolbar next/prev). */
57
+ onFocus: () => void;
58
+ setValue: (value: V, shouldValidate?: boolean) => void;
59
+ }
60
+ export interface FocusableNode {
61
+ focus?: () => void;
62
+ measureInWindow?: (cb: (x: number, y: number, w: number, h: number) => void) => void;
63
+ }
64
+ export interface FormApi<Values extends FormValues = FormValues> {
65
+ values: Values;
66
+ /** Touched/submit-gated errors — what the UI shows. */
67
+ errors: FormErrors;
68
+ /** Every current error regardless of touched. */
69
+ rawErrors: FormErrors;
70
+ touched: FormTouched;
71
+ dirty: boolean;
72
+ isValid: boolean;
73
+ isSubmitting: boolean;
74
+ isValidating: boolean;
75
+ submitCount: number;
76
+ setFieldValue: (name: string, value: unknown, shouldValidate?: boolean) => void;
77
+ setFieldTouched: (name: string, touched?: boolean, shouldValidate?: boolean) => void;
78
+ setFieldError: (name: string, error?: string) => void;
79
+ setValues: (next: Partial<Values> | ((prev: Values) => Values), shouldValidate?: boolean) => void;
80
+ setErrors: (errors: FormErrors) => void;
81
+ reset: (nextValues?: Partial<Values>) => void;
82
+ validate: () => Promise<FormErrors>;
83
+ validateField: (name: string) => Promise<string | undefined>;
84
+ submit: () => void;
85
+ getFieldState: (name: string) => FieldState;
86
+ getFieldProps: (name: string) => FieldInputProps;
87
+ handleBlur: (name: string) => void;
88
+ /** Move focus to the next / previous registered field (used by KeyboardToolbar). */
89
+ focusNext: () => void;
90
+ focusPrev: () => void;
91
+ /** Registers a focusable node so a failed submit can focus the first error. */
92
+ registerField: (name: string, node: FocusableNode | null) => void;
93
+ }
94
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1,27 @@
1
+ import type { FieldInputProps } from './types';
2
+ /**
3
+ * Bind a single field by name. Returns everything an input needs; pick the
4
+ * handler your control uses:
5
+ * const email = useField('email');
6
+ * <Input value={email.value} onChangeText={email.onChangeText} onBlur={email.onBlur} error={email.error} />
7
+ * <Select value={country.value} onChange={country.onChange} error={country.error} />
8
+ * <Switch value={!!agree.value} onChange={agree.onChange} />
9
+ */
10
+ export declare function useField<V = unknown>(name: string): FieldInputProps<V>;
11
+ export interface FieldArrayApi<T = unknown> {
12
+ /** Current array value (empty array when unset). */
13
+ fields: T[];
14
+ length: number;
15
+ push: (item: T) => void;
16
+ remove: (index: number) => void;
17
+ insert: (index: number, item: T) => void;
18
+ move: (from: number, to: number) => void;
19
+ replace: (index: number, item: T) => void;
20
+ }
21
+ /**
22
+ * Manage a repeating list field (phone numbers, line items, etc.) by name.
23
+ * Each helper writes the whole array back through the form so validation and
24
+ * dirty-tracking stay correct.
25
+ */
26
+ export declare function useFieldArray<T = unknown>(name: string): FieldArrayApi<T>;
27
+ //# sourceMappingURL=useField.d.ts.map
@@ -0,0 +1,10 @@
1
+ import type { FormApi, FormConfig, FormValues } from './types';
2
+ /**
3
+ * Dependency-free form engine. Tracks values/errors/touched/dirty, runs
4
+ * synchronous and async validation (per-field rule maps or a form-level
5
+ * function), gates error display behind touched/submit, and on a failed submit
6
+ * focuses the first errored field. The returned object is rebuilt every render
7
+ * so `<Form>` consumers re-render on state changes.
8
+ */
9
+ export declare function useForm<Values extends FormValues = FormValues>(config: FormConfig<Values>): FormApi<Values>;
10
+ //# sourceMappingURL=useForm.d.ts.map
@@ -3,4 +3,7 @@ export type { UseToggleResult } from './useToggle';
3
3
  export { useDebounce } from './useDebounce';
4
4
  export { usePressAnimation } from './usePressAnimation';
5
5
  export type { UsePressAnimationOptions, UsePressAnimationResult } from './usePressAnimation';
6
+ export { useReducedMotion } from './useReducedMotion';
7
+ export { useControllableState } from './useControllableState';
8
+ export type { UseControllableStateOptions } from './useControllableState';
6
9
  //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,17 @@
1
+ export interface UseControllableStateOptions<T> {
2
+ /** Controlled value. When `undefined`, the hook manages state internally. */
3
+ value?: T;
4
+ /** Initial value used in uncontrolled mode. */
5
+ defaultValue: T;
6
+ /** Called on every change (both modes). */
7
+ onChange?: (value: T) => void;
8
+ }
9
+ /**
10
+ * Bridges controlled and uncontrolled usage for a value+onChange pair. When
11
+ * `value` is provided the component is controlled (the hook just forwards it
12
+ * and calls `onChange`); otherwise the hook owns the state, seeded from
13
+ * `defaultValue`. The controlled/uncontrolled decision is locked on first
14
+ * render so a component never flips modes mid-life.
15
+ */
16
+ export declare function useControllableState<T>({ value, defaultValue, onChange }: UseControllableStateOptions<T>): [T, (next: T) => void];
17
+ //# sourceMappingURL=useControllableState.d.ts.map
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Tracks the OS "Reduce Motion" accessibility setting. The library's
3
+ * ThemeProvider uses this to collapse `theme.motion` (durations → 0, springs →
4
+ * near-instant) so animations don't trigger vestibular discomfort; consumers
5
+ * can also read it directly to swap an animated path for a static one.
6
+ */
7
+ export declare const useReducedMotion: () => boolean;
8
+ //# sourceMappingURL=useReducedMotion.d.ts.map
@@ -21,14 +21,16 @@ export { VersionCheck, useVersionCheck } from './versionCheck';
21
21
  export type { UpdateInfo, UpdateType, VersionData, VersionComparison, VersionCheckResult, VersionCheckType, ParsedVersion, Platform } from './versionCheck';
22
22
  export { ThemeProvider, useTheme, useThemeMode, setTheme, setColorMode, getColorMode, getTheme, resetTheme, subscribeTheme, mergeTheme, lightTheme, darkTheme } from './theme';
23
23
  export type { Theme, ThemeOverrides, ThemeProviderProps, IconRegistry, IconRenderer, ColorMode, ColorPalette, ColorSchemePreference, RadiusScale, ShadowDefinition, ShadowScale, SpacingScale, TypographyScale, MotionScale, DeepPartial } from './theme';
24
- export { useToggle, useDebounce, usePressAnimation } from './hooks';
25
- export type { UseToggleResult, UsePressAnimationOptions, UsePressAnimationResult } from './hooks';
24
+ export { useToggle, useDebounce, usePressAnimation, useReducedMotion, useControllableState } from './hooks';
25
+ export type { UseToggleResult, UsePressAnimationOptions, UsePressAnimationResult, UseControllableStateOptions } from './hooks';
26
26
  export { ScreenDimensions, Breakpoints, Responsive, isScreenSize, isTablet, Spacing, Padding, Margin, triggerHaptic, setHapticImplementation, shadowStyle, compressImage } from './utils';
27
27
  export type { BreakpointKey, SpacingToken, HapticType, CompressImageOptions } from './utils';
28
28
  export { formatDate, formatTime, formatDateTime, formatRelativeTime, formatPhone, normalizePhone, formatCurrency, formatNumber, formatPercent, formatCompactNumber, getInitials } from './formatters';
29
29
  export type { DateInput, DateStyle, TimeStyle, FormatCurrencyOptions } from './formatters';
30
30
  export { isNonEmpty, isEmail, isIndianMobile, isPhone, isUrl, isNumeric, isInteger, isAlphanumeric, isStrongPassword, isIndianPincode, isPan, isGstin, isAadhaar, isIfsc, isHexColor, isBetween, minLength, maxLength } from './validators';
31
31
  export type { PasswordRules } from './validators';
32
+ export { useForm, useField, useFieldArray, Form, useFormContext, useOptionalFormContext, rules, getPath, setPath, deletePath } from './form';
33
+ export type { FormApi, FormConfig, FormValues, FormErrors, FormTouched, FieldState, FieldInputProps, FocusableNode, ValidationRule, ValidationResult, FieldRules, ValidationSchema, FormValidateFn, ValidateOn, SubmitHelpers, FieldArrayApi } from './form';
32
34
  export { useNetworkStatus, getNetworkStatus, addNetworkStatusListener, NetworkStatusBanner } from './network';
33
35
  export type { NetworkStatus, NetworkConnectionType, NetworkStatusListener, NetworkStatusBannerProps } from './network';
34
36
  export { Permissions } from './permissions';
@@ -39,6 +39,21 @@ export interface ColorPalette {
39
39
  warning: string;
40
40
  error: string;
41
41
  info: string;
42
+ /**
43
+ * Foreground (text/icon) colour to render ON a solid fill of each semantic
44
+ * tone. Solid Button / Badge / Chip / Banner backgrounds read these instead
45
+ * of assuming `text.inverse` (white) — white-on-pale (notably `warning`
46
+ * amber) fails contrast. Library defaults keep the historical white for
47
+ * primary/success/error/info, use dark ink for `warning`, and `text.primary`
48
+ * for the surface-like `secondary` tone. Override per-brand to match your
49
+ * palette's luminance.
50
+ */
51
+ onPrimary: string;
52
+ onSecondary: string;
53
+ onSuccess: string;
54
+ onWarning: string;
55
+ onError: string;
56
+ onInfo: string;
42
57
  text: {
43
58
  primary: string;
44
59
  secondary: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webority-technologies/mobile",
3
- "version": "0.0.22",
3
+ "version": "0.0.23",
4
4
  "description": "Beautiful, animated, accessible React Native components plus API/auth/logging/network/storage utilities for Webority projects.",
5
5
  "keywords": [
6
6
  "react-native",