use-mask-input 3.10.0 → 3.10.2

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 (49) hide show
  1. package/CHANGELOG.md +17 -1
  2. package/dist/antd.cjs +1 -65
  3. package/dist/antd.cjs.map +1 -1
  4. package/dist/antd.d.cts +12 -10
  5. package/dist/{antd.d.ts → antd.d.mts} +12 -10
  6. package/dist/antd.mjs +2 -0
  7. package/dist/antd.mjs.map +1 -0
  8. package/dist/index-BmKzoe0X.d.cts +836 -0
  9. package/dist/index-BmKzoe0X.d.mts +836 -0
  10. package/dist/index.cjs +1 -173
  11. package/dist/index.cjs.map +1 -1
  12. package/dist/index.d.cts +18 -15
  13. package/dist/{index.d.ts → index.d.mts} +18 -15
  14. package/dist/index.mjs +2 -0
  15. package/dist/index.mjs.map +1 -0
  16. package/dist/withMask-VWeBqi_u.cjs +2 -0
  17. package/dist/withMask-VWeBqi_u.cjs.map +1 -0
  18. package/dist/withMask-jrErtLYS.mjs +2 -0
  19. package/dist/withMask-jrErtLYS.mjs.map +1 -0
  20. package/package.json +42 -22
  21. package/src/api/withMask.ts +1 -1
  22. package/src/core/inputmask.ts +10 -0
  23. package/src/core/maskEngine.ts +2 -2
  24. package/src/utils/maskHelpers.ts +5 -3
  25. package/dist/antd.js +0 -63
  26. package/dist/antd.js.map +0 -1
  27. package/dist/chunk-DTC7JTZP.cjs +0 -3925
  28. package/dist/chunk-DTC7JTZP.cjs.map +0 -1
  29. package/dist/chunk-TVCNC3TP.js +0 -3915
  30. package/dist/chunk-TVCNC3TP.js.map +0 -1
  31. package/dist/index-D8KkaDbQ.d.cts +0 -596
  32. package/dist/index-D8KkaDbQ.d.ts +0 -596
  33. package/dist/index.js +0 -165
  34. package/dist/index.js.map +0 -1
  35. package/src/antd/useHookFormMaskAntd.spec.ts +0 -181
  36. package/src/antd/useMaskInputAntd-server.spec.tsx +0 -37
  37. package/src/antd/useMaskInputAntd.spec.tsx +0 -131
  38. package/src/api/useHookFormMask.spec.ts +0 -259
  39. package/src/api/useMaskInput-server.spec.tsx +0 -30
  40. package/src/api/useMaskInput.spec.tsx +0 -238
  41. package/src/api/withHookFormMask.spec.ts +0 -179
  42. package/src/api/withMask.spec.ts +0 -137
  43. package/src/api/withTanStackFormMask.spec.ts +0 -76
  44. package/src/core/elementResolver.spec.ts +0 -175
  45. package/src/core/maskConfig.spec.ts +0 -208
  46. package/src/core/maskEngine.spec.ts +0 -114
  47. package/src/utils/flow.spec.ts +0 -57
  48. package/src/utils/isServer.spec.ts +0 -15
  49. package/src/utils/moduleInterop.spec.ts +0 -37
