@vritti/quantum-ui 0.2.4 → 0.2.5

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 (216) hide show
  1. package/dist/Button.js +1 -1
  2. package/dist/Button.js.map +1 -1
  3. package/dist/Checkbox.js.map +1 -1
  4. package/dist/DatePicker.js.map +1 -1
  5. package/dist/Form.js +108 -97
  6. package/dist/Form.js.map +1 -1
  7. package/dist/Label.js.map +1 -1
  8. package/dist/OTPField.js +2 -1
  9. package/dist/OTPField.js.map +1 -1
  10. package/dist/PasswordField.js.map +1 -1
  11. package/dist/PhoneField.js +2 -1
  12. package/dist/PhoneField.js.map +1 -1
  13. package/dist/Spinner.js.map +1 -1
  14. package/dist/ThemeToggle.js.map +1 -1
  15. package/dist/components/Progress.js.map +1 -1
  16. package/dist/createLucideIcon.js.map +1 -1
  17. package/dist/field.js.map +1 -1
  18. package/dist/index2.js.map +1 -1
  19. package/dist/index3.js.map +1 -1
  20. package/dist/index4.js.map +1 -1
  21. package/dist/index5.js.map +1 -1
  22. package/dist/index6.js.map +1 -1
  23. package/dist/{components → lib/components}/Button/Button.d.ts +1 -1
  24. package/dist/lib/components/Button/Button.d.ts.map +1 -0
  25. package/dist/lib/components/Button/index.d.ts.map +1 -0
  26. package/dist/lib/components/Card/Card.d.ts.map +1 -0
  27. package/dist/lib/components/Card/index.d.ts.map +1 -0
  28. package/dist/lib/components/Checkbox/Checkbox.d.ts.map +1 -0
  29. package/dist/lib/components/Checkbox/index.d.ts.map +1 -0
  30. package/dist/lib/components/DatePicker/DatePicker.d.ts.map +1 -0
  31. package/dist/lib/components/DatePicker/index.d.ts.map +1 -0
  32. package/dist/lib/components/Field/index.d.ts.map +1 -0
  33. package/dist/lib/components/Form/Form.d.ts.map +1 -0
  34. package/dist/lib/components/Form/index.d.ts.map +1 -0
  35. package/dist/{components → lib/components}/OTPField/OTPField.d.ts +3 -2
  36. package/dist/lib/components/OTPField/OTPField.d.ts.map +1 -0
  37. package/dist/lib/components/OTPField/index.d.ts.map +1 -0
  38. package/dist/lib/components/PasswordField/PasswordField.d.ts.map +1 -0
  39. package/dist/lib/components/PasswordField/index.d.ts.map +1 -0
  40. package/dist/{components → lib/components}/PhoneField/PhoneField.d.ts +2 -1
  41. package/dist/lib/components/PhoneField/PhoneField.d.ts.map +1 -0
  42. package/dist/lib/components/PhoneField/index.d.ts.map +1 -0
  43. package/dist/lib/components/Progress/Progress.d.ts.map +1 -0
  44. package/dist/lib/components/Progress/index.d.ts.map +1 -0
  45. package/dist/lib/components/Skeleton/Skeleton.d.ts.map +1 -0
  46. package/dist/lib/components/Skeleton/index.d.ts.map +1 -0
  47. package/dist/lib/components/Spinner/Spinner.d.ts.map +1 -0
  48. package/dist/lib/components/Spinner/index.d.ts.map +1 -0
  49. package/dist/lib/components/TextArea/TextArea.d.ts.map +1 -0
  50. package/dist/lib/components/TextArea/index.d.ts.map +1 -0
  51. package/dist/lib/components/TextField/TextField.d.ts.map +1 -0
  52. package/dist/lib/components/TextField/index.d.ts.map +1 -0
  53. package/dist/lib/components/ThemeToggle/ThemeToggle.d.ts.map +1 -0
  54. package/dist/lib/components/ThemeToggle/index.d.ts.map +1 -0
  55. package/dist/lib/components/Typography/Typography.d.ts.map +1 -0
  56. package/dist/lib/components/Typography/index.d.ts.map +1 -0
  57. package/dist/lib/components/index.d.ts.map +1 -0
  58. package/dist/lib/config/index.d.ts.map +1 -0
  59. package/dist/lib/index.d.ts.map +1 -0
  60. package/dist/lib/utils/axios.d.ts.map +1 -0
  61. package/dist/lib/utils/formHelpers.d.ts.map +1 -0
  62. package/dist/lib/utils/index.d.ts.map +1 -0
  63. package/dist/shadcn/index.d.ts +15 -0
  64. package/dist/shadcn/index.d.ts.map +1 -0
  65. package/dist/shadcn/shadcnButton/Button.d.ts +11 -0
  66. package/dist/shadcn/shadcnButton/Button.d.ts.map +1 -0
  67. package/dist/shadcn/shadcnButton/index.d.ts +2 -0
  68. package/dist/shadcn/shadcnButton/index.d.ts.map +1 -0
  69. package/dist/shadcn/shadcnCalendar/calendar.d.ts +13 -0
  70. package/dist/shadcn/shadcnCalendar/calendar.d.ts.map +1 -0
  71. package/dist/shadcn/shadcnCalendar/index.d.ts +3 -0
  72. package/dist/shadcn/shadcnCalendar/index.d.ts.map +1 -0
  73. package/dist/shadcn/shadcnCard/Card.d.ts +10 -0
  74. package/dist/shadcn/shadcnCard/Card.d.ts.map +1 -0
  75. package/dist/shadcn/shadcnCard/index.d.ts +2 -0
  76. package/dist/shadcn/shadcnCard/index.d.ts.map +1 -0
  77. package/dist/shadcn/shadcnCheckbox/Checkbox.d.ts +5 -0
  78. package/dist/shadcn/shadcnCheckbox/Checkbox.d.ts.map +1 -0
  79. package/dist/shadcn/shadcnCheckbox/index.d.ts +2 -0
  80. package/dist/shadcn/shadcnCheckbox/index.d.ts.map +1 -0
  81. package/dist/shadcn/shadcnDropdownMenu/dropdown-menu.d.ts +28 -0
  82. package/dist/shadcn/shadcnDropdownMenu/dropdown-menu.d.ts.map +1 -0
  83. package/dist/shadcn/shadcnDropdownMenu/index.d.ts +2 -0
  84. package/dist/shadcn/shadcnDropdownMenu/index.d.ts.map +1 -0
  85. package/dist/shadcn/shadcnField/field.d.ts +25 -0
  86. package/dist/shadcn/shadcnField/field.d.ts.map +1 -0
  87. package/dist/shadcn/shadcnField/index.d.ts +2 -0
  88. package/dist/shadcn/shadcnField/index.d.ts.map +1 -0
  89. package/dist/shadcn/shadcnForm/form.d.ts +26 -0
  90. package/dist/shadcn/shadcnForm/form.d.ts.map +1 -0
  91. package/dist/shadcn/shadcnForm/index.d.ts +2 -0
  92. package/dist/shadcn/shadcnForm/index.d.ts.map +1 -0
  93. package/dist/shadcn/shadcnInput/Input.d.ts +4 -0
  94. package/dist/shadcn/shadcnInput/Input.d.ts.map +1 -0
  95. package/dist/shadcn/shadcnInput/index.d.ts +2 -0
  96. package/dist/shadcn/shadcnInput/index.d.ts.map +1 -0
  97. package/dist/shadcn/shadcnInputOTP/InputOTP.d.ts +35 -0
  98. package/dist/shadcn/shadcnInputOTP/InputOTP.d.ts.map +1 -0
  99. package/dist/shadcn/shadcnInputOTP/index.d.ts +2 -0
  100. package/dist/shadcn/shadcnInputOTP/index.d.ts.map +1 -0
  101. package/dist/shadcn/shadcnLabel/Label.d.ts +5 -0
  102. package/dist/shadcn/shadcnLabel/Label.d.ts.map +1 -0
  103. package/dist/shadcn/shadcnLabel/index.d.ts +2 -0
  104. package/dist/shadcn/shadcnLabel/index.d.ts.map +1 -0
  105. package/dist/shadcn/shadcnPopover/index.d.ts +2 -0
  106. package/dist/shadcn/shadcnPopover/index.d.ts.map +1 -0
  107. package/dist/shadcn/shadcnPopover/popover.d.ts +7 -0
  108. package/dist/shadcn/shadcnPopover/popover.d.ts.map +1 -0
  109. package/dist/shadcn/shadcnProgress/Progress.d.ts +5 -0
  110. package/dist/shadcn/shadcnProgress/Progress.d.ts.map +1 -0
  111. package/dist/shadcn/shadcnSelect/index.d.ts +2 -0
  112. package/dist/shadcn/shadcnSelect/index.d.ts.map +1 -0
  113. package/dist/shadcn/shadcnSelect/select.d.ts +16 -0
  114. package/dist/shadcn/shadcnSelect/select.d.ts.map +1 -0
  115. package/dist/shadcn/shadcnSeparator/index.d.ts +2 -0
  116. package/dist/shadcn/shadcnSeparator/index.d.ts.map +1 -0
  117. package/dist/shadcn/shadcnSeparator/separator.d.ts +5 -0
  118. package/dist/shadcn/shadcnSeparator/separator.d.ts.map +1 -0
  119. package/dist/shadcn/shadcnSheet/index.d.ts +2 -0
  120. package/dist/shadcn/shadcnSheet/index.d.ts.map +1 -0
  121. package/dist/shadcn/shadcnSheet/sheet.d.ts +23 -0
  122. package/dist/shadcn/shadcnSheet/sheet.d.ts.map +1 -0
  123. package/dist/shadcn/shadcnSkeleton/index.d.ts +2 -0
  124. package/dist/shadcn/shadcnSkeleton/index.d.ts.map +1 -0
  125. package/dist/shadcn/shadcnSkeleton/skeleton.d.ts +4 -0
  126. package/dist/shadcn/shadcnSkeleton/skeleton.d.ts.map +1 -0
  127. package/dist/shadcn/shadcnSpinner/Spinner.d.ts +3 -0
  128. package/dist/shadcn/shadcnSpinner/Spinner.d.ts.map +1 -0
  129. package/dist/shadcn/shadcnSpinner/index.d.ts +2 -0
  130. package/dist/shadcn/shadcnSpinner/index.d.ts.map +1 -0
  131. package/dist/shadcn/shadcnTable/index.d.ts +2 -0
  132. package/dist/shadcn/shadcnTable/index.d.ts.map +1 -0
  133. package/dist/shadcn/shadcnTable/table.d.ts +11 -0
  134. package/dist/shadcn/shadcnTable/table.d.ts.map +1 -0
  135. package/dist/shadcn/shadcnTextarea/index.d.ts +2 -0
  136. package/dist/shadcn/shadcnTextarea/index.d.ts.map +1 -0
  137. package/dist/shadcn/shadcnTextarea/textarea.d.ts +4 -0
  138. package/dist/shadcn/shadcnTextarea/textarea.d.ts.map +1 -0
  139. package/dist/shadcn/shadcnTooltip/index.d.ts +2 -0
  140. package/dist/shadcn/shadcnTooltip/index.d.ts.map +1 -0
  141. package/dist/shadcn/shadcnTooltip/tooltip.d.ts +8 -0
  142. package/dist/shadcn/shadcnTooltip/tooltip.d.ts.map +1 -0
  143. package/dist/shadcn/utils.d.ts +3 -0
  144. package/dist/shadcn/utils.d.ts.map +1 -0
  145. package/package.json +23 -23
  146. package/dist/components/Button/Button.d.ts.map +0 -1
  147. package/dist/components/Button/index.d.ts.map +0 -1
  148. package/dist/components/Card/Card.d.ts.map +0 -1
  149. package/dist/components/Card/index.d.ts.map +0 -1
  150. package/dist/components/Checkbox/Checkbox.d.ts.map +0 -1
  151. package/dist/components/Checkbox/index.d.ts.map +0 -1
  152. package/dist/components/DatePicker/DatePicker.d.ts.map +0 -1
  153. package/dist/components/DatePicker/index.d.ts.map +0 -1
  154. package/dist/components/Field/index.d.ts.map +0 -1
  155. package/dist/components/Form/Form.d.ts.map +0 -1
  156. package/dist/components/Form/index.d.ts.map +0 -1
  157. package/dist/components/OTPField/OTPField.d.ts.map +0 -1
  158. package/dist/components/OTPField/index.d.ts.map +0 -1
  159. package/dist/components/PasswordField/PasswordField.d.ts.map +0 -1
  160. package/dist/components/PasswordField/index.d.ts.map +0 -1
  161. package/dist/components/PhoneField/PhoneField.d.ts.map +0 -1
  162. package/dist/components/PhoneField/index.d.ts.map +0 -1
  163. package/dist/components/Progress/Progress.d.ts.map +0 -1
  164. package/dist/components/Progress/index.d.ts.map +0 -1
  165. package/dist/components/Skeleton/Skeleton.d.ts.map +0 -1
  166. package/dist/components/Skeleton/index.d.ts.map +0 -1
  167. package/dist/components/Spinner/Spinner.d.ts.map +0 -1
  168. package/dist/components/Spinner/index.d.ts.map +0 -1
  169. package/dist/components/TextArea/TextArea.d.ts.map +0 -1
  170. package/dist/components/TextArea/index.d.ts.map +0 -1
  171. package/dist/components/TextField/TextField.d.ts.map +0 -1
  172. package/dist/components/TextField/index.d.ts.map +0 -1
  173. package/dist/components/ThemeToggle/ThemeToggle.d.ts.map +0 -1
  174. package/dist/components/ThemeToggle/index.d.ts.map +0 -1
  175. package/dist/components/Typography/Typography.d.ts.map +0 -1
  176. package/dist/components/Typography/index.d.ts.map +0 -1
  177. package/dist/components/index.d.ts.map +0 -1
  178. package/dist/config/index.d.ts.map +0 -1
  179. package/dist/index.d.ts.map +0 -1
  180. package/dist/utils/axios.d.ts.map +0 -1
  181. package/dist/utils/formHelpers.d.ts.map +0 -1
  182. package/dist/utils/index.d.ts.map +0 -1
  183. /package/dist/{components → lib/components}/Button/index.d.ts +0 -0
  184. /package/dist/{components → lib/components}/Card/Card.d.ts +0 -0
  185. /package/dist/{components → lib/components}/Card/index.d.ts +0 -0
  186. /package/dist/{components → lib/components}/Checkbox/Checkbox.d.ts +0 -0
  187. /package/dist/{components → lib/components}/Checkbox/index.d.ts +0 -0
  188. /package/dist/{components → lib/components}/DatePicker/DatePicker.d.ts +0 -0
  189. /package/dist/{components → lib/components}/DatePicker/index.d.ts +0 -0
  190. /package/dist/{components → lib/components}/Field/index.d.ts +0 -0
  191. /package/dist/{components → lib/components}/Form/Form.d.ts +0 -0
  192. /package/dist/{components → lib/components}/Form/index.d.ts +0 -0
  193. /package/dist/{components → lib/components}/OTPField/index.d.ts +0 -0
  194. /package/dist/{components → lib/components}/PasswordField/PasswordField.d.ts +0 -0
  195. /package/dist/{components → lib/components}/PasswordField/index.d.ts +0 -0
  196. /package/dist/{components → lib/components}/PhoneField/index.d.ts +0 -0
  197. /package/dist/{components → lib/components}/Progress/Progress.d.ts +0 -0
  198. /package/dist/{components → lib/components}/Progress/index.d.ts +0 -0
  199. /package/dist/{components → lib/components}/Skeleton/Skeleton.d.ts +0 -0
  200. /package/dist/{components → lib/components}/Skeleton/index.d.ts +0 -0
  201. /package/dist/{components → lib/components}/Spinner/Spinner.d.ts +0 -0
  202. /package/dist/{components → lib/components}/Spinner/index.d.ts +0 -0
  203. /package/dist/{components → lib/components}/TextArea/TextArea.d.ts +0 -0
  204. /package/dist/{components → lib/components}/TextArea/index.d.ts +0 -0
  205. /package/dist/{components → lib/components}/TextField/TextField.d.ts +0 -0
  206. /package/dist/{components → lib/components}/TextField/index.d.ts +0 -0
  207. /package/dist/{components → lib/components}/ThemeToggle/ThemeToggle.d.ts +0 -0
  208. /package/dist/{components → lib/components}/ThemeToggle/index.d.ts +0 -0
  209. /package/dist/{components → lib/components}/Typography/Typography.d.ts +0 -0
  210. /package/dist/{components → lib/components}/Typography/index.d.ts +0 -0
  211. /package/dist/{components → lib/components}/index.d.ts +0 -0
  212. /package/dist/{config → lib/config}/index.d.ts +0 -0
  213. /package/dist/{index.d.ts → lib/index.d.ts} +0 -0
  214. /package/dist/{utils → lib/utils}/axios.d.ts +0 -0
  215. /package/dist/{utils → lib/utils}/formHelpers.d.ts +0 -0
  216. /package/dist/{utils → lib/utils}/index.d.ts +0 -0
