@mantine/form 9.1.1 → 9.2.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.
Files changed (98) hide show
  1. package/cjs/FormProvider/FormProvider.cjs.map +1 -1
  2. package/cjs/actions/actions.cjs.map +1 -1
  3. package/cjs/get-input-on-change/get-input-on-change.cjs.map +1 -1
  4. package/cjs/get-status/get-status.cjs.map +1 -1
  5. package/cjs/hooks/use-form-errors/filter-errors/filter-errors.cjs.map +1 -1
  6. package/cjs/hooks/use-form-errors/use-form-errors.cjs.map +1 -1
  7. package/cjs/hooks/use-form-list/use-form-list.cjs +9 -1
  8. package/cjs/hooks/use-form-list/use-form-list.cjs.map +1 -1
  9. package/cjs/hooks/use-form-status/use-form-status.cjs.map +1 -1
  10. package/cjs/hooks/use-form-validating/use-form-validating.cjs.map +1 -1
  11. package/cjs/hooks/use-form-values/use-form-values.cjs.map +1 -1
  12. package/cjs/hooks/use-form-watch/use-form-watch.cjs +11 -1
  13. package/cjs/hooks/use-form-watch/use-form-watch.cjs.map +1 -1
  14. package/cjs/lists/change-error-indices.cjs.map +1 -1
  15. package/cjs/lists/clear-list-state.cjs.map +1 -1
  16. package/cjs/lists/reorder-errors.cjs.map +1 -1
  17. package/cjs/paths/get-data-path.cjs.map +1 -1
  18. package/cjs/paths/get-path.cjs.map +1 -1
  19. package/cjs/paths/get-splitted-path.cjs.map +1 -1
  20. package/cjs/paths/insert-path.cjs.map +1 -1
  21. package/cjs/paths/remove-path.cjs.map +1 -1
  22. package/cjs/paths/reorder-path.cjs.map +1 -1
  23. package/cjs/paths/replace-path.cjs.map +1 -1
  24. package/cjs/paths/set-path.cjs.map +1 -1
  25. package/cjs/schema-resolver.cjs.map +1 -1
  26. package/cjs/use-field.cjs.map +1 -1
  27. package/cjs/use-form.cjs +14 -37
  28. package/cjs/use-form.cjs.map +1 -1
  29. package/cjs/validate/get-rule-for-path.cjs.map +1 -1
  30. package/cjs/validate/should-validate-on-change.cjs.map +1 -1
  31. package/cjs/validate/validate-field-value.cjs.map +1 -1
  32. package/cjs/validate/validate-values.cjs.map +1 -1
  33. package/cjs/validators/has-length/has-length.cjs.map +1 -1
  34. package/cjs/validators/is-email/is-email.cjs.map +1 -1
  35. package/cjs/validators/is-in-range/is-in-range.cjs.map +1 -1
  36. package/cjs/validators/is-json-string/is-json-string.cjs.map +1 -1
  37. package/cjs/validators/is-not-empty/is-not-empty.cjs.map +1 -1
  38. package/cjs/validators/is-not-empty-html/is-not-empty-html.cjs.map +1 -1
  39. package/cjs/validators/is-one-of/is-one-of.cjs.map +1 -1
  40. package/cjs/validators/is-url/is-url.cjs.map +1 -1
  41. package/cjs/validators/matches/matches.cjs.map +1 -1
  42. package/cjs/validators/matches-field/matches-field.cjs.map +1 -1
  43. package/esm/FormProvider/FormProvider.mjs.map +1 -1
  44. package/esm/actions/actions.mjs.map +1 -1
  45. package/esm/get-input-on-change/get-input-on-change.mjs.map +1 -1
  46. package/esm/get-status/get-status.mjs.map +1 -1
  47. package/esm/hooks/use-form-errors/filter-errors/filter-errors.mjs.map +1 -1
  48. package/esm/hooks/use-form-errors/use-form-errors.mjs.map +1 -1
  49. package/esm/hooks/use-form-list/use-form-list.mjs +9 -1
  50. package/esm/hooks/use-form-list/use-form-list.mjs.map +1 -1
  51. package/esm/hooks/use-form-status/use-form-status.mjs.map +1 -1
  52. package/esm/hooks/use-form-validating/use-form-validating.mjs.map +1 -1
  53. package/esm/hooks/use-form-values/use-form-values.mjs.map +1 -1
  54. package/esm/hooks/use-form-watch/use-form-watch.mjs +11 -1
  55. package/esm/hooks/use-form-watch/use-form-watch.mjs.map +1 -1
  56. package/esm/lists/change-error-indices.mjs.map +1 -1
  57. package/esm/lists/clear-list-state.mjs.map +1 -1
  58. package/esm/lists/reorder-errors.mjs.map +1 -1
  59. package/esm/paths/get-data-path.mjs.map +1 -1
  60. package/esm/paths/get-path.mjs.map +1 -1
  61. package/esm/paths/get-splitted-path.mjs.map +1 -1
  62. package/esm/paths/insert-path.mjs.map +1 -1
  63. package/esm/paths/remove-path.mjs.map +1 -1
  64. package/esm/paths/reorder-path.mjs.map +1 -1
  65. package/esm/paths/replace-path.mjs.map +1 -1
  66. package/esm/paths/set-path.mjs.map +1 -1
  67. package/esm/schema-resolver.mjs.map +1 -1
  68. package/esm/use-field.mjs.map +1 -1
  69. package/esm/use-form.mjs +14 -37
  70. package/esm/use-form.mjs.map +1 -1
  71. package/esm/validate/get-rule-for-path.mjs.map +1 -1
  72. package/esm/validate/should-validate-on-change.mjs.map +1 -1
  73. package/esm/validate/validate-field-value.mjs.map +1 -1
  74. package/esm/validate/validate-values.mjs.map +1 -1
  75. package/esm/validators/has-length/has-length.mjs.map +1 -1
  76. package/esm/validators/is-email/is-email.mjs.map +1 -1
  77. package/esm/validators/is-in-range/is-in-range.mjs.map +1 -1
  78. package/esm/validators/is-json-string/is-json-string.mjs.map +1 -1
  79. package/esm/validators/is-not-empty/is-not-empty.mjs.map +1 -1
  80. package/esm/validators/is-not-empty-html/is-not-empty-html.mjs.map +1 -1
  81. package/esm/validators/is-one-of/is-one-of.mjs.map +1 -1
  82. package/esm/validators/is-url/is-url.mjs.map +1 -1
  83. package/esm/validators/matches/matches.mjs.map +1 -1
  84. package/esm/validators/matches-field/matches-field.mjs.map +1 -1
  85. package/lib/hooks/use-form-list/use-form-list.d.ts +3 -1
  86. package/lib/hooks/use-form-watch/use-form-watch.d.ts +10 -2
  87. package/lib/validators/has-length/has-length.d.ts +2 -1
  88. package/lib/validators/is-email/is-email.d.ts +2 -1
  89. package/lib/validators/is-in-range/is-in-range.d.ts +2 -1
  90. package/lib/validators/is-json-string/is-json-string.d.ts +2 -1
  91. package/lib/validators/is-not-empty/is-not-empty.d.ts +2 -1
  92. package/lib/validators/is-not-empty-html/is-not-empty-html.d.ts +2 -1
  93. package/lib/validators/is-one-of/is-one-of.d.ts +2 -1
  94. package/lib/validators/is-url/is-url.d.ts +3 -2
  95. package/lib/validators/matches/matches.d.ts +2 -1
  96. package/lib/validators/matches-field/matches-field.d.ts +2 -1
  97. package/lib/validators/types.d.ts +1 -0
  98. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"validate-values.mjs","names":[],"sources":["../../src/validate/validate-values.ts"],"sourcesContent":["import { filterErrors } from '../hooks/use-form-errors/filter-errors/filter-errors';\nimport { getPath } from '../paths';\nimport {\n FormErrors,\n FormRule,\n FormRulesRecord,\n FormValidateInput,\n FormValidationResult,\n} from '../types';\n\nexport const formRootRule = Symbol('root-rule');\n\nfunction getValidationResults(errors: FormErrors): FormValidationResult {\n const filteredErrors = filterErrors(errors);\n return { hasErrors: Object.keys(filteredErrors).length > 0, errors: filteredErrors };\n}\n\nfunction validateRulesRecord<T>(\n rules: FormRulesRecord<T> | undefined,\n values: T,\n resolveValidationError: (error: unknown) => React.ReactNode,\n signal: AbortSignal,\n path = '',\n errors: FormErrors = {}\n): FormErrors | Promise<FormErrors> {\n if (typeof rules !== 'object' || rules === null) {\n return errors;\n }\n\n const asyncTasks: Array<{ rulePath: string; promise: Promise<React.ReactNode> }> = [];\n const pendingRecursions: Array<Promise<FormErrors>> = [];\n\n for (const ruleKey of Object.keys(rules)) {\n const rule: FormRule<any, any> = (rules as any)[ruleKey];\n const rulePath = `${path === '' ? '' : `${path}.`}${ruleKey}`;\n const value = getPath(rulePath, values);\n let arrayValidation = false;\n\n if (typeof rule === 'function') {\n const result = rule(value, values, rulePath, signal);\n if (result instanceof Promise) {\n asyncTasks.push({ rulePath, promise: result });\n } else {\n errors[rulePath] = result;\n }\n }\n\n if (typeof rule === 'object' && Array.isArray(value)) {\n arrayValidation = true;\n for (let index = 0; index < value.length; index++) {\n const recursionResult = validateRulesRecord(\n rule,\n values,\n resolveValidationError,\n signal,\n `${rulePath}.${index}`,\n errors\n );\n if (recursionResult instanceof Promise) {\n pendingRecursions.push(recursionResult);\n }\n }\n\n if (formRootRule in rule) {\n const rootResult = (rule as any)[formRootRule](value, values, rulePath, signal);\n if (rootResult instanceof Promise) {\n asyncTasks.push({ rulePath, promise: rootResult });\n } else {\n errors[rulePath] = rootResult;\n }\n }\n }\n\n if (typeof rule === 'object' && typeof value === 'object' && value !== null) {\n if (!arrayValidation) {\n const recursionResult = validateRulesRecord(\n rule,\n values,\n resolveValidationError,\n signal,\n rulePath,\n errors\n );\n if (recursionResult instanceof Promise) {\n pendingRecursions.push(recursionResult);\n }\n }\n\n if (formRootRule in rule) {\n const rootResult = (rule as any)[formRootRule](value, values, rulePath, signal);\n if (rootResult instanceof Promise) {\n asyncTasks.push({ rulePath, promise: rootResult });\n } else {\n errors[rulePath] = rootResult;\n }\n }\n }\n }\n\n if (asyncTasks.length === 0 && pendingRecursions.length === 0) {\n return errors;\n }\n\n return (async () => {\n await Promise.all(pendingRecursions);\n\n if (asyncTasks.length > 0) {\n const settled = await Promise.allSettled(asyncTasks.map((t) => t.promise));\n settled.forEach((result, index) => {\n const { rulePath } = asyncTasks[index];\n if (result.status === 'fulfilled') {\n errors[rulePath] = result.value;\n } else {\n errors[rulePath] = resolveValidationError(result.reason);\n }\n });\n }\n\n return errors;\n })();\n}\n\nconst defaultResolveError = (err: unknown): React.ReactNode =>\n err instanceof Error ? err.message : String(err);\n\nexport function validateValues<T>(\n validate: FormValidateInput<T> | undefined,\n values: T,\n resolveValidationError: (error: unknown) => React.ReactNode = defaultResolveError,\n signal: AbortSignal = new AbortController().signal\n): FormValidationResult | Promise<FormValidationResult> {\n if (typeof validate === 'function') {\n const result = validate(values);\n if (result instanceof Promise) {\n return result.then(getValidationResults);\n }\n return getValidationResults(result);\n }\n\n const errorsResult = validateRulesRecord(validate, values, resolveValidationError, signal);\n if (errorsResult instanceof Promise) {\n return errorsResult.then(getValidationResults);\n }\n return getValidationResults(errorsResult);\n}\n"],"mappings":";;;;AAUA,MAAa,eAAe,OAAO,YAAY;AAE/C,SAAS,qBAAqB,QAA0C;CACtE,MAAM,iBAAiB,aAAa,OAAO;AAC3C,QAAO;EAAE,WAAW,OAAO,KAAK,eAAe,CAAC,SAAS;EAAG,QAAQ;EAAgB;;AAGtF,SAAS,oBACP,OACA,QACA,wBACA,QACA,OAAO,IACP,SAAqB,EAAE,EACW;AAClC,KAAI,OAAO,UAAU,YAAY,UAAU,KACzC,QAAO;CAGT,MAAM,aAA6E,EAAE;CACrF,MAAM,oBAAgD,EAAE;AAExD,MAAK,MAAM,WAAW,OAAO,KAAK,MAAM,EAAE;EACxC,MAAM,OAA4B,MAAc;EAChD,MAAM,WAAW,GAAG,SAAS,KAAK,KAAK,GAAG,KAAK,KAAK;EACpD,MAAM,QAAQ,QAAQ,UAAU,OAAO;EACvC,IAAI,kBAAkB;AAEtB,MAAI,OAAO,SAAS,YAAY;GAC9B,MAAM,SAAS,KAAK,OAAO,QAAQ,UAAU,OAAO;AACpD,OAAI,kBAAkB,QACpB,YAAW,KAAK;IAAE;IAAU,SAAS;IAAQ,CAAC;OAE9C,QAAO,YAAY;;AAIvB,MAAI,OAAO,SAAS,YAAY,MAAM,QAAQ,MAAM,EAAE;AACpD,qBAAkB;AAClB,QAAK,IAAI,QAAQ,GAAG,QAAQ,MAAM,QAAQ,SAAS;IACjD,MAAM,kBAAkB,oBACtB,MACA,QACA,wBACA,QACA,GAAG,SAAS,GAAG,SACf,OACD;AACD,QAAI,2BAA2B,QAC7B,mBAAkB,KAAK,gBAAgB;;AAI3C,OAAI,gBAAgB,MAAM;IACxB,MAAM,aAAc,KAAa,cAAc,OAAO,QAAQ,UAAU,OAAO;AAC/E,QAAI,sBAAsB,QACxB,YAAW,KAAK;KAAE;KAAU,SAAS;KAAY,CAAC;QAElD,QAAO,YAAY;;;AAKzB,MAAI,OAAO,SAAS,YAAY,OAAO,UAAU,YAAY,UAAU,MAAM;AAC3E,OAAI,CAAC,iBAAiB;IACpB,MAAM,kBAAkB,oBACtB,MACA,QACA,wBACA,QACA,UACA,OACD;AACD,QAAI,2BAA2B,QAC7B,mBAAkB,KAAK,gBAAgB;;AAI3C,OAAI,gBAAgB,MAAM;IACxB,MAAM,aAAc,KAAa,cAAc,OAAO,QAAQ,UAAU,OAAO;AAC/E,QAAI,sBAAsB,QACxB,YAAW,KAAK;KAAE;KAAU,SAAS;KAAY,CAAC;QAElD,QAAO,YAAY;;;;AAM3B,KAAI,WAAW,WAAW,KAAK,kBAAkB,WAAW,EAC1D,QAAO;AAGT,SAAQ,YAAY;AAClB,QAAM,QAAQ,IAAI,kBAAkB;AAEpC,MAAI,WAAW,SAAS,EAEtB,EADgB,MAAM,QAAQ,WAAW,WAAW,KAAK,MAAM,EAAE,QAAQ,CAAC,EAClE,SAAS,QAAQ,UAAU;GACjC,MAAM,EAAE,aAAa,WAAW;AAChC,OAAI,OAAO,WAAW,YACpB,QAAO,YAAY,OAAO;OAE1B,QAAO,YAAY,uBAAuB,OAAO,OAAO;IAE1D;AAGJ,SAAO;KACL;;AAGN,MAAM,uBAAuB,QAC3B,eAAe,QAAQ,IAAI,UAAU,OAAO,IAAI;AAElD,SAAgB,eACd,UACA,QACA,yBAA8D,qBAC9D,SAAsB,IAAI,iBAAiB,CAAC,QACU;AACtD,KAAI,OAAO,aAAa,YAAY;EAClC,MAAM,SAAS,SAAS,OAAO;AAC/B,MAAI,kBAAkB,QACpB,QAAO,OAAO,KAAK,qBAAqB;AAE1C,SAAO,qBAAqB,OAAO;;CAGrC,MAAM,eAAe,oBAAoB,UAAU,QAAQ,wBAAwB,OAAO;AAC1F,KAAI,wBAAwB,QAC1B,QAAO,aAAa,KAAK,qBAAqB;AAEhD,QAAO,qBAAqB,aAAa"}
