@saas-ui/forms 2.0.0-next.2 → 2.0.0-next.20

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 (62) hide show
  1. package/CHANGELOG.md +188 -0
  2. package/README.md +53 -6
  3. package/dist/ajv/index.d.ts +24 -11
  4. package/dist/ajv/index.js +7 -9
  5. package/dist/ajv/index.js.map +1 -1
  6. package/dist/ajv/index.mjs +7 -10
  7. package/dist/ajv/index.mjs.map +1 -1
  8. package/dist/index.d.ts +519 -280
  9. package/dist/index.js +777 -696
  10. package/dist/index.js.map +1 -1
  11. package/dist/index.mjs +756 -676
  12. package/dist/index.mjs.map +1 -1
  13. package/dist/yup/index.d.ts +525 -21
  14. package/dist/yup/index.js +21 -9
  15. package/dist/yup/index.js.map +1 -1
  16. package/dist/yup/index.mjs +21 -10
  17. package/dist/yup/index.mjs.map +1 -1
  18. package/dist/zod/index.d.ts +525 -12
  19. package/dist/zod/index.js +21 -1
  20. package/dist/zod/index.js.map +1 -1
  21. package/dist/zod/index.mjs +21 -3
  22. package/dist/zod/index.mjs.map +1 -1
  23. package/package.json +33 -10
  24. package/src/array-field.tsx +88 -48
  25. package/src/auto-form.tsx +7 -3
  26. package/src/base-field.tsx +54 -0
  27. package/src/create-field.tsx +144 -0
  28. package/src/create-form.tsx +68 -0
  29. package/src/create-step-form.tsx +100 -0
  30. package/src/default-fields.tsx +163 -0
  31. package/src/display-field.tsx +9 -11
  32. package/src/display-if.tsx +20 -13
  33. package/src/field-resolver.ts +10 -8
  34. package/src/field.tsx +18 -445
  35. package/src/fields-context.tsx +23 -0
  36. package/src/fields.tsx +34 -21
  37. package/src/form-context.tsx +84 -0
  38. package/src/form.tsx +77 -55
  39. package/src/index.ts +58 -4
  40. package/src/input-right-button/input-right-button.stories.tsx +1 -1
  41. package/src/input-right-button/input-right-button.tsx +0 -2
  42. package/src/layout.tsx +16 -11
  43. package/src/number-input/number-input.tsx +9 -5
  44. package/src/object-field.tsx +35 -13
  45. package/src/password-input/password-input.stories.tsx +23 -2
  46. package/src/password-input/password-input.tsx +6 -6
  47. package/src/pin-input/pin-input.tsx +1 -5
  48. package/src/radio/radio-input.stories.tsx +1 -1
  49. package/src/radio/radio-input.tsx +12 -10
  50. package/src/select/native-select.tsx +1 -4
  51. package/src/select/select-context.tsx +130 -0
  52. package/src/select/select.stories.tsx +116 -85
  53. package/src/select/select.test.tsx +1 -1
  54. package/src/select/select.tsx +162 -146
  55. package/src/step-form.tsx +76 -76
  56. package/src/submit-button.tsx +5 -1
  57. package/src/types.ts +149 -0
  58. package/src/use-array-field.tsx +9 -3
  59. package/src/use-step-form.tsx +54 -9
  60. package/src/utils.ts +23 -1
  61. package/src/watch-field.tsx +2 -6
  62. /package/src/radio/{radio.test.tsx → radio-input.test.tsx} +0 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,155 @@
1
1
  # @saas-ui/forms
2
2
 
