@strictly/react-form 0.0.4 → 0.0.6

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 (68) hide show
  1. package/.out/core/mobx/field_adapter_builder.d.ts +1 -1
  2. package/.out/core/mobx/field_adapter_builder.js +1 -2
  3. package/.out/core/mobx/hooks.d.ts +10 -0
  4. package/.out/core/mobx/hooks.js +47 -0
  5. package/.out/core/props.d.ts +2 -2
  6. package/.out/index.d.ts +1 -0
  7. package/.out/index.js +1 -0
  8. package/.out/mantine/create_fields_view.d.ts +7 -0
  9. package/.out/mantine/{create_sub_form.js → create_fields_view.js} +4 -5
  10. package/.out/mantine/create_form.d.ts +7 -0
  11. package/.out/mantine/create_form.js +13 -0
  12. package/.out/mantine/create_list.d.ts +5 -4
  13. package/.out/mantine/create_list.js +4 -2
  14. package/.out/mantine/hooks.d.ts +8 -5
  15. package/.out/mantine/hooks.js +17 -7
  16. package/.out/mantine/specs/checkbox_hooks.stories.d.ts +2 -2
  17. package/.out/mantine/specs/checkbox_hooks.stories.js +2 -2
  18. package/.out/mantine/specs/{sub_form_hooks.stories.d.ts → fields_view_hooks.stories.d.ts} +2 -2
  19. package/.out/mantine/specs/{sub_form_hooks.stories.js → fields_view_hooks.stories.js} +9 -8
  20. package/.out/mantine/specs/fields_view_hooks.tests.d.ts +1 -0
  21. package/.out/mantine/specs/fields_view_hooks.tests.js +12 -0
  22. package/.out/mantine/specs/form_hooks.stories.d.ts +12 -0
  23. package/.out/mantine/specs/form_hooks.stories.js +60 -0
  24. package/.out/mantine/specs/form_hooks.tests.d.ts +1 -0
  25. package/.out/mantine/specs/form_hooks.tests.js +12 -0
  26. package/.out/mantine/specs/list_hooks.stories.d.ts +2 -2
  27. package/.out/mantine/specs/list_hooks.stories.js +8 -8
  28. package/.out/mantine/specs/radio_group_hooks.stories.d.ts +2 -2
  29. package/.out/mantine/specs/radio_group_hooks.stories.js +2 -2
  30. package/.out/mantine/specs/select_hooks.stories.d.ts +2 -2
  31. package/.out/mantine/specs/select_hooks.stories.js +2 -2
  32. package/.out/mantine/specs/text_input_hooks.stories.d.ts +2 -2
  33. package/.out/mantine/specs/text_input_hooks.stories.js +2 -2
  34. package/.out/mantine/specs/value_input_hooks.stories.d.ts +2 -2
  35. package/.out/mantine/specs/value_input_hooks.stories.js +2 -2
  36. package/.out/tsconfig.tsbuildinfo +1 -1
  37. package/.turbo/turbo-build.log +7 -7
  38. package/.turbo/turbo-check-types.log +1 -1
  39. package/core/mobx/field_adapter_builder.ts +3 -4
  40. package/core/mobx/hooks.ts +94 -0
  41. package/core/props.ts +2 -2
  42. package/dist/index.cjs +175 -95
  43. package/dist/index.d.cts +48 -39
  44. package/dist/index.d.ts +48 -39
  45. package/dist/index.js +170 -86
  46. package/index.ts +1 -0
  47. package/mantine/{create_sub_form.tsx → create_fields_view.tsx} +27 -16
  48. package/mantine/create_form.tsx +43 -0
  49. package/mantine/create_list.tsx +10 -4
  50. package/mantine/hooks.tsx +51 -16
  51. package/mantine/specs/__snapshots__/fields_view_hooks.tests.tsx.snap +460 -0
  52. package/mantine/specs/__snapshots__/form_hooks.tests.tsx.snap +273 -0
  53. package/mantine/specs/__snapshots__/list_hooks.tests.tsx.snap +56 -8
  54. package/mantine/specs/checkbox_hooks.stories.tsx +4 -4
  55. package/mantine/specs/{sub_form_hooks.stories.tsx → fields_view_hooks.stories.tsx} +23 -11
  56. package/mantine/specs/fields_view_hooks.tests.tsx +15 -0
  57. package/mantine/specs/form_hooks.stories.tsx +107 -0
  58. package/mantine/specs/form_hooks.tests.tsx +15 -0
  59. package/mantine/specs/list_hooks.stories.tsx +20 -10
  60. package/mantine/specs/radio_group_hooks.stories.tsx +4 -4
  61. package/mantine/specs/select_hooks.stories.tsx +4 -4
  62. package/mantine/specs/text_input_hooks.stories.tsx +4 -4
  63. package/mantine/specs/value_input_hooks.stories.tsx +4 -4
  64. package/package.json +1 -1
  65. package/.out/field_converters/list_converter.d.ts +0 -2
  66. package/.out/field_converters/list_converter.js +0 -13
  67. package/.out/mantine/create_sub_form.d.ts +0 -6
  68. package/field_converters/list_converter.ts +0 -20
package/dist/index.d.cts CHANGED
@@ -68,7 +68,7 @@ declare function adapterFromTwoWayConverter<From, To, E, ValuePath extends strin
68
68
  declare function adapterFromPrototype<From, To, ValuePath extends string, Context>(converter: AnnotatedFieldConverter<From, To, ValuePath, Context>, prototype: From): FieldAdapterBuilder<From, To, never, ValuePath, Context>;
69
69
  declare function adapterFromPrototype<From, To, E, ValuePath extends string, Context>(converter: TwoWayFieldConverter<From, To, E, ValuePath, Context>, prototype: From): FieldAdapterBuilder<From, To, E, ValuePath, Context>;
70
70
  declare function identityAdapter<V, ValuePath extends string, Context>(prototype: V, required?: boolean): FieldAdapterBuilder<V, V, never, ValuePath, Context>;
