@strictly/react-form 0.0.30 → 0.0.32

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 (299) hide show
  1. package/.out/.storybook/preview.js +7 -0
  2. package/.out/core/mobx/{field_adapter.d.ts → FieldAdapter.d.ts} +1 -1
  3. package/.out/core/mobx/{field_adapters_of_values.d.ts → FieldAdaptersOfValues.d.ts} +1 -1
  4. package/.out/core/mobx/{flattened_adapters_of_fields.d.ts → FlattenedAdaptersOfFields.d.ts} +2 -2
  5. package/.out/core/mobx/{form_fields_of_field_adapters.d.ts → FormFieldsOfFieldAdapters.d.ts} +2 -2
  6. package/.out/core/mobx/{form_model.d.ts → FormModel.d.ts} +6 -5
  7. package/.out/core/mobx/{form_model.js → FormModel.js} +47 -35
  8. package/.out/core/mobx/{field_adapter_builder.d.ts → fieldAdapterBuilder.d.ts} +2 -2
  9. package/.out/core/mobx/{field_adapter_builder.js → fieldAdapterBuilder.js} +6 -6
  10. package/.out/core/mobx/hooks.d.ts +1 -1
  11. package/.out/core/mobx/hooks.js +15 -6
  12. package/.out/core/mobx/{merge_field_adapters_with_two_way_converter.d.ts → mergeFieldAdaptersWithTwoWayConverter.d.ts} +2 -2
  13. package/.out/core/mobx/{merge_field_adapters_with_two_way_converter.js → mergeFieldAdaptersWithTwoWayConverter.js} +1 -1
  14. package/.out/core/mobx/{merge_field_adapters_with_validators.d.ts → mergeFieldAdaptersWithValidators.d.ts} +1 -1
  15. package/.out/core/mobx/{merge_field_adapters_with_validators.js → mergeFieldAdaptersWithValidators.js} +1 -1
  16. package/.out/core/mobx/peek.d.ts +5 -0
  17. package/.out/core/mobx/peek.js +16 -0
  18. package/.out/core/mobx/specs/{form_model.tests.js → FormModel.tests.js} +8 -8
  19. package/.out/core/mobx/specs/{merge_field_adapters_with_two_way_converter.tests.js → MergeFieldAdaptersWithTwoWayConverter.tests.js} +4 -4
  20. package/.out/core/mobx/specs/{merge_field_adapters_with_validators.tests.js → MergeFieldAdaptersWithValidators.tests.js} +3 -3
  21. package/.out/core/mobx/specs/fixtures.d.ts +2 -2
  22. package/.out/core/mobx/specs/{sub_form_field_adapters.tests.js → subFormFieldAdapters.tests.js} +2 -2
  23. package/.out/core/mobx/{sub_form_field_adapters.d.ts → subFormFieldAdapters.d.ts} +1 -1
  24. package/.out/core/props.d.ts +1 -1
  25. package/.out/field_converters/{integer_to_string_converter.d.ts → IntegerToStringConverter.d.ts} +1 -1
  26. package/.out/field_converters/{integer_to_string_converter.js → IntegerToStringConverter.js} +1 -1
  27. package/.out/field_converters/{maybe_identity_converter.d.ts → MaybeIdentityConverter.d.ts} +1 -1
  28. package/.out/field_converters/{nullable_to_boolean_converter.d.ts → NullableToBooleanConverter.d.ts} +1 -1
  29. package/.out/field_converters/{nullable_to_boolean_converter.js → NullableToBooleanConverter.js} +1 -1
  30. package/.out/field_converters/{select_value_type_converter.d.ts → SelectValueTypeConverter.d.ts} +1 -1
  31. package/.out/field_converters/{select_value_type_converter.js → SelectValueTypeConverter.js} +1 -1
  32. package/.out/field_converters/{trimming_string_converter.d.ts → TrimmingStringConverter.d.ts} +1 -1
  33. package/.out/field_converters/{trimming_string_converter.js → TrimmingStringConverter.js} +1 -1
  34. package/.out/field_converters/{chain_field_converter.d.ts → chainFieldConverter.d.ts} +1 -1
  35. package/.out/field_converters/{chain_field_converter.js → chainFieldConverter.js} +1 -1
  36. package/.out/field_converters/{identity_converter.d.ts → identityConverter.d.ts} +1 -1
  37. package/.out/field_converters/{identity_converter.js → identityConverter.js} +1 -1
  38. package/.out/field_converters/specs/{chain_field_converter.tests.js → chainFieldConverter.tests.js} +2 -2
  39. package/.out/field_converters/{validating_converter.d.ts → validatingConverter.d.ts} +1 -1
  40. package/.out/field_converters/{validating_converter.js → validatingConverter.js} +1 -1
  41. package/.out/field_value_factories/{prototyping_field_value_factory.d.ts → prototypingFieldValueFactory.d.ts} +1 -1
  42. package/.out/index.d.ts +23 -22
  43. package/.out/index.js +23 -22
  44. package/.out/mantine/{error_renderer.d.ts → ErrorRenderer.d.ts} +2 -2
  45. package/.out/mantine/{create_checkbox.d.ts → createCheckbox.d.ts} +3 -3
  46. package/.out/mantine/{create_checkbox.js → createCheckbox.js} +2 -2
  47. package/.out/mantine/{create_field_view.d.ts → createFieldView.d.ts} +4 -4
  48. package/.out/mantine/{create_field_view.js → createFieldView.js} +1 -1
  49. package/.out/mantine/{create_fields_view.d.ts → createFieldsView.d.ts} +3 -3
  50. package/.out/mantine/{create_form.d.ts → createForm.d.ts} +3 -3
  51. package/.out/mantine/{create_list.d.ts → createList.d.ts} +3 -3
  52. package/.out/mantine/{create_list.js → createList.js} +1 -1
  53. package/.out/mantine/{create_pill.d.ts → createPill.d.ts} +2 -2
  54. package/.out/mantine/{create_pill.js → createPill.js} +1 -1
  55. package/.out/mantine/{create_radio.d.ts → createRadio.d.ts} +3 -3
  56. package/.out/mantine/{create_radio.js → createRadio.js} +1 -1
  57. package/.out/mantine/{create_radio_group.d.ts → createRadioGroup.d.ts} +3 -3
  58. package/.out/mantine/{create_radio_group.js → createRadioGroup.js} +2 -2
  59. package/.out/mantine/{create_text_input.d.ts → createTextInput.d.ts} +3 -3
  60. package/.out/mantine/{create_text_input.js → createTextInput.js} +2 -2
  61. package/.out/mantine/{create_value_input.d.ts → createValueInput.d.ts} +4 -4
  62. package/.out/mantine/{create_value_input.js → createValueInput.js} +2 -2
  63. package/.out/mantine/hooks.d.ts +18 -18
  64. package/.out/mantine/hooks.js +10 -10
  65. package/.out/mantine/specs/{checkbox_hooks.stories.d.ts → checkboxHooks.stories.d.ts} +1 -1
  66. package/.out/mantine/specs/{checkbox_hooks.stories.js → checkboxHooks.stories.js} +1 -1
  67. package/.out/mantine/specs/{checkbox_hooks.tests.js → checkboxHooks.tests.js} +2 -2
  68. package/.out/mantine/specs/{field_view_hooks.stories.d.ts → fieldViewHooks.stories.d.ts} +1 -1
  69. package/.out/mantine/specs/{field_view_hooks.tests.js → fieldViewHooks.tests.js} +1 -1
  70. package/.out/mantine/specs/{fields_view_hooks.stories.d.ts → fieldsViewHooks.stories.d.ts} +1 -1
  71. package/.out/mantine/specs/{fields_view_hooks.tests.js → fieldsViewHooks.tests.js} +1 -1
  72. package/.out/mantine/specs/{form_hooks.stories.d.ts → formHooks.stories.d.ts} +1 -1
  73. package/.out/mantine/specs/{form_hooks.tests.js → formHooks.tests.js} +1 -1
  74. package/.out/mantine/specs/{list_hooks.stories.d.ts → listHooks.stories.d.ts} +1 -1
  75. package/.out/mantine/specs/{list_hooks.tests.js → listHooks.tests.js} +1 -1
  76. package/.out/mantine/specs/{radio_group_hooks.stories.d.ts → radioGroupHooks.stories.d.ts} +2 -2
  77. package/.out/mantine/specs/{radio_group_hooks.stories.js → radioGroupHooks.stories.js} +1 -1
  78. package/.out/mantine/specs/{radio_group_hooks.tests.js → radioGroupHooks.tests.js} +2 -2
  79. package/.out/mantine/specs/{select_hooks.stories.d.ts → selectHooks.stories.d.ts} +1 -1
  80. package/.out/mantine/specs/{select_hooks.stories.js → selectHooks.stories.js} +1 -1
  81. package/.out/mantine/specs/{select_hooks.tests.js → selectHooks.tests.js} +1 -1
  82. package/.out/mantine/specs/{text_input_hooks.stories.d.ts → textInputHooks.stories.d.ts} +2 -2
  83. package/.out/mantine/specs/{text_input_hooks.stories.js → textInputHooks.stories.js} +1 -1
  84. package/.out/mantine/specs/{text_input_hooks.tests.js → textInputHooks.tests.js} +2 -2
  85. package/.out/mantine/specs/{value_input_hooks.stories.d.ts → valueInputHooks.stories.d.ts} +2 -2
  86. package/.out/mantine/specs/{value_input_hooks.stories.js → valueInputHooks.stories.js} +1 -1
  87. package/.out/mantine/specs/{value_input_hooks.tests.js → valueInputHooks.tests.js} +1 -1
  88. package/.out/mantine/types.d.ts +3 -3
  89. package/.out/tsconfig.tsbuildinfo +1 -1
  90. package/.out/types/{all_fields_of_fields.d.ts → AllFieldsOfFields.d.ts} +2 -2
  91. package/.out/types/{boolean_fields_of_fields.d.ts → BooleanFieldsOfFields.d.ts} +2 -2
  92. package/.out/types/{error_of_field.d.ts → ErrorOfField.d.ts} +1 -1
  93. package/.out/types/{flattened_validators_of_fields.d.ts → FlattenedValidatorsOfFields.d.ts} +1 -1
  94. package/.out/types/{list_fields_of_fields.d.ts → ListFieldsOfFields.d.ts} +2 -2
  95. package/.out/types/{string_fields_of_fields.d.ts → StringFieldsOfFields.d.ts} +2 -2
  96. package/.out/types/{sub_form_fields.d.ts → SubFormFields.d.ts} +1 -1
  97. package/.out/types/{value_type_of_field.d.ts → ValueTypeOfField.d.ts} +1 -1
  98. package/.out/types/specs/{merge_validators.tests.js → MergeValidators.tests.js} +1 -1
  99. package/.out/vitest.workspace.js +4 -4
  100. package/.storybook/preview.tsx +8 -0
  101. package/.turbo/turbo-build.log +7 -7
  102. package/.turbo/turbo-check-types.log +1 -1
  103. package/.turbo/turbo-release$colon$exports.log +1 -1
  104. package/core/mobx/{field_adapter.ts → FieldAdapter.ts} +1 -1
  105. package/core/mobx/{field_adapters_of_values.ts → FieldAdaptersOfValues.ts} +1 -1
  106. package/core/mobx/{flattened_adapters_of_fields.ts → FlattenedAdaptersOfFields.ts} +2 -2
  107. package/core/mobx/{form_fields_of_field_adapters.ts → FormFieldsOfFieldAdapters.ts} +2 -2
  108. package/core/mobx/{form_model.ts → FormModel.ts} +33 -26
  109. package/core/mobx/{field_adapter_builder.ts → fieldAdapterBuilder.ts} +7 -7
  110. package/core/mobx/hooks.tsx +19 -7
  111. package/core/mobx/{merge_field_adapters_with_two_way_converter.ts → mergeFieldAdaptersWithTwoWayConverter.ts} +3 -3
  112. package/core/mobx/{merge_field_adapters_with_validators.ts → mergeFieldAdaptersWithValidators.ts} +2 -2
  113. package/core/mobx/peek.ts +17 -0
  114. package/core/mobx/specs/{flattened_adapters_of_fields.tests.ts → FlattenedAdaptersOfFields.tests.ts} +3 -3
  115. package/core/mobx/specs/{flattened_list_types_of_types.tests.ts → FlattenedListTypesOfTypes.tests.ts} +1 -1
  116. package/core/mobx/specs/{form_model.tests.ts → FormModel.tests.ts} +10 -10
  117. package/core/mobx/specs/{merge_field_adapters_with_two_way_converter.tests.ts → MergeFieldAdaptersWithTwoWayConverter.tests.ts} +5 -5
  118. package/core/mobx/specs/{merge_field_adapters_with_validators.tests.ts → MergeFieldAdaptersWithValidators.tests.ts} +4 -4
  119. package/core/mobx/specs/fixtures.ts +2 -2
  120. package/core/mobx/specs/{sub_form_field_adapters.tests.ts → subFormFieldAdapters.tests.ts} +3 -3
  121. package/core/mobx/{sub_form_field_adapters.ts → subFormFieldAdapters.ts} +1 -1
  122. package/core/props.ts +1 -1
  123. package/dist/index.cjs +161 -132
  124. package/dist/index.d.cts +19 -12
  125. package/dist/index.d.ts +19 -12
  126. package/dist/index.js +166 -136
  127. package/field_converters/{integer_to_string_converter.ts → IntegerToStringConverter.ts} +1 -1
  128. package/field_converters/{maybe_identity_converter.ts → MaybeIdentityConverter.ts} +1 -1
  129. package/field_converters/{nullable_to_boolean_converter.ts → NullableToBooleanConverter.ts} +1 -1
  130. package/field_converters/{select_value_type_converter.ts → SelectValueTypeConverter.ts} +1 -1
  131. package/field_converters/{trimming_string_converter.ts → TrimmingStringConverter.ts} +1 -1
  132. package/field_converters/{chain_field_converter.ts → chainFieldConverter.ts} +1 -1
  133. package/field_converters/{identity_converter.ts → identityConverter.ts} +1 -1
  134. package/field_converters/specs/{chain_field_converter.tests.ts → chainFieldConverter.tests.ts} +2 -2
  135. package/field_converters/{validating_converter.ts → validatingConverter.ts} +1 -1
  136. package/field_value_factories/{prototyping_field_value_factory.ts → prototypingFieldValueFactory.ts} +1 -1
  137. package/index.ts +23 -22
  138. package/mantine/{error_renderer.ts → ErrorRenderer.ts} +2 -2
  139. package/mantine/{create_checkbox.tsx → createCheckbox.tsx} +5 -5
  140. package/mantine/{create_field_view.tsx → createFieldView.tsx} +5 -5
  141. package/mantine/{create_fields_view.tsx → createFieldsView.tsx} +4 -4
  142. package/mantine/{create_form.tsx → createForm.tsx} +3 -3
  143. package/mantine/{create_list.tsx → createList.tsx} +4 -4
  144. package/mantine/{create_pill.tsx → createPill.tsx} +3 -3
  145. package/mantine/{create_radio.tsx → createRadio.tsx} +4 -4
  146. package/mantine/{create_radio_group.tsx → createRadioGroup.tsx} +5 -5
  147. package/mantine/{create_text_input.tsx → createTextInput.tsx} +5 -5
  148. package/mantine/{create_value_input.tsx → createValueInput.tsx} +6 -6
  149. package/mantine/hooks.tsx +22 -22
  150. package/mantine/specs/{create_fields_view.tests.ts → CreateFieldsView.tests.ts} +1 -1
  151. package/mantine/specs/{checkbox_hooks.stories.tsx → checkboxHooks.stories.tsx} +2 -2
  152. package/mantine/specs/{checkbox_hooks.tests.tsx → checkboxHooks.tests.tsx} +2 -2
  153. package/mantine/specs/{field_view_hooks.stories.tsx → fieldViewHooks.stories.tsx} +1 -1
  154. package/mantine/specs/{field_view_hooks.tests.tsx → fieldViewHooks.tests.tsx} +1 -1
  155. package/mantine/specs/{fields_view_hooks.stories.tsx → fieldsViewHooks.stories.tsx} +1 -1
  156. package/mantine/specs/{fields_view_hooks.tests.tsx → fieldsViewHooks.tests.tsx} +1 -1
  157. package/mantine/specs/{form_hooks.stories.tsx → formHooks.stories.tsx} +1 -1
  158. package/mantine/specs/{form_hooks.tests.tsx → formHooks.tests.tsx} +1 -1
  159. package/mantine/specs/{list_hooks.stories.tsx → listHooks.stories.tsx} +1 -1
  160. package/mantine/specs/{list_hooks.tests.tsx → listHooks.tests.tsx} +1 -1
  161. package/mantine/specs/{radio_group_hooks.stories.tsx → radioGroupHooks.stories.tsx} +3 -3
  162. package/mantine/specs/{radio_group_hooks.tests.tsx → radioGroupHooks.tests.tsx} +2 -2
  163. package/mantine/specs/{select_hooks.stories.tsx → selectHooks.stories.tsx} +2 -2
  164. package/mantine/specs/{select_hooks.tests.tsx → selectHooks.tests.tsx} +1 -1
  165. package/mantine/specs/{text_input_hooks.stories.tsx → textInputHooks.stories.tsx} +3 -3
  166. package/mantine/specs/{text_input_hooks.tests.tsx → textInputHooks.tests.tsx} +2 -2
  167. package/mantine/specs/{value_input_hooks.stories.tsx → valueInputHooks.stories.tsx} +3 -3
  168. package/mantine/specs/{value_input_hooks.tests.tsx → valueInputHooks.tests.tsx} +1 -1
  169. package/mantine/types.ts +3 -3
  170. package/package.json +1 -1
  171. package/types/{all_fields_of_fields.ts → AllFieldsOfFields.ts} +2 -2
  172. package/types/{boolean_fields_of_fields.ts → BooleanFieldsOfFields.ts} +2 -2
  173. package/types/{error_of_field.ts → ErrorOfField.ts} +1 -1
  174. package/types/{flattened_validators_of_fields.ts → FlattenedValidatorsOfFields.ts} +1 -1
  175. package/types/{list_fields_of_fields.ts → ListFieldsOfFields.ts} +2 -2
  176. package/types/{string_fields_of_fields.ts → StringFieldsOfFields.ts} +2 -2
  177. package/types/{sub_form_fields.ts → SubFormFields.ts} +1 -1
  178. package/types/{value_type_of_field.ts → ValueTypeOfField.ts} +1 -1
  179. package/types/specs/{boolean_fields_of_fields.tests.ts → BooleanFieldsOfFields.tests.ts} +2 -2
  180. package/types/specs/{error_of_field.tests.ts → ErrorOfField.tests.ts} +2 -2
  181. package/types/specs/{flattened_validators_of_fields.tests.ts → FlattenedValidatorsOfFields.tests.ts} +2 -2
  182. package/types/specs/{list_fields_of_fields.tests.ts → ListFieldsOfFields.tests.ts} +2 -2
  183. package/types/specs/{merge_validators.tests.ts → MergeValidators.tests.ts} +1 -1
  184. package/types/specs/{string_fields_of_fields.tests.ts → StringFieldsOfFields.tests.ts} +2 -2
  185. package/types/specs/{sub_form_fields.tests.ts → SubFormFields.tests.ts} +2 -2
  186. package/types/specs/{value_type_of_field.tests.ts → ValueTypeOfField.tests.ts} +2 -2
  187. package/util/specs/partial.tests.tsx +1 -1
  188. package/vitest.workspace.ts +4 -4
  189. /package/.out/.vitest/{install_deterministic_random.d.ts → installDeterministicRandom.d.ts} +0 -0
  190. /package/.out/.vitest/{install_deterministic_random.js → installDeterministicRandom.js} +0 -0
  191. /package/.out/.vitest/{install_storybook_preview.d.ts → installStorybookPreview.d.ts} +0 -0
  192. /package/.out/.vitest/{install_storybook_preview.js → installStorybookPreview.js} +0 -0
  193. /package/.out/.vitest/{match_media.d.ts → matchMedia.d.ts} +0 -0
  194. /package/.out/.vitest/{match_media.js → matchMedia.js} +0 -0
  195. /package/.out/.vitest/{resize_observer.d.ts → resizeObserver.d.ts} +0 -0
  196. /package/.out/.vitest/{resize_observer.js → resizeObserver.js} +0 -0
  197. /package/.out/core/mobx/{field_adapter.js → FieldAdapter.js} +0 -0
  198. /package/.out/core/mobx/{field_adapters_of_values.js → FieldAdaptersOfValues.js} +0 -0
  199. /package/.out/core/mobx/{flattened_adapters_of_fields.js → FlattenedAdaptersOfFields.js} +0 -0
  200. /package/.out/core/mobx/{flattened_list_types_of_type.d.ts → FlattenedListTypesOfType.d.ts} +0 -0
  201. /package/.out/core/mobx/{flattened_list_types_of_type.js → FlattenedListTypesOfType.js} +0 -0
  202. /package/.out/core/mobx/{form_fields_of_field_adapters.js → FormFieldsOfFieldAdapters.js} +0 -0
  203. /package/.out/core/mobx/specs/{flattened_adapters_of_fields.tests.d.ts → FlattenedAdaptersOfFields.tests.d.ts} +0 -0
  204. /package/.out/core/mobx/specs/{flattened_adapters_of_fields.tests.js → FlattenedAdaptersOfFields.tests.js} +0 -0
  205. /package/.out/core/mobx/specs/{flattened_list_types_of_types.tests.d.ts → FlattenedListTypesOfTypes.tests.d.ts} +0 -0
  206. /package/.out/core/mobx/specs/{flattened_list_types_of_types.tests.js → FlattenedListTypesOfTypes.tests.js} +0 -0
  207. /package/.out/core/mobx/specs/{form_model.tests.d.ts → FormModel.tests.d.ts} +0 -0
  208. /package/.out/core/mobx/specs/{merge_field_adapters_with_two_way_converter.tests.d.ts → MergeFieldAdaptersWithTwoWayConverter.tests.d.ts} +0 -0
  209. /package/.out/core/mobx/specs/{merge_field_adapters_with_validators.tests.d.ts → MergeFieldAdaptersWithValidators.tests.d.ts} +0 -0
  210. /package/.out/core/mobx/specs/{sub_form_field_adapters.tests.d.ts → subFormFieldAdapters.tests.d.ts} +0 -0
  211. /package/.out/core/mobx/{sub_form_field_adapters.js → subFormFieldAdapters.js} +0 -0
  212. /package/.out/field_converters/{maybe_identity_converter.js → MaybeIdentityConverter.js} +0 -0
  213. /package/.out/field_converters/specs/{chain_field_converter.tests.d.ts → chainFieldConverter.tests.d.ts} +0 -0
  214. /package/.out/field_value_factories/{prototyping_field_value_factory.js → prototypingFieldValueFactory.js} +0 -0
  215. /package/.out/mantine/{error_renderer.js → ErrorRenderer.js} +0 -0
  216. /package/.out/mantine/{create_fields_view.js → createFieldsView.js} +0 -0
  217. /package/.out/mantine/{create_form.js → createForm.js} +0 -0
  218. /package/.out/mantine/specs/{checkbox_hooks.tests.d.ts → CreateFieldsView.tests.d.ts} +0 -0
  219. /package/.out/mantine/specs/{create_fields_view.tests.js → CreateFieldsView.tests.js} +0 -0
  220. /package/.out/mantine/specs/{checkbox_constants.d.ts → checkboxConstants.d.ts} +0 -0
  221. /package/.out/mantine/specs/{checkbox_constants.js → checkboxConstants.js} +0 -0
  222. /package/.out/mantine/specs/{create_fields_view.tests.d.ts → checkboxHooks.tests.d.ts} +0 -0
  223. /package/.out/mantine/specs/{field_view_hooks.stories.js → fieldViewHooks.stories.js} +0 -0
  224. /package/.out/mantine/specs/{field_view_hooks.tests.d.ts → fieldViewHooks.tests.d.ts} +0 -0
  225. /package/.out/mantine/specs/{fields_view_hooks.stories.js → fieldsViewHooks.stories.js} +0 -0
  226. /package/.out/mantine/specs/{fields_view_hooks.tests.d.ts → fieldsViewHooks.tests.d.ts} +0 -0
  227. /package/.out/mantine/specs/{form_hooks.stories.js → formHooks.stories.js} +0 -0
  228. /package/.out/mantine/specs/{form_hooks.tests.d.ts → formHooks.tests.d.ts} +0 -0
  229. /package/.out/mantine/specs/{list_hooks.stories.js → listHooks.stories.js} +0 -0
  230. /package/.out/mantine/specs/{list_hooks.tests.d.ts → listHooks.tests.d.ts} +0 -0
  231. /package/.out/mantine/specs/{radio_group_constants.d.ts → radioGroupConstants.d.ts} +0 -0
  232. /package/.out/mantine/specs/{radio_group_constants.js → radioGroupConstants.js} +0 -0
  233. /package/.out/mantine/specs/{radio_group_hooks.tests.d.ts → radioGroupHooks.tests.d.ts} +0 -0
  234. /package/.out/mantine/specs/{select_hooks.tests.d.ts → selectHooks.tests.d.ts} +0 -0
  235. /package/.out/mantine/specs/{select_hooks_constant.d.ts → selectHooksConstant.d.ts} +0 -0
  236. /package/.out/mantine/specs/{select_hooks_constant.js → selectHooksConstant.js} +0 -0
  237. /package/.out/mantine/specs/{text_input_constants.d.ts → textInputConstants.d.ts} +0 -0
  238. /package/.out/mantine/specs/{text_input_constants.js → textInputConstants.js} +0 -0
  239. /package/.out/mantine/specs/{text_input_hooks.tests.d.ts → textInputHooks.tests.d.ts} +0 -0
  240. /package/.out/mantine/specs/{value_input_constants.d.ts → valueInputConstants.d.ts} +0 -0
  241. /package/.out/mantine/specs/{value_input_constants.js → valueInputConstants.js} +0 -0
  242. /package/.out/mantine/specs/{value_input_hooks.tests.d.ts → valueInputHooks.tests.d.ts} +0 -0
  243. /package/.out/types/{all_fields_of_fields.js → AllFieldsOfFields.js} +0 -0
  244. /package/.out/types/{boolean_fields_of_fields.js → BooleanFieldsOfFields.js} +0 -0
  245. /package/.out/types/{error_of_field.js → ErrorOfField.js} +0 -0
  246. /package/.out/types/{field.d.ts → Field.d.ts} +0 -0
  247. /package/.out/types/{field.js → Field.js} +0 -0
  248. /package/.out/types/{field_converters.d.ts → FieldConverters.d.ts} +0 -0
  249. /package/.out/types/{field_converters.js → FieldConverters.js} +0 -0
  250. /package/.out/types/{flattened_validators_of_fields.js → FlattenedValidatorsOfFields.js} +0 -0
  251. /package/.out/types/{list_fields_of_fields.js → ListFieldsOfFields.js} +0 -0
  252. /package/.out/types/{specs/boolean_fields_of_fields.tests.d.ts → StringFieldsOfFields.js} +0 -0
  253. /package/.out/types/{specs/error_of_field.tests.d.ts → SubFormFields.js} +0 -0
  254. /package/.out/types/{specs/flattened_validators_of_fields.tests.d.ts → ValueTypeOfField.js} +0 -0
  255. /package/.out/types/{merge_validators.d.ts → mergeValidators.d.ts} +0 -0
  256. /package/.out/types/{merge_validators.js → mergeValidators.js} +0 -0
  257. /package/.out/types/specs/{list_fields_of_fields.tests.d.ts → BooleanFieldsOfFields.tests.d.ts} +0 -0
  258. /package/.out/types/specs/{boolean_fields_of_fields.tests.js → BooleanFieldsOfFields.tests.js} +0 -0
  259. /package/.out/types/specs/{merge_validators.tests.d.ts → ErrorOfField.tests.d.ts} +0 -0
  260. /package/.out/types/specs/{error_of_field.tests.js → ErrorOfField.tests.js} +0 -0
  261. /package/.out/types/specs/{string_fields_of_fields.tests.d.ts → FlattenedValidatorsOfFields.tests.d.ts} +0 -0
  262. /package/.out/types/specs/{flattened_validators_of_fields.tests.js → FlattenedValidatorsOfFields.tests.js} +0 -0
  263. /package/.out/types/specs/{sub_form_fields.tests.d.ts → ListFieldsOfFields.tests.d.ts} +0 -0
  264. /package/.out/types/specs/{list_fields_of_fields.tests.js → ListFieldsOfFields.tests.js} +0 -0
  265. /package/.out/types/specs/{value_type_of_field.tests.d.ts → MergeValidators.tests.d.ts} +0 -0
  266. /package/.out/types/{string_fields_of_fields.js → specs/StringFieldsOfFields.tests.d.ts} +0 -0
  267. /package/.out/types/specs/{string_fields_of_fields.tests.js → StringFieldsOfFields.tests.js} +0 -0
  268. /package/.out/types/{sub_form_fields.js → specs/SubFormFields.tests.d.ts} +0 -0
  269. /package/.out/types/specs/{sub_form_fields.tests.js → SubFormFields.tests.js} +0 -0
  270. /package/.out/types/{value_type_of_field.js → specs/ValueTypeOfField.tests.d.ts} +0 -0
  271. /package/.out/types/specs/{value_type_of_field.tests.js → ValueTypeOfField.tests.js} +0 -0
  272. /package/.out/util/{empty.d.ts → Empty.d.ts} +0 -0
  273. /package/.out/util/{empty.js → Empty.js} +0 -0
  274. /package/.out/util/{partial.d.ts → Partial.d.ts} +0 -0
  275. /package/.out/util/{partial.js → Partial.js} +0 -0
  276. /package/.vitest/{install_deterministic_random.ts → installDeterministicRandom.ts} +0 -0
  277. /package/.vitest/{install_storybook_preview.ts → installStorybookPreview.ts} +0 -0
  278. /package/.vitest/{match_media.ts → matchMedia.ts} +0 -0
  279. /package/.vitest/{resize_observer.ts → resizeObserver.ts} +0 -0
  280. /package/core/mobx/{flattened_list_types_of_type.ts → FlattenedListTypesOfType.ts} +0 -0
  281. /package/mantine/specs/__snapshots__/{checkbox_hooks.tests.tsx.snap → checkboxHooks.tests.tsx.snap} +0 -0
  282. /package/mantine/specs/__snapshots__/{field_view_hooks.tests.tsx.snap → fieldViewHooks.tests.tsx.snap} +0 -0
  283. /package/mantine/specs/__snapshots__/{fields_view_hooks.tests.tsx.snap → fieldsViewHooks.tests.tsx.snap} +0 -0
  284. /package/mantine/specs/__snapshots__/{form_hooks.tests.tsx.snap → formHooks.tests.tsx.snap} +0 -0
  285. /package/mantine/specs/__snapshots__/{list_hooks.tests.tsx.snap → listHooks.tests.tsx.snap} +0 -0
  286. /package/mantine/specs/__snapshots__/{radio_group_hooks.tests.tsx.snap → radioGroupHooks.tests.tsx.snap} +0 -0
  287. /package/mantine/specs/__snapshots__/{select_hooks.tests.tsx.snap → selectHooks.tests.tsx.snap} +0 -0
  288. /package/mantine/specs/__snapshots__/{text_input_hooks.tests.tsx.snap → textInputHooks.tests.tsx.snap} +0 -0
  289. /package/mantine/specs/__snapshots__/{value_input_hooks.tests.tsx.snap → valueInputHooks.tests.tsx.snap} +0 -0
  290. /package/mantine/specs/{checkbox_constants.ts → checkboxConstants.ts} +0 -0
  291. /package/mantine/specs/{radio_group_constants.ts → radioGroupConstants.ts} +0 -0
  292. /package/mantine/specs/{select_hooks_constant.ts → selectHooksConstant.ts} +0 -0
  293. /package/mantine/specs/{text_input_constants.ts → textInputConstants.ts} +0 -0
  294. /package/mantine/specs/{value_input_constants.ts → valueInputConstants.ts} +0 -0
  295. /package/types/{field.ts → Field.ts} +0 -0
  296. /package/types/{field_converters.ts → FieldConverters.ts} +0 -0
  297. /package/types/{merge_validators.ts → mergeValidators.ts} +0 -0
  298. /package/util/{empty.tsx → Empty.tsx} +0 -0
  299. /package/util/{partial.tsx → Partial.tsx} +0 -0