3
+ ## 2.0.0-next.20
4
+
5
+ ### Minor Changes
6
+
7
+ - a9ca90dd: Updated to Chakra UI 2.6.x
8
+
9
+ ### Patch Changes
10
+
11
+ - Updated dependencies [2b639656]
12
+ - @saas-ui/core@2.0.0-next.17
13
+
14
+ ## 2.0.0-next.19
15
+
16
+ ### Patch Changes
17
+
18
+ - @saas-ui/core@2.0.0-next.16
19
+
20
+ ## 2.0.0-next.18
21
+
22
+ ### Patch Changes
23
+
24
+ - 01ac442f: Fixed modal form handler type inference
25
+
26
+ ## 2.0.0-next.17
27
+
28
+ ### Patch Changes
29
+
30
+ - Updated dependencies [a5898c44]
31
+ - @saas-ui/core@2.0.0-next.15
32
+
33
+ ## 2.0.0-next.16
34
+
35
+ ### Patch Changes
36
+
37
+ - Updated dependencies [b8be6d41]
38
+ - @saas-ui/core@2.0.0-next.14
39
+
40
+ ## 2.0.0-next.15
41
+
42
+ ### Minor Changes
43
+
44
+ - 2d18cdc2: New createFormDialog function to create Zod or Yup specific FormDialogs
45
+
46
+ ### Patch Changes
47
+
48
+ - Updated dependencies [826c561a]
49
+ - @saas-ui/core@2.0.0-next.13
50
+
51
+ ## 2.0.0-next.14
52
+
53
+ ### Patch Changes
54
+
55
+ - Fix esm bundle import
56
+ - Updated dependencies
57
+ - @saas-ui/core@2.0.0-next.12
58
+
59
+ ## 2.0.0-next.13
60
+
61
+ ### Patch Changes
62
+
63
+ - Bump version
64
+ - 6c63217c: object and array field props can now be overridden using the fields prop
65
+ - Updated dependencies
66
+ - @saas-ui/core@2.0.0-next.11
67
+
68
+ ## 2.0.0-next.12
69
+
70
+ ### Patch Changes
71
+
72
+ - a7ef6dd9: Fixed issue where types for exports were not detected
73
+ - Updated dependencies [a7ef6dd9]
74
+ - @saas-ui/core@2.0.0-next.10
75
+
76
+ ## 2.0.0-next.11
77
+
78
+ ### Patch Changes
79
+
80
+ - @saas-ui/core@2.0.0-next.9
81
+
82
+ ## 2.0.0-next.10
83
+
84
+ ### Patch Changes
85
+
86
+ - @saas-ui/core@2.0.0-next.8
87
+
88
+ ## 2.0.0-next.9
89
+
90
+ ### Patch Changes
91
+
92
+ - 84e59fec: Form render prop Field now supports ref
93
+ - Updated dependencies [189190c6]
94
+ - Updated dependencies [1177329d]
95
+ - @saas-ui/core@2.0.0-next.7
96
+
97
+ ## 2.0.0-next.8
98
+
99
+ ### Patch Changes
100
+
101
+ - 6d3f5717: Fix React import
102
+
103
+ ## 2.0.0-next.7
104
+
105
+ ### Patch Changes
106
+
107
+ - Updated dependencies [7052dad3]
108
+ - @saas-ui/core@2.0.0-next.6
109
+
110
+ ## 2.0.0-next.6
111
+
112
+ ### Major Changes
113
+
114
+ - 532011d6: Restructured the Select component to make it atomic, the new composition is Select, SelectButton, SelectList and SelectOption.
115
+ - 39e778d8: Form will now render AutoField by default when no children are passed.
116
+
117
+ ### Minor Changes
118
+
119
+ - 532011d6: Select can now supports theming using the SuiSelect theme config.
120
+ - 6dd737ce: Select field now renders invalid state.
121
+ - c85541cb: AutoForm field props can now be overridden using the fields prop on Form
122
+
123
+ ## 2.0.0-next.5
124
+
125
+ ### Minor Changes
126
+
127
+ - a8ea24da: PasswordInput now accepts leftAddon property.
128
+
129
+ ### Patch Changes
130
+
131
+ - Updated dependencies [61b27fa6]
132
+ - @saas-ui/core@2.0.0-next.5
133
+
134
+ ## 2.0.0-next.4
135
+
136
+ ### Patch Changes
137
+
138
+ - Updated dependencies [83f54180]
139
+ - Updated dependencies [ba61612f]
140
+ - Updated dependencies [83f54180]
141
+ - Updated dependencies [83f54180]
142
+ - Updated dependencies [83f54180]
143
+ - Updated dependencies [83f54180]
144
+ - Updated dependencies [27a68bca]
145
+ - @saas-ui/core@2.0.0-next.4
146
+
147
+ ## 2.0.0-next.3
148
+
149
+ ### Patch Changes
150
+
151
+ - @saas-ui/core@2.0.0-next.3
152
+
3
153
  ## 2.0.0-next.2