package/dist/index.cjs CHANGED
@@ -1,174 +1,2 @@
1
- 'use strict';
2
-
3
- var chunkDTC7JTZP_cjs = require('./chunk-DTC7JTZP.cjs');
4
- var react = require('react');
5
-
6
- function useMaskInput(props) {
7
- const { mask, register, options } = props;
8
- const ref = react.useRef(null);
9
- const maskRef = react.useRef(mask);
10
- const optionsRef = react.useRef(options);
11
- const unmaskedValue = react.useCallback(() => chunkDTC7JTZP_cjs.getUnmaskedValue(ref.current), []);
12
- const refCallback = react.useCallback((input) => {
13
- if (!input) {
14
- ref.current = null;
15
- return;
16
- }
17
- ref.current = chunkDTC7JTZP_cjs.resolveInputRef(input);
18
- chunkDTC7JTZP_cjs.withMask(maskRef.current, optionsRef.current)(ref.current);
19
- }, []);
20
- react.useEffect(() => {
21
- if (chunkDTC7JTZP_cjs.isServer_default || !ref.current || !register) return;
22
- register(ref.current);
23
- }, [register]);
24
- if (chunkDTC7JTZP_cjs.isServer_default) {
25
- const noop = (() => {
26
- });
27
- return chunkDTC7JTZP_cjs.setUnmaskedValue(noop, () => "");
28
- }
29
- return chunkDTC7JTZP_cjs.setUnmaskedValue(refCallback, unmaskedValue);
30
- }
31
- function useHookFormMask(registerFn) {
32
- const entryCacheRef = react.useRef(/* @__PURE__ */ new Map());
33
- react.useLayoutEffect(() => {
34
- entryCacheRef.current.forEach((entry) => {
35
- const currentEntry = entry;
36
- if (!currentEntry.element || !currentEntry.latestRHFRef) return;
37
- if (currentEntry.latestRHFRef !== currentEntry.syncedRHFRef) {
38
- currentEntry.latestRHFRef(currentEntry.element);
39
- currentEntry.syncedRHFRef = currentEntry.latestRHFRef;
40
- }
41
- });
42
- });
43
- return react.useMemo(() => {
44
- entryCacheRef.current = /* @__PURE__ */ new Map();
45
- return (fieldName, mask, options) => {
46
- if (!registerFn) throw new Error("registerFn is required");
47
- const registerReturn = registerFn(fieldName, options);
48
- const { ref } = registerReturn;
49
- const cacheKey = chunkDTC7JTZP_cjs.makeMaskCacheKey(fieldName, mask);
50
- let entry = entryCacheRef.current.get(cacheKey);
51
- if (!entry) {
52
- const nextEntry = {
53
- element: null,
54
- latestRHFRef: ref,
55
- syncedRHFRef: void 0,
56
- stableRef: null
57
- };
58
- const applyMaskToRef = (_ref) => {
59
- nextEntry.element = _ref;
60
- if (_ref) chunkDTC7JTZP_cjs.applyMaskToElement(_ref, mask, options);
61
- return _ref;
62
- };
63
- nextEntry.stableRef = nextEntry.latestRHFRef ? chunkDTC7JTZP_cjs.flow(applyMaskToRef, (_ref) => nextEntry.latestRHFRef?.(_ref)) : applyMaskToRef;
64
- entry = nextEntry;
65
- entryCacheRef.current.set(cacheKey, nextEntry);
66
- } else {
67
- entry.latestRHFRef = ref;
68
- }
69
- const result = {
70
- ...registerReturn,
71
- ref: entry.stableRef
72
- };
73
- chunkDTC7JTZP_cjs.setUnmaskedValue(result, () => chunkDTC7JTZP_cjs.getUnmaskedValue(entry?.element ?? null));
74
- chunkDTC7JTZP_cjs.setPrevRef(result, ref);
75
- return result;
76
- };
77
- }, [registerFn]);
78
- }
79
-
80
- // src/api/withTanStackFormMask.ts
81
- var refCache = /* @__PURE__ */ new WeakMap();
82
- function withTanStackFormMask(inputProps, mask, options) {
83
- const { ref } = inputProps;
84
- if (!ref) {
85
- let currentElement = null;
86
- const result2 = {
87
- ...inputProps,
88
- ref: ((input) => {
89
- currentElement = input;
90
- if (input) chunkDTC7JTZP_cjs.applyMaskToElement(input, mask, options);
91
- })
92
- };
93
- chunkDTC7JTZP_cjs.setUnmaskedValue(result2, () => chunkDTC7JTZP_cjs.getUnmaskedValue(currentElement));
94
- chunkDTC7JTZP_cjs.setPrevRef(result2, ref);
95
- return result2;
96
- }
97
- if (!refCache.has(ref)) {
98
- refCache.set(ref, /* @__PURE__ */ new Map());
99
- }
100
- const maskCache = refCache.get(ref);
101
- const cacheKey = chunkDTC7JTZP_cjs.makeMaskCacheKey(inputProps.name ?? "", mask);
102
- if (!maskCache?.has(cacheKey)) {
103
- const maskedRef2 = ((input) => {
104
- maskedRef2.currentElement = input;
105
- if (input) chunkDTC7JTZP_cjs.applyMaskToElement(input, mask, options);
106
- ref(input);
107
- });
108
- maskCache?.set(cacheKey, maskedRef2);
109
- }
110
- const maskedRef = maskCache?.get(cacheKey);
111
- const result = {
112
- ...inputProps,
113
- ref: maskedRef
114
- };
115
- chunkDTC7JTZP_cjs.setUnmaskedValue(result, () => chunkDTC7JTZP_cjs.getUnmaskedValue(maskedRef?.currentElement ?? null));
116
- chunkDTC7JTZP_cjs.setPrevRef(result, ref);
117
- return result;
118
- }
119
-
120
- // src/api/useTanStackFormMask.ts
121
- function useTanStackFormMask() {
122
- return react.useMemo(
123
- () => (mask, inputProps, options) => withTanStackFormMask(inputProps, mask, options),
124
- []
125
- );
126
- }
127
-
128
- // src/api/withHookFormMask.ts
129
- var refCache2 = /* @__PURE__ */ new WeakMap();
130
- function withHookFormMask(register, mask, options) {
131
- const { ref } = register;
132
- if (!ref) {
133
- const result2 = {
134
- ...register,
135
- ref: null
136
- };
137
- chunkDTC7JTZP_cjs.setUnmaskedValue(result2, () => "");
138
- chunkDTC7JTZP_cjs.setPrevRef(result2, ref);
139
- return result2;
140
- }
141
- if (!refCache2.has(ref)) {
142
- refCache2.set(ref, /* @__PURE__ */ new Map());
143
- }
144
- const maskCache = refCache2.get(ref);
145
- const cacheKey = chunkDTC7JTZP_cjs.makeMaskCacheKey(register.name, mask);
146
- if (!maskCache?.has(cacheKey)) {
147
- const maskedRef2 = ((input) => {
148
- maskedRef2.currentElement = input;
149
- if (input) chunkDTC7JTZP_cjs.applyMaskToElement(input, mask, options);
150
- return ref(input);
151
- });
152
- maskCache?.set(cacheKey, maskedRef2);
153
- }
154
- const maskedRef = maskCache?.get(cacheKey);
155
- const result = {
156
- ...register,
157
- ref: maskedRef
158
- };
159
- chunkDTC7JTZP_cjs.setUnmaskedValue(result, () => chunkDTC7JTZP_cjs.getUnmaskedValue(maskedRef?.currentElement ?? null));
160
- chunkDTC7JTZP_cjs.setPrevRef(result, ref);
161
- return result;
162
- }
163
-
164
- Object.defineProperty(exports, "withMask", {
165
- enumerable: true,
166
- get: function () { return chunkDTC7JTZP_cjs.withMask; }
167
- });
168
- exports.useHookFormMask = useHookFormMask;
169
- exports.useMaskInput = useMaskInput;
170
- exports.useTanStackFormMask = useTanStackFormMask;
171
- exports.withHookFormMask = withHookFormMask;
172
- exports.withTanStackFormMask = withTanStackFormMask;
173
- //# sourceMappingURL=index.cjs.map
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./withMask-VWeBqi_u.cjs");let t=require("react");function n(n){let{mask:r,register:i,options:a}=n,o=(0,t.useRef)(null),s=(0,t.useRef)(r),c=(0,t.useRef)(a),l=(0,t.useCallback)(()=>e.r(o.current),[]),u=(0,t.useCallback)(t=>{if(!t){o.current=null;return}o.current=e.l(t),e.t(s.current,c.current)(o.current)},[]);return(0,t.useEffect)(()=>{e.s||!o.current||!i||i(o.current)},[i]),e.s?e.o((()=>{}),()=>``):e.o(u,l)}function r(n){let r=(0,t.useRef)(new Map);return(0,t.useLayoutEffect)(()=>{r.current.forEach(e=>{let t=e;!t.element||!t.latestRHFRef||t.latestRHFRef!==t.syncedRHFRef&&(t.latestRHFRef(t.element),t.syncedRHFRef=t.latestRHFRef)})}),(0,t.useMemo)(()=>(r.current=new Map,(t,i,a)=>{if(!n)throw Error(`registerFn is required`);let o=n(t,a),{ref:s}=o,c=e.i(t,i),l=r.current.get(c);if(l)l.latestRHFRef=s;else{let t={element:null,latestRHFRef:s,syncedRHFRef:void 0,stableRef:null},n=n=>(t.element=n,n&&e.n(n,i,a),n);t.stableRef=t.latestRHFRef?e.c(n,e=>t.latestRHFRef?.(e)):n,l=t,r.current.set(c,t)}let u={...o,ref:l.stableRef};return e.o(u,()=>e.r(l?.element??null)),e.a(u,s),u}),[n])}const i=new WeakMap;function a(t,n,r){let{ref:a}=t;if(!a){let i=null,o={...t,ref:(t=>{i=t,t&&e.n(t,n,r)})};return e.o(o,()=>e.r(i)),e.a(o,a),o}i.has(a)||i.set(a,new Map);let o=i.get(a),s=e.i(t.name??``,n);if(!o?.has(s)){let t=(i=>{t.currentElement=i,i&&e.n(i,n,r),a(i)});o?.set(s,t)}let c=o?.get(s),l={...t,ref:c};return e.o(l,()=>e.r(c?.currentElement??null)),e.a(l,a),l}function o(){return(0,t.useMemo)(()=>(e,t,n)=>a(t,e,n),[])}const s=new WeakMap;function c(t,n,r){let{ref:i}=t;if(!i){let n={...t,ref:null};return e.o(n,()=>``),e.a(n,i),n}s.has(i)||s.set(i,new Map);let a=s.get(i),o=e.i(t.name,n);if(!a?.has(o)){let t=(a=>(t.currentElement=a,a&&e.n(a,n,r),i(a)));a?.set(o,t)}let c=a?.get(o),l={...t,ref:c};return e.o(l,()=>e.r(c?.currentElement??null)),e.a(l,i),l}exports.useHookFormMask=r,exports.useMaskInput=n,exports.useTanStackFormMask=o,exports.withHookFormMask=c,exports.withMask=e.t,exports.withTanStackFormMask=a;
174
2
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/api/useMaskInput.ts","../src/api/useHookFormMask.ts","../src/api/withTanStackFormMask.ts","../src/api/useTanStackFormMask.ts","../src/api/withHookFormMask.ts"],"names":["useRef","useCallback","getUnmaskedValue","resolveInputRef","withMask","useEffect","isServer_default","setUnmaskedValue","useLayoutEffect","useMemo","makeMaskCacheKey","applyMaskToElement","flow","setPrevRef","result","maskedRef","refCache"],"mappings":"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","file":"index.cjs","sourcesContent":["import {\n useCallback, useEffect, useRef,\n} from 'react';\n\nimport { resolveInputRef } from '../core';\nimport withMask from './withMask';\nimport isServer from '../utils/isServer';\nimport { getUnmaskedValue, setUnmaskedValue } from '../utils';\n\nimport type {\n Input, Mask, Options, UseMaskInputReturn,\n} from '../types';\n\ninterface UseMaskInputOptions {\n mask: Mask;\n register?: (element: HTMLElement) => void;\n options?: Options;\n}\n\n/**\n * React hook for applying input masks to form elements.\n * Works with Ant Design and other wrapped components too.\n *\n * @param props - Configuration object\n * @param props.mask - The mask pattern to apply\n * @param props.register - Optional callback that receives the element\n * @param props.options - Optional mask configuration options\n * @returns A ref callback function to attach to the input element\n */\nexport default function useMaskInput(props: UseMaskInputOptions): UseMaskInputReturn {\n const { mask, register, options } = props;\n const ref = useRef<HTMLInputElement | null>(null);\n const maskRef = useRef(mask);\n const optionsRef = useRef(options);\n const unmaskedValue = useCallback(() => getUnmaskedValue(ref.current), []);\n\n const refCallback = useCallback((input: Input | null): void => {\n if (!input) {\n ref.current = null;\n return;\n }\n\n ref.current = resolveInputRef(input);\n withMask(maskRef.current, optionsRef.current)(ref.current);\n }, []);\n\n useEffect(() => {\n if (isServer || !ref.current || !register) return;\n register(ref.current);\n }, [register]);\n\n if (isServer) {\n const noop = (() => {\n // server doesn't have dom, so just do nothing\n }) as unknown as UseMaskInputReturn;\n\n return setUnmaskedValue(noop, () => '');\n }\n\n return setUnmaskedValue(refCallback, unmaskedValue);\n}\n","import { useLayoutEffect, useMemo, useRef } from 'react';\n\nimport { applyMaskToElement } from '../core';\nimport {\n flow, getUnmaskedValue, makeMaskCacheKey, setPrevRef, setUnmaskedValue,\n} from '../utils';\n\nimport type { RefCallback } from 'react';\nimport type {\n FieldValues, Path,\n RegisterOptions,\n UseFormRegister,\n} from 'react-hook-form';\n\nimport type { Mask, Options, UseHookFormMaskReturn } from '../types';\n\ninterface CacheEntry {\n stableRef: RefCallback<HTMLElement | null>;\n element: HTMLElement | null;\n latestRHFRef?: RefCallback<HTMLElement | null>;\n syncedRHFRef?: RefCallback<HTMLElement | null>;\n}\n\n/**\n * Creates a masked version of React Hook Form's register function.\n * Takes react-hook-form's register and adds automatic masking. Like an upgrade.\n *\n * @template T - The form data type\n * @template D - The register options type\n * @param registerFn - The register function from useForm hook\n * @returns A function that registers a field with mask support\n */\nexport default function useHookFormMask<\n T extends FieldValues, D extends RegisterOptions,\n>(registerFn: UseFormRegister<T>): ((fieldName: Path<T>, mask: Mask, options?: (\n D & Options) | Options | D) => UseHookFormMaskReturn<T>) {\n const entryCacheRef = useRef(new Map<string, CacheEntry>());\n\n useLayoutEffect(() => {\n entryCacheRef.current.forEach((entry) => {\n const currentEntry = entry;\n if (!currentEntry.element || !currentEntry.latestRHFRef) return;\n\n // After reset(), RHF gives us a new ref callback. React won't call it\n // because our outward ref identity stays stable, so we replay it here.\n if (currentEntry.latestRHFRef !== currentEntry.syncedRHFRef) {\n currentEntry.latestRHFRef(currentEntry.element);\n currentEntry.syncedRHFRef = currentEntry.latestRHFRef;\n }\n });\n });\n\n return useMemo(() => {\n // registerFn identity changed, so drop cached refs bound to the previous\n // register lifecycle.\n entryCacheRef.current = new Map<string, CacheEntry>();\n\n return (fieldName: Path<T>, mask: Mask, options?: (\n D & Options) | Options | D): UseHookFormMaskReturn<T> => {\n if (!registerFn) throw new Error('registerFn is required');\n\n const registerReturn = registerFn(fieldName, options as Options);\n const { ref } = registerReturn as UseHookFormMaskReturn<T>;\n\n const cacheKey = makeMaskCacheKey(fieldName, mask);\n\n let entry = entryCacheRef.current.get(cacheKey);\n if (!entry) {\n const nextEntry: CacheEntry = {\n element: null,\n latestRHFRef: ref,\n syncedRHFRef: undefined,\n stableRef: null as unknown as RefCallback<HTMLElement | null>,\n };\n\n const applyMaskToRef = (_ref: HTMLElement | null) => {\n nextEntry.element = _ref;\n if (_ref) applyMaskToElement(_ref, mask, options as Options);\n return _ref;\n };\n\n nextEntry.stableRef = (\n nextEntry.latestRHFRef\n ? flow(applyMaskToRef, (_ref: HTMLElement | null) => nextEntry.latestRHFRef?.(_ref))\n : applyMaskToRef\n ) as RefCallback<HTMLElement | null>;\n\n entry = nextEntry;\n entryCacheRef.current.set(cacheKey, nextEntry);\n } else {\n entry.latestRHFRef = ref;\n }\n\n const result = {\n ...registerReturn,\n ref: entry.stableRef,\n } as UseHookFormMaskReturn<T>;\n setUnmaskedValue(result, () => getUnmaskedValue(entry?.element ?? null));\n\n setPrevRef(result, ref);\n\n return result;\n };\n }, [registerFn]);\n}\n","import { applyMaskToElement } from '../core';\nimport {\n getUnmaskedValue, makeMaskCacheKey, setPrevRef, setUnmaskedValue,\n} from '../utils';\n\nimport type { RefCallback } from 'react';\n\nimport type {\n Mask, Options, TanStackFormInputProps, UseTanStackFormMaskReturn,\n} from '../types';\n\ntype MaskedRefCallback = RefCallback<HTMLElement | null> & {\n currentElement?: HTMLElement | null;\n};\n\nconst refCache = new WeakMap<\n RefCallback<HTMLElement | null>,\n Map<string, RefCallback<HTMLElement | null>>\n>();\n\n/**\n * Enhances TanStack Form-compatible input props with mask support.\n * Works with objects returned by field.getInputProps().\n */\nexport default function withTanStackFormMask<T extends TanStackFormInputProps>(\n inputProps: T,\n mask: Mask,\n options?: Options,\n): UseTanStackFormMaskReturn<T> {\n const { ref } = inputProps;\n\n if (!ref) {\n let currentElement: HTMLElement | null = null;\n const result = {\n ...inputProps,\n ref: ((input: HTMLElement | null) => {\n currentElement = input;\n if (input) applyMaskToElement(input, mask, options);\n }) as RefCallback<HTMLElement | null>,\n } as unknown as UseTanStackFormMaskReturn<T>;\n setUnmaskedValue(result, () => getUnmaskedValue(currentElement));\n\n setPrevRef(result, ref);\n return result;\n }\n\n if (!refCache.has(ref)) {\n refCache.set(ref, new Map());\n }\n\n const maskCache = refCache.get(ref);\n const cacheKey = makeMaskCacheKey(inputProps.name ?? '', mask);\n\n if (!maskCache?.has(cacheKey)) {\n const maskedRef = ((input: HTMLElement | null) => {\n maskedRef.currentElement = input;\n if (input) applyMaskToElement(input, mask, options);\n ref(input);\n }) as MaskedRefCallback;\n\n maskCache?.set(cacheKey, maskedRef);\n }\n\n const maskedRef = maskCache?.get(cacheKey) as MaskedRefCallback | undefined;\n const result = {\n ...inputProps,\n ref: maskedRef,\n } as unknown as UseTanStackFormMaskReturn<T>;\n setUnmaskedValue(result, () => getUnmaskedValue(maskedRef?.currentElement ?? null));\n\n setPrevRef(result, ref);\n return result;\n}\n","import { useMemo } from 'react';\n\nimport withTanStackFormMask from './withTanStackFormMask';\n\nimport type { Mask, Options, TanStackFormInputProps, UseTanStackFormMaskReturn } from '../types';\n\n/**\n * Creates a helper to mask TanStack Form-compatible input props.\n * Designed for objects returned by field.getInputProps().\n */\nexport default function useTanStackFormMask(): <T extends TanStackFormInputProps>(\n mask: Mask,\n inputProps: T,\n options?: Options,\n) => UseTanStackFormMaskReturn<T> {\n return useMemo(\n () => <T extends TanStackFormInputProps>(\n mask: Mask,\n inputProps: T,\n options?: Options,\n ): UseTanStackFormMaskReturn<T> => withTanStackFormMask(inputProps, mask, options),\n [],\n );\n}\n","import { applyMaskToElement } from '../core';\nimport {\n getUnmaskedValue, makeMaskCacheKey, setPrevRef, setUnmaskedValue,\n} from '../utils';\n\nimport type { RefCallback } from 'react';\nimport type { FieldValues } from 'react-hook-form';\n\nimport type {\n Mask, Options, UseFormRegisterReturn, UseHookFormMaskReturn,\n} from '../types';\n\ntype MaskedRefCallback = RefCallback<HTMLElement | null> & {\n currentElement?: HTMLElement | null;\n};\n\nconst refCache = new WeakMap<\n RefCallback<HTMLElement | null>,\n Map<string, RefCallback<HTMLElement | null>>\n>();\n\n/**\n * Enhances a React Hook Form register return object with mask support.\n * Takes an already registered field and adds mask to it.\n * Useful when you registered the field before.\n *\n * @param register - The register return object from React Hook Form\n * @param mask - The mask pattern to apply\n * @param options - Optional mask configuration options\n * @returns A new register return object with mask applied\n */\nexport default function withHookFormMask(\n register: UseFormRegisterReturn,\n mask: Mask,\n options?: Options,\n): UseHookFormMaskReturn<FieldValues> {\n const { ref } = register as UseHookFormMaskReturn<FieldValues>;\n\n // null ref — nothing to cache, return as-is.\n if (!ref) {\n const result = {\n ...register,\n ref: null as unknown as RefCallback<HTMLElement | null>,\n } as UseHookFormMaskReturn<FieldValues>;\n setUnmaskedValue(result, () => '');\n setPrevRef(result, ref);\n return result;\n }\n\n if (!refCache.has(ref)) {\n refCache.set(ref, new Map());\n }\n const maskCache = refCache.get(ref);\n const cacheKey = makeMaskCacheKey(register.name, mask);\n\n if (!maskCache?.has(cacheKey)) {\n const maskedRef = ((input: HTMLElement | null) => {\n maskedRef.currentElement = input;\n if (input) applyMaskToElement(input, mask, options);\n return ref(input);\n }) as MaskedRefCallback;\n\n maskCache?.set(cacheKey, maskedRef);\n }\n\n const maskedRef = maskCache?.get(cacheKey) as MaskedRefCallback | undefined;\n const result = {\n ...register,\n ref: maskedRef,\n } as UseHookFormMaskReturn<FieldValues>;\n setUnmaskedValue(result, () => getUnmaskedValue(maskedRef?.currentElement ?? null));\n\n setPrevRef(result, ref);\n\n return result;\n}\n"]}
1
+ {"version":3,"file":"index.cjs","names":["getUnmaskedValue","resolveInputRef","isServer","setUnmaskedValue","makeMaskCacheKey","flow","getUnmaskedValue","refCache","getUnmaskedValue","makeMaskCacheKey","makeMaskCacheKey","getUnmaskedValue"],"sources":["../src/api/useMaskInput.ts","../src/api/useHookFormMask.ts","../src/api/withTanStackFormMask.ts","../src/api/useTanStackFormMask.ts","../src/api/withHookFormMask.ts"],"sourcesContent":["import {\n useCallback, useEffect, useRef,\n} from 'react';\n\nimport { resolveInputRef } from '../core';\nimport withMask from './withMask';\nimport isServer from '../utils/isServer';\nimport { getUnmaskedValue, setUnmaskedValue } from '../utils';\n\nimport type {\n Input, Mask, Options, UseMaskInputReturn,\n} from '../types';\n\ninterface UseMaskInputOptions {\n mask: Mask;\n register?: (element: HTMLElement) => void;\n options?: Options;\n}\n\n/**\n * React hook for applying input masks to form elements.\n * Works with Ant Design and other wrapped components too.\n *\n * @param props - Configuration object\n * @param props.mask - The mask pattern to apply\n * @param props.register - Optional callback that receives the element\n * @param props.options - Optional mask configuration options\n * @returns A ref callback function to attach to the input element\n */\nexport default function useMaskInput(props: UseMaskInputOptions): UseMaskInputReturn {\n const { mask, register, options } = props;\n const ref = useRef<HTMLInputElement | null>(null);\n const maskRef = useRef(mask);\n const optionsRef = useRef(options);\n const unmaskedValue = useCallback(() => getUnmaskedValue(ref.current), []);\n\n const refCallback = useCallback((input: Input | null): void => {\n if (!input) {\n ref.current = null;\n return;\n }\n\n ref.current = resolveInputRef(input);\n withMask(maskRef.current, optionsRef.current)(ref.current);\n }, []);\n\n useEffect(() => {\n if (isServer || !ref.current || !register) return;\n register(ref.current);\n }, [register]);\n\n if (isServer) {\n const noop = (() => {\n // server doesn't have dom, so just do nothing\n }) as unknown as UseMaskInputReturn;\n\n return setUnmaskedValue(noop, () => '');\n }\n\n return setUnmaskedValue(refCallback, unmaskedValue);\n}\n","import { useLayoutEffect, useMemo, useRef } from 'react';\n\nimport { applyMaskToElement } from '../core';\nimport {\n flow, getUnmaskedValue, makeMaskCacheKey, setPrevRef, setUnmaskedValue,\n} from '../utils';\n\nimport type { RefCallback } from 'react';\nimport type {\n FieldValues, Path,\n RegisterOptions,\n UseFormRegister,\n} from 'react-hook-form';\n\nimport type { Mask, Options, UseHookFormMaskReturn } from '../types';\n\ninterface CacheEntry {\n stableRef: RefCallback<HTMLElement | null>;\n element: HTMLElement | null;\n latestRHFRef?: RefCallback<HTMLElement | null>;\n syncedRHFRef?: RefCallback<HTMLElement | null>;\n}\n\n/**\n * Creates a masked version of React Hook Form's register function.\n * Takes react-hook-form's register and adds automatic masking. Like an upgrade.\n *\n * @template T - The form data type\n * @template D - The register options type\n * @param registerFn - The register function from useForm hook\n * @returns A function that registers a field with mask support\n */\nexport default function useHookFormMask<\n T extends FieldValues, D extends RegisterOptions,\n>(registerFn: UseFormRegister<T>): ((fieldName: Path<T>, mask: Mask, options?: (\n D & Options) | Options | D) => UseHookFormMaskReturn<T>) {\n const entryCacheRef = useRef(new Map<string, CacheEntry>());\n\n useLayoutEffect(() => {\n entryCacheRef.current.forEach((entry) => {\n const currentEntry = entry;\n if (!currentEntry.element || !currentEntry.latestRHFRef) return;\n\n // After reset(), RHF gives us a new ref callback. React won't call it\n // because our outward ref identity stays stable, so we replay it here.\n if (currentEntry.latestRHFRef !== currentEntry.syncedRHFRef) {\n currentEntry.latestRHFRef(currentEntry.element);\n currentEntry.syncedRHFRef = currentEntry.latestRHFRef;\n }\n });\n });\n\n return useMemo(() => {\n // registerFn identity changed, so drop cached refs bound to the previous\n // register lifecycle.\n entryCacheRef.current = new Map<string, CacheEntry>();\n\n return (fieldName: Path<T>, mask: Mask, options?: (\n D & Options) | Options | D): UseHookFormMaskReturn<T> => {\n if (!registerFn) throw new Error('registerFn is required');\n\n const registerReturn = registerFn(fieldName, options as Options);\n const { ref } = registerReturn as UseHookFormMaskReturn<T>;\n\n const cacheKey = makeMaskCacheKey(fieldName, mask);\n\n let entry = entryCacheRef.current.get(cacheKey);\n if (!entry) {\n const nextEntry: CacheEntry = {\n element: null,\n latestRHFRef: ref,\n syncedRHFRef: undefined,\n stableRef: null as unknown as RefCallback<HTMLElement | null>,\n };\n\n const applyMaskToRef = (_ref: HTMLElement | null) => {\n nextEntry.element = _ref;\n if (_ref) applyMaskToElement(_ref, mask, options as Options);\n return _ref;\n };\n\n nextEntry.stableRef = (\n nextEntry.latestRHFRef\n ? flow(applyMaskToRef, (_ref: HTMLElement | null) => nextEntry.latestRHFRef?.(_ref))\n : applyMaskToRef\n ) as RefCallback<HTMLElement | null>;\n\n entry = nextEntry;\n entryCacheRef.current.set(cacheKey, nextEntry);\n } else {\n entry.latestRHFRef = ref;\n }\n\n const result = {\n ...registerReturn,\n ref: entry.stableRef,\n } as UseHookFormMaskReturn<T>;\n setUnmaskedValue(result, () => getUnmaskedValue(entry?.element ?? null));\n\n setPrevRef(result, ref);\n\n return result;\n };\n }, [registerFn]);\n}\n","import { applyMaskToElement } from '../core';\nimport {\n getUnmaskedValue, makeMaskCacheKey, setPrevRef, setUnmaskedValue,\n} from '../utils';\n\nimport type { RefCallback } from 'react';\n\nimport type {\n Mask, Options, TanStackFormInputProps, UseTanStackFormMaskReturn,\n} from '../types';\n\ntype MaskedRefCallback = RefCallback<HTMLElement | null> & {\n currentElement?: HTMLElement | null;\n};\n\nconst refCache = new WeakMap<\n RefCallback<HTMLElement | null>,\n Map<string, RefCallback<HTMLElement | null>>\n>();\n\n/**\n * Enhances TanStack Form-compatible input props with mask support.\n * Works with objects returned by field.getInputProps().\n */\nexport default function withTanStackFormMask<T extends TanStackFormInputProps>(\n inputProps: T,\n mask: Mask,\n options?: Options,\n): UseTanStackFormMaskReturn<T> {\n const { ref } = inputProps;\n\n if (!ref) {\n let currentElement: HTMLElement | null = null;\n const result = {\n ...inputProps,\n ref: ((input: HTMLElement | null) => {\n currentElement = input;\n if (input) applyMaskToElement(input, mask, options);\n }) as RefCallback<HTMLElement | null>,\n } as unknown as UseTanStackFormMaskReturn<T>;\n setUnmaskedValue(result, () => getUnmaskedValue(currentElement));\n\n setPrevRef(result, ref);\n return result;\n }\n\n if (!refCache.has(ref)) {\n refCache.set(ref, new Map());\n }\n\n const maskCache = refCache.get(ref);\n const cacheKey = makeMaskCacheKey(inputProps.name ?? '', mask);\n\n if (!maskCache?.has(cacheKey)) {\n const maskedRef = ((input: HTMLElement | null) => {\n maskedRef.currentElement = input;\n if (input) applyMaskToElement(input, mask, options);\n ref(input);\n }) as MaskedRefCallback;\n\n maskCache?.set(cacheKey, maskedRef);\n }\n\n const maskedRef = maskCache?.get(cacheKey) as MaskedRefCallback | undefined;\n const result = {\n ...inputProps,\n ref: maskedRef,\n } as unknown as UseTanStackFormMaskReturn<T>;\n setUnmaskedValue(result, () => getUnmaskedValue(maskedRef?.currentElement ?? null));\n\n setPrevRef(result, ref);\n return result;\n}\n","import { useMemo } from 'react';\n\nimport withTanStackFormMask from './withTanStackFormMask';\n\nimport type { Mask, Options, TanStackFormInputProps, UseTanStackFormMaskReturn } from '../types';\n\n/**\n * Creates a helper to mask TanStack Form-compatible input props.\n * Designed for objects returned by field.getInputProps().\n */\nexport default function useTanStackFormMask(): <T extends TanStackFormInputProps>(\n mask: Mask,\n inputProps: T,\n options?: Options,\n) => UseTanStackFormMaskReturn<T> {\n return useMemo(\n () => <T extends TanStackFormInputProps>(\n mask: Mask,\n inputProps: T,\n options?: Options,\n ): UseTanStackFormMaskReturn<T> => withTanStackFormMask(inputProps, mask, options),\n [],\n );\n}\n","import { applyMaskToElement } from '../core';\nimport {\n getUnmaskedValue, makeMaskCacheKey, setPrevRef, setUnmaskedValue,\n} from '../utils';\n\nimport type { RefCallback } from 'react';\nimport type { FieldValues } from 'react-hook-form';\n\nimport type {\n Mask, Options, UseFormRegisterReturn, UseHookFormMaskReturn,\n} from '../types';\n\ntype MaskedRefCallback = RefCallback<HTMLElement | null> & {\n currentElement?: HTMLElement | null;\n};\n\nconst refCache = new WeakMap<\n RefCallback<HTMLElement | null>,\n Map<string, RefCallback<HTMLElement | null>>\n>();\n\n/**\n * Enhances a React Hook Form register return object with mask support.\n * Takes an already registered field and adds mask to it.\n * Useful when you registered the field before.\n *\n * @param register - The register return object from React Hook Form\n * @param mask - The mask pattern to apply\n * @param options - Optional mask configuration options\n * @returns A new register return object with mask applied\n */\nexport default function withHookFormMask(\n register: UseFormRegisterReturn,\n mask: Mask,\n options?: Options,\n): UseHookFormMaskReturn<FieldValues> {\n const { ref } = register as UseHookFormMaskReturn<FieldValues>;\n\n // null ref — nothing to cache, return as-is.\n if (!ref) {\n const result = {\n ...register,\n ref: null as unknown as RefCallback<HTMLElement | null>,\n } as UseHookFormMaskReturn<FieldValues>;\n setUnmaskedValue(result, () => '');\n setPrevRef(result, ref);\n return result;\n }\n\n if (!refCache.has(ref)) {\n refCache.set(ref, new Map());\n }\n const maskCache = refCache.get(ref);\n const cacheKey = makeMaskCacheKey(register.name, mask);\n\n if (!maskCache?.has(cacheKey)) {\n const maskedRef = ((input: HTMLElement | null) => {\n maskedRef.currentElement = input;\n if (input) applyMaskToElement(input, mask, options);\n return ref(input);\n }) as MaskedRefCallback;\n\n maskCache?.set(cacheKey, maskedRef);\n }\n\n const maskedRef = maskCache?.get(cacheKey) as MaskedRefCallback | undefined;\n const result = {\n ...register,\n ref: maskedRef,\n } as UseHookFormMaskReturn<FieldValues>;\n setUnmaskedValue(result, () => getUnmaskedValue(maskedRef?.currentElement ?? null));\n\n setPrevRef(result, ref);\n\n return result;\n}\n"],"mappings":"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"}
package/dist/index.d.cts CHANGED
@@ -1,13 +1,10 @@
1
- import { M as Mask, O as Options, U as UseMaskInputReturn, a as UseHookFormMaskReturn, T as TanStackFormInputProps, b as UseTanStackFormMaskReturn } from './index-D8KkaDbQ.cjs';
2
- export { I as Input, c as UnmaskedValueApi } from './index-D8KkaDbQ.cjs';
3
- import { FieldValues, RegisterOptions, UseFormRegister, Path, UseFormRegisterReturn } from 'react-hook-form';
4
- export { UseFormRegister, UseFormRegisterReturn } from 'react-hook-form';
5
- import 'react';
1
+ import { a as UnmaskedValueApi, c as UseTanStackFormMaskReturn, d as UseFormRegister, f as UseFormRegisterReturn, i as TanStackFormInputProps, l as RegisterOptions, n as Mask, o as UseHookFormMaskReturn, p as Path, r as Options, s as UseMaskInputReturn, t as Input, u as FieldValues } from "./index-BmKzoe0X.cjs";
6
2
 
3
+ //#region src/api/useMaskInput.d.ts
7
4
  interface UseMaskInputOptions {
8
- mask: Mask;
9
- register?: (element: HTMLElement) => void;
10
- options?: Options;
5
+ mask: Mask;
6
+ register?: (element: HTMLElement) => void;
7
+ options?: Options;
11
8
  }
12
9
  /**
13
10
  * React hook for applying input masks to form elements.
@@ -20,7 +17,8 @@ interface UseMaskInputOptions {
20
17
  * @returns A ref callback function to attach to the input element
21
18
  */
22
19
  declare function useMaskInput(props: UseMaskInputOptions): UseMaskInputReturn;
23
-
20
+ //#endregion
21
+ //#region src/api/useHookFormMask.d.ts
24
22
  /**
25
23
  * Creates a masked version of React Hook Form's register function.
26
24
  * Takes react-hook-form's register and adds automatic masking. Like an upgrade.
@@ -31,13 +29,15 @@ declare function useMaskInput(props: UseMaskInputOptions): UseMaskInputReturn;
31
29
  * @returns A function that registers a field with mask support
32
30
  */
33
31
  declare function useHookFormMask<T extends FieldValues, D extends RegisterOptions>(registerFn: UseFormRegister<T>): ((fieldName: Path<T>, mask: Mask, options?: (D & Options) | Options | D) => UseHookFormMaskReturn<T>);
34
-
32
+ //#endregion
33
+ //#region src/api/useTanStackFormMask.d.ts
35
34
  /**
36
35
  * Creates a helper to mask TanStack Form-compatible input props.
37
36
  * Designed for objects returned by field.getInputProps().
38
37
  */
39
38
  declare function useTanStackFormMask(): <T extends TanStackFormInputProps>(mask: Mask, inputProps: T, options?: Options) => UseTanStackFormMaskReturn<T>;
40
-
39
+ //#endregion
40
+ //#region src/api/withMask.d.ts
41
41
  /**
42
42
  * Higher-order function that creates a ref callback for applying input masks.
43
43
  * Simple function to apply mask via ref. No hooks, no drama.
@@ -47,7 +47,8 @@ declare function useTanStackFormMask(): <T extends TanStackFormInputProps>(mask:
47
47
  * @returns A ref callback function that applies the mask
48
48
  */
49
49
  declare function withMask(mask: Mask, options?: Options): UseMaskInputReturn;
50
-
50
+ //#endregion
51
+ //#region src/api/withHookFormMask.d.ts
51
52
  /**
52
53
  * Enhances a React Hook Form register return object with mask support.
53
54
  * Takes an already registered field and adds mask to it.
@@ -59,11 +60,13 @@ declare function withMask(mask: Mask, options?: Options): UseMaskInputReturn;
59
60
  * @returns A new register return object with mask applied
60
61
  */
61
62
  declare function withHookFormMask(register: UseFormRegisterReturn, mask: Mask, options?: Options): UseHookFormMaskReturn<FieldValues>;
62
-
63
+ //#endregion
64
+ //#region src/api/withTanStackFormMask.d.ts
63
65
  /**
64
66
  * Enhances TanStack Form-compatible input props with mask support.
65
67
  * Works with objects returned by field.getInputProps().
66
68
  */
67
69
  declare function withTanStackFormMask<T extends TanStackFormInputProps>(inputProps: T, mask: Mask, options?: Options): UseTanStackFormMaskReturn<T>;
68
-
69
- export { Mask, Options, TanStackFormInputProps, UseMaskInputReturn, UseTanStackFormMaskReturn, useHookFormMask, useMaskInput, useTanStackFormMask, withHookFormMask, withMask, withTanStackFormMask };
70
+ //#endregion
71
+ export { type Input, type Mask, type Options, type TanStackFormInputProps, type UnmaskedValueApi, type UseFormRegister, type UseFormRegisterReturn, type UseMaskInputReturn, type UseTanStackFormMaskReturn, useHookFormMask, useMaskInput, useTanStackFormMask, withHookFormMask, withMask, withTanStackFormMask };
72
+ //# sourceMappingURL=index.d.cts.map
@@ -1,13 +1,10 @@
1
- import { M as Mask, O as Options, U as UseMaskInputReturn, a as UseHookFormMaskReturn, T as TanStackFormInputProps, b as UseTanStackFormMaskReturn } from './index-D8KkaDbQ.js';
2
- export { I as Input, c as UnmaskedValueApi } from './index-D8KkaDbQ.js';
3
- import { FieldValues, RegisterOptions, UseFormRegister, Path, UseFormRegisterReturn } from 'react-hook-form';
4
- export { UseFormRegister, UseFormRegisterReturn } from 'react-hook-form';
5
- import 'react';
1
+ import { a as UnmaskedValueApi, c as UseTanStackFormMaskReturn, d as UseFormRegister, f as UseFormRegisterReturn, i as TanStackFormInputProps, l as RegisterOptions, n as Mask, o as UseHookFormMaskReturn, p as Path, r as Options, s as UseMaskInputReturn, t as Input, u as FieldValues } from "./index-BmKzoe0X.mjs";
6
2
 
3
+ //#region src/api/useMaskInput.d.ts
7
4
  interface UseMaskInputOptions {
8
- mask: Mask;
9
- register?: (element: HTMLElement) => void;
10
- options?: Options;
5
+ mask: Mask;
6
+ register?: (element: HTMLElement) => void;
7
+ options?: Options;
11
8
  }
12
9
  /**
13
10
  * React hook for applying input masks to form elements.
@@ -20,7 +17,8 @@ interface UseMaskInputOptions {
20
17
  * @returns A ref callback function to attach to the input element
21
18
  */
22
19
  declare function useMaskInput(props: UseMaskInputOptions): UseMaskInputReturn;
23
-
20
+ //#endregion
21
+ //#region src/api/useHookFormMask.d.ts
24
22
  /**
25
23
  * Creates a masked version of React Hook Form's register function.
26
24
  * Takes react-hook-form's register and adds automatic masking. Like an upgrade.
@@ -31,13 +29,15 @@ declare function useMaskInput(props: UseMaskInputOptions): UseMaskInputReturn;
31
29
  * @returns A function that registers a field with mask support
32
30
  */
33
31
  declare function useHookFormMask<T extends FieldValues, D extends RegisterOptions>(registerFn: UseFormRegister<T>): ((fieldName: Path<T>, mask: Mask, options?: (D & Options) | Options | D) => UseHookFormMaskReturn<T>);
34
-
32
+ //#endregion
33
+ //#region src/api/useTanStackFormMask.d.ts
35
34
  /**
36
35
  * Creates a helper to mask TanStack Form-compatible input props.
37
36
  * Designed for objects returned by field.getInputProps().
38
37
  */
39
38
  declare function useTanStackFormMask(): <T extends TanStackFormInputProps>(mask: Mask, inputProps: T, options?: Options) => UseTanStackFormMaskReturn<T>;
40
-
39
+ //#endregion
40
+ //#region src/api/withMask.d.ts
41
41
  /**
42
42
  * Higher-order function that creates a ref callback for applying input masks.
43
43
  * Simple function to apply mask via ref. No hooks, no drama.
@@ -47,7 +47,8 @@ declare function useTanStackFormMask(): <T extends TanStackFormInputProps>(mask:
47
47
  * @returns A ref callback function that applies the mask
48
48
  */
49
49
  declare function withMask(mask: Mask, options?: Options): UseMaskInputReturn;
50
-
50
+ //#endregion
51
+ //#region src/api/withHookFormMask.d.ts
51
52
  /**
52
53
  * Enhances a React Hook Form register return object with mask support.
53
54
  * Takes an already registered field and adds mask to it.
@@ -59,11 +60,13 @@ declare function withMask(mask: Mask, options?: Options): UseMaskInputReturn;
59
60
  * @returns A new register return object with mask applied
60
61
  */
61
62
  declare function withHookFormMask(register: UseFormRegisterReturn, mask: Mask, options?: Options): UseHookFormMaskReturn<FieldValues>;
62
-
63
+ //#endregion
64
+ //#region src/api/withTanStackFormMask.d.ts
63
65
  /**
64
66
  * Enhances TanStack Form-compatible input props with mask support.
65
67
  * Works with objects returned by field.getInputProps().
66
68
  */
67
69
  declare function withTanStackFormMask<T extends TanStackFormInputProps>(inputProps: T, mask: Mask, options?: Options): UseTanStackFormMaskReturn<T>;
68
-
69
- export { Mask, Options, TanStackFormInputProps, UseMaskInputReturn, UseTanStackFormMaskReturn, useHookFormMask, useMaskInput, useTanStackFormMask, withHookFormMask, withMask, withTanStackFormMask };
70
+ //#endregion
71
+ export { type Input, type Mask, type Options, type TanStackFormInputProps, type UnmaskedValueApi, type UseFormRegister, type UseFormRegisterReturn, type UseMaskInputReturn, type UseTanStackFormMaskReturn, useHookFormMask, useMaskInput, useTanStackFormMask, withHookFormMask, withMask, withTanStackFormMask };
72
+ //# sourceMappingURL=index.d.mts.map
package/dist/index.mjs ADDED
@@ -0,0 +1,2 @@
1
+ import{a as e,c as t,i as n,l as r,n as i,o as a,r as o,s,t as c}from"./withMask-jrErtLYS.mjs";import{useCallback as l,useEffect as u,useLayoutEffect as d,useMemo as f,useRef as p}from"react";function m(e){let{mask:t,register:n,options:i}=e,d=p(null),f=p(t),m=p(i),h=l(()=>o(d.current),[]),g=l(e=>{if(!e){d.current=null;return}d.current=r(e),c(f.current,m.current)(d.current)},[]);return u(()=>{s||!d.current||!n||n(d.current)},[n]),s?a((()=>{}),()=>``):a(g,h)}function h(r){let s=p(new Map);return d(()=>{s.current.forEach(e=>{let t=e;!t.element||!t.latestRHFRef||t.latestRHFRef!==t.syncedRHFRef&&(t.latestRHFRef(t.element),t.syncedRHFRef=t.latestRHFRef)})}),f(()=>(s.current=new Map,(c,l,u)=>{if(!r)throw Error(`registerFn is required`);let d=r(c,u),{ref:f}=d,p=n(c,l),m=s.current.get(p);if(m)m.latestRHFRef=f;else{let e={element:null,latestRHFRef:f,syncedRHFRef:void 0,stableRef:null},n=t=>(e.element=t,t&&i(t,l,u),t);e.stableRef=e.latestRHFRef?t(n,t=>e.latestRHFRef?.(t)):n,m=e,s.current.set(p,e)}let h={...d,ref:m.stableRef};return a(h,()=>o(m?.element??null)),e(h,f),h}),[r])}const g=new WeakMap;function _(t,r,s){let{ref:c}=t;if(!c){let n=null,l={...t,ref:(e=>{n=e,e&&i(e,r,s)})};return a(l,()=>o(n)),e(l,c),l}g.has(c)||g.set(c,new Map);let l=g.get(c),u=n(t.name??``,r);if(!l?.has(u)){let e=(t=>{e.currentElement=t,t&&i(t,r,s),c(t)});l?.set(u,e)}let d=l?.get(u),f={...t,ref:d};return a(f,()=>o(d?.currentElement??null)),e(f,c),f}function v(){return f(()=>(e,t,n)=>_(t,e,n),[])}const y=new WeakMap;function b(t,r,s){let{ref:c}=t;if(!c){let n={...t,ref:null};return a(n,()=>``),e(n,c),n}y.has(c)||y.set(c,new Map);let l=y.get(c),u=n(t.name,r);if(!l?.has(u)){let e=(t=>(e.currentElement=t,t&&i(t,r,s),c(t)));l?.set(u,e)}let d=l?.get(u),f={...t,ref:d};return a(f,()=>o(d?.currentElement??null)),e(f,c),f}export{h as useHookFormMask,m as useMaskInput,v as useTanStackFormMask,b as withHookFormMask,c as withMask,_ as withTanStackFormMask};
2
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","names":["refCache"],"sources":["../src/api/useMaskInput.ts","../src/api/useHookFormMask.ts","../src/api/withTanStackFormMask.ts","../src/api/useTanStackFormMask.ts","../src/api/withHookFormMask.ts"],"sourcesContent":["import {\n useCallback, useEffect, useRef,\n} from 'react';\n\nimport { resolveInputRef } from '../core';\nimport withMask from './withMask';\nimport isServer from '../utils/isServer';\nimport { getUnmaskedValue, setUnmaskedValue } from '../utils';\n\nimport type {\n Input, Mask, Options, UseMaskInputReturn,\n} from '../types';\n\ninterface UseMaskInputOptions {\n mask: Mask;\n register?: (element: HTMLElement) => void;\n options?: Options;\n}\n\n/**\n * React hook for applying input masks to form elements.\n * Works with Ant Design and other wrapped components too.\n *\n * @param props - Configuration object\n * @param props.mask - The mask pattern to apply\n * @param props.register - Optional callback that receives the element\n * @param props.options - Optional mask configuration options\n * @returns A ref callback function to attach to the input element\n */\nexport default function useMaskInput(props: UseMaskInputOptions): UseMaskInputReturn {\n const { mask, register, options } = props;\n const ref = useRef<HTMLInputElement | null>(null);\n const maskRef = useRef(mask);\n const optionsRef = useRef(options);\n const unmaskedValue = useCallback(() => getUnmaskedValue(ref.current), []);\n\n const refCallback = useCallback((input: Input | null): void => {\n if (!input) {\n ref.current = null;\n return;\n }\n\n ref.current = resolveInputRef(input);\n withMask(maskRef.current, optionsRef.current)(ref.current);\n }, []);\n\n useEffect(() => {\n if (isServer || !ref.current || !register) return;\n register(ref.current);\n }, [register]);\n\n if (isServer) {\n const noop = (() => {\n // server doesn't have dom, so just do nothing\n }) as unknown as UseMaskInputReturn;\n\n return setUnmaskedValue(noop, () => '');\n }\n\n return setUnmaskedValue(refCallback, unmaskedValue);\n}\n","import { useLayoutEffect, useMemo, useRef } from 'react';\n\nimport { applyMaskToElement } from '../core';\nimport {\n flow, getUnmaskedValue, makeMaskCacheKey, setPrevRef, setUnmaskedValue,\n} from '../utils';\n\nimport type { RefCallback } from 'react';\nimport type {\n FieldValues, Path,\n RegisterOptions,\n UseFormRegister,\n} from 'react-hook-form';\n\nimport type { Mask, Options, UseHookFormMaskReturn } from '../types';\n\ninterface CacheEntry {\n stableRef: RefCallback<HTMLElement | null>;\n element: HTMLElement | null;\n latestRHFRef?: RefCallback<HTMLElement | null>;\n syncedRHFRef?: RefCallback<HTMLElement | null>;\n}\n\n/**\n * Creates a masked version of React Hook Form's register function.\n * Takes react-hook-form's register and adds automatic masking. Like an upgrade.\n *\n * @template T - The form data type\n * @template D - The register options type\n * @param registerFn - The register function from useForm hook\n * @returns A function that registers a field with mask support\n */\nexport default function useHookFormMask<\n T extends FieldValues, D extends RegisterOptions,\n>(registerFn: UseFormRegister<T>): ((fieldName: Path<T>, mask: Mask, options?: (\n D & Options) | Options | D) => UseHookFormMaskReturn<T>) {\n const entryCacheRef = useRef(new Map<string, CacheEntry>());\n\n useLayoutEffect(() => {\n entryCacheRef.current.forEach((entry) => {\n const currentEntry = entry;\n if (!currentEntry.element || !currentEntry.latestRHFRef) return;\n\n // After reset(), RHF gives us a new ref callback. React won't call it\n // because our outward ref identity stays stable, so we replay it here.\n if (currentEntry.latestRHFRef !== currentEntry.syncedRHFRef) {\n currentEntry.latestRHFRef(currentEntry.element);\n currentEntry.syncedRHFRef = currentEntry.latestRHFRef;\n }\n });\n });\n\n return useMemo(() => {\n // registerFn identity changed, so drop cached refs bound to the previous\n // register lifecycle.\n entryCacheRef.current = new Map<string, CacheEntry>();\n\n return (fieldName: Path<T>, mask: Mask, options?: (\n D & Options) | Options | D): UseHookFormMaskReturn<T> => {\n if (!registerFn) throw new Error('registerFn is required');\n\n const registerReturn = registerFn(fieldName, options as Options);\n const { ref } = registerReturn as UseHookFormMaskReturn<T>;\n\n const cacheKey = makeMaskCacheKey(fieldName, mask);\n\n let entry = entryCacheRef.current.get(cacheKey);\n if (!entry) {\n const nextEntry: CacheEntry = {\n element: null,\n latestRHFRef: ref,\n syncedRHFRef: undefined,\n stableRef: null as unknown as RefCallback<HTMLElement | null>,\n };\n\n const applyMaskToRef = (_ref: HTMLElement | null) => {\n nextEntry.element = _ref;\n if (_ref) applyMaskToElement(_ref, mask, options as Options);\n return _ref;\n };\n\n nextEntry.stableRef = (\n nextEntry.latestRHFRef\n ? flow(applyMaskToRef, (_ref: HTMLElement | null) => nextEntry.latestRHFRef?.(_ref))\n : applyMaskToRef\n ) as RefCallback<HTMLElement | null>;\n\n entry = nextEntry;\n entryCacheRef.current.set(cacheKey, nextEntry);\n } else {\n entry.latestRHFRef = ref;\n }\n\n const result = {\n ...registerReturn,\n ref: entry.stableRef,\n } as UseHookFormMaskReturn<T>;\n setUnmaskedValue(result, () => getUnmaskedValue(entry?.element ?? null));\n\n setPrevRef(result, ref);\n\n return result;\n };\n }, [registerFn]);\n}\n","import { applyMaskToElement } from '../core';\nimport {\n getUnmaskedValue, makeMaskCacheKey, setPrevRef, setUnmaskedValue,\n} from '../utils';\n\nimport type { RefCallback } from 'react';\n\nimport type {\n Mask, Options, TanStackFormInputProps, UseTanStackFormMaskReturn,\n} from '../types';\n\ntype MaskedRefCallback = RefCallback<HTMLElement | null> & {\n currentElement?: HTMLElement | null;\n};\n\nconst refCache = new WeakMap<\n RefCallback<HTMLElement | null>,\n Map<string, RefCallback<HTMLElement | null>>\n>();\n\n/**\n * Enhances TanStack Form-compatible input props with mask support.\n * Works with objects returned by field.getInputProps().\n */\nexport default function withTanStackFormMask<T extends TanStackFormInputProps>(\n inputProps: T,\n mask: Mask,\n options?: Options,\n): UseTanStackFormMaskReturn<T> {\n const { ref } = inputProps;\n\n if (!ref) {\n let currentElement: HTMLElement | null = null;\n const result = {\n ...inputProps,\n ref: ((input: HTMLElement | null) => {\n currentElement = input;\n if (input) applyMaskToElement(input, mask, options);\n }) as RefCallback<HTMLElement | null>,\n } as unknown as UseTanStackFormMaskReturn<T>;\n setUnmaskedValue(result, () => getUnmaskedValue(currentElement));\n\n setPrevRef(result, ref);\n return result;\n }\n\n if (!refCache.has(ref)) {\n refCache.set(ref, new Map());\n }\n\n const maskCache = refCache.get(ref);\n const cacheKey = makeMaskCacheKey(inputProps.name ?? '', mask);\n\n if (!maskCache?.has(cacheKey)) {\n const maskedRef = ((input: HTMLElement | null) => {\n maskedRef.currentElement = input;\n if (input) applyMaskToElement(input, mask, options);\n ref(input);\n }) as MaskedRefCallback;\n\n maskCache?.set(cacheKey, maskedRef);\n }\n\n const maskedRef = maskCache?.get(cacheKey) as MaskedRefCallback | undefined;\n const result = {\n ...inputProps,\n ref: maskedRef,\n } as unknown as UseTanStackFormMaskReturn<T>;\n setUnmaskedValue(result, () => getUnmaskedValue(maskedRef?.currentElement ?? null));\n\n setPrevRef(result, ref);\n return result;\n}\n","import { useMemo } from 'react';\n\nimport withTanStackFormMask from './withTanStackFormMask';\n\nimport type { Mask, Options, TanStackFormInputProps, UseTanStackFormMaskReturn } from '../types';\n\n/**\n * Creates a helper to mask TanStack Form-compatible input props.\n * Designed for objects returned by field.getInputProps().\n */\nexport default function useTanStackFormMask(): <T extends TanStackFormInputProps>(\n mask: Mask,\n inputProps: T,\n options?: Options,\n) => UseTanStackFormMaskReturn<T> {\n return useMemo(\n () => <T extends TanStackFormInputProps>(\n mask: Mask,\n inputProps: T,\n options?: Options,\n ): UseTanStackFormMaskReturn<T> => withTanStackFormMask(inputProps, mask, options),\n [],\n );\n}\n","import { applyMaskToElement } from '../core';\nimport {\n getUnmaskedValue, makeMaskCacheKey, setPrevRef, setUnmaskedValue,\n} from '../utils';\n\nimport type { RefCallback } from 'react';\nimport type { FieldValues } from 'react-hook-form';\n\nimport type {\n Mask, Options, UseFormRegisterReturn, UseHookFormMaskReturn,\n} from '../types';\n\ntype MaskedRefCallback = RefCallback<HTMLElement | null> & {\n currentElement?: HTMLElement | null;\n};\n\nconst refCache = new WeakMap<\n RefCallback<HTMLElement | null>,\n Map<string, RefCallback<HTMLElement | null>>\n>();\n\n/**\n * Enhances a React Hook Form register return object with mask support.\n * Takes an already registered field and adds mask to it.\n * Useful when you registered the field before.\n *\n * @param register - The register return object from React Hook Form\n * @param mask - The mask pattern to apply\n * @param options - Optional mask configuration options\n * @returns A new register return object with mask applied\n */\nexport default function withHookFormMask(\n register: UseFormRegisterReturn,\n mask: Mask,\n options?: Options,\n): UseHookFormMaskReturn<FieldValues> {\n const { ref } = register as UseHookFormMaskReturn<FieldValues>;\n\n // null ref — nothing to cache, return as-is.\n if (!ref) {\n const result = {\n ...register,\n ref: null as unknown as RefCallback<HTMLElement | null>,\n } as UseHookFormMaskReturn<FieldValues>;\n setUnmaskedValue(result, () => '');\n setPrevRef(result, ref);\n return result;\n }\n\n if (!refCache.has(ref)) {\n refCache.set(ref, new Map());\n }\n const maskCache = refCache.get(ref);\n const cacheKey = makeMaskCacheKey(register.name, mask);\n\n if (!maskCache?.has(cacheKey)) {\n const maskedRef = ((input: HTMLElement | null) => {\n maskedRef.currentElement = input;\n if (input) applyMaskToElement(input, mask, options);\n return ref(input);\n }) as MaskedRefCallback;\n\n maskCache?.set(cacheKey, maskedRef);\n }\n\n const maskedRef = maskCache?.get(cacheKey) as MaskedRefCallback | undefined;\n const result = {\n ...register,\n ref: maskedRef,\n } as UseHookFormMaskReturn<FieldValues>;\n setUnmaskedValue(result, () => getUnmaskedValue(maskedRef?.currentElement ?? null));\n\n setPrevRef(result, ref);\n\n return result;\n}\n"],"mappings":"gMA6BA,SAAwB,EAAa,EAAgD,CACnF,GAAM,CAAE,OAAM,WAAU,WAAY,EAC9B,EAAM,EAAgC,IAAI,EAC1C,EAAU,EAAO,CAAI,EACrB,EAAa,EAAO,CAAO,EAC3B,EAAgB,MAAkB,EAAiB,EAAI,OAAO,EAAG,CAAC,CAAC,EAEnE,EAAc,EAAa,GAA8B,CAC7D,GAAI,CAAC,EAAO,CACV,EAAI,QAAU,KACd,MACF,CAEA,EAAI,QAAU,EAAgB,CAAK,EACnC,EAAS,EAAQ,QAAS,EAAW,OAAO,EAAE,EAAI,OAAO,CAC3D,EAAG,CAAC,CAAC,EAeL,OAbA,MAAgB,CACV,GAAY,CAAC,EAAI,SAAW,CAAC,GACjC,EAAS,EAAI,OAAO,CACtB,EAAG,CAAC,CAAQ,CAAC,EAET,EAKK,OAJa,CAEpB,OAEoC,EAAE,EAGjC,EAAiB,EAAa,CAAa,CACpD,CC5BA,SAAwB,EAEtB,EACyD,CACzD,IAAM,EAAgB,EAAO,IAAI,GAAyB,EAgB1D,OAdA,MAAsB,CACpB,EAAc,QAAQ,QAAS,GAAU,CACvC,IAAM,EAAe,EACjB,CAAC,EAAa,SAAW,CAAC,EAAa,cAIvC,EAAa,eAAiB,EAAa,eAC7C,EAAa,aAAa,EAAa,OAAO,EAC9C,EAAa,aAAe,EAAa,aAE7C,CAAC,CACH,CAAC,EAEM,OAGL,EAAc,QAAU,IAAI,KAEpB,EAAoB,EAAY,IACmB,CACzD,GAAI,CAAC,EAAY,MAAU,MAAM,wBAAwB,EAEzD,IAAM,EAAiB,EAAW,EAAW,CAAkB,EACzD,CAAE,OAAQ,EAEV,EAAW,EAAiB,EAAW,CAAI,EAE7C,EAAQ,EAAc,QAAQ,IAAI,CAAQ,EAC9C,GAAK,EAuBH,EAAM,aAAe,MAvBX,CACV,IAAM,EAAwB,CAC5B,QAAS,KACT,aAAc,EACd,aAAc,IAAA,GACd,UAAW,IACb,EAEM,EAAkB,IACtB,EAAU,QAAU,EAChB,GAAM,EAAmB,EAAM,EAAM,CAAkB,EACpD,GAGT,EAAU,UACR,EAAU,aACN,EAAK,EAAiB,GAA6B,EAAU,eAAe,CAAI,CAAC,EACjF,EAGN,EAAQ,EACR,EAAc,QAAQ,IAAI,EAAU,CAAS,CAC/C,CAIA,IAAM,EAAS,CACb,GAAG,EACH,IAAK,EAAM,SACb,EAKA,OAJA,EAAiB,MAAc,EAAiB,GAAO,SAAW,IAAI,CAAC,EAEvE,EAAW,EAAQ,CAAG,EAEf,CACT,GACC,CAAC,CAAU,CAAC,CACjB,CCzFA,MAAMA,EAAW,IAAI,QASrB,SAAwB,EACtB,EACA,EACA,EAC8B,CAC9B,GAAM,CAAE,OAAQ,EAEhB,GAAI,CAAC,EAAK,CACR,IAAI,EAAqC,KACnC,EAAS,CACb,GAAG,EACH,KAAO,GAA8B,CACnC,EAAiB,EACb,GAAO,EAAmB,EAAO,EAAM,CAAO,CACpD,EACF,EAIA,OAHA,EAAiB,MAAc,EAAiB,CAAc,CAAC,EAE/D,EAAW,EAAQ,CAAG,EACf,CACT,CAEKA,EAAS,IAAI,CAAG,GACnB,EAAS,IAAI,EAAK,IAAI,GAAK,EAG7B,IAAM,EAAYA,EAAS,IAAI,CAAG,EAC5B,EAAW,EAAiB,EAAW,MAAQ,GAAI,CAAI,EAE7D,GAAI,CAAC,GAAW,IAAI,CAAQ,EAAG,CAC7B,IAAM,GAAc,GAA8B,CAChD,EAAU,eAAiB,EACvB,GAAO,EAAmB,EAAO,EAAM,CAAO,EAClD,EAAI,CAAK,CACX,GAEA,GAAW,IAAI,EAAU,CAAS,CACpC,CAEA,IAAM,EAAY,GAAW,IAAI,CAAQ,EACnC,EAAS,CACb,GAAG,EACH,IAAK,CACP,EAIA,OAHA,EAAiB,MAAc,EAAiB,GAAW,gBAAkB,IAAI,CAAC,EAElF,EAAW,EAAQ,CAAG,EACf,CACT,CC9DA,SAAwB,GAIU,CAChC,OAAO,OAEH,EACA,EACA,IACiC,EAAqB,EAAY,EAAM,CAAO,EACjF,CAAC,CACH,CACF,CCPA,MAAM,EAAW,IAAI,QAerB,SAAwB,EACtB,EACA,EACA,EACoC,CACpC,GAAM,CAAE,OAAQ,EAGhB,GAAI,CAAC,EAAK,CACR,IAAM,EAAS,CACb,GAAG,EACH,IAAK,IACP,EAGA,OAFA,EAAiB,MAAc,EAAE,EACjC,EAAW,EAAQ,CAAG,EACf,CACT,CAEK,EAAS,IAAI,CAAG,GACnB,EAAS,IAAI,EAAK,IAAI,GAAK,EAE7B,IAAM,EAAY,EAAS,IAAI,CAAG,EAC5B,EAAW,EAAiB,EAAS,KAAM,CAAI,EAErD,GAAI,CAAC,GAAW,IAAI,CAAQ,EAAG,CAC7B,IAAM,GAAc,IAClB,EAAU,eAAiB,EACvB,GAAO,EAAmB,EAAO,EAAM,CAAO,EAC3C,EAAI,CAAK,IAGlB,GAAW,IAAI,EAAU,CAAS,CACpC,CAEA,IAAM,EAAY,GAAW,IAAI,CAAQ,EACnC,EAAS,CACb,GAAG,EACH,IAAK,CACP,EAKA,OAJA,EAAiB,MAAc,EAAiB,GAAW,gBAAkB,IAAI,CAAC,EAElF,EAAW,EAAQ,CAAG,EAEf,CACT"}