@@ -1,5 +1,5 @@
1
- import { type Fields } from './field';
2
- import { type ValueTypeOfField } from './value_type_of_field';
1
+ import { type Fields } from './Field';
2
+ import { type ValueTypeOfField } from './ValueTypeOfField';
3
3
  export type AllFieldsOfFields<F extends Fields> = {
4
4
  [K in keyof F as ValueTypeOfField<F[K]> extends any ? K : never]: F[K];
5
5
  };
@@ -1,5 +1,5 @@
1
- import { type Fields } from './field';
2
- import { type ValueTypeOfField } from './value_type_of_field';
1
+ import { type Fields } from './Field';
2
+ import { type ValueTypeOfField } from './ValueTypeOfField';
3
3
  export type BooleanFieldsOfFields<F extends Fields> = {
4
4
  [K in keyof F as ValueTypeOfField<F[K]> extends boolean ? K : never]: F[K];
5
5
  };
@@ -1,2 +1,2 @@
1
- import { type Field } from './field';
1
+ import { type Field } from './Field';
2
2
  export type ErrorOfField<F extends Field> = F extends Field<infer _V, infer E> ? E : never;
@@ -1,6 +1,6 @@
1
1
  import { type ReadonlyTypeOfType, type Type, type Validator, type ValueOfType } from '@strictly/define';