4
154
 
5
155
  ### Patch Changes
@@ -33,6 +183,44 @@
33
183
  - Updated dependencies [3a15e8c8]
34
184
  - @saas-ui/core@2.0.0-next.0
35
185
 
186
+ ## 1.5.5
187
+
188
+ ### Patch Changes
189
+
190
+ - Fix types path
191
+ - Updated dependencies
192
+ - @saas-ui/button@1.4.2
193
+ - @saas-ui/input-right-button@1.4.2
194
+ - @saas-ui/number-input@1.4.2
195
+ - @saas-ui/password-input@1.4.2
196
+ - @saas-ui/pin-input@1.4.2
197
+ - @saas-ui/radio@1.4.3
198
+ - @saas-ui/react-utils@1.2.2
199
+ - @saas-ui/select@1.4.2
200
+ - @saas-ui/stepper@1.4.2
201
+
202
+ ## 1.5.4
203
+
204
+ ### Patch Changes
205
+
206
+ - b2302a3: Add types to package.json exports
207
+ - Updated dependencies [b2302a3]
208
+ - @saas-ui/button@1.4.1
209
+ - @saas-ui/input-right-button@1.4.1
210
+ - @saas-ui/number-input@1.4.1
211
+ - @saas-ui/password-input@1.4.1
212
+ - @saas-ui/pin-input@1.4.1
213
+ - @saas-ui/radio@1.4.2
214
+ - @saas-ui/react-utils@1.2.1
215
+ - @saas-ui/select@1.4.1
216
+ - @saas-ui/stepper@1.4.1
217
+
218
+ ## 1.5.3
219
+
220
+ ### Patch Changes
221
+
222
+ - 382e095: InputRightButton no longer exported from forms package to prevent conflicts.
223
+
36
224
  ## 1.5.2
37
225
 
38
226
  ### Patch Changes
package/README.md CHANGED
@@ -1,10 +1,11 @@
1
- # @saas-ui/forms
1
+ # Forms Manager
2
2
 
3
- Chakra UI Forms.
3
+ Powerfull forms library for Chakra UI.
4
+ Create typesafe React forms with speed.
4
5
 
5
- Create fully functional React forms with just a few lines of code.
6
+ Supports Zod, Yup and AJV for validation and form generation.
6
7
 
