@strictly/react-form 0.0.7 → 0.0.9

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 (79) hide show
  1. package/.out/core/mobx/field_adapter_builder.d.ts +4 -0
  2. package/.out/core/mobx/field_adapter_builder.js +31 -0
  3. package/.out/core/mobx/hooks.d.ts +5 -1
  4. package/.out/core/mobx/hooks.js +13 -3
  5. package/.out/core/mobx/specs/sub_form_field_adapters.tests.js +56 -9
  6. package/.out/core/mobx/sub_form_field_adapters.d.ts +5 -5
  7. package/.out/core/mobx/sub_form_field_adapters.js +13 -10
  8. package/.out/field_converters/chain_field_converter.js +3 -3
  9. package/.out/field_converters/nullable_to_boolean_converter.d.ts +2 -2
  10. package/.out/mantine/create_checkbox.js +1 -0
  11. package/.out/mantine/create_fields_view.d.ts +1 -1
  12. package/.out/mantine/create_fields_view.js +4 -4
  13. package/.out/mantine/create_form.d.ts +1 -1
  14. package/.out/mantine/create_list.d.ts +1 -1
  15. package/.out/mantine/create_pill.d.ts +1 -1
  16. package/.out/mantine/create_radio.d.ts +1 -1
  17. package/.out/mantine/create_radio_group.js +1 -0
  18. package/.out/mantine/create_text_input.js +7 -2
  19. package/.out/mantine/create_value_input.js +1 -0
  20. package/.out/mantine/error_renderer.d.ts +7 -3
  21. package/.out/mantine/error_renderer.js +1 -1
  22. package/.out/mantine/hooks.d.ts +9 -9
  23. package/.out/mantine/specs/checkbox_hooks.stories.d.ts +2 -6
  24. package/.out/mantine/specs/checkbox_hooks.stories.js +4 -16
  25. package/.out/mantine/specs/fields_view_hooks.stories.d.ts +1 -1
  26. package/.out/mantine/specs/fields_view_hooks.stories.js +6 -3
  27. package/.out/mantine/specs/form_hooks.stories.d.ts +2 -2
  28. package/.out/mantine/specs/form_hooks.stories.js +4 -1
  29. package/.out/mantine/specs/radio_group_hooks.stories.d.ts +2 -6
  30. package/.out/mantine/specs/radio_group_hooks.stories.js +5 -17
  31. package/.out/mantine/specs/select_hooks.stories.d.ts +2 -6
  32. package/.out/mantine/specs/select_hooks.stories.js +4 -16
  33. package/.out/mantine/specs/text_input_hooks.stories.d.ts +2 -5
  34. package/.out/mantine/specs/text_input_hooks.stories.js +5 -5
  35. package/.out/mantine/specs/value_input_hooks.stories.d.ts +2 -5
  36. package/.out/mantine/specs/value_input_hooks.stories.js +5 -5
  37. package/.out/mantine/types.d.ts +4 -2
  38. package/.out/tsconfig.tsbuildinfo +1 -1
  39. package/.out/types/specs/{error_type_of_field.tests.js → error_of_field.tests.js} +1 -1
  40. package/.turbo/turbo-build.log +8 -8
  41. package/.turbo/turbo-check-types.log +1 -1
  42. package/core/mobx/field_adapter_builder.ts +71 -0
  43. package/core/mobx/hooks.ts +24 -6
  44. package/core/mobx/specs/sub_form_field_adapters.tests.ts +108 -15
  45. package/core/mobx/sub_form_field_adapters.ts +41 -25
  46. package/dist/index.cjs +108 -49
  47. package/dist/index.d.cts +35 -24
  48. package/dist/index.d.ts +35 -24
  49. package/dist/index.js +107 -49
  50. package/field_converters/chain_field_converter.ts +3 -3
  51. package/field_converters/nullable_to_boolean_converter.ts +2 -3
  52. package/mantine/create_checkbox.tsx +2 -1
  53. package/mantine/create_fields_view.tsx +17 -14
  54. package/mantine/create_form.tsx +2 -2
  55. package/mantine/create_list.tsx +1 -1
  56. package/mantine/create_pill.tsx +1 -1
  57. package/mantine/create_radio.tsx +1 -1
  58. package/mantine/create_radio_group.tsx +6 -2
  59. package/mantine/create_text_input.tsx +9 -3
  60. package/mantine/create_value_input.tsx +2 -1
  61. package/mantine/error_renderer.ts +13 -4
  62. package/mantine/hooks.tsx +19 -14
  63. package/mantine/specs/__snapshots__/checkbox_hooks.tests.tsx.snap +1 -64
  64. package/mantine/specs/__snapshots__/fields_view_hooks.tests.tsx.snap +52 -52
  65. package/mantine/specs/__snapshots__/radio_group_hooks.tests.tsx.snap +1 -179
  66. package/mantine/specs/__snapshots__/select_hooks.tests.tsx.snap +1 -83
  67. package/mantine/specs/__snapshots__/text_input_hooks.tests.tsx.snap +27 -27
  68. package/mantine/specs/__snapshots__/value_input_hooks.tests.tsx.snap +31 -31
  69. package/mantine/specs/checkbox_hooks.stories.tsx +5 -21
  70. package/mantine/specs/fields_view_hooks.stories.tsx +16 -4
  71. package/mantine/specs/form_hooks.stories.tsx +10 -3
  72. package/mantine/specs/radio_group_hooks.stories.tsx +6 -20
  73. package/mantine/specs/select_hooks.stories.tsx +5 -21
  74. package/mantine/specs/text_input_hooks.stories.tsx +5 -8
  75. package/mantine/specs/value_input_hooks.stories.tsx +5 -8
  76. package/mantine/types.ts +7 -3
  77. package/package.json +2 -1
  78. package/types/specs/{error_type_of_field.tests.ts → error_of_field.tests.ts} +1 -1
  79. /package/.out/types/specs/{error_type_of_field.tests.d.ts → error_of_field.tests.d.ts} +0 -0