2
2
  import { type SimplifyDeep, type ValueOf } from 'type-fest';
3
- import { type Field } from 'types/field';
3
+ import { type Field } from 'types/Field';
4
4
  export type FlattenedValidatorsOfFields<ValuePathsToTypePaths extends Readonly<Record<string, string>>, FlattenedTypeDefs extends Partial<Readonly<Record<ValueOf<ValuePathsToTypePaths>, Type>>>, FormFields extends Partial<Readonly<Record<keyof ValuePathsToTypePaths, Field>>>> = SimplifyDeep<{
5
5
  readonly [K in keyof ValuePathsToTypePaths as FormFields[K] extends Field ? ValuePathsToTypePaths[K] : never]: ValidatorOfField<NonNullable<FormFields[K]>, FlattenedTypeDefs[ValuePathsToTypePaths[K]], K>;
6
6
  }>;
@@ -1,5 +1,5 @@
1
- import { type Fields } from './field';
2
- import { type ValueTypeOfField } from './value_type_of_field';
1
+ import { type Fields } from './Field';
2
+ import { type ValueTypeOfField } from './ValueTypeOfField';
3
3
  export type ListFieldsOfFields<F extends Fields> = {
4
4
  [K in keyof F as ValueTypeOfField<F[K]> extends readonly any[] ? K : never]: F[K];
5
5
  };