7
- Uses React Hook Form under the hood.
8
+ - [Docs](https://www.saas-ui.dev/docs/forms/form)
8
9
 
9
10
  ## Installation
10
11
 
@@ -16,9 +17,55 @@ $ yarn add @saas-ui/forms
16
17
  $ npm i @saas-ui/forms --save
17
18
  ```
18
19
 
19
- ## Docs
20
+ ## Usage with Zod
20
21
 
21
- https://www.saas-ui.dev/docs/forms/form
22
+ ### AutoForm
23
+
24
+ Generate forms from schema.
25
+
26
+ ```tsx
27
+ import { createZodForm } from '@saas-ui/forms/zod'
28
+
29
+ const { AutoForm } = createZodForm()
30
+
31
+ const schema = z.object({
32
+ name: z.string(),
33
+ })
34
+
35
+ function App() {
36
+ const onSubmit = (data: z.infer<typeof schema>) => {}
37
+ return <AutoForm schema={schema} onSubmit={onSubmit} />
38
+ }
39
+ ```
40
+
41
+ ### Form
42
+
43
+ Create custom typesafe forms.
44
+
45
+ ```tsx
46
+ import { FormLayout, createZodForm } from '@saas-ui/forms/zod'
47
+
48
+ const { Form, SubmitButton } = createZodForm()
49
+
50
+ const schema = z.object({
51
+ name: z.string()
52
+ })
53
+
54
+ function App() {
55
+ const onSubmit = (data: z.infer<typeof schema>) => {}
56
+
57
+ return (
58
+ <Form schema={schema} onSubmit={onSubmit}>
59
+ {({ Field }) => (
60
+ <FormLayout>
61
+ <Field name="name" type="text" />
62
+ <SubmitButton>Save</SubmitButton>
63
+ </FormLayotu>
64
+ )}
65
+ </Form>
66
+ )
67
+ }
68
+ ```
22
69
 
23
70
  ## Source
24
71
 
@@ -1,21 +1,34 @@
1
+ import { FieldResolver, CreateFormProps, WithFields, FormProps } from '@saas-ui/forms';
1
2
  import { ajvResolver } from '@hookform/resolvers/ajv';
2
3
  export { ajvResolver } from '@hookform/resolvers/ajv';
3
- import { FieldResolver, CreateFormProps } from '@saas-ui/forms';
4
- import { JSONSchemaType } from 'ajv';
4
+ import { JTDDataType } from 'ajv/dist/jtd';
5
5
  export { JTDDataType, JTDSchemaType } from 'ajv/dist/jtd';
6
+ import { JSONSchemaType } from 'ajv';
6
7
 
7
- interface JsonSchemaFormReturn {
8
- schema: JSONSchemaType<unknown>;
9
- fieldResolver: FieldResolver;
10
- resolver: ReturnType<typeof ajvResolver>;
11
- }
12
- declare const jsonSchemaForm: (schema: JSONSchemaType<unknown>) => JsonSchemaFormReturn;
8
+ declare const ajvFieldResolver: (schema: JSONSchemaType<unknown>) => FieldResolver;
13
9
 
14
10
  type ResolverArgs = Parameters<typeof ajvResolver>;
15
- interface CreateAjvFormProps extends CreateFormProps {
11
+ interface CreateAjvFormProps<FieldDefs> extends CreateFormProps<FieldDefs> {
16
12
  schemaOptions?: ResolverArgs[1];
17
13
  resolverOptions?: ResolverArgs[2];
18
14
  }
19
- declare function createAjvForm(options?: CreateAjvFormProps): any;
15
+ type ParseJsonSchema<T> = T extends {
16
+ type: 'object';
17
+ } ? JTDDataType<T> extends infer R ? R extends object ? R : never : never : never;
18
+ type AjvFormType<FieldDefs, ExtraProps = object, JsonSchema extends Record<string, any> = Record<string, any>> = (<TSchema extends JsonSchema = JsonSchema, TFieldValues extends ParseJsonSchema<TSchema> = ParseJsonSchema<TSchema>, TContext extends object = object>(props: WithFields<FormProps<TSchema, TFieldValues, TContext>, FieldDefs> & {
19
+ ref?: React.ForwardedRef<HTMLFormElement>;
20
+ } & ExtraProps) => React.ReactElement) & {
21
+ displayName?: string;
22
+ id?: string;
23
+ };
24
+ /**
25
+ * Create a Form component with AJV validation that accepts JSON Type Definition schema
26
+ *
27
+ * @see Docs https://saas-ui.dev/docs/components/forms/form
28
+ * @see https://ajv.js.org/json-type-definition.html
29
+ */
30
+ declare function createAjvForm<FieldDefs>(options?: CreateAjvFormProps<FieldDefs>): AjvFormType<FieldDefs, object, Record<string, any>>;
31
+
32
+ declare const Form: AjvFormType<unknown, object, Record<string, any>>;
20
33
 
21
- export { CreateAjvFormProps, createAjvForm, jsonSchemaForm };
34
+ export { CreateAjvFormProps, Form, ajvFieldResolver, createAjvForm };
package/dist/ajv/index.js CHANGED
@@ -4,28 +4,26 @@ var ajv = require('@hookform/resolvers/ajv');
4
4
  var forms = require('@saas-ui/forms');
5
5
 
6
6
  // ajv/src/ajv-resolver.ts
7
- var jsonSchemaFieldResolver = (schema) => {
7
+ var ajvFieldResolver = (schema) => {
8
8
  return forms.objectFieldResolver(schema.properties);
9
9
  };
10
- var jsonSchemaForm = (schema) => {
11
- return {
12
- schema,
13
- fieldResolver: jsonSchemaFieldResolver(schema),
14
- resolver: ajv.ajvResolver(schema)
15
- };
16
- };
17
10
  function createAjvForm(options) {
18
11
  return forms.createForm({
19
12
  resolver: (schema) => ajv.ajvResolver(schema, options == null ? void 0 : options.schemaOptions, options == null ? void 0 : options.resolverOptions),
13
+ fieldResolver: ajvFieldResolver,
20
14
  ...options
21
15
  });
22
16
  }
23
17
 
18
+ // ajv/src/index.ts
19
+ var Form = createAjvForm();
20
+
24
21
  Object.defineProperty(exports, 'ajvResolver', {
25
22
  enumerable: true,
26
23
  get: function () { return ajv.ajvResolver; }
27
24
  });
25
+ exports.Form = Form;
26
+ exports.ajvFieldResolver = ajvFieldResolver;
28
27
  exports.createAjvForm = createAjvForm;
29
- exports.jsonSchemaForm = jsonSchemaForm;
30
28
  //# sourceMappingURL=out.js.map
31
29
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../ajv/src/ajv-resolver.ts","../../ajv/src/create-ajv-form.ts"],"names":[],"mappings":";AAAA,SAAS,mBAAmB;AAC5B,SAAS,2BAA0C;AAMnD,IAAM,0BAA0B,CAAC,WAAoC;AACnE,SAAO,oBAAoB,OAAO,UAAU;AAC9C;AAQO,IAAM,iBAAiB,CAC5B,WACyB;AACzB,SAAO;AAAA,IACL;AAAA,IACA,eAAe,wBAAwB,MAAM;AAAA,IAC7C,UAAU,YAAY,MAAM;AAAA,EAC9B;AACF;;;ACzBA;AAAA,EACE;AAAA,OAIK;AAWA,SAAS,cAAc,SAAmC;AAC/D,SAAO,WAAW;AAAA,IAChB,UAAU,CAAC,WACT,YAAY,QAAQ,mCAAS,eAAe,mCAAS,eAAe;AAAA,IACtE,GAAG;AAAA,EACL,CAAC;AAOH","sourcesContent":["import { ajvResolver } from '@hookform/resolvers/ajv'\nimport { objectFieldResolver, FieldResolver } from '@saas-ui/forms'\n\nimport { JSONSchemaType } from 'ajv'\n\nexport { ajvResolver }\n\nconst jsonSchemaFieldResolver = (schema: JSONSchemaType<unknown>) => {\n return objectFieldResolver(schema.properties)\n}\n\ninterface JsonSchemaFormReturn {\n schema: JSONSchemaType<unknown>\n fieldResolver: FieldResolver\n resolver: ReturnType<typeof ajvResolver>\n}\n\nexport const jsonSchemaForm = (\n schema: JSONSchemaType<unknown>\n): JsonSchemaFormReturn => {\n return {\n schema,\n fieldResolver: jsonSchemaFieldResolver(schema),\n resolver: ajvResolver(schema),\n }\n}\n","import {\n createForm,\n CreateFormProps,\n FieldValues,\n FormProps,\n} from '@saas-ui/forms'\nimport { ajvResolver } from './ajv-resolver'\nimport { JSONSchemaType } from 'ajv'\n\ntype ResolverArgs = Parameters<typeof ajvResolver>\n\nexport interface CreateAjvFormProps extends CreateFormProps {\n schemaOptions?: ResolverArgs[1]\n resolverOptions?: ResolverArgs[2]\n}\n\nexport function createAjvForm(options?: CreateAjvFormProps): any {\n return createForm({\n resolver: (schema) =>\n ajvResolver(schema, options?.schemaOptions, options?.resolverOptions),\n ...options,\n }) as <\n TFieldValues extends FieldValues = FieldValues,\n TSchema extends JSONSchemaType<TFieldValues> = JSONSchemaType<TFieldValues>,\n TContext extends object = object\n >(\n props: FormProps<TFieldValues, TContext, TSchema>\n ) => React.ReactElement\n}\n"]}
1
+ {"version":3,"sources":["../../ajv/src/ajv-resolver.ts","../../ajv/src/create-ajv-form.ts","../../ajv/src/index.ts"],"names":[],"mappings":";AAAA,SAAS,mBAAmB;AAC5B,SAAS,2BAA0C;AAM5C,IAAM,mBAAmB,CAAC,WAAoC;AACnE,SAAO,oBAAoB,OAAO,UAAU;AAC9C;;;ACTA;AAAA,EACE;AAAA,OAKK;AA0CA,SAAS,cACd,SACA;AACA,SAAO,WAAW;AAAA,IAChB,UAAU,CAAC,WACT,YAAY,QAAQ,mCAAS,eAAe,mCAAS,eAAe;AAAA,IACtE,eAAe;AAAA,IACf,GAAG;AAAA,EACL,CAAC;AACH;;;AClDO,IAAM,OAAO,cAAc","sourcesContent":["import { ajvResolver } from '@hookform/resolvers/ajv'\nimport { objectFieldResolver, FieldResolver } from '@saas-ui/forms'\n\nimport { JSONSchemaType } from 'ajv'\n\nexport { ajvResolver }\n\nexport const ajvFieldResolver = (schema: JSONSchemaType<unknown>) => {\n return objectFieldResolver(schema.properties)\n}\n","import {\n createForm,\n CreateFormProps,\n FieldValues,\n FormProps,\n WithFields,\n} from '@saas-ui/forms'\nimport { ajvFieldResolver, ajvResolver } from './ajv-resolver'\nimport { JTDDataType } from 'ajv/dist/jtd'\ntype ResolverArgs = Parameters<typeof ajvResolver>\n\nexport interface CreateAjvFormProps<FieldDefs>\n extends CreateFormProps<FieldDefs> {\n schemaOptions?: ResolverArgs[1]\n resolverOptions?: ResolverArgs[2]\n}\n\ntype ParseJsonSchema<T> = T extends { type: 'object' }\n ? JTDDataType<T> extends infer R\n ? R extends object\n ? R\n : never\n : never\n : never\n\nexport type AjvFormType<\n FieldDefs,\n ExtraProps = object,\n JsonSchema extends Record<string, any> = Record<string, any>\n> = (<\n TSchema extends JsonSchema = JsonSchema,\n TFieldValues extends ParseJsonSchema<TSchema> = ParseJsonSchema<TSchema>,\n TContext extends object = object\n>(\n props: WithFields<FormProps<TSchema, TFieldValues, TContext>, FieldDefs> & {\n ref?: React.ForwardedRef<HTMLFormElement>\n } & ExtraProps\n) => React.ReactElement) & {\n displayName?: string\n id?: string\n}\n\n/**\n * Create a Form component with AJV validation that accepts JSON Type Definition schema\n *\n * @see Docs https://saas-ui.dev/docs/components/forms/form\n * @see https://ajv.js.org/json-type-definition.html\n */\nexport function createAjvForm<FieldDefs>(\n options?: CreateAjvFormProps<FieldDefs>\n) {\n return createForm({\n resolver: (schema: any) =>\n ajvResolver(schema, options?.schemaOptions, options?.resolverOptions),\n fieldResolver: ajvFieldResolver,\n ...options,\n }) as AjvFormType<FieldDefs>\n}\n","export * from './ajv-resolver'\nexport { createAjvForm } from './create-ajv-form'\nexport type { CreateAjvFormProps } from './create-ajv-form'\nexport type { JTDDataType, JTDSchemaType } from 'ajv/dist/jtd'\n\nimport { createAjvForm } from './create-ajv-form'\n\nexport const Form = createAjvForm()\n"]}
@@ -1,25 +1,22 @@
1
1
  import { ajvResolver } from '@hookform/resolvers/ajv';
2
2
  export { ajvResolver } from '@hookform/resolvers/ajv';
3
- import { createForm, objectFieldResolver } from '@saas-ui/forms';
3
+ import { objectFieldResolver, createForm } from '@saas-ui/forms';
4
4
 
5
5
  // ajv/src/ajv-resolver.ts
6
- var jsonSchemaFieldResolver = (schema) => {
6
+ var ajvFieldResolver = (schema) => {
7
7
  return objectFieldResolver(schema.properties);
8
8
  };
9
- var jsonSchemaForm = (schema) => {
10
- return {
11
- schema,
12
- fieldResolver: jsonSchemaFieldResolver(schema),
13
- resolver: ajvResolver(schema)
14
- };
15
- };
16
9
  function createAjvForm(options) {
17
10
  return createForm({
18
11
  resolver: (schema) => ajvResolver(schema, options == null ? void 0 : options.schemaOptions, options == null ? void 0 : options.resolverOptions),
12
+ fieldResolver: ajvFieldResolver,
19
13
  ...options
20
14
  });
21
15
  }
22
16
 
23
- export { createAjvForm, jsonSchemaForm };
17
+ // ajv/src/index.ts
18
+ var Form = createAjvForm();
19
+
20
+ export { Form, ajvFieldResolver, createAjvForm };
24
21
  //# sourceMappingURL=out.js.map
25
22
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../ajv/src/ajv-resolver.ts","../../ajv/src/create-ajv-form.ts"],"names":[],"mappings":";AAAA,SAAS,mBAAmB;AAC5B,SAAS,2BAA0C;AAMnD,IAAM,0BAA0B,CAAC,WAAoC;AACnE,SAAO,oBAAoB,OAAO,UAAU;AAC9C;AAQO,IAAM,iBAAiB,CAC5B,WACyB;AACzB,SAAO;AAAA,IACL;AAAA,IACA,eAAe,wBAAwB,MAAM;AAAA,IAC7C,UAAU,YAAY,MAAM;AAAA,EAC9B;AACF;;;ACzBA;AAAA,EACE;AAAA,OAIK;AAWA,SAAS,cAAc,SAAmC;AAC/D,SAAO,WAAW;AAAA,IAChB,UAAU,CAAC,WACT,YAAY,QAAQ,mCAAS,eAAe,mCAAS,eAAe;AAAA,IACtE,GAAG;AAAA,EACL,CAAC;AAOH","sourcesContent":["import { ajvResolver } from '@hookform/resolvers/ajv'\nimport { objectFieldResolver, FieldResolver } from '@saas-ui/forms'\n\nimport { JSONSchemaType } from 'ajv'\n\nexport { ajvResolver }\n\nconst jsonSchemaFieldResolver = (schema: JSONSchemaType<unknown>) => {\n return objectFieldResolver(schema.properties)\n}\n\ninterface JsonSchemaFormReturn {\n schema: JSONSchemaType<unknown>\n fieldResolver: FieldResolver\n resolver: ReturnType<typeof ajvResolver>\n}\n\nexport const jsonSchemaForm = (\n schema: JSONSchemaType<unknown>\n): JsonSchemaFormReturn => {\n return {\n schema,\n fieldResolver: jsonSchemaFieldResolver(schema),\n resolver: ajvResolver(schema),\n }\n}\n","import {\n createForm,\n CreateFormProps,\n FieldValues,\n FormProps,\n} from '@saas-ui/forms'\nimport { ajvResolver } from './ajv-resolver'\nimport { JSONSchemaType } from 'ajv'\n\ntype ResolverArgs = Parameters<typeof ajvResolver>\n\nexport interface CreateAjvFormProps extends CreateFormProps {\n schemaOptions?: ResolverArgs[1]\n resolverOptions?: ResolverArgs[2]\n}\n\nexport function createAjvForm(options?: CreateAjvFormProps): any {\n return createForm({\n resolver: (schema) =>\n ajvResolver(schema, options?.schemaOptions, options?.resolverOptions),\n ...options,\n }) as <\n TFieldValues extends FieldValues = FieldValues,\n TSchema extends JSONSchemaType<TFieldValues> = JSONSchemaType<TFieldValues>,\n TContext extends object = object\n >(\n props: FormProps<TFieldValues, TContext, TSchema>\n ) => React.ReactElement\n}\n"]}
1
+ {"version":3,"sources":["../../ajv/src/ajv-resolver.ts","../../ajv/src/create-ajv-form.ts","../../ajv/src/index.ts"],"names":[],"mappings":";AAAA,SAAS,mBAAmB;AAC5B,SAAS,2BAA0C;AAM5C,IAAM,mBAAmB,CAAC,WAAoC;AACnE,SAAO,oBAAoB,OAAO,UAAU;AAC9C;;;ACTA;AAAA,EACE;AAAA,OAKK;AA0CA,SAAS,cACd,SACA;AACA,SAAO,WAAW;AAAA,IAChB,UAAU,CAAC,WACT,YAAY,QAAQ,mCAAS,eAAe,mCAAS,eAAe;AAAA,IACtE,eAAe;AAAA,IACf,GAAG;AAAA,EACL,CAAC;AACH;;;AClDO,IAAM,OAAO,cAAc","sourcesContent":["import { ajvResolver } from '@hookform/resolvers/ajv'\nimport { objectFieldResolver, FieldResolver } from '@saas-ui/forms'\n\nimport { JSONSchemaType } from 'ajv'\n\nexport { ajvResolver }\n\nexport const ajvFieldResolver = (schema: JSONSchemaType<unknown>) => {\n return objectFieldResolver(schema.properties)\n}\n","import {\n createForm,\n CreateFormProps,\n FieldValues,\n FormProps,\n WithFields,\n} from '@saas-ui/forms'\nimport { ajvFieldResolver, ajvResolver } from './ajv-resolver'\nimport { JTDDataType } from 'ajv/dist/jtd'\ntype ResolverArgs = Parameters<typeof ajvResolver>\n\nexport interface CreateAjvFormProps<FieldDefs>\n extends CreateFormProps<FieldDefs> {\n schemaOptions?: ResolverArgs[1]\n resolverOptions?: ResolverArgs[2]\n}\n\ntype ParseJsonSchema<T> = T extends { type: 'object' }\n ? JTDDataType<T> extends infer R\n ? R extends object\n ? R\n : never\n : never\n : never\n\nexport type AjvFormType<\n FieldDefs,\n ExtraProps = object,\n JsonSchema extends Record<string, any> = Record<string, any>\n> = (<\n TSchema extends JsonSchema = JsonSchema,\n TFieldValues extends ParseJsonSchema<TSchema> = ParseJsonSchema<TSchema>,\n TContext extends object = object\n>(\n props: WithFields<FormProps<TSchema, TFieldValues, TContext>, FieldDefs> & {\n ref?: React.ForwardedRef<HTMLFormElement>\n } & ExtraProps\n) => React.ReactElement) & {\n displayName?: string\n id?: string\n}\n\n/**\n * Create a Form component with AJV validation that accepts JSON Type Definition schema\n *\n * @see Docs https://saas-ui.dev/docs/components/forms/form\n * @see https://ajv.js.org/json-type-definition.html\n */\nexport function createAjvForm<FieldDefs>(\n options?: CreateAjvFormProps<FieldDefs>\n) {\n return createForm({\n resolver: (schema: any) =>\n ajvResolver(schema, options?.schemaOptions, options?.resolverOptions),\n fieldResolver: ajvFieldResolver,\n ...options,\n }) as AjvFormType<FieldDefs>\n}\n","export * from './ajv-resolver'\nexport { createAjvForm } from './create-ajv-form'\nexport type { CreateAjvFormProps } from './create-ajv-form'\nexport type { JTDDataType, JTDSchemaType } from 'ajv/dist/jtd'\n\nimport { createAjvForm } from './create-ajv-form'\n\nexport const Form = createAjvForm()\n"]}