solid-hook-form 1.6.4 → 1.7.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 CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  <p align="center">
6
6
  <a href="https://solid-hook-form.vercel.app/get-started">Get started</a> |
7
- <a href="https://solid-hook-form-playground.vercel.app">Playground</a> |
7
+ <a href="https://solid-hook-form.vercel.app/#playground">Playground</a> |
8
8
  <a href="https://solid-hook-form.vercel.app/examples">Examples</a>
9
9
  </p>
10
10
 
package/dist/main.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { Path, LiteralUnion, FieldPath, FieldPathValue, Resolver } from 'react-hook-form';
2
2
  import * as solid_js from 'solid-js';
3
- import { Accessor, ParentProps } from 'solid-js';
3
+ import { Accessor, ParentProps, JSX } from 'solid-js';
4
4
 
5
5
  type Message = string;
6
6
  type FieldError = {
@@ -29,6 +29,12 @@ type Rules<F extends FormValues = FormValues, N extends FieldPath<F> = FieldPath
29
29
  validate?: Validate<FieldPathValue<F, N>, F>;
30
30
  };
31
31
 
32
+ type Control<F extends FormValues> = {
33
+ values: Accessor<F>;
34
+ errors: Accessor<FieldErrors<F>>;
35
+ register: Register<F>;
36
+ };
37
+
32
38
  type FormValues = Record<string, any>;
33
39
  type Ref = HTMLElement | null;