71
- declare function listAdapter<E, K extends string, ValuePath extends string, Context>(): FieldAdapterBuilder<readonly E[], readonly K[], never, ValuePath, Context>;
71
+ declare function listAdapter<E, ValuePath extends string, Context>(): FieldAdapterBuilder<readonly E[], readonly E[], never, ValuePath, Context>;
72
72
 
73
73
  type FieldAdaptersOfValues<FlattenedValues extends Readonly<Record<string, any>>, TypePathsToValuePaths extends Readonly<Record<keyof FlattenedValues, string>> = Readonly<Record<keyof FlattenedValues, any>>, Context = any> = {
74
74
  readonly [K in keyof FlattenedValues]: FieldAdapter<FlattenedValues[K], any, any, TypePathsToValuePaths[K], Context>;
@@ -149,29 +149,17 @@ declare class FormModel<T extends Type, ValueToTypePaths extends Readonly<Record
149
149
  get accessors(): Readonly<Record<string, Accessor>>;
150
150
  }
151
151
 
152
- type MergedOfFieldAdaptersWithTwoWayConverter<FieldAdapters extends Readonly<Record<string, FieldAdapter>>, E, Context> = {
153
- [K in keyof FieldAdapters]: FieldAdapter<FromOfFieldAdapter<FieldAdapters[K]>, ToOfFieldAdapter<FieldAdapters[K]>, ErrorOfFieldAdapter<FieldAdapters[K]> | E, ValuePathOfFieldAdapter<FieldAdapters[K]>, Context>;
152
+ type FieldsViewProps<F extends Fields> = {
153
+ fields: F;
154
+ onFieldValueChange<K extends keyof F>(this: void, key: K, value: F[K]['value']): void;
155
+ onFieldFocus?(this: void, key: keyof F): void;
156
+ onFieldBlur?(this: void, key: keyof F): void;
157
+ onFieldSubmit?(this: void, key: keyof F): boolean | void;
154
158
  };
155
- type ValuePathsOfFieldAdapters<FieldAdapters extends Readonly<Record<string, FieldAdapter>>> = {
156
- [K in keyof FieldAdapters]: ValuePathOfFieldAdapter<FieldAdapters[K]>;
157
- }[keyof FieldAdapters];
158
- type TosOfFieldAdapters<FieldAdapters extends Readonly<Record<string, FieldAdapter>>> = {
159
- [K in keyof FieldAdapters]: ToOfFieldAdapter<FieldAdapters[K]>;
160
- }[keyof FieldAdapters];
161
- declare function mergeFieldAdaptersWithTwoWayConverter<FieldAdapters extends Readonly<Record<string, FieldAdapter>>, E, Context>(fieldAdapters: FieldAdapters, converter: TwoWayFieldConverter<TosOfFieldAdapters<FieldAdapters>, TosOfFieldAdapters<FieldAdapters>, E, ValuePathsOfFieldAdapters<FieldAdapters>, Context>): MergedOfFieldAdaptersWithTwoWayConverter<FieldAdapters, E, Context>;
162
-
163
- type MergedOfFieldAdaptersWithValidators<FieldAdapters extends Readonly<Record<Key, FieldAdapter>>, Validators extends Partial<Readonly<Record<string, Validator>>>, Key extends keyof Validators = keyof Validators> = Simplify<{
164
- readonly [K in Key]: MergedOfFieldAdapterWithValidator<FieldAdapters[K], Validators[K]>;
165
- } & {
166
- readonly [K in Exclude<keyof FieldAdapters, Key>]: FieldAdapters[K];
167
- }>;
168
- type MergedOfFieldAdapterWithValidator<A extends FieldAdapter, V extends Validator | undefined> = undefined extends V ? A : A extends FieldAdapter<infer From, infer To, infer E1, infer P1, infer C1> ? V extends Validator<From, infer E2, infer P2, infer C2> ? FieldAdapter<From, To, E1 | E2, P1 | P2, C1 | C2> : never : never;
169
- declare function mergeAdaptersWithValidators<FieldAdapters extends Readonly<Record<Key, FieldAdapter>>, Validators extends Readonly<Record<string, Validator>>, Key extends keyof Validators = keyof Validators>(adapters: FieldAdapters, validators: Validators): MergedOfFieldAdaptersWithValidators<FieldAdapters, Validators, Key>;
170
-
171
- type SubFormFieldAdapters<SubAdapters extends Record<string, FieldAdapter>, P extends string> = {
172
- [K in keyof SubAdapters as K extends StringConcatOf<'$', infer S> ? `${P}${S}` : never]: SubAdapters[K];
159
+ type FormProps<O> = {
160
+ value: O;
161
+ onValueChange: (value: O) => void;
173
162
  };
174
- declare function subFormFieldAdapters<SubAdapters extends Record<string, FieldAdapter>, P extends string>(subAdapters: SubAdapters, prefix: P): SubFormFieldAdapters<SubAdapters, P>;
175
163
 
176
164
  /**
177
165
  * Used to extract the supported value paths from a presenter
@@ -191,17 +179,35 @@ type ToValueOfPresenterValuePath<Presenter extends FormPresenter<any, any, any,
191
179
  */
192
180
  type FormFieldsOfPresenter<Presenter extends FormPresenter<any, any, any, any>> = Presenter extends FormPresenter<infer _1, infer _2, infer _3, infer ValuePathsToAdapters> ? FlattenedConvertedFieldsOf<ValuePathsToAdapters> : never;
193
181
 
194
- type FormProps<F extends Fields> = {
195
- fields: F;
196
- onFieldValueChange<K extends keyof F>(this: void, key: K, value: F[K]['value']): void;
197
- onFieldFocus?(this: void, key: keyof F): void;
198
- onFieldBlur?(this: void, key: keyof F): void;
199
- onFieldSubmit?(this: void, key: keyof F): boolean | void;
182
+ type ValueOfPresenter<P extends FormPresenter<any, any, any, any>> = P extends FormPresenter<infer T, any, any, any> ? ValueOfType<ReadonlyTypeOfType<T>> : never;
183
+ type ModelOfPresenter<P extends FormPresenter<any, any, any, any>> = ReturnType<P['createModel']>;
184
+ declare function useDefaultMobxFormHooks<P extends FormPresenter<any, any, any, any>>(presenter: P, value: ValueOfPresenter<P>, onValidSubmit?: <Path extends ValuePathsOfPresenter<P>>(model: ModelOfPresenter<P>, valuePath: Path) => void): {
185
+ model: ModelOfPresenter<P>;
186
+ } & Omit<FieldsViewProps<ModelOfPresenter<P>['fields']>, 'fields'>;
187
+
188
+ type MergedOfFieldAdaptersWithTwoWayConverter<FieldAdapters extends Readonly<Record<string, FieldAdapter>>, E, Context> = {
189
+ [K in keyof FieldAdapters]: FieldAdapter<FromOfFieldAdapter<FieldAdapters[K]>, ToOfFieldAdapter<FieldAdapters[K]>, ErrorOfFieldAdapter<FieldAdapters[K]> | E, ValuePathOfFieldAdapter<FieldAdapters[K]>, Context>;
200
190
  };
201
- type EditorProps<O> = {
202
- value: O;
203
- onValueChange: (value: O) => void;
191
+ type ValuePathsOfFieldAdapters<FieldAdapters extends Readonly<Record<string, FieldAdapter>>> = {
192
+ [K in keyof FieldAdapters]: ValuePathOfFieldAdapter<FieldAdapters[K]>;
193
+ }[keyof FieldAdapters];
194
+ type TosOfFieldAdapters<FieldAdapters extends Readonly<Record<string, FieldAdapter>>> = {
195
+ [K in keyof FieldAdapters]: ToOfFieldAdapter<FieldAdapters[K]>;
196
+ }[keyof FieldAdapters];
197
+ declare function mergeFieldAdaptersWithTwoWayConverter<FieldAdapters extends Readonly<Record<string, FieldAdapter>>, E, Context>(fieldAdapters: FieldAdapters, converter: TwoWayFieldConverter<TosOfFieldAdapters<FieldAdapters>, TosOfFieldAdapters<FieldAdapters>, E, ValuePathsOfFieldAdapters<FieldAdapters>, Context>): MergedOfFieldAdaptersWithTwoWayConverter<FieldAdapters, E, Context>;
198
+
199
+ type MergedOfFieldAdaptersWithValidators<FieldAdapters extends Readonly<Record<Key, FieldAdapter>>, Validators extends Partial<Readonly<Record<string, Validator>>>, Key extends keyof Validators = keyof Validators> = Simplify<{
200
+ readonly [K in Key]: MergedOfFieldAdapterWithValidator<FieldAdapters[K], Validators[K]>;
201
+ } & {
202
+ readonly [K in Exclude<keyof FieldAdapters, Key>]: FieldAdapters[K];
203
+ }>;
204
+ type MergedOfFieldAdapterWithValidator<A extends FieldAdapter, V extends Validator | undefined> = undefined extends V ? A : A extends FieldAdapter<infer From, infer To, infer E1, infer P1, infer C1> ? V extends Validator<From, infer E2, infer P2, infer C2> ? FieldAdapter<From, To, E1 | E2, P1 | P2, C1 | C2> : never : never;
205
+ declare function mergeAdaptersWithValidators<FieldAdapters extends Readonly<Record<Key, FieldAdapter>>, Validators extends Readonly<Record<string, Validator>>, Key extends keyof Validators = keyof Validators>(adapters: FieldAdapters, validators: Validators): MergedOfFieldAdaptersWithValidators<FieldAdapters, Validators, Key>;
206
+
207
+ type SubFormFieldAdapters<SubAdapters extends Record<string, FieldAdapter>, P extends string> = {
208
+ [K in keyof SubAdapters as K extends StringConcatOf<'$', infer S> ? `${P}${S}` : never]: SubAdapters[K];
204
209
  };
210
+ declare function subFormFieldAdapters<SubAdapters extends Record<string, FieldAdapter>, P extends string>(subAdapters: SubAdapters, prefix: P): SubFormFieldAdapters<SubAdapters, P>;
205
211
 
206
212
  declare class IntegerToStringConverter<E, ValuePath extends string, Context> implements TwoWayFieldConverter<number, string, E, ValuePath, Context> {
207
213
  private readonly isNanError;
@@ -318,11 +324,12 @@ type MantineFieldComponent<T, P = T, E = any> = UnsafePartialComponent<Component
318
324
 
319
325
  type SuppliedCheckboxProps = Pick<CheckboxProps, 'name' | 'checked' | 'disabled' | 'required' | 'error' | 'onChange' | 'onFocus' | 'onBlur' | 'onKeyUp'>;
320
326
 
321
- type SuppliedListProps<Value = any> = {
327
+ type SuppliedListProps<Value = any, ListPath extends string = string> = {
322
328
  values: readonly Value[];
329
+ listPath: ListPath;
323
330
  };
324
- declare function DefaultList<Value>({ values, children, }: SuppliedListProps<Value> & {
325
- children: (value: Value, index: number) => React.ReactNode;
331
+ declare function DefaultList<Value, ListPath extends string>({ values, listPath, children, }: SuppliedListProps<Value, ListPath> & {
332
+ children: (valuePath: `${ListPath}.${number}`, value: Value, index: number) => React.ReactNode;
326
333
  }): react_jsx_runtime.JSX.Element;
327
334
 
328
335
  type SuppliedPillProps = Pick<PillProps, 'children' | 'disabled'>;
@@ -359,7 +366,7 @@ type SuppliedValueInputProps<V, T extends Element = Element> = Partial<{
359
366
  declare function SimpleSelect(props: SelectProps & {
360
367
  onChange?: (value: string | null) => void;
361
368
  }): react_jsx_runtime.JSX.Element;
362
- declare function useMantineForm<F extends Fields>({ onFieldValueChange, onFieldBlur, onFieldFocus, onFieldSubmit, fields, }: FormProps<F>): MantineFormImpl<F>;
369
+ declare function useMantineFormFields<F extends Fields>({ onFieldValueChange, onFieldBlur, onFieldFocus, onFieldSubmit, fields, }: FieldsViewProps<F>): MantineFormImpl<F>;
363
370
  declare class MantineFormImpl<F extends Fields> implements MantineForm<F> {
364
371
  private readonly textInputCache;
365
372
  private readonly valueInputCache;
@@ -368,7 +375,8 @@ declare class MantineFormImpl<F extends Fields> implements MantineForm<F> {
368
375
  private readonly radioCache;
369
376
  private readonly pillCache;
370
377
  private readonly listCache;
371
- private readonly subFormCache;
378
+ private readonly fieldsViewCache;
379
+ private readonly formCache;
372
380
  accessor fields: F;
373
381
  onFieldValueChange: <K extends keyof F>(this: void, key: K, value: F[K]['value']) => void;
374
382
  onFieldFocus: ((this: void, key: keyof F) => void) | undefined;
@@ -387,8 +395,9 @@ declare class MantineFormImpl<F extends Fields> implements MantineForm<F> {
387
395
  radio<K extends keyof StringFieldsOfFields<F>, P extends SuppliedRadioProps>(valuePath: K, value: ValueTypeOfField<F[K]>, Radio: ComponentType<P>): MantineFieldComponent<SuppliedRadioProps, P, ErrorOfField<F[K]>>;
388
396
  pill<K extends keyof AllFieldsOfFields<F>>(valuePath: K): MantineFieldComponent<SuppliedPillProps, PillProps, ErrorOfField<F[K]>>;
389
397
  pill<K extends keyof AllFieldsOfFields<F>, P extends SuppliedPillProps>(valuePath: K, Pill: ComponentType<P>): MantineFieldComponent<SuppliedPillProps, P>;
390
- list<K extends keyof ListFieldsOfFields<F>>(valuePath: K): MantineFieldComponent<SuppliedListProps<`${K}.${number}`>, ComponentProps<typeof DefaultList<`${K}.${number}`>>>;
391
- subForm<K extends keyof AllFieldsOfFields<F>, S extends SubFormFields<F, K>>(valuePath: K, SubForm: ComponentType<FormProps<S>>): ComponentType;
398
+ list<K extends keyof ListFieldsOfFields<F>>(valuePath: K): MantineFieldComponent<SuppliedListProps<`${K}.${number}`>, ComponentProps<typeof DefaultList<ElementOfArray<F[K]['value']>, K>>>;
399
+ fieldsView<K extends keyof AllFieldsOfFields<F>, P extends FieldsViewProps<Fields> = FieldsViewProps<SubFormFields<F, K>>>(valuePath: K, FieldsView: ComponentType<P>): MantineFieldComponent<FieldsViewProps<P['fields']>, P>;
400
+ form<K extends keyof AllFieldsOfFields<F>, P extends FormProps<ValueTypeOfField<F[K]>> = FormProps<ValueTypeOfField<F[K]>>>(valuePath: K, Form: ComponentType<P>): MantineFieldComponent<FormProps<ValueTypeOfField<F[K]>>, P>;
392
401
  }
393
402
 
394
403
  type MergedOfValidators<Validators1 extends Partial<Readonly<Record<Keys, Validator>>>, Validators2 extends Partial<Readonly<Record<Keys, Validator>>>, Keys extends string = Extract<keyof Validators1 | keyof Validators2, string>> = Simplify<{
@@ -397,4 +406,4 @@ type MergedOfValidators<Validators1 extends Partial<Readonly<Record<Keys, Valida
397
406
  type MergedOfValidator<Validator1 extends Validator, Validator2 extends Validator> = Validator1 extends Validator<infer V, infer E1, infer P, infer C> ? Validator2 extends Validator<V, infer E2, P, C> ? Validator<V, E1 | E2, P, C> : never : never;
398
407
  declare function mergeValidators<Validators1 extends Partial<Readonly<Record<Keys, Validator>>>, Validators2 extends Partial<Readonly<Record<Keys, Validator>>>, Keys extends string = Extract<keyof Validators1 | keyof Validators2, string>>(validators1: Validators1, validators2: Validators2): MergedOfValidators<Validators1, Validators2, Keys>;
399
408
 
400
- export { AbstractSelectValueTypeConverter, type AnnotatedFieldConversion, type AnnotatedFieldConverter, type Annotation, DefaultErrorRenderer, type EditorProps, type ErrorOfField, type ErrorOfFieldAdapter, type ErrorRenderer, type ErrorRendererProps, type Field, type FieldAdapter, type FieldAdaptersOfValues, type FieldValueFactory, type Fields, type FlattenedAdaptersOfFields, type FlattenedConvertedFieldsOf, type FlattenedTypePathsToAdaptersOf, type FormFieldsOfFieldAdapters, type FormFieldsOfPresenter, FormModel, FormPresenter, type FormProps, type FromOfFieldAdapter, IntegerToStringConverter, type MergedOfFieldAdaptersWithTwoWayConverter, type MergedOfFieldAdaptersWithValidators, type MergedOfValidator, type MergedOfValidators, NullableToBooleanConverter, type PartialComponent, SelectDiscriminatedUnionConverter, SelectLiteralConverter, SelectStringConverter, type ToOfFieldAdapter, type ToValueOfPresenterValuePath, TrimmingStringConverter, type TwoWayFieldConverter, type TwoWayFieldConverterWithValueFactory, type UnreliableFieldConversion, UnreliableFieldConversionType, type UnreliableFieldConverter, type UnsafePartialComponent, type ValuePathOfFieldAdapter, type ValuePathsOfPresenter, type ValuePathsToAdaptersOf, adapter, adapterFromPrototype, adapterFromTwoWayConverter, createPartialComponent, createPartialObserverComponent, createSimplePartialComponent, createUnsafePartialObserverComponent, identityAdapter, listAdapter, mergeAdaptersWithValidators, mergeFieldAdaptersWithTwoWayConverter, mergeValidators, prototypingFieldValueFactory, subFormFieldAdapters, useMantineForm, usePartialComponent, usePartialObserverComponent, validatingConverter };
409
+ export { AbstractSelectValueTypeConverter, type AnnotatedFieldConversion, type AnnotatedFieldConverter, type Annotation, DefaultErrorRenderer, type ErrorOfField, type ErrorOfFieldAdapter, type ErrorRenderer, type ErrorRendererProps, type Field, type FieldAdapter, type FieldAdaptersOfValues, type FieldValueFactory, type Fields, type FieldsViewProps, type FlattenedAdaptersOfFields, type FlattenedConvertedFieldsOf, type FlattenedTypePathsToAdaptersOf, type FormFieldsOfFieldAdapters, type FormFieldsOfPresenter, FormModel, FormPresenter, type FormProps, type FromOfFieldAdapter, IntegerToStringConverter, type MergedOfFieldAdaptersWithTwoWayConverter, type MergedOfFieldAdaptersWithValidators, type MergedOfValidator, type MergedOfValidators, NullableToBooleanConverter, type PartialComponent, SelectDiscriminatedUnionConverter, SelectLiteralConverter, SelectStringConverter, type ToOfFieldAdapter, type ToValueOfPresenterValuePath, TrimmingStringConverter, type TwoWayFieldConverter, type TwoWayFieldConverterWithValueFactory, type UnreliableFieldConversion, UnreliableFieldConversionType, type UnreliableFieldConverter, type UnsafePartialComponent, type ValuePathOfFieldAdapter, type ValuePathsOfPresenter, type ValuePathsToAdaptersOf, adapter, adapterFromPrototype, adapterFromTwoWayConverter, createPartialComponent, createPartialObserverComponent, createSimplePartialComponent, createUnsafePartialObserverComponent, identityAdapter, listAdapter, mergeAdaptersWithValidators, mergeFieldAdaptersWithTwoWayConverter, mergeValidators, prototypingFieldValueFactory, subFormFieldAdapters, useDefaultMobxFormHooks, useMantineFormFields, usePartialComponent, usePartialObserverComponent, validatingConverter };
package/dist/index.d.ts CHANGED
@@ -68,7 +68,7 @@ declare function adapterFromTwoWayConverter<From, To, E, ValuePath extends strin
68
68
  declare function adapterFromPrototype<From, To, ValuePath extends string, Context>(converter: AnnotatedFieldConverter<From, To, ValuePath, Context>, prototype: From): FieldAdapterBuilder<From, To, never, ValuePath, Context>;
69
69
  declare function adapterFromPrototype<From, To, E, ValuePath extends string, Context>(converter: TwoWayFieldConverter<From, To, E, ValuePath, Context>, prototype: From): FieldAdapterBuilder<From, To, E, ValuePath, Context>;
70
70
  declare function identityAdapter<V, ValuePath extends string, Context>(prototype: V, required?: boolean): FieldAdapterBuilder<V, V, never, ValuePath, Context>;
71
- declare function listAdapter<E, K extends string, ValuePath extends string, Context>(): FieldAdapterBuilder<readonly E[], readonly K[], never, ValuePath, Context>;
71
+ declare function listAdapter<E, ValuePath extends string, Context>(): FieldAdapterBuilder<readonly E[], readonly E[], never, ValuePath, Context>;
72
72
 
73
73
  type FieldAdaptersOfValues<FlattenedValues extends Readonly<Record<string, any>>, TypePathsToValuePaths extends Readonly<Record<keyof FlattenedValues, string>> = Readonly<Record<keyof FlattenedValues, any>>, Context = any> = {
74
74
  readonly [K in keyof FlattenedValues]: FieldAdapter<FlattenedValues[K], any, any, TypePathsToValuePaths[K], Context>;
@@ -149,29 +149,17 @@ declare class FormModel<T extends Type, ValueToTypePaths extends Readonly<Record
149
149
  get accessors(): Readonly<Record<string, Accessor>>;
150
150
  }
151
151
 
152
- type MergedOfFieldAdaptersWithTwoWayConverter<FieldAdapters extends Readonly<Record<string, FieldAdapter>>, E, Context> = {
153
- [K in keyof FieldAdapters]: FieldAdapter<FromOfFieldAdapter<FieldAdapters[K]>, ToOfFieldAdapter<FieldAdapters[K]>, ErrorOfFieldAdapter<FieldAdapters[K]> | E, ValuePathOfFieldAdapter<FieldAdapters[K]>, Context>;
152
+ type FieldsViewProps<F extends Fields> = {
153
+ fields: F;
154
+ onFieldValueChange<K extends keyof F>(this: void, key: K, value: F[K]['value']): void;
155
+ onFieldFocus?(this: void, key: keyof F): void;
156
+ onFieldBlur?(this: void, key: keyof F): void;
157
+ onFieldSubmit?(this: void, key: keyof F): boolean | void;
154
158
  };
155
- type ValuePathsOfFieldAdapters<FieldAdapters extends Readonly<Record<string, FieldAdapter>>> = {
156
- [K in keyof FieldAdapters]: ValuePathOfFieldAdapter<FieldAdapters[K]>;
157
- }[keyof FieldAdapters];
158
- type TosOfFieldAdapters<FieldAdapters extends Readonly<Record<string, FieldAdapter>>> = {
159
- [K in keyof FieldAdapters]: ToOfFieldAdapter<FieldAdapters[K]>;
160
- }[keyof FieldAdapters];
161
- declare function mergeFieldAdaptersWithTwoWayConverter<FieldAdapters extends Readonly<Record<string, FieldAdapter>>, E, Context>(fieldAdapters: FieldAdapters, converter: TwoWayFieldConverter<TosOfFieldAdapters<FieldAdapters>, TosOfFieldAdapters<FieldAdapters>, E, ValuePathsOfFieldAdapters<FieldAdapters>, Context>): MergedOfFieldAdaptersWithTwoWayConverter<FieldAdapters, E, Context>;
162
-
163
- type MergedOfFieldAdaptersWithValidators<FieldAdapters extends Readonly<Record<Key, FieldAdapter>>, Validators extends Partial<Readonly<Record<string, Validator>>>, Key extends keyof Validators = keyof Validators> = Simplify<{
164
- readonly [K in Key]: MergedOfFieldAdapterWithValidator<FieldAdapters[K], Validators[K]>;
165
- } & {
166
- readonly [K in Exclude<keyof FieldAdapters, Key>]: FieldAdapters[K];
167
- }>;
168
- type MergedOfFieldAdapterWithValidator<A extends FieldAdapter, V extends Validator | undefined> = undefined extends V ? A : A extends FieldAdapter<infer From, infer To, infer E1, infer P1, infer C1> ? V extends Validator<From, infer E2, infer P2, infer C2> ? FieldAdapter<From, To, E1 | E2, P1 | P2, C1 | C2> : never : never;
169
- declare function mergeAdaptersWithValidators<FieldAdapters extends Readonly<Record<Key, FieldAdapter>>, Validators extends Readonly<Record<string, Validator>>, Key extends keyof Validators = keyof Validators>(adapters: FieldAdapters, validators: Validators): MergedOfFieldAdaptersWithValidators<FieldAdapters, Validators, Key>;
170
-
171
- type SubFormFieldAdapters<SubAdapters extends Record<string, FieldAdapter>, P extends string> = {
172
- [K in keyof SubAdapters as K extends StringConcatOf<'$', infer S> ? `${P}${S}` : never]: SubAdapters[K];
159
+ type FormProps<O> = {
160
+ value: O;
161
+ onValueChange: (value: O) => void;
173
162
  };
174
- declare function subFormFieldAdapters<SubAdapters extends Record<string, FieldAdapter>, P extends string>(subAdapters: SubAdapters, prefix: P): SubFormFieldAdapters<SubAdapters, P>;
175
163
 
176
164
  /**
177
165
  * Used to extract the supported value paths from a presenter
@@ -191,17 +179,35 @@ type ToValueOfPresenterValuePath<Presenter extends FormPresenter<any, any, any,
191
179
  */
192
180
  type FormFieldsOfPresenter<Presenter extends FormPresenter<any, any, any, any>> = Presenter extends FormPresenter<infer _1, infer _2, infer _3, infer ValuePathsToAdapters> ? FlattenedConvertedFieldsOf<ValuePathsToAdapters> : never;
193
181
 
194
- type FormProps<F extends Fields> = {
195
- fields: F;
196
- onFieldValueChange<K extends keyof F>(this: void, key: K, value: F[K]['value']): void;
197
- onFieldFocus?(this: void, key: keyof F): void;
198
- onFieldBlur?(this: void, key: keyof F): void;
199
- onFieldSubmit?(this: void, key: keyof F): boolean | void;
182
+ type ValueOfPresenter<P extends FormPresenter<any, any, any, any>> = P extends FormPresenter<infer T, any, any, any> ? ValueOfType<ReadonlyTypeOfType<T>> : never;
183
+ type ModelOfPresenter<P extends FormPresenter<any, any, any, any>> = ReturnType<P['createModel']>;
184
+ declare function useDefaultMobxFormHooks<P extends FormPresenter<any, any, any, any>>(presenter: P, value: ValueOfPresenter<P>, onValidSubmit?: <Path extends ValuePathsOfPresenter<P>>(model: ModelOfPresenter<P>, valuePath: Path) => void): {
185
+ model: ModelOfPresenter<P>;
186
+ } & Omit<FieldsViewProps<ModelOfPresenter<P>['fields']>, 'fields'>;
187
+
188
+ type MergedOfFieldAdaptersWithTwoWayConverter<FieldAdapters extends Readonly<Record<string, FieldAdapter>>, E, Context> = {
189
+ [K in keyof FieldAdapters]: FieldAdapter<FromOfFieldAdapter<FieldAdapters[K]>, ToOfFieldAdapter<FieldAdapters[K]>, ErrorOfFieldAdapter<FieldAdapters[K]> | E, ValuePathOfFieldAdapter<FieldAdapters[K]>, Context>;
200
190
  };
201
- type EditorProps<O> = {
202
- value: O;
203
- onValueChange: (value: O) => void;
191
+ type ValuePathsOfFieldAdapters<FieldAdapters extends Readonly<Record<string, FieldAdapter>>> = {
192
+ [K in keyof FieldAdapters]: ValuePathOfFieldAdapter<FieldAdapters[K]>;
193
+ }[keyof FieldAdapters];
194
+ type TosOfFieldAdapters<FieldAdapters extends Readonly<Record<string, FieldAdapter>>> = {
195
+ [K in keyof FieldAdapters]: ToOfFieldAdapter<FieldAdapters[K]>;
196
+ }[keyof FieldAdapters];
197
+ declare function mergeFieldAdaptersWithTwoWayConverter<FieldAdapters extends Readonly<Record<string, FieldAdapter>>, E, Context>(fieldAdapters: FieldAdapters, converter: TwoWayFieldConverter<TosOfFieldAdapters<FieldAdapters>, TosOfFieldAdapters<FieldAdapters>, E, ValuePathsOfFieldAdapters<FieldAdapters>, Context>): MergedOfFieldAdaptersWithTwoWayConverter<FieldAdapters, E, Context>;
198
+
199
+ type MergedOfFieldAdaptersWithValidators<FieldAdapters extends Readonly<Record<Key, FieldAdapter>>, Validators extends Partial<Readonly<Record<string, Validator>>>, Key extends keyof Validators = keyof Validators> = Simplify<{
200
+ readonly [K in Key]: MergedOfFieldAdapterWithValidator<FieldAdapters[K], Validators[K]>;
201
+ } & {
202
+ readonly [K in Exclude<keyof FieldAdapters, Key>]: FieldAdapters[K];
203
+ }>;
204
+ type MergedOfFieldAdapterWithValidator<A extends FieldAdapter, V extends Validator | undefined> = undefined extends V ? A : A extends FieldAdapter<infer From, infer To, infer E1, infer P1, infer C1> ? V extends Validator<From, infer E2, infer P2, infer C2> ? FieldAdapter<From, To, E1 | E2, P1 | P2, C1 | C2> : never : never;
205
+ declare function mergeAdaptersWithValidators<FieldAdapters extends Readonly<Record<Key, FieldAdapter>>, Validators extends Readonly<Record<string, Validator>>, Key extends keyof Validators = keyof Validators>(adapters: FieldAdapters, validators: Validators): MergedOfFieldAdaptersWithValidators<FieldAdapters, Validators, Key>;
206
+
207
+ type SubFormFieldAdapters<SubAdapters extends Record<string, FieldAdapter>, P extends string> = {
208
+ [K in keyof SubAdapters as K extends StringConcatOf<'$', infer S> ? `${P}${S}` : never]: SubAdapters[K];
204
209
  };
210
+ declare function subFormFieldAdapters<SubAdapters extends Record<string, FieldAdapter>, P extends string>(subAdapters: SubAdapters, prefix: P): SubFormFieldAdapters<SubAdapters, P>;
205
211
 
206
212
  declare class IntegerToStringConverter<E, ValuePath extends string, Context> implements TwoWayFieldConverter<number, string, E, ValuePath, Context> {
207
213
  private readonly isNanError;
@@ -318,11 +324,12 @@ type MantineFieldComponent<T, P = T, E = any> = UnsafePartialComponent<Component
318
324
 
319
325
  type SuppliedCheckboxProps = Pick<CheckboxProps, 'name' | 'checked' | 'disabled' | 'required' | 'error' | 'onChange' | 'onFocus' | 'onBlur' | 'onKeyUp'>;
320
326
 
321
- type SuppliedListProps<Value = any> = {
327
+ type SuppliedListProps<Value = any, ListPath extends string = string> = {
322
328
  values: readonly Value[];
329
+ listPath: ListPath;
323
330
  };
324
- declare function DefaultList<Value>({ values, children, }: SuppliedListProps<Value> & {
325
- children: (value: Value, index: number) => React.ReactNode;
331
+ declare function DefaultList<Value, ListPath extends string>({ values, listPath, children, }: SuppliedListProps<Value, ListPath> & {
332
+ children: (valuePath: `${ListPath}.${number}`, value: Value, index: number) => React.ReactNode;
326
333
  }): react_jsx_runtime.JSX.Element;
327
334
 
328
335
  type SuppliedPillProps = Pick<PillProps, 'children' | 'disabled'>;
@@ -359,7 +366,7 @@ type SuppliedValueInputProps<V, T extends Element = Element> = Partial<{
359
366
  declare function SimpleSelect(props: SelectProps & {
360
367
  onChange?: (value: string | null) => void;
361
368
  }): react_jsx_runtime.JSX.Element;
362
- declare function useMantineForm<F extends Fields>({ onFieldValueChange, onFieldBlur, onFieldFocus, onFieldSubmit, fields, }: FormProps<F>): MantineFormImpl<F>;
369
+ declare function useMantineFormFields<F extends Fields>({ onFieldValueChange, onFieldBlur, onFieldFocus, onFieldSubmit, fields, }: FieldsViewProps<F>): MantineFormImpl<F>;
363
370
  declare class MantineFormImpl<F extends Fields> implements MantineForm<F> {
364
371
  private readonly textInputCache;
365
372
  private readonly valueInputCache;
@@ -368,7 +375,8 @@ declare class MantineFormImpl<F extends Fields> implements MantineForm<F> {
368
375
  private readonly radioCache;
369
376
  private readonly pillCache;
370
377
  private readonly listCache;
371
- private readonly subFormCache;
378
+ private readonly fieldsViewCache;
379
+ private readonly formCache;
372
380
  accessor fields: F;
373
381
  onFieldValueChange: <K extends keyof F>(this: void, key: K, value: F[K]['value']) => void;
374
382
  onFieldFocus: ((this: void, key: keyof F) => void) | undefined;
@@ -387,8 +395,9 @@ declare class MantineFormImpl<F extends Fields> implements MantineForm<F> {
387
395
  radio<K extends keyof StringFieldsOfFields<F>, P extends SuppliedRadioProps>(valuePath: K, value: ValueTypeOfField<F[K]>, Radio: ComponentType<P>): MantineFieldComponent<SuppliedRadioProps, P, ErrorOfField<F[K]>>;
388
396
  pill<K extends keyof AllFieldsOfFields<F>>(valuePath: K): MantineFieldComponent<SuppliedPillProps, PillProps, ErrorOfField<F[K]>>;
389
397
  pill<K extends keyof AllFieldsOfFields<F>, P extends SuppliedPillProps>(valuePath: K, Pill: ComponentType<P>): MantineFieldComponent<SuppliedPillProps, P>;
390
- list<K extends keyof ListFieldsOfFields<F>>(valuePath: K): MantineFieldComponent<SuppliedListProps<`${K}.${number}`>, ComponentProps<typeof DefaultList<`${K}.${number}`>>>;
391
- subForm<K extends keyof AllFieldsOfFields<F>, S extends SubFormFields<F, K>>(valuePath: K, SubForm: ComponentType<FormProps<S>>): ComponentType;
398
+ list<K extends keyof ListFieldsOfFields<F>>(valuePath: K): MantineFieldComponent<SuppliedListProps<`${K}.${number}`>, ComponentProps<typeof DefaultList<ElementOfArray<F[K]['value']>, K>>>;
399
+ fieldsView<K extends keyof AllFieldsOfFields<F>, P extends FieldsViewProps<Fields> = FieldsViewProps<SubFormFields<F, K>>>(valuePath: K, FieldsView: ComponentType<P>): MantineFieldComponent<FieldsViewProps<P['fields']>, P>;
400
+ form<K extends keyof AllFieldsOfFields<F>, P extends FormProps<ValueTypeOfField<F[K]>> = FormProps<ValueTypeOfField<F[K]>>>(valuePath: K, Form: ComponentType<P>): MantineFieldComponent<FormProps<ValueTypeOfField<F[K]>>, P>;
392
401
  }
393
402
 
394
403
  type MergedOfValidators<Validators1 extends Partial<Readonly<Record<Keys, Validator>>>, Validators2 extends Partial<Readonly<Record<Keys, Validator>>>, Keys extends string = Extract<keyof Validators1 | keyof Validators2, string>> = Simplify<{
@@ -397,4 +406,4 @@ type MergedOfValidators<Validators1 extends Partial<Readonly<Record<Keys, Valida
397
406
  type MergedOfValidator<Validator1 extends Validator, Validator2 extends Validator> = Validator1 extends Validator<infer V, infer E1, infer P, infer C> ? Validator2 extends Validator<V, infer E2, P, C> ? Validator<V, E1 | E2, P, C> : never : never;
398
407
  declare function mergeValidators<Validators1 extends Partial<Readonly<Record<Keys, Validator>>>, Validators2 extends Partial<Readonly<Record<Keys, Validator>>>, Keys extends string = Extract<keyof Validators1 | keyof Validators2, string>>(validators1: Validators1, validators2: Validators2): MergedOfValidators<Validators1, Validators2, Keys>;
399
408
 
400
- export { AbstractSelectValueTypeConverter, type AnnotatedFieldConversion, type AnnotatedFieldConverter, type Annotation, DefaultErrorRenderer, type EditorProps, type ErrorOfField, type ErrorOfFieldAdapter, type ErrorRenderer, type ErrorRendererProps, type Field, type FieldAdapter, type FieldAdaptersOfValues, type FieldValueFactory, type Fields, type FlattenedAdaptersOfFields, type FlattenedConvertedFieldsOf, type FlattenedTypePathsToAdaptersOf, type FormFieldsOfFieldAdapters, type FormFieldsOfPresenter, FormModel, FormPresenter, type FormProps, type FromOfFieldAdapter, IntegerToStringConverter, type MergedOfFieldAdaptersWithTwoWayConverter, type MergedOfFieldAdaptersWithValidators, type MergedOfValidator, type MergedOfValidators, NullableToBooleanConverter, type PartialComponent, SelectDiscriminatedUnionConverter, SelectLiteralConverter, SelectStringConverter, type ToOfFieldAdapter, type ToValueOfPresenterValuePath, TrimmingStringConverter, type TwoWayFieldConverter, type TwoWayFieldConverterWithValueFactory, type UnreliableFieldConversion, UnreliableFieldConversionType, type UnreliableFieldConverter, type UnsafePartialComponent, type ValuePathOfFieldAdapter, type ValuePathsOfPresenter, type ValuePathsToAdaptersOf, adapter, adapterFromPrototype, adapterFromTwoWayConverter, createPartialComponent, createPartialObserverComponent, createSimplePartialComponent, createUnsafePartialObserverComponent, identityAdapter, listAdapter, mergeAdaptersWithValidators, mergeFieldAdaptersWithTwoWayConverter, mergeValidators, prototypingFieldValueFactory, subFormFieldAdapters, useMantineForm, usePartialComponent, usePartialObserverComponent, validatingConverter };
409
+ export { AbstractSelectValueTypeConverter, type AnnotatedFieldConversion, type AnnotatedFieldConverter, type Annotation, DefaultErrorRenderer, type ErrorOfField, type ErrorOfFieldAdapter, type ErrorRenderer, type ErrorRendererProps, type Field, type FieldAdapter, type FieldAdaptersOfValues, type FieldValueFactory, type Fields, type FieldsViewProps, type FlattenedAdaptersOfFields, type FlattenedConvertedFieldsOf, type FlattenedTypePathsToAdaptersOf, type FormFieldsOfFieldAdapters, type FormFieldsOfPresenter, FormModel, FormPresenter, type FormProps, type FromOfFieldAdapter, IntegerToStringConverter, type MergedOfFieldAdaptersWithTwoWayConverter, type MergedOfFieldAdaptersWithValidators, type MergedOfValidator, type MergedOfValidators, NullableToBooleanConverter, type PartialComponent, SelectDiscriminatedUnionConverter, SelectLiteralConverter, SelectStringConverter, type ToOfFieldAdapter, type ToValueOfPresenterValuePath, TrimmingStringConverter, type TwoWayFieldConverter, type TwoWayFieldConverterWithValueFactory, type UnreliableFieldConversion, UnreliableFieldConversionType, type UnreliableFieldConverter, type UnsafePartialComponent, type ValuePathOfFieldAdapter, type ValuePathsOfPresenter, type ValuePathsToAdaptersOf, adapter, adapterFromPrototype, adapterFromTwoWayConverter, createPartialComponent, createPartialObserverComponent, createSimplePartialComponent, createUnsafePartialObserverComponent, identityAdapter, listAdapter, mergeAdaptersWithValidators, mergeFieldAdaptersWithTwoWayConverter, mergeValidators, prototypingFieldValueFactory, subFormFieldAdapters, useDefaultMobxFormHooks, useMantineFormFields, usePartialComponent, usePartialObserverComponent, validatingConverter };