package/dist/Form.js CHANGED
@@ -38,29 +38,23 @@ var isWeb = typeof window !== 'undefined' &&
38
38
  typeof document !== 'undefined';
39
39
 
40
40
  function cloneObject(data) {
41
- let copy;
42
- const isArray = Array.isArray(data);
43
- const isFileListInstance = typeof FileList !== 'undefined' ? data instanceof FileList : false;
44
41
  if (data instanceof Date) {
45
- copy = new Date(data);
42
+ return new Date(data);
46
43
  }
47
- else if (!(isWeb && (data instanceof Blob || isFileListInstance)) &&
48
- (isArray || isObject(data))) {
49
- copy = isArray ? [] : Object.create(Object.getPrototypeOf(data));
50
- if (!isArray && !isPlainObject(data)) {
51
- copy = data;
52
- }
53
- else {
54
- for (const key in data) {
55
- if (data.hasOwnProperty(key)) {
56
- copy[key] = cloneObject(data[key]);
57
- }
58
- }
59
- }
44
+ const isFileListInstance = typeof FileList !== 'undefined' && data instanceof FileList;
45
+ if (isWeb && (data instanceof Blob || isFileListInstance)) {
46
+ return data;
60
47
  }
61
- else {
48
+ const isArray = Array.isArray(data);
49
+ if (!isArray && !(isObject(data) && isPlainObject(data))) {
62
50
  return data;
63
51
  }
52
+ const copy = isArray ? [] : Object.create(Object.getPrototypeOf(data));
53
+ for (const key in data) {
54
+ if (Object.prototype.hasOwnProperty.call(data, key)) {
55
+ copy[key] = cloneObject(data[key]);
56
+ }
57
+ }
64
58
  return copy;
65
59
  }
66
60
 
@@ -86,6 +80,8 @@ var get = (object, path, defaultValue) => {
86
80
 
87
81
  var isBoolean = (value) => typeof value === 'boolean';
88
82
 
83
+ var isFunction = (value) => typeof value === 'function';
84
+
89
85
  var set = (object, path, value) => {
90
86
  let index = -1;
91
87
  const tempPath = isKey(path) ? [path] : stringToPath(path);
@@ -119,73 +115,16 @@ const VALIDATION_MODE = {
119
115
  all: 'all',
120
116
  };
121
117
 
122
- const HookFormContext = React__default.createContext(null);
123
- HookFormContext.displayName = 'HookFormContext';
124
118
  /**
125
- * This custom hook allows you to access the form context. useFormContext is intended to be used in deeply nested structures, where it would become inconvenient to pass the context as a prop. To be used with {@link FormProvider}.
126
- *
127
- * @remarks
128
- * [API](https://react-hook-form.com/docs/useformcontext) • [Demo](https://codesandbox.io/s/react-hook-form-v7-form-context-ytudi)
129
- *
130
- * @returns return all useForm methods
131
- *
132
- * @example
133
- * ```tsx
134
- * function App() {
135
- * const methods = useForm();
136
- * const onSubmit = data => console.log(data);
137
- *
138
- * return (
139
- * <FormProvider {...methods} >
140
- * <form onSubmit={methods.handleSubmit(onSubmit)}>
141
- * <NestedInput />
142
- * <input type="submit" />
143
- * </form>
144
- * </FormProvider>
145
- * );
146
- * }
147
- *
148
- * function NestedInput() {
149
- * const { register } = useFormContext(); // retrieve all hook methods
150
- * return <input {...register("test")} />;
151
- * }
152
- * ```
119
+ * Separate context for `control` to prevent unnecessary rerenders.
120
+ * Internal hooks that only need control use this instead of full form context.
153
121
  */
154
- const useFormContext = () => React__default.useContext(HookFormContext);
122
+ const HookFormControlContext = React__default.createContext(null);
123
+ HookFormControlContext.displayName = 'HookFormControlContext';
155
124
  /**
156
- * A provider component that propagates the `useForm` methods to all children components via [React Context](https://react.dev/reference/react/useContext) API. To be used with {@link useFormContext}.
157
- *
158
- * @remarks
159
- * [API](https://react-hook-form.com/docs/useformcontext) • [Demo](https://codesandbox.io/s/react-hook-form-v7-form-context-ytudi)
160
- *
161
- * @param props - all useForm methods
162
- *
163
- * @example
164
- * ```tsx
165
- * function App() {
166
- * const methods = useForm();
167
- * const onSubmit = data => console.log(data);
168
- *
169
- * return (
170
- * <FormProvider {...methods} >
171
- * <form onSubmit={methods.handleSubmit(onSubmit)}>
172
- * <NestedInput />
173
- * <input type="submit" />
174
- * </form>
175
- * </FormProvider>
176
- * );
177
- * }
178
- *
179
- * function NestedInput() {
180
- * const { register } = useFormContext(); // retrieve all hook methods
181
- * return <input {...register("test")} />;
182
- * }
183
- * ```
125
+ * @internal Internal hook to access only control from context.
184
126
  */
185
- const FormProvider = (props) => {
186
- const { children, ...data } = props;
187
- return (React__default.createElement(HookFormContext.Provider, { value: data }, children));
188
- };
127
+ const useFormControlContext = () => React__default.useContext(HookFormControlContext);
189
128
 
190
129
  var getProxyFormState = (formState, control, localProxyFormState, isRoot = true) => {
191
130
  const result = {
@@ -239,8 +178,8 @@ const useIsomorphicLayoutEffect = typeof window !== 'undefined' ? React__default
239
178
  * ```
240
179
  */
241
180
  function useFormState(props) {
242
- const methods = useFormContext();
243
- const { control = methods.control, disabled, name, exact } = props || {};
181
+ const formControl = useFormControlContext();
182
+ const { control = formControl, disabled, name, exact } = props || {};
244
183
  const [formState, updateFormState] = React__default.useState(control._formState);
245
184
  const _localProxyFormState = React__default.useRef({
246
185
  isDirty: false,
@@ -286,10 +225,10 @@ var isPrimitive = (value) => isNullOrUndefined(value) || !isObjectType(value);
286
225
 
287
226
  function deepEqual(object1, object2, _internal_visited = new WeakSet()) {
288
227
  if (isPrimitive(object1) || isPrimitive(object2)) {
289
- return object1 === object2;
228
+ return Object.is(object1, object2);
290
229
  }
291
230
  if (isDateObject(object1) && isDateObject(object2)) {
292
- return object1.getTime() === object2.getTime();
231
+ return Object.is(object1.getTime(), object2.getTime());
293
232
  }
294
233
  const keys1 = Object.keys(object1);
295
234
  const keys2 = Object.keys(object2);
@@ -312,7 +251,7 @@ function deepEqual(object1, object2, _internal_visited = new WeakSet()) {
312
251
  (isObject(val1) && isObject(val2)) ||
313
252
  (Array.isArray(val1) && Array.isArray(val2))
314
253
  ? !deepEqual(val1, val2, _internal_visited)
315
- : val1 !== val2) {
254
+ : !Object.is(val1, val2)) {
316
255
  return false;
317
256
  }
318
257
  }
@@ -337,8 +276,8 @@ function deepEqual(object1, object2, _internal_visited = new WeakSet()) {
337
276
  * ```
338
277
  */
339
278
  function useWatch(props) {
340
- const methods = useFormContext();
341
- const { control = methods.control, name, defaultValue, disabled, exact, compute, } = props || {};
279
+ const formControl = useFormControlContext();
280
+ const { control = formControl, name, defaultValue, disabled, exact, compute, } = props || {};
342
281
  const _defaultValue = React__default.useRef(defaultValue);
343
282
  const _compute = React__default.useRef(compute);
344
283
  const _computeFormValues = React__default.useRef(undefined);
@@ -431,20 +370,20 @@ function useWatch(props) {
431
370
  * ```
432
371
  */
433
372
  function useController(props) {
434
- const methods = useFormContext();
435
- const { name, disabled, control = methods.control, shouldUnregister, defaultValue, } = props;
373
+ const formControl = useFormControlContext();
374
+ const { name, disabled, control = formControl, shouldUnregister, defaultValue, exact = true, } = props;
436
375
  const isArrayField = isNameInFieldArray(control._names.array, name);
437
376
  const defaultValueMemo = React__default.useMemo(() => get(control._formValues, name, get(control._defaultValues, name, defaultValue)), [control, name, defaultValue]);
438
377
  const value = useWatch({
439
378
  control,
440
379
  name,
441
380
  defaultValue: defaultValueMemo,
442
- exact: true,
381
+ exact,
443
382
  });
444
383
  const formState = useFormState({
445
384
  control,
446
385
  name,
447
- exact: true,
386
+ exact,
448
387
  });
449
388
  const _props = React__default.useRef(props);
450
389
  const _previousNameRef = React__default.useRef(undefined);
@@ -492,12 +431,12 @@ function useController(props) {
492
431
  }), [name, control._formValues]);
493
432
  const ref = React__default.useCallback((elm) => {
494
433
  const field = get(control._fields, name);
495
- if (field && elm) {
434
+ if (field && field._f && elm) {
496
435
  field._f.ref = {
497
- focus: () => elm.focus && elm.focus(),
498
- select: () => elm.select && elm.select(),
499
- setCustomValidity: (message) => elm.setCustomValidity(message),
500
- reportValidity: () => elm.reportValidity(),
436
+ focus: () => isFunction(elm.focus) && elm.focus(),
437
+ select: () => isFunction(elm.select) && elm.select(),
438
+ setCustomValidity: (message) => isFunction(elm.setCustomValidity) && elm.setCustomValidity(message),
439
+ reportValidity: () => isFunction(elm.reportValidity) && elm.reportValidity(),
501
440
  };
502
441
  }
503
442
  }, [control._fields, name]);
@@ -604,6 +543,78 @@ function useController(props) {
604
543
  */
605
544
  const Controller = (props) => props.render(useController(props));
606
545
 
546
+ const HookFormContext = React__default.createContext(null);
547
+ HookFormContext.displayName = 'HookFormContext';
548
+ /**
549
+ * A provider component that propagates the `useForm` methods to all children components via [React Context](https://react.dev/reference/react/useContext) API. To be used with {@link useFormContext}.
550
+ *
551
+ * @remarks
552
+ * [API](https://react-hook-form.com/docs/useformcontext) • [Demo](https://codesandbox.io/s/react-hook-form-v7-form-context-ytudi)
553
+ *
554
+ * @param props - all useForm methods
555
+ *
556
+ * @example
557
+ * ```tsx
558
+ * function App() {
559
+ * const methods = useForm();
560
+ * const onSubmit = data => console.log(data);
561
+ *
562
+ * return (
563
+ * <FormProvider {...methods} >
564
+ * <form onSubmit={methods.handleSubmit(onSubmit)}>
565
+ * <NestedInput />
566
+ * <input type="submit" />
567
+ * </form>
568
+ * </FormProvider>
569
+ * );
570
+ * }
571
+ *
572
+ * function NestedInput() {
573
+ * const { register } = useFormContext(); // retrieve all hook methods
574
+ * return <input {...register("test")} />;
575
+ * }
576
+ * ```
577
+ */
578
+ const FormProvider = (props) => {
579
+ const { children, watch, getValues, getFieldState, setError, clearErrors, setValue, trigger, formState, resetField, reset, handleSubmit, unregister, control, register, setFocus, subscribe, } = props;
580
+ return (React__default.createElement(HookFormContext.Provider, { value: React__default.useMemo(() => ({
581
+ watch,
582
+ getValues,
583
+ getFieldState,
584
+ setError,
585
+ clearErrors,
586
+ setValue,
587
+ trigger,
588
+ formState,
589
+ resetField,
590
+ reset,
591
+ handleSubmit,
592
+ unregister,
593
+ control,
594
+ register,
595
+ setFocus,
596
+ subscribe,
597
+ }), [
598
+ clearErrors,
599
+ control,
600
+ formState,
601
+ getFieldState,
602
+ getValues,
603
+ handleSubmit,
604
+ register,
605
+ reset,
606
+ resetField,
607
+ setError,
608
+ setFocus,
609
+ setValue,
610
+ subscribe,
611
+ trigger,
612
+ unregister,
613
+ watch,
614
+ ]) },
615
+ React__default.createElement(HookFormControlContext.Provider, { value: control }, children)));
616
+ };
617
+
607
618
  function mapApiErrorsToForm(error, form, options = {}) {
608
619
  const { fieldMapping = {}, setRootError = true } = options;
609
620
  if (!error || typeof error !== "object") {