@@ -1,5 +1,5 @@
1
- import { type Fields } from './field';
2
- import { type ValueTypeOfField } from './value_type_of_field';
1
+ import { type Fields } from './Field';
2
+ import { type ValueTypeOfField } from './ValueTypeOfField';
3
3
  export type StringFieldsOfFields<F extends Fields> = {
4
4
  [K in keyof F as ValueTypeOfField<F[K]> extends string | undefined | null ? K : never]: F[K];
5
5
  };
@@ -1,5 +1,5 @@
1
1
  import { type StringConcatOf } from '@strictly/base';
2
- import { type Fields } from './field';
2
+ import { type Fields } from './Field';
3
3
  export type SubFormFields<F extends Fields, P extends keyof F> = P extends string ? {
4
4
  [K in keyof F as K extends StringConcatOf<`${P}.`, infer S> ? `$.${S}` : never]: F[K];
5
5
  } & {
@@ -1,2 +1,2 @@
1
- import { type Field } from './field';
1
+ import { type Field } from './Field';
2
2
  export type ValueTypeOfField<F extends Field> = F extends Field<infer V> ? V : never;
@@ -1,5 +1,5 @@
1
1
  import { annotations, validate, } from '@strictly/define';
2
- import { mergeValidators, } from 'types/merge_validators';
2
+ import { mergeValidators, } from 'types/mergeValidators';
3
3
  import { mock, mockReset, } from 'vitest-mock-extended';
4
4
  describe('MergedOfValidators', function () {
5
5
  describe('empty validators 1', function () {
@@ -5,10 +5,10 @@ const config = createVitestUserConfig(tsconfig);
5
5
  export default defineWorkspace([
6
6
  '.',
7
7
  Object.assign(Object.assign({}, config), { extends: './.storybook/vite.config.mts', test: Object.assign(Object.assign({}, (config.test || {})), { environment: 'jsdom', setupFiles: [
8
- './.vitest/install_deterministic_random.ts',
8
+ './.vitest/installDeterministicRandom.ts',
9
9
  // install storybook setup for unit tests that import stories directly
10
- './.vitest/install_storybook_preview.ts',
11
- './.vitest/match_media.ts',
12
- './.vitest/resize_observer.ts',
10
+ './.vitest/installStorybookPreview.ts',
11
+ './.vitest/matchMedia.ts',
12
+ './.vitest/resizeObserver.ts',
13
13
  ] }) }),
14
14
  ]);
@@ -1,8 +1,16 @@
1
1
  import '@mantine/core/styles.css'
2
2
  import { MantineProvider } from '@mantine/core'
3
3
  import { type Preview } from '@storybook/react'
4
+ import { configure } from 'mobx'
4
5
  import { StrictMode } from 'react'
5
6
 
7
+ // turn on all useful mobx warnings in storybook to try to catch bad behavior
8
+ configure({
9
+ enforceActions: 'observed',
10
+ observableRequiresReaction: true,
11
+ reactionRequiresObservable: true,
12
+ })
13
+
6
14
  const preview: Preview = {
7
15
  parameters: {
8
16
  controls: {
@@ -7,12 +7,12 @@ $ tsup
7
7
  CLI Target: es6
8
8
  CJS Build start
9
9
  ESM Build start
10
- CJS dist/index.cjs 63.00 KB
11
- CJS ⚡️ Build success in 125ms
12
- ESM dist/index.js 58.89 KB
10
+ CJS dist/index.cjs 64.18 KB
11
+ CJS ⚡️ Build success in 121ms
12
+ ESM dist/index.js 60.02 KB
13
13
  ESM ⚡️ Build success in 126ms
14
14
  DTS Build start
15
- DTS ⚡️ Build success in 32004ms
16
- DTS dist/index.d.cts 38.21 KB
17
- DTS dist/index.d.ts 38.21 KB
18
- Done in 33.23s.
15
+ DTS ⚡️ Build success in 6938ms
16
+ DTS dist/index.d.cts 38.43 KB
17
+ DTS dist/index.d.ts 38.43 KB
18
+ Done in 8.16s.
@@ -1,3 +1,3 @@
1
1
  yarn run v1.22.22
2
2
  $ tsc -b
3
- Done in 0.39s.
3
+ Done in 0.37s.
@@ -1,3 +1,3 @@
1
1
  yarn run v1.22.22
2
2
  $ json -f package.json -f package.exports.json --merge > package.release.json
3
- Done in 0.12s.
3
+ Done in 0.11s.
@@ -2,7 +2,7 @@ import {
2
2
  type AnnotatedFieldConverter,
3
3
  type FieldValueFactory,
4
4
  type UnreliableFieldConverter,
5
- } from 'types/field_converters'
5
+ } from 'types/FieldConverters'
6
6
 
7
7
  export type FieldAdapter<
8
8
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -1,4 +1,4 @@
1
- import { type FieldAdapter } from './field_adapter'
1
+ import { type FieldAdapter } from './FieldAdapter'
2
2
 
3
3
  export type FieldAdaptersOfValues<
4
4
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -3,12 +3,12 @@ import {
3
3
  type Type,
4
4
  type ValueOfType,
5
5
  } from '@strictly/define'
6
- import { type FieldAdapter } from 'core/mobx/field_adapter'
6
+ import { type FieldAdapter } from 'core/mobx/FieldAdapter'
7
7
  import {
8
8
  type SimplifyDeep,
9
9
  type ValueOf,
10
10
  } from 'type-fest'
11
- import { type Field } from 'types/field'
11
+ import { type Field } from 'types/Field'
12
12
 
13
13
  export type FlattenedAdaptersOfFields<
14
14
  ValuePathsToTypePaths extends Readonly<Record<string, string>>,
@@ -1,6 +1,6 @@
1
1
  import { type ValueOf } from 'type-fest'
2
- import { type Field } from 'types/field'
3
- import { type FieldAdapter } from './field_adapter'
2
+ import { type Field } from 'types/Field'
3
+ import { type FieldAdapter } from './FieldAdapter'
4
4
 
5
5
  export type FormFieldsOfFieldAdapters<
6
6
  ValuePathsToTypePaths extends Readonly<Record<string, string>>,
@@ -11,6 +11,7 @@ import {
11
11
  import {
12
12
  type Accessor,
13
13
  type AnyValueType,
14
+ copy,
14
15
  equals,
15
16
  flattenAccessorsOfType,
16
17
  type FlattenedValuesOfType,
@@ -27,6 +28,7 @@ import {
27
28
  valuePathToTypePath,
28
29
  } from '@strictly/define'
29
30
  import {
31
+ action,
30
32
  computed,
31
33
  observable,
32
34
  runInAction,
@@ -40,20 +42,20 @@ import {
40
42
  } from 'type-fest'
41
43
  import {
42
44
  type Field,
43
- } from 'types/field'
45
+ } from 'types/Field'
44
46
  import {
45
47
  type AnnotatedFieldConversion,
46
48
  UnreliableFieldConversionType,
47
- } from 'types/field_converters'
49
+ } from 'types/FieldConverters'
48
50
  import {
49
51
  type ContextOfFieldAdapter,
50
52
  type ErrorOfFieldAdapter,
51
53
  type FieldAdapter,
52
54
  type ToOfFieldAdapter,
53
- } from './field_adapter'
55
+ } from './FieldAdapter'
54
56
  import {
55
57
  type FlattenedListTypesOfType,
56
- } from './flattened_list_types_of_type'
58
+ } from './FlattenedListTypesOfType'
57
59
 
58
60
  export type FlattenedConvertedFieldsOf<
59
61
  ValuePathsToAdapters extends Readonly<Record<string, FieldAdapter>>,
@@ -146,7 +148,7 @@ export abstract class FormModel<
146
148
  >,
147
149
  > {
148
150
  @observable.ref
149
- accessor value: MobxValueOfType<T>
151
+ private accessor observableValue: MobxValueOfType<T>
150
152
  @observable.shallow
151
153
  accessor fieldOverrides: FlattenedFieldOverrides<ValuePathsToAdapters>
152
154
  @observable.shallow
@@ -170,13 +172,13 @@ export abstract class FormModel<
170
172
  protected readonly mode: FormMode,
171
173
  ) {
172
174
  this.originalValues = flattenValuesOfType<ReadonlyTypeOfType<T>>(type, originalValue, this.listIndicesToKeys)
173
- this.value = mobxCopy(type, originalValue)
175
+ this.observableValue = mobxCopy(type, originalValue)
174
176
  this.flattenedTypeDefs = flattenTypesOfType(type)
175
177
  // pre-populate field overrides for consistent behavior when default information is overwritten
176
178
  // then returned to
177
179
  const conversions = flattenValueTo(
178
180
  type,
179
- this.value,
181
+ originalValue,
180
182
  () => {},
181
183
  (
182
184
  _t: StrictTypeDef,
@@ -228,6 +230,12 @@ export abstract class FormModel<
228
230
  }
229
231
  }
230
232
 
233
+ @computed
234
+ get value(): ValueOfType<ReadonlyTypeOfType<T>> {
235
+ // copy and strip out the mobx so this computed will fire every time anything changes
236
+ return copy(this.type, this.observableValue)
237
+ }
238
+
231
239
  @computed
232
240
  get fields(): SimplifyDeep<FlattenedConvertedFieldsOf<ValuePathsToAdapters>> {
233
241
  return new Proxy<SimplifyDeep<FlattenedConvertedFieldsOf<ValuePathsToAdapters>>>(
@@ -252,7 +260,7 @@ export abstract class FormModel<
252
260
  private get knownFields(): SimplifyDeep<FlattenedConvertedFieldsOf<ValuePathsToAdapters>> {
253
261
  return flattenValueTo(
254
262
  this.type,
255
- this.value,
263
+ this.observableValue,
256
264
  () => {},
257
265
  // TODO swap these to valuePath, typePath in flatten
258
266
  (_t: StrictTypeDef, _v: AnyValueType, _setter, typePath, valuePath): Field | undefined => {
@@ -302,7 +310,7 @@ export abstract class FormModel<
302
310
  const accessor = this.getAccessorForValuePath(valuePath)
303
311
  // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
304
312
  const fieldTypeDef = this.flattenedTypeDefs[typePath as string]
305
- const context = this.toContext(this.value, valuePath)
313
+ const context = this.toContext(this.observableValue, valuePath)
306
314
  // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
307
315
  const defaultValue = create(valuePath as string, context)
308
316
 
@@ -414,9 +422,9 @@ export abstract class FormModel<
414
422
  get accessors(): Readonly<Record<string, Accessor>> {
415
423
  return flattenAccessorsOfType<T, Readonly<Record<string, Accessor>>>(
416
424
  this.type,
417
- this.value,
425
+ this.observableValue,
418
426
  (value: ValueOfType<T>): void => {
419
- this.value = mobxCopy(this.type, value)
427
+ this.observableValue = mobxCopy(this.type, value)
420
428
  },
421
429
  this.listIndicesToKeys,
422
430
  )
@@ -448,13 +456,14 @@ export abstract class FormModel<
448
456
  @computed
449
457
  get valueChanged() {
450
458
  // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
451
- return !equals(this.type, this.value, this.originalValue as ValueOfType<T>)
459
+ return !equals(this.type, this.observableValue, this.originalValue as ValueOfType<T>)
452
460
  }
453
461
 
454
462
  typePath<K extends keyof ValueToTypePaths>(valuePath: K): ValueToTypePaths[K] {
455
463
  return valuePathToTypePath<ValueToTypePaths, K>(this.type, valuePath, true)
456
464
  }
457
465
 
466
+ @action
458
467
  setFieldValue<K extends keyof ValuePathsToAdapters>(
459
468
  valuePath: K,
460
469
  value: ToOfFieldAdapter<ValuePathsToAdapters[K]>,
@@ -490,7 +499,7 @@ export abstract class FormModel<
490
499
  elementTypePath as string,
491
500
  // TODO what can we use for the value path here?
492
501
  // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
493
- this.toContext(this.value, valuePath as unknown as keyof ValuePathsToAdapters),
502
+ this.toContext(this.observableValue, valuePath as unknown as keyof ValuePathsToAdapters),
494
503
  )
495
504
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
496
505
  const originalList: any[] = accessor.value
@@ -560,7 +569,7 @@ export abstract class FormModel<
560
569
  assertExists(revert, 'setting value not supported {}', valuePath)
561
570
 
562
571
  // eslint-disable-next-line @typescript-eslint/consistent-type-assertions, @typescript-eslint/no-explicit-any
563
- const conversion = revert(value, valuePath as any, this.toContext(this.value, valuePath))
572
+ const conversion = revert(value, valuePath as any, this.toContext(this.observableValue, valuePath))
564
573
  const accessor = this.getAccessorForValuePath(valuePath)
565
574
  return runInAction(() => {
566
575
  this.fieldOverrides[valuePath] = [value]
@@ -623,7 +632,7 @@ export abstract class FormModel<
623
632
  create,
624
633
  } = adapter
625
634
  // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
626
- const context = this.toContext(this.value, valuePath as unknown as keyof ValuePathsToAdapters)
635
+ const context = this.toContext(this.observableValue, valuePath as unknown as keyof ValuePathsToAdapters)
627
636
  const value = create(valuePath, context)
628
637
  const {
629
638
  value: displayValue,
@@ -643,12 +652,12 @@ export abstract class FormModel<
643
652
  // TODO this isn't correct, should reload from value
644
653
  this.fieldOverrides = {}
645
654
  this.errorOverrides = {}
646
- this.value = mobxCopy(this.type, value)
655
+ this.observableValue = mobxCopy(this.type, value)
647
656
  })
648
657
  }
649
658
 
650
659
  isValuePathActive<K extends keyof ValuePathsToAdapters>(valuePath: K): boolean {
651
- const values = flattenValuesOfType(this.type, this.value, this.listIndicesToKeys)
660
+ const values = flattenValuesOfType(this.type, this.observableValue, this.listIndicesToKeys)
652
661
  const keys = new Set(Object.keys(values))
653
662
  // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
654
663
  return keys.has(valuePath as string)
@@ -704,25 +713,23 @@ export abstract class FormModel<
704
713
  return displayedValue !== originalDisplayedValue
705
714
  }
706
715
 
716
+ @action
707
717
  validateField<K extends keyof ValuePathsToAdapters>(
708
718
  valuePath: K,
709
719
  validation: Validation = Validation.Always,
710
720
  ): boolean {
711
- runInAction(() => {
712
- this.validation[valuePath] = validation
713
- delete this.errorOverrides[valuePath]
714
- })
721
+ this.validation[valuePath] = validation
722
+ delete this.errorOverrides[valuePath]
715
723
  return this.fields[valuePath].error == null
716
724
  }
717
725
 
726
+ @action
718
727
  validateAll(validation: Validation = Validation.Always): boolean {
719
728
  const accessors = toArray(this.accessors)
720
729
 
721
- runInAction(() => {
722
- accessors.forEach(([valuePath]) => {
723
- // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
724
- this.validation[valuePath as keyof ValuePathsToAdapters] = validation
725
- })
730
+ accessors.forEach(([valuePath]) => {
731
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
732
+ this.validation[valuePath as keyof ValuePathsToAdapters] = validation
726
733
  })
727
734
  return accessors.every(
728
735
  ([valuePath]): boolean => {
@@ -1,14 +1,14 @@
1
1
  import {
2
2
  chainAnnotatedFieldConverter,
3
3
  chainUnreliableFieldConverter,
4
- } from 'field_converters/chain_field_converter'
4
+ } from 'field_converters/chainFieldConverter'
5
5
  import {
6
6
  annotatedIdentityConverter,
7
7
  unreliableIdentityConverter,
8
- } from 'field_converters/identity_converter'
9
- import { MaybeIdentityConverter } from 'field_converters/maybe_identity_converter'
10
- import { TrimmingStringConverter } from 'field_converters/trimming_string_converter'
11
- import { prototypingFieldValueFactory } from 'field_value_factories/prototyping_field_value_factory'
8
+ } from 'field_converters/identityConverter'
9
+ import { MaybeIdentityConverter } from 'field_converters/MaybeIdentityConverter'
10
+ import { TrimmingStringConverter } from 'field_converters/TrimmingStringConverter'
11
+ import { prototypingFieldValueFactory } from 'field_value_factories/prototypingFieldValueFactory'
12
12
  import {
13
13
  type AnnotatedFieldConverter,
14
14
  type FieldValueFactory,
@@ -16,8 +16,8 @@ import {
16
16
  type TwoWayFieldConverterWithValueFactory,
17
17
  UnreliableFieldConversionType,
18
18
  type UnreliableFieldConverter,
19
- } from 'types/field_converters'
20
- import { type FieldAdapter } from './field_adapter'
19
+ } from 'types/FieldConverters'
20
+ import { type FieldAdapter } from './FieldAdapter'
21
21
 
22
22
  class FieldAdapterBuilder<
23
23
  From,
@@ -5,11 +5,12 @@ import {
5
5
  import {
6
6
  useCallback,
7
7
  } from 'react'
8
- import type { ValueTypeOfField } from 'types/value_type_of_field'
8
+ import type { ValueTypeOfField } from 'types/ValueTypeOfField'
9
9
  import {
10
10
  type FormModel,
11
11
  Validation,
12
- } from './form_model'
12
+ } from './FormModel'
13
+ import { peek } from './peek'
13
14
 
14
15
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
15
16
  type ValueOfModel<M extends FormModel<any, any, any, any, any>> = M extends FormModel<infer T, any, any, any, any>
@@ -41,7 +42,8 @@ export function useDefaultMobxFormHooks<
41
42
  path: Path,
42
43
  value: ValueTypeOfField<F[Path]>,
43
44
  ) {
44
- const validation = Math.min(model.getValidation(path), Validation.Changed)
45
+ const activeValidation = peek(() => model.getValidation(path))
46
+ const validation = Math.min(activeValidation, Validation.Changed)
45
47
  model.setFieldValue<Path>(path, value, validation)
46
48
  },
47
49
  [model],
@@ -66,10 +68,18 @@ export function useDefaultMobxFormHooks<
66
68
  // (e.g. changing a discriminator)
67
69
  // TODO debounce?
68
70
  setTimeout(function () {
71
+ const [
72
+ validate,
73
+ activeValidation,
74
+ ] = peek(() => [
75
+ model.isValuePathActive(path) && model.isFieldDirty(path) && model.fields[path].error == null,
76
+ model.getValidation(path),
77
+ ])
69
78
  // only start validation if the user has changed the field and there isn't already an error visible
70
- if (model.isValuePathActive(path) && model.isFieldDirty(path) && model.fields[path].error == null) {
79
+ if (validate) {
80
+ const validation = Math.max(Validation.Changed, activeValidation)
71
81
  // further workaround to make sure we don't downgrade the existing validation
72
- model.validateField(path, Math.max(Validation.Changed, model.getValidation(path)))
82
+ model.validateField(path, validation)
73
83
  }
74
84
  }, 100)
75
85
  },
@@ -78,8 +88,10 @@ export function useDefaultMobxFormHooks<
78
88
 
79
89
  const onFormSubmit = useCallback(
80
90
  function () {
81
- if (model.validateSubmit()) {
82
- onValidFormSubmit?.(model.value)
91
+ const valid = peek(() => model.validateSubmit())
92
+ if (valid && onValidFormSubmit) {
93
+ const value = peek(() => model.value)
94
+ onValidFormSubmit(value)
83
95
  }
84
96
  },
85
97
  [
@@ -2,8 +2,8 @@ import { map } from '@strictly/base'
2
2
  import {
3
3
  chainAnnotatedFieldConverter,
4
4
  chainUnreliableFieldConverter,
5
- } from 'field_converters/chain_field_converter'
6
- import { type TwoWayFieldConverter } from 'types/field_converters'
5
+ } from 'field_converters/chainFieldConverter'
6
+ import { type TwoWayFieldConverter } from 'types/FieldConverters'
7
7
  import {
8
8
  type ContextOfFieldAdapter,
9
9
  type ErrorOfFieldAdapter,
@@ -11,7 +11,7 @@ import {
11
11
  type FromOfFieldAdapter,
12
12
  type ToOfFieldAdapter,
13
13
  type ValuePathOfFieldAdapter,
14
- } from './field_adapter'
14
+ } from './FieldAdapter'
15
15
 
16
16
  export type MergedOfFieldAdaptersWithTwoWayConverter<
17
17
  FieldAdapters extends Readonly<Record<string, FieldAdapter>>,
@@ -9,8 +9,8 @@ import {
9
9
  type AnnotatedFieldConversion,
10
10
  type UnreliableFieldConversion,
11
11
  UnreliableFieldConversionType,
12
- } from 'types/field_converters'
13
- import { type FieldAdapter } from './field_adapter'
12
+ } from 'types/FieldConverters'
13
+ import { type FieldAdapter } from './FieldAdapter'
14
14
 
15
15
  export type MergedOfFieldAdaptersWithValidators<
16
16
  // must have a field adapter for every validator
@@ -0,0 +1,17 @@
1
+ import { when } from 'mobx'
2
+
3
+ /**
4
+ * Used for when you want to look at the value of an observable without observing it (or triggering
5
+ * the mobx runtime linter)
6
+ */
7
+ export function peek<T>(operation: () => T): T {
8
+ let result: T
9
+ // when will make mobx think we are observing the value
10
+ void when(() => {
11
+ // trick mobx runtime linting
12
+ result = operation()
13
+ return true
14
+ })
15
+ // biome-ignore lint/style/noNonNullAssertion: the result is always there
16
+ return result!
17
+ }
@@ -2,9 +2,9 @@ import {
2
2
  type booleanType,
3
3
  type numberType,
4
4
  } from '@strictly/define'
5
- import { type FieldAdapter } from 'core/mobx/field_adapter'
6
- import { type FlattenedAdaptersOfFields } from 'core/mobx/flattened_adapters_of_fields'
7
- import { type Field } from 'types/field'
5
+ import { type FieldAdapter } from 'core/mobx/FieldAdapter'
6
+ import { type FlattenedAdaptersOfFields } from 'core/mobx/FlattenedAdaptersOfFields'
7
+ import { type Field } from 'types/Field'
8
8
 
9
9
  const error = Symbol()
10
10
  type Error = typeof error
@@ -9,7 +9,7 @@ import {
9
9
  } from '@strictly/define'
10
10
  import {
11
11
  type FlattenedListTypesOfType,
12
- } from 'core/mobx/flattened_list_types_of_type'
12
+ } from 'core/mobx/FlattenedListTypesOfType'
13
13
 
14
14
  describe('FlattenedListTypesOfType', function () {
15
15
  it('filters lists types', function () {
@@ -17,29 +17,29 @@ import {
17
17
  import {
18
18
  type FieldAdapter,
19
19
  type ToOfFieldAdapter,
20
- } from 'core/mobx/field_adapter'
20
+ } from 'core/mobx/FieldAdapter'
21
21
  import {
22
22
  adapterFromTwoWayConverter,
23
23
  identityAdapter,
24
- } from 'core/mobx/field_adapter_builder'
24
+ } from 'core/mobx/fieldAdapterBuilder'
25
25
  import {
26
26
  type FlattenedTypePathsToAdaptersOf,
27
27
  FormModel,
28
28
  Validation,
29
29
  type ValuePathsToAdaptersOf,
30
- } from 'core/mobx/form_model'
31
- import { mergeAdaptersWithValidators } from 'core/mobx/merge_field_adapters_with_validators'
32
- import { IntegerToStringConverter } from 'field_converters/integer_to_string_converter'
33
- import { NullableToBooleanConverter } from 'field_converters/nullable_to_boolean_converter'
34
- import { SelectDiscriminatedUnionConverter } from 'field_converters/select_value_type_converter'
35
- import { prototypingFieldValueFactory } from 'field_value_factories/prototyping_field_value_factory'
30
+ } from 'core/mobx/FormModel'
31
+ import { mergeAdaptersWithValidators } from 'core/mobx/mergeFieldAdaptersWithValidators'
32
+ import { IntegerToStringConverter } from 'field_converters/IntegerToStringConverter'
33
+ import { NullableToBooleanConverter } from 'field_converters/NullableToBooleanConverter'
34
+ import { SelectDiscriminatedUnionConverter } from 'field_converters/SelectValueTypeConverter'
35
+ import { prototypingFieldValueFactory } from 'field_value_factories/prototypingFieldValueFactory'
36
36
  import {
37
37
  type Simplify,
38
38
  } from 'type-fest'
39
- import { type Field } from 'types/field'
39
+ import { type Field } from 'types/Field'
40
40
  import {
41
41
  UnreliableFieldConversionType,
42
- } from 'types/field_converters'
42
+ } from 'types/FieldConverters'
43
43
  import {
44
44
  createMockedAdapter,
45
45
  resetMockAdapter,
@@ -1,17 +1,17 @@
1
- import { type FieldAdapter } from 'core/mobx/field_adapter'
2
- import { identityAdapter } from 'core/mobx/field_adapter_builder'
1
+ import { type FieldAdapter } from 'core/mobx/FieldAdapter'
2
+ import { identityAdapter } from 'core/mobx/fieldAdapterBuilder'
3
3
  import {
4
4
  type MergedOfFieldAdaptersWithTwoWayConverter,
5
5
  mergeFieldAdaptersWithTwoWayConverter,
6
- } from 'core/mobx/merge_field_adapters_with_two_way_converter'
6
+ } from 'core/mobx/mergeFieldAdaptersWithTwoWayConverter'
7
7
  import {
8
8
  annotatedIdentityConverter,
9
9
  unreliableIdentityConverter,
10
- } from 'field_converters/identity_converter'
10
+ } from 'field_converters/identityConverter'
11
11
  import {
12
12
  type TwoWayFieldConverter,
13
13
  UnreliableFieldConversionType,
14
- } from 'types/field_converters'
14
+ } from 'types/FieldConverters'
15
15
  import {
16
16
  createMockedAdapter,
17
17
  createMockTwoWayFieldConverter,
@@ -7,15 +7,15 @@ import {
7
7
  type FunctionalValidator,
8
8
  type Validator,
9
9
  } from '@strictly/define'
10
- import { type FieldAdapter } from 'core/mobx/field_adapter'
10
+ import { type FieldAdapter } from 'core/mobx/FieldAdapter'
11
11
  import {
12
12
  identityAdapter,
13
- } from 'core/mobx/field_adapter_builder'
13
+ } from 'core/mobx/fieldAdapterBuilder'
14
14
  import {
15
15
  mergeAdaptersWithValidators,
16
16
  type MergedOfFieldAdaptersWithValidators,
17
- } from 'core/mobx/merge_field_adapters_with_validators'
18
- import { UnreliableFieldConversionType } from 'types/field_converters'
17
+ } from 'core/mobx/mergeFieldAdaptersWithValidators'
18
+ import { UnreliableFieldConversionType } from 'types/FieldConverters'
19
19
  import {
20
20
  createMockedAdapter,
21
21
  resetMockAdapter,
@@ -1,5 +1,5 @@
1
- import { type FieldAdapter } from 'core/mobx/field_adapter'
2
- import { type TwoWayFieldConverter } from 'types/field_converters'
1
+ import { type FieldAdapter } from 'core/mobx/FieldAdapter'
2
+ import { type TwoWayFieldConverter } from 'types/FieldConverters'
3
3
  import { type Mocked } from 'vitest'
4
4
  import {
5
5
  mock,