34
40
  type RegisterReturn<F extends FormValues> = {
@@ -47,6 +53,7 @@ type SubmitCallback<F extends FormValues> = (values: F) => void;
47
53
  type OnSubmit<F extends FormValues> = (submit: SubmitCallback<F>) => (event: SubmitEvent) => void;
48
54
  type Reset<F extends FormValues> = (newDefaultValues?: Partial<F>) => void;
49
55
  type UseFormReturn<F extends FormValues = FormValues> = {
56
+ control: Control<F>;
50
57
  values: Accessor<F>;
51
58
  errors: Accessor<FieldErrors<F>>;
52
59
  isValid: Accessor<boolean>;
@@ -71,8 +78,28 @@ declare const FormProvider: <T extends FormValues>(props: FormProviderProps<T>)
71
78
 
72
79
  declare const useFormContext: <T extends FormValues>() => UseFormReturn<T>;
73
80
 
81
+ type ControllerRenderArg = {
82
+ field: {
83
+ name: string;
84
+ value: Accessor<any>;
85
+ onInput(event: Event): void;
86
+ onChange(event: Event): void;
87
+ ref(element: HTMLElement): void;
88
+ };
89
+ fieldState: {
90
+ error: Accessor<FieldError | undefined>;
91
+ };
92
+ };
93
+ type ControllerProps<F extends FormValues> = {
94
+ control: Control<F>;
95
+ name: Path<F>;
96
+ rules?: Rules<F>;
97
+ render(arg: ControllerRenderArg): JSX.Element;
98
+ };
99
+ declare const Controller: <F extends FormValues>(props: ControllerProps<F>) => JSX.Element;
100
+
74
101
  declare const get: (object: any, path: string, defaultValue?: unknown) => any;
75
102
 
76
103
  declare const set: (object: FormValues, path: string, value: unknown) => void;
77
104
 
78
- export { type FieldError, type FieldErrors, FormProvider, get, set, useForm, useFormContext };
105
+ export { Controller, type FieldError, type FieldErrors, FormProvider, get, set, useForm, useFormContext };
package/dist/main.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { createContext, createSignal, createMemo, useContext } from 'solid-js';
2
- import { createComponent } from 'solid-js/web';
2
+ import { createComponent, memo } from 'solid-js/web';
3
3
 
4
4
  // src/use_form.ts
5
5
 
@@ -292,7 +292,6 @@ var useForm = (arg = { defaultValues: {} }) => {
292
292
  addRule(name, options);
293
293
  return {
294
294
  name,
295
- // value: get(values(), name),
296
295
  onInput(event) {
297
296
  if (mode === "onChange") {
298
297
  onFieldChange(event, name);
@@ -315,6 +314,11 @@ var useForm = (arg = { defaultValues: {} }) => {
315
314
  }
316
315
  };
317
316
  };
317
+ const control = {
318
+ values,
319
+ errors,
320
+ register
321
+ };
318
322
  const getValues = (name) => {
319
323
  if (name) {
320
324
  return get(values(), name);
@@ -356,6 +360,7 @@ var useForm = (arg = { defaultValues: {} }) => {
356
360
  });
357
361
  };
358
362
  return {
363
+ control,
359
364
  values,
360
365
  errors,
361
366
  isValid,
@@ -386,5 +391,23 @@ var useFormContext = () => {
386
391
  }
387
392
  return form;
388
393
  };
394
+ var Controller = (props) => {
395
+ const fieldProps = props.control.register(props.name, props.rules);
396
+ const value = createMemo(() => {
397
+ return get(props.control.values(), props.name);
398
+ });
399
+ const error = createMemo(() => {
400
+ return props.control.errors()[props.name];
401
+ });
402
+ return memo(() => props.render({
403
+ field: {
404
+ value,
405
+ ...fieldProps
406
+ },
407
+ fieldState: {
408
+ error
409
+ }
410
+ }));
411
+ };
389
412
 
390
- export { FormProvider, get, set, useForm, useFormContext };
413
+ export { Controller, FormProvider, get, set, useForm, useFormContext };
package/dist/main.jsx CHANGED
@@ -293,7 +293,6 @@ var useForm = (arg = { defaultValues: {} }) => {
293
293
  addRule(name, options);
294
294
  return {
295
295
  name,
296
- // value: get(values(), name),
297
296
  onInput(event) {
298
297
  if (mode === "onChange") {
299
298
  onFieldChange(event, name);
@@ -316,6 +315,11 @@ var useForm = (arg = { defaultValues: {} }) => {
316
315
  }
317
316
  };
318
317
  };
318
+ const control = {
319
+ values,
320
+ errors,
321
+ register
322
+ };
319
323
  const getValues = (name) => {
320
324
  if (name) {
321
325
  return get(values(), name);
@@ -357,6 +361,7 @@ var useForm = (arg = { defaultValues: {} }) => {
357
361
  });
358
362
  };
359
363
  return {
364
+ control,
360
365
  values,
361
366
  errors,
362
367
  isValid,
@@ -386,7 +391,31 @@ var useFormContext = () => {
386
391
  }
387
392
  return form;
388
393
  };
394
+
395
+ // src/controller.tsx
396
+ import { createMemo as createMemo2 } from "solid-js";
397
+ var Controller = (props) => {
398
+ const fieldProps = props.control.register(props.name, props.rules);
399
+ const value = createMemo2(() => {
400
+ return get(props.control.values(), props.name);
401
+ });
402
+ const error = createMemo2(() => {
403
+ return props.control.errors()[props.name];
404
+ });
405
+ return <>
406
+ {props.render({
407
+ field: {
408
+ value,
409
+ ...fieldProps
410
+ },
411
+ fieldState: {
412
+ error
413
+ }
414
+ })}
415
+ </>;
416
+ };
389
417
  export {
418
+ Controller,
390
419
  FormProvider,
391
420
  get,
392
421
  set,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "solid-hook-form",
3
- "version": "1.6.4",
3
+ "version": "1.7.0",
4
4
  "type": "module",
5
5
  "main": "./dist/main.js",
6
6
  "module": "./dist/main.js",
@@ -40,7 +40,7 @@
40
40
  "description": "Performant, flexible and extensible forms with easy to use validation",
41
41
  "repository": {
42
42
  "type": "git",
43
- "url": "https://github.com/tatsmaki/solid-hook-form.git"
43
+ "url": "git+https://github.com/tatsmaki/solid-hook-form.git"
44
44
  },
45
45
  "homepage": "https://solid-hook-form.vercel.app",
46
46
  "keywords": [