@mantine/form 7.15.0 → 7.15.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cjs/Form/Form.cjs.map +1 -1
- package/cjs/FormProvider/FormProvider.cjs.map +1 -1
- package/cjs/actions/actions.cjs.map +1 -1
- package/cjs/form-index.cjs.map +1 -1
- package/cjs/get-input-on-change/get-input-on-change.cjs.map +1 -1
- package/cjs/get-status/get-status.cjs.map +1 -1
- package/cjs/hooks/use-form-errors/filter-errors/filter-errors.cjs.map +1 -1
- package/cjs/hooks/use-form-errors/use-form-errors.cjs.map +1 -1
- package/cjs/hooks/use-form-list/use-form-list.cjs.map +1 -1
- package/cjs/hooks/use-form-status/use-form-status.cjs.map +1 -1
- package/cjs/hooks/use-form-values/use-form-values.cjs.map +1 -1
- package/cjs/hooks/use-form-watch/use-form-watch.cjs.map +1 -1
- package/cjs/lists/change-error-indices.cjs.map +1 -1
- package/cjs/lists/clear-list-state.cjs.map +1 -1
- package/cjs/lists/reorder-errors.cjs.map +1 -1
- package/cjs/paths/get-data-path.cjs.map +1 -1
- package/cjs/paths/get-path.cjs.map +1 -1
- package/cjs/paths/get-splitted-path.cjs.map +1 -1
- package/cjs/paths/insert-path.cjs.map +1 -1
- package/cjs/paths/remove-path.cjs.map +1 -1
- package/cjs/paths/reorder-path.cjs.map +1 -1
- package/cjs/paths/replace-path.cjs.map +1 -1
- package/cjs/paths/set-path.cjs.map +1 -1
- package/cjs/resolvers/joi-resolver/joi-resolver.cjs.map +1 -1
- package/cjs/resolvers/superstruct-resolver/superstruct-resolver.cjs.map +1 -1
- package/cjs/resolvers/yup-resolver/yup-resolver.cjs.map +1 -1
- package/cjs/resolvers/zod-resolver/zod-resolver.cjs.map +1 -1
- package/cjs/use-field.cjs.map +1 -1
- package/cjs/use-form.cjs +3 -2
- package/cjs/use-form.cjs.map +1 -1
- package/cjs/validate/should-validate-on-change.cjs.map +1 -1
- package/cjs/validate/validate-field-value.cjs.map +1 -1
- package/cjs/validate/validate-values.cjs.map +1 -1
- package/cjs/validators/has-length/has-length.cjs.map +1 -1
- package/cjs/validators/is-email/is-email.cjs.map +1 -1
- package/cjs/validators/is-in-range/is-in-range.cjs.map +1 -1
- package/cjs/validators/is-not-empty/is-not-empty.cjs.map +1 -1
- package/cjs/validators/matches/matches.cjs.map +1 -1
- package/cjs/validators/matches-field/matches-field.cjs.map +1 -1
- package/esm/Form/Form.mjs.map +1 -1
- package/esm/FormProvider/FormProvider.mjs.map +1 -1
- package/esm/actions/actions.mjs.map +1 -1
- package/esm/form-index.mjs.map +1 -1
- package/esm/get-input-on-change/get-input-on-change.mjs.map +1 -1
- package/esm/get-status/get-status.mjs.map +1 -1
- package/esm/hooks/use-form-errors/filter-errors/filter-errors.mjs.map +1 -1
- package/esm/hooks/use-form-errors/use-form-errors.mjs.map +1 -1
- package/esm/hooks/use-form-list/use-form-list.mjs.map +1 -1
- package/esm/hooks/use-form-status/use-form-status.mjs.map +1 -1
- package/esm/hooks/use-form-values/use-form-values.mjs.map +1 -1
- package/esm/hooks/use-form-watch/use-form-watch.mjs.map +1 -1
- package/esm/lists/change-error-indices.mjs.map +1 -1
- package/esm/lists/clear-list-state.mjs.map +1 -1
- package/esm/lists/reorder-errors.mjs.map +1 -1
- package/esm/paths/get-data-path.mjs.map +1 -1
- package/esm/paths/get-path.mjs.map +1 -1
- package/esm/paths/get-splitted-path.mjs.map +1 -1
- package/esm/paths/insert-path.mjs.map +1 -1
- package/esm/paths/remove-path.mjs.map +1 -1
- package/esm/paths/reorder-path.mjs.map +1 -1
- package/esm/paths/replace-path.mjs.map +1 -1
- package/esm/paths/set-path.mjs.map +1 -1
- package/esm/resolvers/joi-resolver/joi-resolver.mjs.map +1 -1
- package/esm/resolvers/superstruct-resolver/superstruct-resolver.mjs.map +1 -1
- package/esm/resolvers/yup-resolver/yup-resolver.mjs.map +1 -1
- package/esm/resolvers/zod-resolver/zod-resolver.mjs.map +1 -1
- package/esm/use-field.mjs.map +1 -1
- package/esm/use-form.mjs +3 -2
- package/esm/use-form.mjs.map +1 -1
- package/esm/validate/should-validate-on-change.mjs.map +1 -1
- package/esm/validate/validate-field-value.mjs.map +1 -1
- package/esm/validate/validate-values.mjs.map +1 -1
- package/esm/validators/has-length/has-length.mjs.map +1 -1
- package/esm/validators/is-email/is-email.mjs.map +1 -1
- package/esm/validators/is-in-range/is-in-range.mjs.map +1 -1
- package/esm/validators/is-not-empty/is-not-empty.mjs.map +1 -1
- package/esm/validators/matches/matches.mjs.map +1 -1
- package/esm/validators/matches-field/matches-field.mjs.map +1 -1
- package/lib/types.d.ts +1 -0
- package/lib/use-form.d.ts +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"is-in-range.mjs","sources":["../../../src/validators/is-in-range/is-in-range.ts"],"sourcesContent":["interface IsInRangePayload {\n min?: number;\n max?: number;\n}\n\nexport function isInRange({ min, max }: IsInRangePayload, error?: React.ReactNode) {\n const _error = error || true;\n\n return (value: unknown) => {\n if (typeof value !== 'number') {\n return _error;\n }\n\n let valid = true;\n\n if (typeof min === 'number' && value < min) {\n valid = false;\n }\n\n if (typeof max === 'number' && value > max) {\n valid = false;\n }\n\n return valid ? null : _error;\n };\n}\n"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"is-in-range.mjs","sources":["../../../src/validators/is-in-range/is-in-range.ts"],"sourcesContent":["interface IsInRangePayload {\n min?: number;\n max?: number;\n}\n\nexport function isInRange({ min, max }: IsInRangePayload, error?: React.ReactNode) {\n const _error = error || true;\n\n return (value: unknown) => {\n if (typeof value !== 'number') {\n return _error;\n }\n\n let valid = true;\n\n if (typeof min === 'number' && value < min) {\n valid = false;\n }\n\n if (typeof max === 'number' && value > max) {\n valid = false;\n }\n\n return valid ? null : _error;\n };\n}\n"],"names":[],"mappings":";AAKO,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CAAE,CAAA,CAAA,CAAA,CAAK,EAAA,CAAA,CAAA,CAAA,CAAA,EAAyB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAyB,CAAA,CAAA,CAAA;AACjF,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAExB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAC,CAAA,CAAA,CAAA,CAAA,CAAmB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACzB,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,UAAU,QAAU,CAAA,CAAA,CAAA;AAC7B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,OAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAGT,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAEZ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,OAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,QAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA;AAC1C,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAGV,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,OAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,QAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA;AAC1C,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAGV,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,GAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CACxB,CAAA,CAAA,CAAA;AACF,CAAA;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"is-not-empty.mjs","sources":["../../../src/validators/is-not-empty/is-not-empty.ts"],"sourcesContent":["export function isNotEmpty(error?: React.ReactNode) {\n const _error = error || true;\n\n return (value: unknown) => {\n if (typeof value === 'string') {\n return value.trim().length > 0 ? null : _error;\n }\n\n if (Array.isArray(value)) {\n return value.length > 0 ? null : _error;\n }\n\n if (value === null || value === undefined) {\n return _error;\n }\n\n if (value === false) {\n return _error;\n }\n\n return null;\n };\n}\n"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"is-not-empty.mjs","sources":["../../../src/validators/is-not-empty/is-not-empty.ts"],"sourcesContent":["export function isNotEmpty(error?: React.ReactNode) {\n const _error = error || true;\n\n return (value: unknown) => {\n if (typeof value === 'string') {\n return value.trim().length > 0 ? null : _error;\n }\n\n if (Array.isArray(value)) {\n return value.length > 0 ? null : _error;\n }\n\n if (value === null || value === undefined) {\n return _error;\n }\n\n if (value === false) {\n return _error;\n }\n\n return null;\n };\n}\n"],"names":[],"mappings":";AAAO,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAW,CAAA,CAAA,CAAA,CAAA,CAAyB,CAAA,CAAA,CAAA;AAClD,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAExB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAC,CAAA,CAAA,CAAA,CAAA,CAAmB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACzB,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,UAAU,QAAU,CAAA,CAAA,CAAA;AAC7B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,IAAI,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAG1C,CAAA,CAAA,CAAA,CAAI,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,OAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAG,CAAA,CAAA,CAAA;AACxB,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,GAAA,CAAA,CAAA,CAAA,CAAI,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAGnC,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACzC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,OAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAGT,CAAA,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA,CAAA,CAAA;AACnB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,OAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAGT,CAAA,CAAA,CAAA,CAAO,OAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CACT,CAAA,CAAA,CAAA;AACF,CAAA;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"matches.mjs","sources":["../../../src/validators/matches/matches.ts"],"sourcesContent":["export function matches(regexp: RegExp, error?: React.ReactNode) {\n const _error = error || true;\n\n return (value: unknown) => {\n if (typeof value !== 'string') {\n return _error;\n }\n\n return regexp.test(value) ? null : _error;\n };\n}\n"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"matches.mjs","sources":["../../../src/validators/matches/matches.ts"],"sourcesContent":["export function matches(regexp: RegExp, error?: React.ReactNode) {\n const _error = error || true;\n\n return (value: unknown) => {\n if (typeof value !== 'string') {\n return _error;\n }\n\n return regexp.test(value) ? null : _error;\n };\n}\n"],"names":[],"mappings":";AAAgB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,QAAgB,KAAyB,CAAA,CAAA,CAAA;AAC/D,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAExB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAC,CAAA,CAAA,CAAA,CAAA,CAAmB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACzB,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,UAAU,QAAU,CAAA,CAAA,CAAA;AAC7B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,OAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAGT,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,KAAK,CAAA,CAAA,CAAA,CAAI,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CACrC,CAAA,CAAA,CAAA;AACF,CAAA;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"matches-field.mjs","sources":["../../../src/validators/matches-field/matches-field.ts"],"sourcesContent":["export function matchesField(field: string, error?: React.ReactNode) {\n const _error = error || true;\n\n return (value: unknown, values: Record<string, unknown>) => {\n if (!values || !(field in values)) {\n return _error;\n }\n\n return value === values[field] ? null : _error;\n };\n}\n"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"matches-field.mjs","sources":["../../../src/validators/matches-field/matches-field.ts"],"sourcesContent":["export function matchesField(field: string, error?: React.ReactNode) {\n const _error = error || true;\n\n return (value: unknown, values: Record<string, unknown>) => {\n if (!values || !(field in values)) {\n return _error;\n }\n\n return value === values[field] ? null : _error;\n };\n}\n"],"names":[],"mappings":";AAAgB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,OAAe,KAAyB,CAAA,CAAA,CAAA;AACnE,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAExB,CAAA,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,OAAgB,MAAoC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAC1D,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,EAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACjC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,OAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAGT,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,KAAK,CAAA,CAAA,CAAA,CAAI,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAC1C,CAAA,CAAA,CAAA;AACF,CAAA;;"}
|
package/lib/types.d.ts
CHANGED
|
@@ -101,6 +101,7 @@ export interface UseFormInput<Values, TransformValues extends _TransformValues<V
|
|
|
101
101
|
form: UseFormReturnType<Values, TransformValues>;
|
|
102
102
|
}) => Record<string, any> | undefined | void;
|
|
103
103
|
onSubmitPreventDefault?: 'always' | 'never' | 'validation-failed';
|
|
104
|
+
touchTrigger?: 'focus' | 'change';
|
|
104
105
|
}
|
|
105
106
|
export interface UseFormReturnType<Values, TransformValues extends _TransformValues<Values> = (values: Values) => Values> {
|
|
106
107
|
values: Values;
|
package/lib/use-form.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { _TransformValues, UseFormInput, UseFormReturnType } from './types';
|
|
2
|
-
export declare function useForm<Values extends Record<string, any> = Record<string, any>, TransformValues extends _TransformValues<Values> = (values: Values) => Values>({ name, mode, initialValues, initialErrors, initialDirty, initialTouched, clearInputErrorOnChange, validateInputOnChange, validateInputOnBlur, onValuesChange, transformValues, enhanceGetInputProps, validate: rules, onSubmitPreventDefault, }?: UseFormInput<Values, TransformValues>): UseFormReturnType<Values, TransformValues>;
|
|
2
|
+
export declare function useForm<Values extends Record<string, any> = Record<string, any>, TransformValues extends _TransformValues<Values> = (values: Values) => Values>({ name, mode, initialValues, initialErrors, initialDirty, initialTouched, clearInputErrorOnChange, validateInputOnChange, validateInputOnBlur, onValuesChange, transformValues, enhanceGetInputProps, validate: rules, onSubmitPreventDefault, touchTrigger, }?: UseFormInput<Values, TransformValues>): UseFormReturnType<Values, TransformValues>;
|