package/dist/index.cjs CHANGED
@@ -45,6 +45,7 @@ __export(index_exports, {
45
45
  mergeValidators: () => mergeValidators,
46
46
  prototypingFieldValueFactory: () => prototypingFieldValueFactory,
47
47
  subFormFieldAdapters: () => subFormFieldAdapters,
48
+ trimmingStringAdapter: () => trimmingStringAdapter,
48
49
  useDefaultMobxFormHooks: () => useDefaultMobxFormHooks,
49
50
  useMantineFormFields: () => useMantineFormFields,
50
51
  usePartialComponent: () => usePartialComponent,
@@ -105,18 +106,18 @@ function chainAnnotatedFieldConverter(from, to) {
105
106
  return function(value, valuePath, context) {
106
107
  const {
107
108
  required: intermediateRequired,
108
- readonly: intermediateDisabled,
109
+ readonly: intermediateReadonly,
109
110
  value: intermediateValue
110
111
  } = from(value, valuePath, context);
111
112
  const {
112
113
  required: finalRequired,
113
- readonly: finalDisabled,
114
+ readonly: finalReadonly,
114
115
  value: finalValue
115
116
  } = to(intermediateValue, valuePath, context);
116
117
  return {
117
118
  value: finalValue,
118
119
  required: intermediateRequired || finalRequired,
119
- readonly: intermediateDisabled || finalDisabled
120
+ readonly: intermediateReadonly || finalReadonly
120
121
  };
121
122
  };
122
123
  }
@@ -155,6 +156,25 @@ var MaybeIdentityConverter = class {
155
156
  }
156
157
  };
157
158
 
159
+ // field_converters/trimming_string_converter.ts
160
+ var TrimmingStringConverter = class {
161
+ constructor() {
162
+ }
163
+ convert(to) {
164
+ return {
165
+ value: to.trim(),
166
+ required: false,
167
+ readonly: false
168
+ };
169
+ }
170
+ revert(from) {
171
+ return {
172
+ type: 0 /* Success */,
173
+ value: from.trim()
174
+ };
175
+ }
176
+ };
177
+
158
178
  // field_value_factories/prototyping_field_value_factory.ts
159
179
  function prototypingFieldValueFactory(prototype) {
160
180
  return function() {
@@ -189,6 +209,32 @@ var FieldAdapterBuilder = class _FieldAdapterBuilder {
189
209
  reverter
190
210
  );
191
211
  }
212
+ nullable() {
213
+ return this.or(null);
214
+ }
215
+ optional() {
216
+ return this.or(void 0);
217
+ }
218
+ or(proto) {
219
+ function isFrom(v) {
220
+ return v !== proto;
221
+ }
222
+ function isTo(v) {
223
+ return v !== proto;
224
+ }
225
+ return new _FieldAdapterBuilder(
226
+ (v, valuePath, context) => isFrom(v) ? this.convert(v, valuePath, context) : {
227
+ value: v,
228
+ readonly: false,
229
+ required: false
230
+ },
231
+ this.create,
232
+ (v, valuePath, context) => isTo(v) && this.revert ? this.revert(v, valuePath, context) : {
233
+ type: 0 /* Success */,
234
+ value: proto
235
+ }
236
+ );
237
+ }
192
238
  withIdentity(isFrom) {
193
239
  const identityConverter = new MaybeIdentityConverter({
194
240
  convert: this.convert,
@@ -226,6 +272,12 @@ function identityAdapter(prototype, required) {
226
272
  unreliableIdentityConverter()
227
273
  );
228
274
  }
275
+ function trimmingStringAdapter() {
276
+ return adapterFromTwoWayConverter(
277
+ new TrimmingStringConverter(),
278
+ prototypingFieldValueFactory("")
279
+ );
280
+ }
229
281
  function listAdapter() {
230
282
  return new FieldAdapterBuilder(
231
283
  annotatedIdentityConverter(false),
@@ -690,7 +742,10 @@ var FormModel = class {
690
742
 
691
743
  // core/mobx/hooks.ts
692
744
  var import_react = require("react");
693
- function useDefaultMobxFormHooks(presenter, value, onValidSubmit) {
745
+ function useDefaultMobxFormHooks(presenter, value, {
746
+ onValidFieldSubmit,
747
+ onValidFormSubmit
748
+ } = {}) {
694
749
  const model = (0, import_react.useMemo)(function() {
695
750
  return presenter.createModel(value);
696
751
  }, [
@@ -710,14 +765,14 @@ function useDefaultMobxFormHooks(presenter, value, onValidSubmit) {
710
765
  const onFieldSubmit = (0, import_react.useCallback)(
711
766
  function(valuePath) {
712
767
  if (presenter.validateField(model, valuePath)) {
713
- onValidSubmit?.(model, valuePath);
768
+ onValidFieldSubmit?.(model, valuePath);
714
769
  }
715
770
  return false;
716
771
  },
717
772
  [
718
773
  presenter,
719
774
  model,
720
- onValidSubmit
775
+ onValidFieldSubmit
721
776
  ]
722
777
  );
723
778
  const onFieldBlur = (0, import_react.useCallback)(
@@ -733,11 +788,24 @@ function useDefaultMobxFormHooks(presenter, value, onValidSubmit) {
733
788
  model
734
789
  ]
735
790
  );
791
+ const onFormSubmit = (0, import_react.useCallback)(
792
+ function() {
793
+ if (presenter.validateAll(model)) {
794
+ onValidFormSubmit?.(model, model.value);
795
+ }
796
+ },
797
+ [
798
+ presenter,
799
+ model,
800
+ onValidFormSubmit
801
+ ]
802
+ );
736
803
  return {
737
804
  model,
738
805
  onFieldValueChange,
739
806
  onFieldSubmit,
740
- onFieldBlur
807
+ onFieldBlur,
808
+ onFormSubmit
741
809
  };
742
810
  }
743
811
 
@@ -818,32 +886,34 @@ function mergeAdaptersWithValidators(adapters, validators) {
818
886
 
819
887
  // core/mobx/sub_form_field_adapters.ts
820
888
  var import_define3 = require("@strictly/define");
821
- function subFormFieldAdapters(subAdapters, prefix, contextType) {
889
+ function subFormFieldAdapters(subAdapters, parentTypePath, contextType) {
890
+ const dotCount = parentTypePath.split(".").length;
822
891
  function getSubValuePathAndContext(valuePath, context) {
823
- const subValuePath = valuePath.replace(prefix, "$");
824
- const subContext = (0, import_define3.flattenValuesOfType)(contextType, context)[prefix];
892
+ const parentValuePath = valuePath.split(".").slice(0, dotCount).join(".");
893
+ const subValuePath = valuePath.replace(parentValuePath, "$");
894
+ const subContext = (0, import_define3.flattenValuesOfType)(contextType, context)[parentValuePath];
825
895
  return [
826
896
  subValuePath,
827
897
  subContext
828
898
  ];
829
899
  }
830
900
  return Object.entries(subAdapters).reduce((acc, [
831
- subKey,
832
- subValue
901
+ subTypePath,
902
+ subAdapter
833
903
  ]) => {
834
- const key = subKey.replace("$", prefix);
904
+ const typePath = subTypePath.replace("$", parentTypePath);
835
905
  const adaptedAdapter = {
836
906
  convert: (from, valuePath, context) => {
837
- return subValue.convert(from, ...getSubValuePathAndContext(valuePath, context));
907
+ return subAdapter.convert(from, ...getSubValuePathAndContext(valuePath, context));
838
908
  },
839
909
  create: (valuePath, context) => {
840
- return subValue.create(...getSubValuePathAndContext(valuePath, context));
910
+ return subAdapter.create(...getSubValuePathAndContext(valuePath, context));
841
911
  },
842
- revert: subValue.revert && ((from, valuePath, context) => {
843
- return subValue.revert(from, ...getSubValuePathAndContext(valuePath, context));
912
+ revert: subAdapter.revert && ((from, valuePath, context) => {
913
+ return subAdapter.revert(from, ...getSubValuePathAndContext(valuePath, context));
844
914
  })
845
915
  };
846
- acc[key] = adaptedAdapter;
916
+ acc[typePath] = adaptedAdapter;
847
917
  return acc;
848
918
  }, {});
849
919
  }
@@ -1007,25 +1077,6 @@ var SelectStringConverter = class extends AbstractSelectValueTypeConverter {
1007
1077
  }
1008
1078
  };
1009
1079
 
1010
- // field_converters/trimming_string_converter.ts
1011
- var TrimmingStringConverter = class {
1012
- constructor() {
1013
- }
1014
- convert(to) {
1015
- return {
1016
- value: to.trim(),
1017
- required: false,
1018
- readonly: false
1019
- };
1020
- }
1021
- revert(from) {
1022
- return {
1023
- type: 0 /* Success */,
1024
- value: from.trim()
1025
- };
1026
- }
1027
- };
1028
-
1029
1080
  // field_converters/validating_converter.ts
1030
1081
  var import_define6 = require("@strictly/define");
1031
1082
  function validatingConverter(validators = []) {
@@ -1057,7 +1108,7 @@ function DefaultErrorRenderer({
1057
1108
  error
1058
1109
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
1059
1110
  }) {
1060
- return error;
1111
+ return JSON.stringify(error);
1061
1112
  }
1062
1113
 
1063
1114
  // mantine/hooks.tsx
@@ -1288,15 +1339,19 @@ function createFieldsView(valuePath, FieldsView, observableProps) {
1288
1339
  observableProps.onFieldSubmit?.(toKey(subKey));
1289
1340
  }
1290
1341
  return (0, import_mobx_react2.observer)(function(props) {
1291
- const subFields = Object.entries(observableProps.fields).reduce((acc, [
1292
- fieldKey,
1293
- fieldValue
1294
- ]) => {
1295
- if (fieldKey.startsWith(valuePath)) {
1296
- acc[toSubKey(fieldKey)] = fieldValue;
1297
- }
1298
- return acc;
1299
- }, {});
1342
+ const subFields = Object.entries(observableProps.fields).reduce(
1343
+ (acc, [
1344
+ fieldKey,
1345
+ fieldValue
1346
+ ]) => {
1347
+ if (fieldKey.startsWith(valuePath)) {
1348
+ acc[toSubKey(fieldKey)] = fieldValue;
1349
+ }
1350
+ return acc;
1351
+ },
1352
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
1353
+ {}
1354
+ );
1300
1355
  return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
1301
1356
  FieldsView,
1302
1357
  {
@@ -1452,13 +1507,16 @@ function createTextInput(valuePath, TextInput) {
1452
1507
  const propSource = ({
1453
1508
  ErrorRenderer = DefaultErrorRenderer
1454
1509
  }) => {
1510
+ const field = this.fields[valuePath];
1511
+ if (field == null) {
1512
+ throw new Error(`invalid field ${valuePath}`);
1513
+ }
1455
1514
  const {
1456
1515
  readonly,
1457
1516
  required,
1458
1517
  value,
1459
1518
  error
1460
- // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
1461
- } = this.fields[valuePath];
1519
+ } = field;
1462
1520
  return {
1463
1521
  // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
1464
1522
  name: valuePath,
@@ -1758,6 +1816,7 @@ function mergeValidators(validators1, validators2) {
1758
1816
  mergeValidators,
1759
1817
  prototypingFieldValueFactory,
1760
1818
  subFormFieldAdapters,
1819
+ trimmingStringAdapter,
1761
1820
  useDefaultMobxFormHooks,
1762
1821
  useMantineFormFields,
1763
1822
  usePartialComponent,
package/dist/index.d.cts CHANGED
@@ -58,6 +58,9 @@ declare class FieldAdapterBuilder<From, To, E, ValuePath extends string, Context
58
58
  constructor(convert: AnnotatedFieldConverter<From, To, ValuePath, Context>, create: FieldValueFactory<From, ValuePath, Context>, revert?: UnreliableFieldConverter<To, From, E, ValuePath, Context> | undefined);
59
59
  chain<To2, E2 = E>(converter: AnnotatedFieldConverter<To, To2, ValuePath, Context>, reverter?: UnreliableFieldConverter<To2, To, E2, ValuePath, Context>): FieldAdapterBuilder<From, To2, E | E2, ValuePath, Context>;
60
60
  withReverter(reverter: UnreliableFieldConverter<To, From, E, ValuePath, Context>): FieldAdapterBuilder<From, To, E, ValuePath, Context>;
61
+ nullable(): FieldAdapterBuilder<From | null, To | null, E, ValuePath, Context>;
62
+ optional(): FieldAdapterBuilder<From | undefined, To | undefined, E, ValuePath, Context>;
63
+ private or;
61
64
  withIdentity(isFrom: (from: To | From) => from is From): FieldAdapterBuilder<From, To | From, E, ValuePath, Context>;
62
65
  get narrow(): FieldAdapter<From, To, E, ValuePath, Context>;
63
66
  }
@@ -68,6 +71,7 @@ declare function adapterFromTwoWayConverter<From, To, E, ValuePath extends strin
68
71
  declare function adapterFromPrototype<From, To, ValuePath extends string, Context>(converter: AnnotatedFieldConverter<From, To, ValuePath, Context>, prototype: From): FieldAdapterBuilder<From, To, never, ValuePath, Context>;
69
72
  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
73
  declare function identityAdapter<V, ValuePath extends string, Context>(prototype: V, required?: boolean): FieldAdapterBuilder<V, V, never, ValuePath, Context>;
74
+ declare function trimmingStringAdapter<ValuePath extends string, Context>(): FieldAdapterBuilder<string, string, never, ValuePath, Context>;
71
75
  declare function listAdapter<E, ValuePath extends string, Context>(): FieldAdapterBuilder<readonly E[], readonly E[], never, ValuePath, Context>;
72
76
 
73
77
  type FieldAdaptersOfValues<FlattenedValues extends Readonly<Record<string, any>>, TypePathsToValuePaths extends Readonly<Record<keyof FlattenedValues, string>> = Readonly<Record<keyof FlattenedValues, any>>, Context = any> = {
@@ -181,8 +185,12 @@ type FormFieldsOfPresenter<Presenter extends FormPresenter<any, any, any, any>>
181
185
 
182
186
  type ValueOfPresenter<P extends FormPresenter<any, any, any, any>> = P extends FormPresenter<infer T, any, any, any> ? ValueOfType<ReadonlyTypeOfType<T>> : never;
183
187
  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): {
188
+ declare function useDefaultMobxFormHooks<P extends FormPresenter<any, any, any, any>>(presenter: P, value: ValueOfPresenter<P>, { onValidFieldSubmit, onValidFormSubmit, }?: {
189
+ onValidFieldSubmit?: <Path extends ValuePathsOfPresenter<P>>(model: ModelOfPresenter<P>, valuePath: Path) => void;
190
+ onValidFormSubmit?: (model: ModelOfPresenter<P>, value: ValueOfPresenter<P>) => void;
191
+ }): {
185
192
  model: ModelOfPresenter<P>;
193
+ onFormSubmit?: () => void;
186
194
  } & Omit<FieldsViewProps<ModelOfPresenter<P>['fields']>, 'fields'>;
187
195
 
188
196
  type MergedOfFieldAdaptersWithTwoWayConverter<FieldAdapters extends Readonly<Record<string, FieldAdapter>>, E, Context> = {
@@ -204,11 +212,11 @@ type MergedOfFieldAdaptersWithValidators<FieldAdapters extends Readonly<Record<K
204
212
  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
213
  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
214
 
207
- type SubFormFieldAdapter<F extends FieldAdapter, P extends string, Context> = FieldAdapter<FromOfFieldAdapter<F>, ToOfFieldAdapter<F>, ErrorOfFieldAdapter<F>, P, Context>;
208
- type SubFormFieldAdapters<SubAdapters extends Record<string, FieldAdapter>, P extends string, Context> = {
209
- [K in keyof SubAdapters as K extends StringConcatOf<'$', infer S> ? `${P}${S}` : never]: K extends StringConcatOf<'$', infer S> ? SubFormFieldAdapter<SubAdapters[K], `${P}${S}`, Context> : never;
215
+ type SubFormFieldAdapter<F extends FieldAdapter, ValuePath extends string, Context> = FieldAdapter<FromOfFieldAdapter<F>, ToOfFieldAdapter<F>, ErrorOfFieldAdapter<F>, ValuePathOfFieldAdapter<F> extends StringConcatOf<'$', infer ValuePathSuffix> ? `${ValuePath}${ValuePathSuffix}` : string, Context>;
216
+ type SubFormFieldAdapters<SubAdapters extends Record<string, FieldAdapter>, TypePath extends string, ValuePath extends string, Context> = {
217
+ [K in keyof SubAdapters as K extends StringConcatOf<'$', infer TypePathSuffix> ? `${TypePath}${TypePathSuffix}` : never]: SubFormFieldAdapter<SubAdapters[K], ValuePath, Context>;
210
218
  };
211
- declare function subFormFieldAdapters<SubAdapters extends Record<string, FieldAdapter>, P extends string, ContextType extends Type>(subAdapters: SubAdapters, prefix: P, contextType: ContextType): SubFormFieldAdapters<SubAdapters, P, ValueOfType<ContextType>>;
219
+ declare function subFormFieldAdapters<SubAdapters extends Record<string, FieldAdapter>, TypePath extends string, TypePathsToValuePaths extends Record<TypePath, string>, ContextType extends Type>(subAdapters: SubAdapters, parentTypePath: TypePath, contextType: ContextType): SubFormFieldAdapters<SubAdapters, TypePath, TypePathsToValuePaths[TypePath], ValueOfType<ContextType>>;
212
220
 
213
221
  declare class IntegerToStringConverter<E, ValuePath extends string, Context> implements TwoWayFieldConverter<number, string, E, ValuePath, Context> {
214
222
  private readonly isNanError;
@@ -218,14 +226,14 @@ declare class IntegerToStringConverter<E, ValuePath extends string, Context> imp
218
226
  revert(from: string): UnreliableFieldConversion<number, E>;
219
227
  }
220
228
 
221
- declare class NullableToBooleanConverter<T extends Type, E, ValuePath extends string, Context, NullType extends null | undefined> implements TwoWayFieldConverterWithValueFactory<ValueOfType<ReadonlyTypeOfType<T>> | NullType, boolean, E, ValuePath, Context> {
229
+ declare class NullableToBooleanConverter<T extends Type, ValuePath extends string, Context, NullType extends null | undefined> implements TwoWayFieldConverterWithValueFactory<ValueOfType<ReadonlyTypeOfType<T>> | NullType, boolean, never, ValuePath, Context> {
222
230
  private readonly typeDef;
223
231
  private readonly prototype;
224
232
  private readonly nullType;
225
233
  readonly defaultValue: ValueOfType<ReadonlyTypeOfType<T>> | NullType;
226
234
  constructor(typeDef: T, prototype: ValueOfType<ReadonlyTypeOfType<T>>, nullType: NullType, defaultToNull?: boolean);
227
235
  convert(from: ValueOfType<ReadonlyTypeOfType<T>> | NullType): AnnotatedFieldConversion<boolean>;
228
- revert(from: boolean): UnreliableFieldConversion<ValueOfType<ReadonlyTypeOfType<T>> | NullType, E>;
236
+ revert(from: boolean): UnreliableFieldConversion<ValueOfType<ReadonlyTypeOfType<T>> | NullType, never>;
229
237
  create(): ValueOfType<ReadonlyTypeOfType<T>> | NullType;
230
238
  }
231
239
 
@@ -265,11 +273,14 @@ declare function validatingConverter<V, E, ValuePath extends string, Context>(va
265
273
 
266
274
  declare function prototypingFieldValueFactory<V, ValuePath extends string, Context>(prototype: V): FieldValueFactory<V, ValuePath, Context>;
267
275
 
268
- type ErrorRendererProps<E> = {
276
+ type ErrorOfField<F extends Field> = F extends Field<infer _V, infer E> ? E : never;
277
+
278
+ type InternalErrorRendererProps<E> = {
269
279
  error: E;
270
280
  };
271
- type ErrorRenderer<E = any> = ComponentType<ErrorRendererProps<E>>;
272
- declare function DefaultErrorRenderer({ error, }: ErrorRendererProps<any>): any;
281
+ type ErrorRendererProps<F extends Fields, K extends keyof Fields> = InternalErrorRendererProps<ErrorOfField<F[K]>>;
282
+ type ErrorRenderer<E = any> = ComponentType<InternalErrorRendererProps<E>>;
283
+ declare function DefaultErrorRenderer({ error, }: InternalErrorRendererProps<any>): string;
273
284
 
274
285
  type ValueTypeOfField<F extends Field> = F extends Field<infer V> ? V : never;
275
286
 
@@ -281,8 +292,6 @@ type BooleanFieldsOfFields<F extends Fields> = {
281
292
  [K in keyof F as ValueTypeOfField<F[K]> extends boolean ? K : never]: F[K];
282
293
  };
283
294
 
284
- type ErrorOfField<F extends Field> = F extends Field<infer _V, infer E> ? E : never;
285
-
286
295
  type ListFieldsOfFields<F extends Fields> = {
287
296
  [K in keyof F as ValueTypeOfField<F[K]> extends readonly any[] ? K : never]: F[K];
288
297
  };
@@ -319,8 +328,10 @@ type MantineForm<F extends Fields> = {
319
328
  onFieldBlur: ((this: void, key: keyof F) => void) | undefined;
320
329
  onFieldSubmit: ((this: void, key: keyof F) => boolean | void) | undefined;
321
330
  };
322
- type MantineFieldComponent<T, P = T, E = any> = UnsafePartialComponent<ComponentType<P>, T, {
323
- ErrorRenderer?: ErrorRenderer<E>;
331
+ type MantineFieldComponent<T, P = T, E = any> = UnsafePartialComponent<ComponentType<P>, T, [
332
+ E
333
+ ] extends [never] ? {} : {
334
+ ErrorRenderer: ErrorRenderer<E>;
324
335
  }>;
325
336
 
326
337
  type SuppliedCheckboxProps = Pick<CheckboxProps, 'name' | 'checked' | 'disabled' | 'required' | 'error' | 'onChange' | 'onFocus' | 'onBlur' | 'onKeyUp'>;
@@ -384,21 +395,21 @@ declare class MantineFormImpl<F extends Fields> implements MantineForm<F> {
384
395
  onFieldBlur: ((this: void, key: keyof F) => void) | undefined;
385
396
  onFieldSubmit: ((this: void, key: keyof F) => boolean | void) | undefined;
386
397
  constructor(fields: F);
387
- textInput<K extends keyof StringFieldsOfFields<F>>(valuePath: K): MantineFieldComponent<SuppliedTextInputProps, TextInputProps>;
388
- textInput<K extends keyof StringFieldsOfFields<F>, P extends SuppliedTextInputProps<any>>(valuePath: K, TextInput?: ComponentType<P>): MantineFieldComponent<SuppliedTextInputProps, P>;
398
+ textInput<K extends keyof StringFieldsOfFields<F>>(valuePath: K): MantineFieldComponent<SuppliedTextInputProps, TextInputProps, ErrorOfField<F[K]>>;
399
+ textInput<K extends keyof StringFieldsOfFields<F>, P extends SuppliedTextInputProps<any>>(valuePath: K, TextInput?: ComponentType<P>): MantineFieldComponent<SuppliedTextInputProps, P, ErrorOfField<F[K]>>;
389
400
  valueInput<K extends keyof AllFieldsOfFields<F>, P extends SuppliedValueInputProps<ValueTypeOfField<F[K]>, any>>(valuePath: K, ValueInput: ComponentType<P>): MantineFieldComponent<SuppliedValueInputProps<ValueTypeOfField<F[K]>>, P, ErrorOfField<F[K]>>;
390
401
  select<K extends keyof StringFieldsOfFields<F>>(valuePath: K): MantineFieldComponent<SuppliedTextInputProps, ComponentProps<typeof SimpleSelect>, ErrorOfField<F[K]>>;
391
- checkbox<K extends keyof BooleanFieldsOfFields<F>>(valuePath: K): MantineFieldComponent<SuppliedCheckboxProps, CheckboxProps>;
402
+ checkbox<K extends keyof BooleanFieldsOfFields<F>>(valuePath: K): MantineFieldComponent<SuppliedCheckboxProps, CheckboxProps, ErrorOfField<F[K]>>;
392
403
  checkbox<K extends keyof BooleanFieldsOfFields<F>, P extends SuppliedCheckboxProps>(valuePath: K, Checkbox: ComponentType<P>): MantineFieldComponent<SuppliedCheckboxProps, P, ErrorOfField<F[K]>>;
393
- radioGroup<K extends keyof StringFieldsOfFields<F>>(valuePath: K): MantineFieldComponent<SuppliedRadioGroupProps, RadioGroupProps>;
394
- radioGroup<K extends keyof StringFieldsOfFields<F>, P extends SuppliedRadioGroupProps>(valuePath: K, RadioGroup: ComponentType<P>): MantineFieldComponent<SuppliedRadioGroupProps, P>;
404
+ radioGroup<K extends keyof StringFieldsOfFields<F>, P extends RadioGroupProps = RadioGroupProps>(valuePath: K): MantineFieldComponent<SuppliedRadioGroupProps, P, ErrorOfField<F[K]>>;
405
+ radioGroup<K extends keyof StringFieldsOfFields<F>, P extends SuppliedRadioGroupProps>(valuePath: K, RadioGroup: ComponentType<P>): MantineFieldComponent<SuppliedRadioGroupProps, P, ErrorOfField<F[K]>>;
395
406
  radio<K extends keyof StringFieldsOfFields<F>>(valuePath: K, value: ValueTypeOfField<F[K]>): MantineFieldComponent<SuppliedRadioProps, RadioProps, ErrorOfField<F[K]>>;
396
407
  radio<K extends keyof StringFieldsOfFields<F>, P extends SuppliedRadioProps>(valuePath: K, value: ValueTypeOfField<F[K]>, Radio: ComponentType<P>): MantineFieldComponent<SuppliedRadioProps, P, ErrorOfField<F[K]>>;
397
408
  pill<K extends keyof AllFieldsOfFields<F>>(valuePath: K): MantineFieldComponent<SuppliedPillProps, PillProps, ErrorOfField<F[K]>>;
398
- pill<K extends keyof AllFieldsOfFields<F>, P extends SuppliedPillProps>(valuePath: K, Pill: ComponentType<P>): MantineFieldComponent<SuppliedPillProps, P>;
399
- list<K extends keyof ListFieldsOfFields<F>>(valuePath: K): MantineFieldComponent<SuppliedListProps<`${K}.${number}`>, ComponentProps<typeof DefaultList<ElementOfArray<F[K]['value']>, K>>>;
400
- fieldsView<K extends keyof AllFieldsOfFields<F>, P extends FieldsViewProps<Fields> = FieldsViewProps<SubFormFields<F, K>>>(valuePath: K, FieldsView: ComponentType<P>): MantineFieldComponent<FieldsViewProps<P['fields']>, P>;
401
- 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>;
409
+ pill<K extends keyof AllFieldsOfFields<F>, P extends SuppliedPillProps>(valuePath: K, Pill: ComponentType<P>): MantineFieldComponent<SuppliedPillProps, P, ErrorOfField<F[K]>>;
410
+ list<K extends keyof ListFieldsOfFields<F>>(valuePath: K): MantineFieldComponent<SuppliedListProps<`${K}.${number}`>, ComponentProps<typeof DefaultList<ElementOfArray<F[K]['value']>, K>>, never>;
411
+ fieldsView<K extends keyof AllFieldsOfFields<F>, P extends FieldsViewProps<Fields> = FieldsViewProps<SubFormFields<F, K>>>(valuePath: K, FieldsView: ComponentType<P>): MantineFieldComponent<FieldsViewProps<P['fields']>, P, never>;
412
+ 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, never>;
402
413
  }
403
414
 
404
415
  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<{
@@ -407,4 +418,4 @@ type MergedOfValidators<Validators1 extends Partial<Readonly<Record<Keys, Valida
407
418
  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;
408
419
  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>;
409
420
 
410
- 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 };
421
+ 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, trimmingStringAdapter, useDefaultMobxFormHooks, useMantineFormFields, usePartialComponent, usePartialObserverComponent, validatingConverter };
package/dist/index.d.ts CHANGED
@@ -58,6 +58,9 @@ declare class FieldAdapterBuilder<From, To, E, ValuePath extends string, Context
58
58
  constructor(convert: AnnotatedFieldConverter<From, To, ValuePath, Context>, create: FieldValueFactory<From, ValuePath, Context>, revert?: UnreliableFieldConverter<To, From, E, ValuePath, Context> | undefined);
59
59
  chain<To2, E2 = E>(converter: AnnotatedFieldConverter<To, To2, ValuePath, Context>, reverter?: UnreliableFieldConverter<To2, To, E2, ValuePath, Context>): FieldAdapterBuilder<From, To2, E | E2, ValuePath, Context>;
60
60
  withReverter(reverter: UnreliableFieldConverter<To, From, E, ValuePath, Context>): FieldAdapterBuilder<From, To, E, ValuePath, Context>;
61
+ nullable(): FieldAdapterBuilder<From | null, To | null, E, ValuePath, Context>;
62
+ optional(): FieldAdapterBuilder<From | undefined, To | undefined, E, ValuePath, Context>;
63
+ private or;
61
64
  withIdentity(isFrom: (from: To | From) => from is From): FieldAdapterBuilder<From, To | From, E, ValuePath, Context>;
62
65
  get narrow(): FieldAdapter<From, To, E, ValuePath, Context>;
63
66
  }
@@ -68,6 +71,7 @@ declare function adapterFromTwoWayConverter<From, To, E, ValuePath extends strin
68
71
  declare function adapterFromPrototype<From, To, ValuePath extends string, Context>(converter: AnnotatedFieldConverter<From, To, ValuePath, Context>, prototype: From): FieldAdapterBuilder<From, To, never, ValuePath, Context>;
69
72
  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
73
  declare function identityAdapter<V, ValuePath extends string, Context>(prototype: V, required?: boolean): FieldAdapterBuilder<V, V, never, ValuePath, Context>;
74
+ declare function trimmingStringAdapter<ValuePath extends string, Context>(): FieldAdapterBuilder<string, string, never, ValuePath, Context>;
71
75
  declare function listAdapter<E, ValuePath extends string, Context>(): FieldAdapterBuilder<readonly E[], readonly E[], never, ValuePath, Context>;
72
76
 
73
77
  type FieldAdaptersOfValues<FlattenedValues extends Readonly<Record<string, any>>, TypePathsToValuePaths extends Readonly<Record<keyof FlattenedValues, string>> = Readonly<Record<keyof FlattenedValues, any>>, Context = any> = {
@@ -181,8 +185,12 @@ type FormFieldsOfPresenter<Presenter extends FormPresenter<any, any, any, any>>
181
185
 
182
186
  type ValueOfPresenter<P extends FormPresenter<any, any, any, any>> = P extends FormPresenter<infer T, any, any, any> ? ValueOfType<ReadonlyTypeOfType<T>> : never;
183
187
  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): {
188
+ declare function useDefaultMobxFormHooks<P extends FormPresenter<any, any, any, any>>(presenter: P, value: ValueOfPresenter<P>, { onValidFieldSubmit, onValidFormSubmit, }?: {
189
+ onValidFieldSubmit?: <Path extends ValuePathsOfPresenter<P>>(model: ModelOfPresenter<P>, valuePath: Path) => void;
190
+ onValidFormSubmit?: (model: ModelOfPresenter<P>, value: ValueOfPresenter<P>) => void;
191
+ }): {
185
192
  model: ModelOfPresenter<P>;
193
+ onFormSubmit?: () => void;
186
194
  } & Omit<FieldsViewProps<ModelOfPresenter<P>['fields']>, 'fields'>;
187
195
 
188
196
  type MergedOfFieldAdaptersWithTwoWayConverter<FieldAdapters extends Readonly<Record<string, FieldAdapter>>, E, Context> = {
@@ -204,11 +212,11 @@ type MergedOfFieldAdaptersWithValidators<FieldAdapters extends Readonly<Record<K
204
212
  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
213
  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
214
 
207
- type SubFormFieldAdapter<F extends FieldAdapter, P extends string, Context> = FieldAdapter<FromOfFieldAdapter<F>, ToOfFieldAdapter<F>, ErrorOfFieldAdapter<F>, P, Context>;
208
- type SubFormFieldAdapters<SubAdapters extends Record<string, FieldAdapter>, P extends string, Context> = {
209
- [K in keyof SubAdapters as K extends StringConcatOf<'$', infer S> ? `${P}${S}` : never]: K extends StringConcatOf<'$', infer S> ? SubFormFieldAdapter<SubAdapters[K], `${P}${S}`, Context> : never;
215
+ type SubFormFieldAdapter<F extends FieldAdapter, ValuePath extends string, Context> = FieldAdapter<FromOfFieldAdapter<F>, ToOfFieldAdapter<F>, ErrorOfFieldAdapter<F>, ValuePathOfFieldAdapter<F> extends StringConcatOf<'$', infer ValuePathSuffix> ? `${ValuePath}${ValuePathSuffix}` : string, Context>;
216
+ type SubFormFieldAdapters<SubAdapters extends Record<string, FieldAdapter>, TypePath extends string, ValuePath extends string, Context> = {
217
+ [K in keyof SubAdapters as K extends StringConcatOf<'$', infer TypePathSuffix> ? `${TypePath}${TypePathSuffix}` : never]: SubFormFieldAdapter<SubAdapters[K], ValuePath, Context>;
210
218
  };
211
- declare function subFormFieldAdapters<SubAdapters extends Record<string, FieldAdapter>, P extends string, ContextType extends Type>(subAdapters: SubAdapters, prefix: P, contextType: ContextType): SubFormFieldAdapters<SubAdapters, P, ValueOfType<ContextType>>;
219
+ declare function subFormFieldAdapters<SubAdapters extends Record<string, FieldAdapter>, TypePath extends string, TypePathsToValuePaths extends Record<TypePath, string>, ContextType extends Type>(subAdapters: SubAdapters, parentTypePath: TypePath, contextType: ContextType): SubFormFieldAdapters<SubAdapters, TypePath, TypePathsToValuePaths[TypePath], ValueOfType<ContextType>>;
212
220
 
213
221
  declare class IntegerToStringConverter<E, ValuePath extends string, Context> implements TwoWayFieldConverter<number, string, E, ValuePath, Context> {
214
222
  private readonly isNanError;
@@ -218,14 +226,14 @@ declare class IntegerToStringConverter<E, ValuePath extends string, Context> imp
218
226
  revert(from: string): UnreliableFieldConversion<number, E>;
219
227
  }
220
228
 
221
- declare class NullableToBooleanConverter<T extends Type, E, ValuePath extends string, Context, NullType extends null | undefined> implements TwoWayFieldConverterWithValueFactory<ValueOfType<ReadonlyTypeOfType<T>> | NullType, boolean, E, ValuePath, Context> {
229
+ declare class NullableToBooleanConverter<T extends Type, ValuePath extends string, Context, NullType extends null | undefined> implements TwoWayFieldConverterWithValueFactory<ValueOfType<ReadonlyTypeOfType<T>> | NullType, boolean, never, ValuePath, Context> {
222
230
  private readonly typeDef;
223
231
  private readonly prototype;
224
232
  private readonly nullType;
225
233
  readonly defaultValue: ValueOfType<ReadonlyTypeOfType<T>> | NullType;
226
234
  constructor(typeDef: T, prototype: ValueOfType<ReadonlyTypeOfType<T>>, nullType: NullType, defaultToNull?: boolean);
227
235
  convert(from: ValueOfType<ReadonlyTypeOfType<T>> | NullType): AnnotatedFieldConversion<boolean>;
228
- revert(from: boolean): UnreliableFieldConversion<ValueOfType<ReadonlyTypeOfType<T>> | NullType, E>;
236
+ revert(from: boolean): UnreliableFieldConversion<ValueOfType<ReadonlyTypeOfType<T>> | NullType, never>;
229
237
  create(): ValueOfType<ReadonlyTypeOfType<T>> | NullType;
230
238
  }
231
239
 
@@ -265,11 +273,14 @@ declare function validatingConverter<V, E, ValuePath extends string, Context>(va
265
273
 
266
274
  declare function prototypingFieldValueFactory<V, ValuePath extends string, Context>(prototype: V): FieldValueFactory<V, ValuePath, Context>;
267
275
 
268
- type ErrorRendererProps<E> = {
276
+ type ErrorOfField<F extends Field> = F extends Field<infer _V, infer E> ? E : never;
277
+
278
+ type InternalErrorRendererProps<E> = {
269
279
  error: E;
270
280
  };
271
- type ErrorRenderer<E = any> = ComponentType<ErrorRendererProps<E>>;
272
- declare function DefaultErrorRenderer({ error, }: ErrorRendererProps<any>): any;
281
+ type ErrorRendererProps<F extends Fields, K extends keyof Fields> = InternalErrorRendererProps<ErrorOfField<F[K]>>;
282
+ type ErrorRenderer<E = any> = ComponentType<InternalErrorRendererProps<E>>;
283
+ declare function DefaultErrorRenderer({ error, }: InternalErrorRendererProps<any>): string;
273
284
 
274
285
  type ValueTypeOfField<F extends Field> = F extends Field<infer V> ? V : never;
275
286
 
@@ -281,8 +292,6 @@ type BooleanFieldsOfFields<F extends Fields> = {
281
292
  [K in keyof F as ValueTypeOfField<F[K]> extends boolean ? K : never]: F[K];
282
293
  };
283
294
 
284
- type ErrorOfField<F extends Field> = F extends Field<infer _V, infer E> ? E : never;
285
-
286
295
  type ListFieldsOfFields<F extends Fields> = {
287
296
  [K in keyof F as ValueTypeOfField<F[K]> extends readonly any[] ? K : never]: F[K];
288
297
  };
@@ -319,8 +328,10 @@ type MantineForm<F extends Fields> = {
319
328
  onFieldBlur: ((this: void, key: keyof F) => void) | undefined;
320
329
  onFieldSubmit: ((this: void, key: keyof F) => boolean | void) | undefined;
321
330
  };
322
- type MantineFieldComponent<T, P = T, E = any> = UnsafePartialComponent<ComponentType<P>, T, {
323
- ErrorRenderer?: ErrorRenderer<E>;
331
+ type MantineFieldComponent<T, P = T, E = any> = UnsafePartialComponent<ComponentType<P>, T, [
332
+ E
333
+ ] extends [never] ? {} : {
334
+ ErrorRenderer: ErrorRenderer<E>;
324
335
  }>;
325
336
 
326
337
  type SuppliedCheckboxProps = Pick<CheckboxProps, 'name' | 'checked' | 'disabled' | 'required' | 'error' | 'onChange' | 'onFocus' | 'onBlur' | 'onKeyUp'>;
@@ -384,21 +395,21 @@ declare class MantineFormImpl<F extends Fields> implements MantineForm<F> {
384
395
  onFieldBlur: ((this: void, key: keyof F) => void) | undefined;
385
396
  onFieldSubmit: ((this: void, key: keyof F) => boolean | void) | undefined;
386
397
  constructor(fields: F);
387
- textInput<K extends keyof StringFieldsOfFields<F>>(valuePath: K): MantineFieldComponent<SuppliedTextInputProps, TextInputProps>;
388
- textInput<K extends keyof StringFieldsOfFields<F>, P extends SuppliedTextInputProps<any>>(valuePath: K, TextInput?: ComponentType<P>): MantineFieldComponent<SuppliedTextInputProps, P>;
398
+ textInput<K extends keyof StringFieldsOfFields<F>>(valuePath: K): MantineFieldComponent<SuppliedTextInputProps, TextInputProps, ErrorOfField<F[K]>>;
399
+ textInput<K extends keyof StringFieldsOfFields<F>, P extends SuppliedTextInputProps<any>>(valuePath: K, TextInput?: ComponentType<P>): MantineFieldComponent<SuppliedTextInputProps, P, ErrorOfField<F[K]>>;
389
400
  valueInput<K extends keyof AllFieldsOfFields<F>, P extends SuppliedValueInputProps<ValueTypeOfField<F[K]>, any>>(valuePath: K, ValueInput: ComponentType<P>): MantineFieldComponent<SuppliedValueInputProps<ValueTypeOfField<F[K]>>, P, ErrorOfField<F[K]>>;
390
401
  select<K extends keyof StringFieldsOfFields<F>>(valuePath: K): MantineFieldComponent<SuppliedTextInputProps, ComponentProps<typeof SimpleSelect>, ErrorOfField<F[K]>>;
391
- checkbox<K extends keyof BooleanFieldsOfFields<F>>(valuePath: K): MantineFieldComponent<SuppliedCheckboxProps, CheckboxProps>;
402
+ checkbox<K extends keyof BooleanFieldsOfFields<F>>(valuePath: K): MantineFieldComponent<SuppliedCheckboxProps, CheckboxProps, ErrorOfField<F[K]>>;
392
403
  checkbox<K extends keyof BooleanFieldsOfFields<F>, P extends SuppliedCheckboxProps>(valuePath: K, Checkbox: ComponentType<P>): MantineFieldComponent<SuppliedCheckboxProps, P, ErrorOfField<F[K]>>;
393
- radioGroup<K extends keyof StringFieldsOfFields<F>>(valuePath: K): MantineFieldComponent<SuppliedRadioGroupProps, RadioGroupProps>;
394
- radioGroup<K extends keyof StringFieldsOfFields<F>, P extends SuppliedRadioGroupProps>(valuePath: K, RadioGroup: ComponentType<P>): MantineFieldComponent<SuppliedRadioGroupProps, P>;
404
+ radioGroup<K extends keyof StringFieldsOfFields<F>, P extends RadioGroupProps = RadioGroupProps>(valuePath: K): MantineFieldComponent<SuppliedRadioGroupProps, P, ErrorOfField<F[K]>>;
405
+ radioGroup<K extends keyof StringFieldsOfFields<F>, P extends SuppliedRadioGroupProps>(valuePath: K, RadioGroup: ComponentType<P>): MantineFieldComponent<SuppliedRadioGroupProps, P, ErrorOfField<F[K]>>;
395
406
  radio<K extends keyof StringFieldsOfFields<F>>(valuePath: K, value: ValueTypeOfField<F[K]>): MantineFieldComponent<SuppliedRadioProps, RadioProps, ErrorOfField<F[K]>>;
396
407
  radio<K extends keyof StringFieldsOfFields<F>, P extends SuppliedRadioProps>(valuePath: K, value: ValueTypeOfField<F[K]>, Radio: ComponentType<P>): MantineFieldComponent<SuppliedRadioProps, P, ErrorOfField<F[K]>>;
397
408
  pill<K extends keyof AllFieldsOfFields<F>>(valuePath: K): MantineFieldComponent<SuppliedPillProps, PillProps, ErrorOfField<F[K]>>;
398
- pill<K extends keyof AllFieldsOfFields<F>, P extends SuppliedPillProps>(valuePath: K, Pill: ComponentType<P>): MantineFieldComponent<SuppliedPillProps, P>;
399
- list<K extends keyof ListFieldsOfFields<F>>(valuePath: K): MantineFieldComponent<SuppliedListProps<`${K}.${number}`>, ComponentProps<typeof DefaultList<ElementOfArray<F[K]['value']>, K>>>;
400
- fieldsView<K extends keyof AllFieldsOfFields<F>, P extends FieldsViewProps<Fields> = FieldsViewProps<SubFormFields<F, K>>>(valuePath: K, FieldsView: ComponentType<P>): MantineFieldComponent<FieldsViewProps<P['fields']>, P>;
401
- 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>;
409
+ pill<K extends keyof AllFieldsOfFields<F>, P extends SuppliedPillProps>(valuePath: K, Pill: ComponentType<P>): MantineFieldComponent<SuppliedPillProps, P, ErrorOfField<F[K]>>;
410
+ list<K extends keyof ListFieldsOfFields<F>>(valuePath: K): MantineFieldComponent<SuppliedListProps<`${K}.${number}`>, ComponentProps<typeof DefaultList<ElementOfArray<F[K]['value']>, K>>, never>;
411
+ fieldsView<K extends keyof AllFieldsOfFields<F>, P extends FieldsViewProps<Fields> = FieldsViewProps<SubFormFields<F, K>>>(valuePath: K, FieldsView: ComponentType<P>): MantineFieldComponent<FieldsViewProps<P['fields']>, P, never>;
412
+ 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, never>;
402
413
  }
403
414
 
404
415
  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<{
@@ -407,4 +418,4 @@ type MergedOfValidators<Validators1 extends Partial<Readonly<Record<Keys, Valida
407
418
  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;
408
419
  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>;
409
420
 
410
- 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 };
421
+ 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, trimmingStringAdapter, useDefaultMobxFormHooks, useMantineFormFields, usePartialComponent, usePartialObserverComponent, validatingConverter };