solid-hook-form 1.9.1 → 1.9.4

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/main.d.ts CHANGED
@@ -1,16 +1,8 @@
1
1
  import * as solid_js from 'solid-js';
2
2
  import { Accessor, JSXElement, ParentProps } from 'solid-js';
3
- import { Path, LiteralUnion, FieldPath, FieldPathValue, Resolver } from 'react-hook-form';
3
+ import { FieldPath, FieldPathValue, Path, LiteralUnion, Resolver } from 'react-hook-form';
4
4
  export { Path } from 'react-hook-form';
5
5
 
6
- type Message = string;
7
- type FieldError = {
8
- type: LiteralUnion<keyof Rules, string>;
9
- ref?: HTMLElement;
10
- message?: Message;
11
- };
12
- type FieldErrors<F extends FormValues = FormValues> = Partial<Record<Path<F>, FieldError>>;
13
-
14
6
  type ValidateResult = Message | boolean | undefined;
15
7
  type Validate<V, F> = (value: V, formValues: F) => ValidateResult | Promise<ValidateResult>;
16
8
  type ValidationValue = boolean | number | string | RegExp;
@@ -30,6 +22,23 @@ type Rules<F extends FormValues = FormValues, N extends FieldPath<F> = FieldPath
30
22
  validate?: Validate<FieldPathValue<F, N>, F>;
31
23
  };
32
24
 