1
+ {"version":3,"file":"validate-values.mjs","names":[],"sources":["../../src/validate/validate-values.ts"],"sourcesContent":["import { filterErrors } from '../hooks/use-form-errors/filter-errors/filter-errors';\nimport { getPath } from '../paths';\nimport {\n FormErrors,\n FormRule,\n FormRulesRecord,\n FormValidateInput,\n FormValidationResult,\n} from '../types';\n\nexport const formRootRule = Symbol('root-rule');\n\nfunction getValidationResults(errors: FormErrors): FormValidationResult {\n const filteredErrors = filterErrors(errors);\n return { hasErrors: Object.keys(filteredErrors).length > 0, errors: filteredErrors };\n}\n\nfunction validateRulesRecord<T>(\n rules: FormRulesRecord<T> | undefined,\n values: T,\n resolveValidationError: (error: unknown) => React.ReactNode,\n signal: AbortSignal,\n path = '',\n errors: FormErrors = {}\n): FormErrors | Promise<FormErrors> {\n if (typeof rules !== 'object' || rules === null) {\n return errors;\n }\n\n const asyncTasks: Array<{ rulePath: string; promise: Promise<React.ReactNode> }> = [];\n const pendingRecursions: Array<Promise<FormErrors>> = [];\n\n for (const ruleKey of Object.keys(rules)) {\n const rule: FormRule<any, any> = (rules as any)[ruleKey];\n const rulePath = `${path === '' ? '' : `${path}.`}${ruleKey}`;\n const value = getPath(rulePath, values);\n let arrayValidation = false;\n\n if (typeof rule === 'function') {\n const result = rule(value, values, rulePath, signal);\n if (result instanceof Promise) {\n asyncTasks.push({ rulePath, promise: result });\n } else {\n errors[rulePath] = result;\n }\n }\n\n if (typeof rule === 'object' && Array.isArray(value)) {\n arrayValidation = true;\n for (let index = 0; index < value.length; index++) {\n const recursionResult = validateRulesRecord(\n rule,\n values,\n resolveValidationError,\n signal,\n `${rulePath}.${index}`,\n errors\n );\n if (recursionResult instanceof Promise) {\n pendingRecursions.push(recursionResult);\n }\n }\n\n if (formRootRule in rule) {\n const rootResult = (rule as any)[formRootRule](value, values, rulePath, signal);\n if (rootResult instanceof Promise) {\n asyncTasks.push({ rulePath, promise: rootResult });\n } else {\n errors[rulePath] = rootResult;\n }\n }\n }\n\n if (typeof rule === 'object' && typeof value === 'object' && value !== null) {\n if (!arrayValidation) {\n const recursionResult = validateRulesRecord(\n rule,\n values,\n resolveValidationError,\n signal,\n rulePath,\n errors\n );\n if (recursionResult instanceof Promise) {\n pendingRecursions.push(recursionResult);\n }\n }\n\n if (formRootRule in rule) {\n const rootResult = (rule as any)[formRootRule](value, values, rulePath, signal);\n if (rootResult instanceof Promise) {\n asyncTasks.push({ rulePath, promise: rootResult });\n } else {\n errors[rulePath] = rootResult;\n }\n }\n }\n }\n\n if (asyncTasks.length === 0 && pendingRecursions.length === 0) {\n return errors;\n }\n\n return (async () => {\n await Promise.all(pendingRecursions);\n\n if (asyncTasks.length > 0) {\n const settled = await Promise.allSettled(asyncTasks.map((t) => t.promise));\n settled.forEach((result, index) => {\n const { rulePath } = asyncTasks[index];\n if (result.status === 'fulfilled') {\n errors[rulePath] = result.value;\n } else {\n errors[rulePath] = resolveValidationError(result.reason);\n }\n });\n }\n\n return errors;\n })();\n}\n\nconst defaultResolveError = (err: unknown): React.ReactNode =>\n err instanceof Error ? err.message : String(err);\n\nexport function validateValues<T>(\n validate: FormValidateInput<T> | undefined,\n values: T,\n resolveValidationError: (error: unknown) => React.ReactNode = defaultResolveError,\n signal: AbortSignal = new AbortController().signal\n): FormValidationResult | Promise<FormValidationResult> {\n if (typeof validate === 'function') {\n const result = validate(values);\n if (result instanceof Promise) {\n return result.then(getValidationResults);\n }\n return getValidationResults(result);\n }\n\n const errorsResult = validateRulesRecord(validate, values, resolveValidationError, signal);\n if (errorsResult instanceof Promise) {\n return errorsResult.then(getValidationResults);\n }\n return getValidationResults(errorsResult);\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"has-length.mjs","names":[],"sources":["../../../src/validators/has-length/has-length.ts"],"sourcesContent":["interface HasLengthOptions {\n max?: number;\n min?: number;\n}\n\ntype HasLengthPayload = HasLengthOptions | number;\n\nfunction isLengthValid(payload: HasLengthPayload, value: any) {\n if (typeof payload === 'number') {\n return value.length === payload;\n }\n\n const { max, min } = payload;\n let valid = true;\n\n if (typeof max === 'number' && value.length > max) {\n valid = false;\n }\n\n if (typeof min === 'number' && value.length < min) {\n valid = false;\n }\n\n return valid;\n}\n\nexport function hasLength(payload: HasLengthPayload, error?: React.ReactNode) {\n const _error = error || true;\n\n return (value: unknown): React.ReactNode => {\n if (typeof value === 'string') {\n return isLengthValid(payload, value.trim()) ? null : _error;\n }\n\n if (typeof value === 'object' && value !== null && 'length' in value) {\n return isLengthValid(payload, value) ? null : _error;\n }\n\n return _error;\n };\n}\n"],"mappings":";;AAOA,SAAS,cAAc,SAA2B,OAAY;AAC5D,KAAI,OAAO,YAAY,SACrB,QAAO,MAAM,WAAW;CAG1B,MAAM,EAAE,KAAK,QAAQ;CACrB,IAAI,QAAQ;AAEZ,KAAI,OAAO,QAAQ,YAAY,MAAM,SAAS,IAC5C,SAAQ;AAGV,KAAI,OAAO,QAAQ,YAAY,MAAM,SAAS,IAC5C,SAAQ;AAGV,QAAO;;AAGT,SAAgB,UAAU,SAA2B,OAAyB;CAC5E,MAAM,SAAS,SAAS;AAExB,SAAQ,UAAoC;AAC1C,MAAI,OAAO,UAAU,SACnB,QAAO,cAAc,SAAS,MAAM,MAAM,CAAC,GAAG,OAAO;AAGvD,MAAI,OAAO,UAAU,YAAY,UAAU,QAAQ,YAAY,MAC7D,QAAO,cAAc,SAAS,MAAM,GAAG,OAAO;AAGhD,SAAO"}
1
+ {"version":3,"file":"has-length.mjs","names":[],"sources":["../../../src/validators/has-length/has-length.ts"],"sourcesContent":["import type { SyncReactNode } from '../types';\n\ninterface HasLengthOptions {\n max?: number;\n min?: number;\n}\n\ntype HasLengthPayload = HasLengthOptions | number;\n\nfunction isLengthValid(payload: HasLengthPayload, value: any) {\n if (typeof payload === 'number') {\n return value.length === payload;\n }\n\n const { max, min } = payload;\n let valid = true;\n\n if (typeof max === 'number' && value.length > max) {\n valid = false;\n }\n\n if (typeof min === 'number' && value.length < min) {\n valid = false;\n }\n\n return valid;\n}\n\nexport function hasLength(payload: HasLengthPayload, error?: SyncReactNode) {\n const _error = error || true;\n\n return (value: unknown): SyncReactNode => {\n if (typeof value === 'string') {\n return isLengthValid(payload, value.trim()) ? null : _error;\n }\n\n if (typeof value === 'object' && value !== null && 'length' in value) {\n return isLengthValid(payload, value) ? null : _error;\n }\n\n return _error;\n };\n}\n"],"mappings":";;AASA,SAAS,cAAc,SAA2B,OAAY;CAC5D,IAAI,OAAO,YAAY,UACrB,OAAO,MAAM,WAAW;CAG1B,MAAM,EAAE,KAAK,QAAQ;CACrB,IAAI,QAAQ;CAEZ,IAAI,OAAO,QAAQ,YAAY,MAAM,SAAS,KAC5C,QAAQ;CAGV,IAAI,OAAO,QAAQ,YAAY,MAAM,SAAS,KAC5C,QAAQ;CAGV,OAAO;AACT;AAEA,SAAgB,UAAU,SAA2B,OAAuB;CAC1E,MAAM,SAAS,SAAS;CAExB,QAAQ,UAAkC;EACxC,IAAI,OAAO,UAAU,UACnB,OAAO,cAAc,SAAS,MAAM,KAAK,CAAC,IAAI,OAAO;EAGvD,IAAI,OAAO,UAAU,YAAY,UAAU,QAAQ,YAAY,OAC7D,OAAO,cAAc,SAAS,KAAK,IAAI,OAAO;EAGhD,OAAO;CACT;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"is-email.mjs","names":[],"sources":["../../../src/validators/is-email/is-email.ts"],"sourcesContent":["import { matches } from '../matches/matches';\n\nexport function isEmail(error?: React.ReactNode) {\n return matches(/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/, error);\n}\n"],"mappings":";;;AAEA,SAAgB,QAAQ,OAAyB;AAC/C,QAAO,QAAQ,oDAAoD,MAAM"}
1
+ {"version":3,"file":"is-email.mjs","names":[],"sources":["../../../src/validators/is-email/is-email.ts"],"sourcesContent":["import { matches } from '../matches/matches';\nimport type { SyncReactNode } from '../types';\n\nexport function isEmail(error?: SyncReactNode) {\n return matches(/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/, error);\n}\n"],"mappings":";;;AAGA,SAAgB,QAAQ,OAAuB;CAC7C,OAAO,QAAQ,oDAAoD,KAAK;AAC1E"}
@@ -1 +1 @@
1
- {"version":3,"file":"is-in-range.mjs","names":[],"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): React.ReactNode => {\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"],"mappings":";;AAKA,SAAgB,UAAU,EAAE,KAAK,OAAyB,OAAyB;CACjF,MAAM,SAAS,SAAS;AAExB,SAAQ,UAAoC;AAC1C,MAAI,OAAO,UAAU,SACnB,QAAO;EAGT,IAAI,QAAQ;AAEZ,MAAI,OAAO,QAAQ,YAAY,QAAQ,IACrC,SAAQ;AAGV,MAAI,OAAO,QAAQ,YAAY,QAAQ,IACrC,SAAQ;AAGV,SAAO,QAAQ,OAAO"}
1
+ {"version":3,"file":"is-in-range.mjs","names":[],"sources":["../../../src/validators/is-in-range/is-in-range.ts"],"sourcesContent":["import type { SyncReactNode } from '../types';\n\ninterface IsInRangePayload {\n min?: number;\n max?: number;\n}\n\nexport function isInRange({ min, max }: IsInRangePayload, error?: SyncReactNode) {\n const _error = error || true;\n\n return (value: unknown): SyncReactNode => {\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"],"mappings":";;AAOA,SAAgB,UAAU,EAAE,KAAK,OAAyB,OAAuB;CAC/E,MAAM,SAAS,SAAS;CAExB,QAAQ,UAAkC;EACxC,IAAI,OAAO,UAAU,UACnB,OAAO;EAGT,IAAI,QAAQ;EAEZ,IAAI,OAAO,QAAQ,YAAY,QAAQ,KACrC,QAAQ;EAGV,IAAI,OAAO,QAAQ,YAAY,QAAQ,KACrC,QAAQ;EAGV,OAAO,QAAQ,OAAO;CACxB;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"is-json-string.mjs","names":[],"sources":["../../../src/validators/is-json-string/is-json-string.ts"],"sourcesContent":["export function isJSONString(error?: React.ReactNode) {\n const _error = error || true;\n\n return (value: unknown): React.ReactNode => {\n if (typeof value === 'string') {\n try {\n JSON.parse(value);\n return null;\n } catch (e) {\n return _error;\n }\n }\n\n return _error;\n };\n}\n"],"mappings":";;AAAA,SAAgB,aAAa,OAAyB;CACpD,MAAM,SAAS,SAAS;AAExB,SAAQ,UAAoC;AAC1C,MAAI,OAAO,UAAU,SACnB,KAAI;AACF,QAAK,MAAM,MAAM;AACjB,UAAO;WACA,GAAG;AACV,UAAO;;AAIX,SAAO"}
1
+ {"version":3,"file":"is-json-string.mjs","names":[],"sources":["../../../src/validators/is-json-string/is-json-string.ts"],"sourcesContent":["import type { SyncReactNode } from '../types';\n\nexport function isJSONString(error?: SyncReactNode) {\n const _error = error || true;\n\n return (value: unknown): SyncReactNode => {\n if (typeof value === 'string') {\n try {\n JSON.parse(value);\n return null;\n } catch (e) {\n return _error;\n }\n }\n\n return _error;\n };\n}\n"],"mappings":";;AAEA,SAAgB,aAAa,OAAuB;CAClD,MAAM,SAAS,SAAS;CAExB,QAAQ,UAAkC;EACxC,IAAI,OAAO,UAAU,UACnB,IAAI;GACF,KAAK,MAAM,KAAK;GAChB,OAAO;EACT,SAAS,GAAG;GACV,OAAO;EACT;EAGF,OAAO;CACT;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"is-not-empty.mjs","names":[],"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): React.ReactNode => {\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"],"mappings":";;AAAA,SAAgB,WAAW,OAAyB;CAClD,MAAM,SAAS,SAAS;AAExB,SAAQ,UAAoC;AAC1C,MAAI,OAAO,UAAU,SACnB,QAAO,MAAM,MAAM,CAAC,SAAS,IAAI,OAAO;AAG1C,MAAI,MAAM,QAAQ,MAAM,CACtB,QAAO,MAAM,SAAS,IAAI,OAAO;AAGnC,MAAI,UAAU,QAAQ,UAAU,KAAA,EAC9B,QAAO;AAGT,MAAI,UAAU,MACZ,QAAO;AAGT,SAAO"}
1
+ {"version":3,"file":"is-not-empty.mjs","names":[],"sources":["../../../src/validators/is-not-empty/is-not-empty.ts"],"sourcesContent":["import type { SyncReactNode } from '../types';\n\nexport function isNotEmpty(error?: SyncReactNode) {\n const _error = error || true;\n\n return (value: unknown): SyncReactNode => {\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"],"mappings":";;AAEA,SAAgB,WAAW,OAAuB;CAChD,MAAM,SAAS,SAAS;CAExB,QAAQ,UAAkC;EACxC,IAAI,OAAO,UAAU,UACnB,OAAO,MAAM,KAAK,EAAE,SAAS,IAAI,OAAO;EAG1C,IAAI,MAAM,QAAQ,KAAK,GACrB,OAAO,MAAM,SAAS,IAAI,OAAO;EAGnC,IAAI,UAAU,QAAQ,UAAU,KAAA,GAC9B,OAAO;EAGT,IAAI,UAAU,OACZ,OAAO;EAGT,OAAO;CACT;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"is-not-empty-html.mjs","names":[],"sources":["../../../src/validators/is-not-empty-html/is-not-empty-html.ts"],"sourcesContent":["function removeHtmlTags(input: string): string {\n return input.replace(/<\\/?[^>]+(>|$)/g, '');\n}\n\nexport function isNotEmptyHTML(error?: React.ReactNode) {\n const _error = error || true;\n\n return (value: unknown): React.ReactNode => {\n if (typeof value === 'string') {\n return removeHtmlTags(value).trim().length > 0 ? null : _error;\n }\n\n return _error;\n };\n}\n"],"mappings":";;AAAA,SAAS,eAAe,OAAuB;AAC7C,QAAO,MAAM,QAAQ,mBAAmB,GAAG;;AAG7C,SAAgB,eAAe,OAAyB;CACtD,MAAM,SAAS,SAAS;AAExB,SAAQ,UAAoC;AAC1C,MAAI,OAAO,UAAU,SACnB,QAAO,eAAe,MAAM,CAAC,MAAM,CAAC,SAAS,IAAI,OAAO;AAG1D,SAAO"}
1
+ {"version":3,"file":"is-not-empty-html.mjs","names":[],"sources":["../../../src/validators/is-not-empty-html/is-not-empty-html.ts"],"sourcesContent":["import type { SyncReactNode } from '../types';\n\nfunction removeHtmlTags(input: string): string {\n return input.replace(/<\\/?[^>]+(>|$)/g, '');\n}\n\nexport function isNotEmptyHTML(error?: SyncReactNode) {\n const _error = error || true;\n\n return (value: unknown): SyncReactNode => {\n if (typeof value === 'string') {\n return removeHtmlTags(value).trim().length > 0 ? null : _error;\n }\n\n return _error;\n };\n}\n"],"mappings":";;AAEA,SAAS,eAAe,OAAuB;CAC7C,OAAO,MAAM,QAAQ,mBAAmB,EAAE;AAC5C;AAEA,SAAgB,eAAe,OAAuB;CACpD,MAAM,SAAS,SAAS;CAExB,QAAQ,UAAkC;EACxC,IAAI,OAAO,UAAU,UACnB,OAAO,eAAe,KAAK,EAAE,KAAK,EAAE,SAAS,IAAI,OAAO;EAG1D,OAAO;CACT;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"is-one-of.mjs","names":[],"sources":["../../../src/validators/is-one-of/is-one-of.ts"],"sourcesContent":["export function isOneOf<T>(values: readonly T[], error?: React.ReactNode) {\n const _error = error || true;\n\n return (value: unknown): React.ReactNode => {\n return (values as readonly unknown[]).includes(value) ? null : _error;\n };\n}\n"],"mappings":";;AAAA,SAAgB,QAAW,QAAsB,OAAyB;CACxE,MAAM,SAAS,SAAS;AAExB,SAAQ,UAAoC;AAC1C,SAAQ,OAA8B,SAAS,MAAM,GAAG,OAAO"}
1
+ {"version":3,"file":"is-one-of.mjs","names":[],"sources":["../../../src/validators/is-one-of/is-one-of.ts"],"sourcesContent":["import type { SyncReactNode } from '../types';\n\nexport function isOneOf<T>(values: readonly T[], error?: SyncReactNode) {\n const _error = error || true;\n\n return (value: unknown): SyncReactNode => {\n return (values as readonly unknown[]).includes(value) ? null : _error;\n };\n}\n"],"mappings":";;AAEA,SAAgB,QAAW,QAAsB,OAAuB;CACtE,MAAM,SAAS,SAAS;CAExB,QAAQ,UAAkC;EACxC,OAAQ,OAA8B,SAAS,KAAK,IAAI,OAAO;CACjE;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"is-url.mjs","names":[],"sources":["../../../src/validators/is-url/is-url.ts"],"sourcesContent":["interface IsUrlOptions {\n protocols?: string[];\n allowLocalhost?: boolean;\n}\n\nexport function isUrl(error?: React.ReactNode): (value: unknown) => React.ReactNode;\nexport function isUrl(\n options: IsUrlOptions,\n error?: React.ReactNode\n): (value: unknown) => React.ReactNode;\nexport function isUrl(optionsOrError?: IsUrlOptions | React.ReactNode, error?: React.ReactNode) {\n let _options: IsUrlOptions = {};\n let _error: React.ReactNode;\n\n if (\n optionsOrError !== null &&\n optionsOrError !== undefined &&\n typeof optionsOrError === 'object' &&\n !Array.isArray(optionsOrError) &&\n ('protocols' in optionsOrError || 'allowLocalhost' in optionsOrError)\n ) {\n _options = optionsOrError as IsUrlOptions;\n _error = error || true;\n } else {\n _error = (optionsOrError as React.ReactNode) || true;\n }\n\n const protocols = _options.protocols ?? ['http', 'https'];\n const allowLocalhost = _options.allowLocalhost ?? false;\n\n return (value: unknown): React.ReactNode => {\n if (typeof value !== 'string') {\n return _error;\n }\n\n try {\n const url = new URL(value);\n const protocol = url.protocol.replace(':', '');\n\n if (!protocols.includes(protocol)) {\n return _error;\n }\n\n if (!allowLocalhost && url.hostname === 'localhost') {\n return _error;\n }\n\n return null;\n } catch {\n return _error;\n }\n };\n}\n"],"mappings":";;AAUA,SAAgB,MAAM,gBAAiD,OAAyB;CAC9F,IAAI,WAAyB,EAAE;CAC/B,IAAI;AAEJ,KACE,mBAAmB,QACnB,mBAAmB,KAAA,KACnB,OAAO,mBAAmB,YAC1B,CAAC,MAAM,QAAQ,eAAe,KAC7B,eAAe,kBAAkB,oBAAoB,iBACtD;AACA,aAAW;AACX,WAAS,SAAS;OAElB,UAAU,kBAAsC;CAGlD,MAAM,YAAY,SAAS,aAAa,CAAC,QAAQ,QAAQ;CACzD,MAAM,iBAAiB,SAAS,kBAAkB;AAElD,SAAQ,UAAoC;AAC1C,MAAI,OAAO,UAAU,SACnB,QAAO;AAGT,MAAI;GACF,MAAM,MAAM,IAAI,IAAI,MAAM;GAC1B,MAAM,WAAW,IAAI,SAAS,QAAQ,KAAK,GAAG;AAE9C,OAAI,CAAC,UAAU,SAAS,SAAS,CAC/B,QAAO;AAGT,OAAI,CAAC,kBAAkB,IAAI,aAAa,YACtC,QAAO;AAGT,UAAO;UACD;AACN,UAAO"}
1
+ {"version":3,"file":"is-url.mjs","names":[],"sources":["../../../src/validators/is-url/is-url.ts"],"sourcesContent":["import type { SyncReactNode } from '../types';\n\ninterface IsUrlOptions {\n protocols?: string[];\n allowLocalhost?: boolean;\n}\n\nexport function isUrl(error?: SyncReactNode): (value: unknown) => SyncReactNode;\nexport function isUrl(\n options: IsUrlOptions,\n error?: SyncReactNode\n): (value: unknown) => SyncReactNode;\nexport function isUrl(optionsOrError?: IsUrlOptions | SyncReactNode, error?: SyncReactNode) {\n let _options: IsUrlOptions = {};\n let _error: SyncReactNode;\n\n if (\n optionsOrError !== null &&\n optionsOrError !== undefined &&\n typeof optionsOrError === 'object' &&\n !Array.isArray(optionsOrError) &&\n ('protocols' in optionsOrError || 'allowLocalhost' in optionsOrError)\n ) {\n _options = optionsOrError as IsUrlOptions;\n _error = error || true;\n } else {\n _error = (optionsOrError as SyncReactNode) || true;\n }\n\n const protocols = _options.protocols ?? ['http', 'https'];\n const allowLocalhost = _options.allowLocalhost ?? false;\n\n return (value: unknown): SyncReactNode => {\n if (typeof value !== 'string') {\n return _error;\n }\n\n try {\n const url = new URL(value);\n const protocol = url.protocol.replace(':', '');\n\n if (!protocols.includes(protocol)) {\n return _error;\n }\n\n if (!allowLocalhost && url.hostname === 'localhost') {\n return _error;\n }\n\n return null;\n } catch {\n return _error;\n }\n };\n}\n"],"mappings":";;AAYA,SAAgB,MAAM,gBAA+C,OAAuB;CAC1F,IAAI,WAAyB,CAAC;CAC9B,IAAI;CAEJ,IACE,mBAAmB,QACnB,mBAAmB,KAAA,KACnB,OAAO,mBAAmB,YAC1B,CAAC,MAAM,QAAQ,cAAc,MAC5B,eAAe,kBAAkB,oBAAoB,iBACtD;EACA,WAAW;EACX,SAAS,SAAS;CACpB,OACE,SAAU,kBAAoC;CAGhD,MAAM,YAAY,SAAS,aAAa,CAAC,QAAQ,OAAO;CACxD,MAAM,iBAAiB,SAAS,kBAAkB;CAElD,QAAQ,UAAkC;EACxC,IAAI,OAAO,UAAU,UACnB,OAAO;EAGT,IAAI;GACF,MAAM,MAAM,IAAI,IAAI,KAAK;GACzB,MAAM,WAAW,IAAI,SAAS,QAAQ,KAAK,EAAE;GAE7C,IAAI,CAAC,UAAU,SAAS,QAAQ,GAC9B,OAAO;GAGT,IAAI,CAAC,kBAAkB,IAAI,aAAa,aACtC,OAAO;GAGT,OAAO;EACT,QAAQ;GACN,OAAO;EACT;CACF;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"matches.mjs","names":[],"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): React.ReactNode => {\n if (typeof value !== 'string') {\n return _error;\n }\n\n return regexp.test(value) ? null : _error;\n };\n}\n"],"mappings":";;AAAA,SAAgB,QAAQ,QAAgB,OAAyB;CAC/D,MAAM,SAAS,SAAS;AAExB,SAAQ,UAAoC;AAC1C,MAAI,OAAO,UAAU,SACnB,QAAO;AAGT,SAAO,OAAO,KAAK,MAAM,GAAG,OAAO"}
1
+ {"version":3,"file":"matches.mjs","names":[],"sources":["../../../src/validators/matches/matches.ts"],"sourcesContent":["import type { SyncReactNode } from '../types';\n\nexport function matches(regexp: RegExp, error?: SyncReactNode) {\n const _error = error || true;\n\n return (value: unknown): SyncReactNode => {\n if (typeof value !== 'string') {\n return _error;\n }\n\n return regexp.test(value) ? null : _error;\n };\n}\n"],"mappings":";;AAEA,SAAgB,QAAQ,QAAgB,OAAuB;CAC7D,MAAM,SAAS,SAAS;CAExB,QAAQ,UAAkC;EACxC,IAAI,OAAO,UAAU,UACnB,OAAO;EAGT,OAAO,OAAO,KAAK,KAAK,IAAI,OAAO;CACrC;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"matches-field.mjs","names":[],"sources":["../../../src/validators/matches-field/matches-field.ts"],"sourcesContent":["export function matchesField<T>(field: keyof T, error?: React.ReactNode) {\n const _error = error || true;\n\n return (value: unknown, values: T): React.ReactNode => {\n if (!values || !(field in (values as any))) {\n return _error;\n }\n\n return value === values[field] ? null : _error;\n };\n}\n"],"mappings":";;AAAA,SAAgB,aAAgB,OAAgB,OAAyB;CACvE,MAAM,SAAS,SAAS;AAExB,SAAQ,OAAgB,WAA+B;AACrD,MAAI,CAAC,UAAU,EAAE,SAAU,QACzB,QAAO;AAGT,SAAO,UAAU,OAAO,SAAS,OAAO"}
1
+ {"version":3,"file":"matches-field.mjs","names":[],"sources":["../../../src/validators/matches-field/matches-field.ts"],"sourcesContent":["import type { SyncReactNode } from '../types';\n\nexport function matchesField<T>(field: keyof T, error?: SyncReactNode) {\n const _error = error || true;\n\n return (value: unknown, values: T): SyncReactNode => {\n if (!values || !(field in (values as any))) {\n return _error;\n }\n\n return value === values[field] ? null : _error;\n };\n}\n"],"mappings":";;AAEA,SAAgB,aAAgB,OAAgB,OAAuB;CACrE,MAAM,SAAS,SAAS;CAExB,QAAQ,OAAgB,WAA6B;EACnD,IAAI,CAAC,UAAU,EAAE,SAAU,SACzB,OAAO;EAGT,OAAO,UAAU,OAAO,SAAS,OAAO;CAC1C;AACF"}
@@ -2,12 +2,14 @@ import { InsertListItem, RemoveListItem, ReorderListItem, ReplaceListItem } from
2
2
  import type { $FormErrors } from '../use-form-errors/use-form-errors';
3
3
  import type { $FormStatus } from '../use-form-status/use-form-status';
4
4
  import type { $FormValues } from '../use-form-values/use-form-values';
5
+ import type { $FormWatch } from '../use-form-watch/use-form-watch';
5
6
  interface UseFormListInput<Values extends Record<string, any>> {
6
7
  $values: $FormValues<Values>;
7
8
  $errors: $FormErrors<Values>;
8
9
  $status: $FormStatus<Values>;
10
+ $watch: $FormWatch<Values>;
9
11
  }
10
- export declare function useFormList<Values extends Record<string, any>>({ $values, $errors, $status, }: UseFormListInput<Values>): {
12
+ export declare function useFormList<Values extends Record<string, any>>({ $values, $errors, $status, $watch, }: UseFormListInput<Values>): {
11
13
  reorderListItem: ReorderListItem<Values>;
12
14
  removeListItem: RemoveListItem<Values>;
13
15
  insertListItem: InsertListItem<Values>;
@@ -1,14 +1,22 @@
1
1
  import { LooseKeys } from '../../paths.types';
2
2
  import { FormFieldSubscriber, Watch } from '../../types';
3
3
  import { $FormStatus } from '../use-form-status/use-form-status';
4
- import { SetValuesSubscriberPayload } from '../use-form-values/use-form-values';
4
+ import { $FormValues, SetValuesSubscriberPayload } from '../use-form-values/use-form-values';
5
5
  interface UseFormWatchInput<out Values extends Record<PropertyKey, any>> {
6
+ $values: $FormValues<Values>;
6
7
  $status: $FormStatus<Values>;
7
8
  cascadeUpdates?: boolean;
8
9
  }
9
- export declare function useFormWatch<Values extends Record<PropertyKey, any>, Field extends LooseKeys<Values> = LooseKeys<Values>>({ $status, cascadeUpdates }: UseFormWatchInput<Values>): {
10
+ export interface $FormWatch<Values extends Record<PropertyKey, any>> {
11
+ subscribers: React.RefObject<Record<string, FormFieldSubscriber<Values, any>[]>>;
12
+ watch: Watch<Values, any>;
13
+ getFieldSubscribers: (path: any) => ((input: SetValuesSubscriberPayload<Values>) => void)[];
14
+ notifyWatchSubscribers: (previousValues: Values) => void;
15
+ }
16
+ export declare function useFormWatch<Values extends Record<PropertyKey, any>, Field extends LooseKeys<Values> = LooseKeys<Values>>({ $values, $status, cascadeUpdates }: UseFormWatchInput<Values>): {
10
17
  subscribers: import("react").RefObject<Record<Field, FormFieldSubscriber<Values, Field>[]>>;
11
18
  watch: Watch<Values, Field>;
12
19
  getFieldSubscribers: (path: Field) => ((input: SetValuesSubscriberPayload<Values>) => void)[];
20
+ notifyWatchSubscribers: (previousValues: Values) => void;
13
21
  };
14
22
  export {};
@@ -1,7 +1,8 @@
1
+ import type { SyncReactNode } from '../types';
1
2
  interface HasLengthOptions {
2
3
  max?: number;
3
4
  min?: number;
4
5
  }
5
6
  type HasLengthPayload = HasLengthOptions | number;
6
- export declare function hasLength(payload: HasLengthPayload, error?: React.ReactNode): (value: unknown) => React.ReactNode;
7
+ export declare function hasLength(payload: HasLengthPayload, error?: SyncReactNode): (value: unknown) => SyncReactNode;
7
8
  export {};
@@ -1 +1,2 @@
1
- export declare function isEmail(error?: React.ReactNode): (value: unknown) => React.ReactNode;
1
+ import type { SyncReactNode } from '../types';
2
+ export declare function isEmail(error?: SyncReactNode): (value: unknown) => SyncReactNode;
@@ -1,6 +1,7 @@
1
+ import type { SyncReactNode } from '../types';
1
2
  interface IsInRangePayload {
2
3
  min?: number;
3
4
  max?: number;
4
5
  }
5
- export declare function isInRange({ min, max }: IsInRangePayload, error?: React.ReactNode): (value: unknown) => React.ReactNode;
6
+ export declare function isInRange({ min, max }: IsInRangePayload, error?: SyncReactNode): (value: unknown) => SyncReactNode;
6
7
  export {};
@@ -1 +1,2 @@
1
- export declare function isJSONString(error?: React.ReactNode): (value: unknown) => React.ReactNode;
1
+ import type { SyncReactNode } from '../types';
2
+ export declare function isJSONString(error?: SyncReactNode): (value: unknown) => SyncReactNode;
@@ -1 +1,2 @@
1
- export declare function isNotEmpty(error?: React.ReactNode): (value: unknown) => React.ReactNode;
1
+ import type { SyncReactNode } from '../types';
2
+ export declare function isNotEmpty(error?: SyncReactNode): (value: unknown) => SyncReactNode;
@@ -1 +1,2 @@
1
- export declare function isNotEmptyHTML(error?: React.ReactNode): (value: unknown) => React.ReactNode;
1
+ import type { SyncReactNode } from '../types';
2
+ export declare function isNotEmptyHTML(error?: SyncReactNode): (value: unknown) => SyncReactNode;
@@ -1 +1,2 @@
1
- export declare function isOneOf<T>(values: readonly T[], error?: React.ReactNode): (value: unknown) => React.ReactNode;
1
+ import type { SyncReactNode } from '../types';
2
+ export declare function isOneOf<T>(values: readonly T[], error?: SyncReactNode): (value: unknown) => SyncReactNode;
@@ -1,7 +1,8 @@
1
+ import type { SyncReactNode } from '../types';
1
2
  interface IsUrlOptions {
2
3
  protocols?: string[];
3
4
  allowLocalhost?: boolean;
4
5
  }
5
- export declare function isUrl(error?: React.ReactNode): (value: unknown) => React.ReactNode;
6
- export declare function isUrl(options: IsUrlOptions, error?: React.ReactNode): (value: unknown) => React.ReactNode;
6
+ export declare function isUrl(error?: SyncReactNode): (value: unknown) => SyncReactNode;
7
+ export declare function isUrl(options: IsUrlOptions, error?: SyncReactNode): (value: unknown) => SyncReactNode;
7
8
  export {};
@@ -1 +1,2 @@
1
- export declare function matches(regexp: RegExp, error?: React.ReactNode): (value: unknown) => React.ReactNode;
1
+ import type { SyncReactNode } from '../types';
2
+ export declare function matches(regexp: RegExp, error?: SyncReactNode): (value: unknown) => SyncReactNode;
@@ -1 +1,2 @@
1
- export declare function matchesField<T>(field: keyof T, error?: React.ReactNode): (value: unknown, values: T) => React.ReactNode;
1
+ import type { SyncReactNode } from '../types';
2
+ export declare function matchesField<T>(field: keyof T, error?: SyncReactNode): (value: unknown, values: T) => SyncReactNode;
@@ -0,0 +1 @@
1
+ export type SyncReactNode = Exclude<React.ReactNode, Promise<unknown>>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mantine/form",
3
- "version": "9.1.1",
3
+ "version": "9.2.1",
4
4
  "description": "Mantine form management library",
5
5
  "homepage": "https://mantine.dev",
6
6
  "license": "MIT",
@@ -40,6 +40,6 @@
40
40
  "klona": "^2.0.6"
41
41
  },
42
42
  "devDependencies": {
43
- "zod": "^4.3.6"
43
+ "zod": "^4.4.3"
44
44
  }
45
45
  }