25
+ type Message = string;
26
+ type FieldError = {
27
+ type: LiteralUnion<keyof Rules, string>;
28
+ ref?: HTMLElement;
29
+ message?: Message;
30
+ };
31
+ type FieldErrors<F extends FormValues = FormValues> = Partial<Record<Path<F>, FieldError>>;
32
+
33
+ type Ref = HTMLElement | null;
34
+ type RegisterReturn<F extends FormValues> = {
35
+ name: Path<F>;
36
+ ref(ref: Ref): void;
37
+ onInput(event: Event | unknown): void;
38
+ onChange(event: Event | unknown): void;
39
+ };
40
+ type Register<F extends FormValues> = (name: Path<F>, options?: Rules<F, Path<F>>) => RegisterReturn<F>;
41
+
33
42
  type Control<F extends FormValues> = {
34
43
  values: Accessor<F>;
35
44
  errors: Accessor<FieldErrors<F>>;
@@ -39,37 +48,24 @@ type UseControllerArg<F extends FormValues> = {
39
48
  control: Control<F>;
40
49
  name: Path<F>;
41
50
  rules?: Rules<F>;
42
- render(arg: UseControllerReturn): JSXElement;
51
+ render(arg: UseControllerReturn<F>): JSXElement;
43
52
  };
44
- type UseControllerReturn = {
45
- field: {
46
- name: string;
53
+ type UseControllerReturn<F extends FormValues> = {
54
+ field: RegisterReturn<F> & {
47
55
  value: Accessor<any>;
48
- onInput(event: Event): void;
49
- onChange(event: Event): void;
50
- ref(element: HTMLElement): void;
51
56
  };
52
57
  fieldState: {
53
58
  error: Accessor<FieldError | undefined>;
54
59
  };
55
60
  };
56
- type UseController = <F extends FormValues>(arg: UseControllerArg<F>) => UseControllerReturn;
57
61
  type ControllerProps<F extends FormValues> = {
58
62
  control: Control<F>;
59
63
  name: Path<F>;
60
64
  rules?: Rules<F>;
61
- render(arg: UseControllerReturn): JSXElement;
65
+ render(arg: UseControllerReturn<F>): JSXElement;
62
66
  };
63
67
 
64
68
  type FormValues = Record<string, any>;
65
- type Ref = HTMLElement | null;
66
- type RegisterReturn<F extends FormValues> = {
67
- name: Path<F>;
68
- ref(ref: Ref): void;
69
- onInput(event: Event): void;
70
- onChange(event: Event): void;
71
- };
72
- type Register<T extends FormValues> = (name: Path<T>, options?: Rules<T, Path<T>>) => RegisterReturn<T>;
73
69
  type GetValues<F extends FormValues> = {
74
70
  (): F;
75
71
  <N extends FieldPath<F>>(name: N): FieldPathValue<F, N>;
@@ -103,7 +99,7 @@ type CreateForm = <F extends FormValues>(arg?: CreateFormArg<F>) => CreateFormRe
103
99
 
104
100
  declare const createForm: CreateForm;
105
101
 
106
- declare const useController: UseController;
102
+ declare const useController: <F extends FormValues>(arg: UseControllerArg<F>) => UseControllerReturn<F>;
107
103
 
108
104
  declare const Controller: <F extends FormValues>(props: ControllerProps<F>) => solid_js.JSX.Element;
109
105
 
package/dist/main.js CHANGED
@@ -5,6 +5,10 @@ import { memo, createComponent } from 'solid-js/web';
5
5
 
6
6
  // src/logic/get_value.ts
7
7
  var getFieldValue = (event) => {
8
+ const isEvent = event instanceof Event;
9
+ if (!isEvent) {
10
+ return event;
11
+ }
8
12
  const field = event.target;
9
13
  if (field instanceof HTMLSelectElement) {
10
14
  return field.value;
@@ -376,13 +380,24 @@ var createForm = (arg = { defaultValues: {} }) => {
376
380
  reset
377
381
  };
378
382
  };
383
+ var FormContext = createContext();
384
+
385
+ // src/use_form_context.ts
386
+ var useFormContext = () => {
387
+ const form = useContext(FormContext);
388
+ return form;
389
+ };
390
+
391
+ // src/use_controller.ts
379
392
  var useController = (arg) => {
380
- const fieldProps = arg.control.register(arg.name, arg.rules);
393
+ const form = useFormContext();
394
+ const control = form?.control || arg.control;
395
+ const fieldProps = control.register(arg.name, arg.rules);
381
396
  const value = createMemo(() => {
382
- return get(arg.control.values(), arg.name);
397
+ return get(control.values(), arg.name);
383
398
  });
384
399
  const error = createMemo(() => {
385
- return arg.control.errors()[arg.name];
400
+ return control.errors()[arg.name];
386
401
  });
387
402
  return {
388
403
  field: {
@@ -398,16 +413,6 @@ var Controller = (props) => {
398
413
  const controller = useController(props);
399
414
  return memo(() => props.render(controller));
400
415
  };
401
- var FormContext = createContext();
402
-
403
- // src/use_form_context.ts
404
- var useFormContext = () => {
405
- const form = useContext(FormContext);
406
- if (!form) {
407
- throw new Error("useFormContext: cannot find a FormProvider");
408
- }
409
- return form;
410
- };
411
416
  var FormProvider = (props) => {
412
417
  return createComponent(FormContext.Provider, {
413
418
  get value() {
package/dist/main.jsx CHANGED
@@ -3,6 +3,10 @@ import { createMemo, createSignal as createSignal2 } from "solid-js";
3
3
 
4
4
  // src/logic/get_value.ts
5
5
  var getFieldValue = (event) => {
6
+ const isEvent = event instanceof Event;
7
+ if (!isEvent) {
8
+ return event;
9
+ }
6
10
  const field = event.target;
7
11
  if (field instanceof HTMLSelectElement) {
8
12
  return field.value;
@@ -380,13 +384,30 @@ var createForm = (arg = { defaultValues: {} }) => {
380
384
 
381
385
  // src/use_controller.ts
382
386
  import { createMemo as createMemo2 } from "solid-js";
387
+
388
+ // src/use_form_context.ts
389
+ import { useContext } from "solid-js";
390
+
391
+ // src/form_context.ts
392
+ import { createContext } from "solid-js";
393
+ var FormContext = createContext();
394
+
395
+ // src/use_form_context.ts
396
+ var useFormContext = () => {
397
+ const form = useContext(FormContext);
398
+ return form;
399
+ };
400
+
401
+ // src/use_controller.ts
383
402
  var useController = (arg) => {
384
- const fieldProps = arg.control.register(arg.name, arg.rules);
403
+ const form = useFormContext();
404
+ const control = form?.control || arg.control;
405
+ const fieldProps = control.register(arg.name, arg.rules);
385
406
  const value = createMemo2(() => {
386
- return get(arg.control.values(), arg.name);
407
+ return get(control.values(), arg.name);
387
408
  });
388
409
  const error = createMemo2(() => {
389
- return arg.control.errors()[arg.name];
410
+ return control.errors()[arg.name];
390
411
  });
391
412
  return {
392
413
  field: {
@@ -405,22 +426,6 @@ var Controller = (props) => {
405
426
  return <>{props.render(controller)}</>;
406
427
  };
407
428
 
408
- // src/use_form_context.ts
409
- import { useContext } from "solid-js";
410
-
411
- // src/form_context.ts
412
- import { createContext } from "solid-js";
413
- var FormContext = createContext();
414
-
415
- // src/use_form_context.ts
416
- var useFormContext = () => {
417
- const form = useContext(FormContext);
418
- if (!form) {
419
- throw new Error("useFormContext: cannot find a FormProvider");
420
- }
421
- return form;
422
- };
423
-
424
429
  // src/form_provider.tsx
425
430
  var FormProvider = (props) => {
426
431
  return <FormContext.Provider value={props.form}>{props.children}</FormContext.Provider>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "solid-hook-form",
3
- "version": "1.9.1",
3
+ "version": "1.9.4",
4
4
  "type": "module",
5
5
  "main": "./dist/main.js",
6
6
  "module": "./dist/main.js",
@@ -20,20 +20,16 @@
20
20
  "solid-js": "^1.9.5"
21
21
  },
22
22
  "devDependencies": {
23
- "@solidjs/testing-library": "^0.8.10",
24
- "@testing-library/user-event": "^14.6.1",
25
23
  "esbuild-plugin-solid": "^0.6.0",
26
- "happy-dom": "^17.4.4",
27
24
  "react-hook-form": "^7.55.0",
28
25
  "tsup": "^8.5.0",
29
- "typescript": "~5.7.2",
30
- "vite": "^6.0.11",
31
- "vite-plugin-solid": "^2.11.6",
32
- "vitest": "^3.1.1"
26
+ "typescript": "~5.7.2"
33
27
  },
34
28
  "scripts": {
29
+ "preinstall": "cd ./tests && npm ci",
35
30
  "build": "tsc && tsup",
36
- "test": "vitest run"
31
+ "test": "cd ./tests && npm run test",
32
+ "test:ui": "cd ./tests && npm run test:ui"
37
33
  },
38
34
  "author": "thorn_pear",
39
35
  "license": "ISC",