{"_id":"@altricade/react-mask-field","_rev":"6-c8087531bf9131a3815e6b315f5a1241","name":"@altricade/react-mask-field","dist-tags":{"latest":"1.2.1"},"versions":{"1.0.0":{"name":"@altricade/react-mask-field","version":"1.0.0","keywords":["react","input","mask","input-mask","form","typescript","text-mask","masked-input"],"author":{"url":"altricade","name":"Zaid Omar"},"license":"MIT","_id":"@altricade/react-mask-field@1.0.0","maintainers":[{"name":"reactomancer","email":"Omar.m.zaid@hotmail.com"}],"homepage":"https://github.com/altricade/react-mask-field","bugs":{"url":"https://github.com/altricade/react-mask-field/issues"},"dist":{"shasum":"d36538ed563cb23048471b6073d21757bc1e6477","tarball":"https://registry.npmjs.org/@altricade/react-mask-field/-/react-mask-field-1.0.0.tgz","fileCount":9,"integrity":"sha512-e2f2ryRMkMfR514U+vICdD8e86Vv/eDxzI8RLGRUwnYFUcc0prYpP46w3Hp0R8wkiq9Jh7pPKjfshDRP+5J2Og==","signatures":[{"sig":"MEUCIQDJLg3RfX4TTVdQDZL9Xhg9/egofW7IN/XEscyo9MgNeAIgLjbRp2hqwtjrocFHfC4jDlMLn3Xpadpi1kBNIco883w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":253611},"main":"dist/cjs/index.js","types":"dist/index.d.ts","module":"dist/esm/index.js","gitHead":"dda6ae3859716eb9d5291807a42446c21e054204","scripts":{"lint":"eslint src/**/*.{ts,tsx}","test":"jest","build":"rollup -c","format":"prettier --write \"src/**/*.{ts,tsx}\"","prepare":"npm run build","lint:fix":"eslint src/**/*.{ts,tsx} --fix","test:watch":"jest --watch","test:coverage":"jest --coverage"},"_npmUser":{"name":"reactomancer","email":"Omar.m.zaid@hotmail.com"},"repository":{"url":"git+https://github.com/altricade/react-mask-field.git","type":"git"},"_npmVersion":"10.5.0","description":"A modern, flexible and accessible input mask component for React","directories":{},"_nodeVersion":"20.12.2","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","react":"^19.0.0","tslib":"^2.8.1","eslint":"^8.57.1","rollup":"^4.36.0","ts-jest":"^29.2.6","prettier":"^3.5.3","react-dom":"^19.0.0","typescript":"^5.8.2","@types/jest":"^29.5.14","@types/react":"^19.0.11","@types/react-dom":"^19.0.4","rollup-plugin-dts":"^6.1.1","eslint-plugin-react":"^7.37.4","@rollup/plugin-terser":"^0.4.4","@testing-library/react":"^16.2.0","eslint-config-prettier":"^9.1.0","jest-environment-jsdom":"^29.7.0","@rollup/plugin-commonjs":"^28.0.3","@rollup/plugin-typescript":"^12.1.2","@testing-library/jest-dom":"^6.6.3","@typescript-eslint/parser":"^7.18.0","eslint-plugin-react-hooks":"^4.6.2","@rollup/plugin-node-resolve":"^16.0.1","@typescript-eslint/eslint-plugin":"^7.18.0","rollup-plugin-peer-deps-external":"^2.2.4"},"peerDependencies":{"react":"^16.8.0 || ^17.0.0 || ^18.0.0","react-dom":"^16.8.0 || ^17.0.0 || ^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react-mask-field_1.0.0_1742284586678_0.28830327601105066","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@altricade/react-mask-field","version":"1.0.1","keywords":["react","input","mask","input-mask","form","typescript","text-mask","masked-input"],"author":{"url":"altricade","name":"Zaid Omar"},"license":"MIT","_id":"@altricade/react-mask-field@1.0.1","maintainers":[{"name":"reactomancer","email":"Omar.m.zaid@hotmail.com"}],"homepage":"https://github.com/altricade/react-mask-field","bugs":{"url":"https://github.com/altricade/react-mask-field/issues"},"dist":{"shasum":"3889c3f7e6404853c718283a690d6ad80e761d5d","tarball":"https://registry.npmjs.org/@altricade/react-mask-field/-/react-mask-field-1.0.1.tgz","fileCount":9,"integrity":"sha512-t8XxQyKiMWi17Ng20vbxryxQHlun2Waa9Tc7VA3XRGK/jX+lHz9CgX2VRL4B0QdGUMH6KMZzysPRy+vhuJm6OA==","signatures":[{"sig":"MEQCIBHGPEQ++f9r2TU85451nJUXsOd36A/YQ6oBd0W43xzHAiB2O9qtuz7PtgtyHrCEU8DZaMw8t8jWetru+6gIWPJUrQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":235845},"main":"dist/cjs/index.js","types":"dist/index.d.ts","module":"dist/esm/index.js","gitHead":"0c9095f69d0b2ffaa2e8fcfd1417a48ff652c66f","scripts":{"lint":"eslint src/**/*.{ts,tsx}","test":"jest","build":"rollup -c","format":"prettier --write \"src/**/*.{ts,tsx}\"","prepare":"npm run build","lint:fix":"eslint src/**/*.{ts,tsx} --fix","test:watch":"jest --watch","test:coverage":"jest --coverage"},"_npmUser":{"name":"reactomancer","email":"Omar.m.zaid@hotmail.com"},"repository":{"url":"git+https://github.com/altricade/react-mask-field.git","type":"git"},"_npmVersion":"10.5.0","description":"A modern, flexible and accessible input mask component for React","directories":{},"_nodeVersion":"20.12.2","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","react":"^19.0.0","tslib":"^2.8.1","eslint":"^8.57.1","rollup":"^4.36.0","ts-jest":"^29.2.6","prettier":"^3.5.3","react-dom":"^19.0.0","typescript":"^5.8.2","@types/jest":"^29.5.14","@types/react":"^19.0.11","@types/react-dom":"^19.0.4","rollup-plugin-dts":"^6.1.1","eslint-plugin-react":"^7.37.4","@rollup/plugin-terser":"^0.4.4","@testing-library/react":"^16.2.0","eslint-config-prettier":"^9.1.0","jest-environment-jsdom":"^29.7.0","@rollup/plugin-commonjs":"^28.0.3","@rollup/plugin-typescript":"^12.1.2","@testing-library/jest-dom":"^6.6.3","@typescript-eslint/parser":"^7.18.0","eslint-plugin-react-hooks":"^4.6.2","@rollup/plugin-node-resolve":"^16.0.1","@typescript-eslint/eslint-plugin":"^7.18.0","rollup-plugin-peer-deps-external":"^2.2.4"},"peerDependencies":{"react":"^16.8.0 || ^17.0.0 || ^18.0.0","react-dom":"^16.8.0 || ^17.0.0 || ^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react-mask-field_1.0.1_1742285353636_0.5552507542831708","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@altricade/react-mask-field","version":"1.0.2","keywords":["react","input","mask","input-mask","form","typescript","text-mask","masked-input"],"author":{"url":"altricade","name":"Zaid Omar"},"license":"MIT","_id":"@altricade/react-mask-field@1.0.2","maintainers":[{"name":"reactomancer","email":"Omar.m.zaid@hotmail.com"}],"homepage":"https://github.com/altricade/react-mask-field","bugs":{"url":"https://github.com/altricade/react-mask-field/issues"},"dist":{"shasum":"6aad4f20f395d31ec7a97b865c5c48bc9f1e95fc","tarball":"https://registry.npmjs.org/@altricade/react-mask-field/-/react-mask-field-1.0.2.tgz","fileCount":9,"integrity":"sha512-3gazpt9K4930wH7jf7+BOgPEXnFAQugi2H5mEEUx+wxllG6K4SO7D6xPzMmXKF813GE+6nlAa8WWat+A2N7dQg==","signatures":[{"sig":"MEUCICGwtEHT0/aVW9/oq4N5rDZ93v/VCGfNaXtRCW3iQPvkAiEA5JCDNhwgwNLHPWJ51a8PrBFfJ6RChPe+EtBcYg8bIKM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":179685},"main":"dist/cjs/index.js","types":"dist/index.d.ts","module":"dist/esm/index.js","gitHead":"0c9095f69d0b2ffaa2e8fcfd1417a48ff652c66f","scripts":{"lint":"eslint src/**/*.{ts,tsx}","test":"jest","build":"rollup -c","format":"prettier --write \"src/**/*.{ts,tsx}\"","prepare":"npm run build","lint:fix":"eslint src/**/*.{ts,tsx} --fix","test:watch":"jest --watch","test:coverage":"jest --coverage"},"_npmUser":{"name":"reactomancer","email":"Omar.m.zaid@hotmail.com"},"repository":{"url":"git+https://github.com/altricade/react-mask-field.git","type":"git"},"_npmVersion":"10.5.0","description":"A modern, flexible and accessible input mask component for React","directories":{},"_nodeVersion":"20.12.2","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","react":"^19.0.0","tslib":"^2.8.1","eslint":"^8.57.1","rollup":"^4.36.0","ts-jest":"^29.2.6","prettier":"^3.5.3","react-dom":"^19.0.0","typescript":"^5.8.2","@types/jest":"^29.5.14","@types/react":"^19.0.11","@types/react-dom":"^19.0.4","rollup-plugin-dts":"^6.1.1","eslint-plugin-react":"^7.37.4","@rollup/plugin-terser":"^0.4.4","@testing-library/react":"^16.2.0","eslint-config-prettier":"^9.1.0","jest-environment-jsdom":"^29.7.0","@rollup/plugin-commonjs":"^28.0.3","@rollup/plugin-typescript":"^12.1.2","@testing-library/jest-dom":"^6.6.3","@typescript-eslint/parser":"^7.18.0","eslint-plugin-react-hooks":"^4.6.2","@rollup/plugin-node-resolve":"^16.0.1","@typescript-eslint/eslint-plugin":"^7.18.0","rollup-plugin-peer-deps-external":"^2.2.4"},"peerDependencies":{"react":"^16.8.0 || ^17.0.0 || ^18.0.0","react-dom":"^16.8.0 || ^17.0.0 || ^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react-mask-field_1.0.2_1742294441187_0.34656960805590464","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@altricade/react-mask-field","version":"1.1.0","keywords":["react","input","mask","input-mask","form","typescript","text-mask","masked-input"],"author":{"url":"altricade","name":"Zaid Omar"},"license":"MIT","_id":"@altricade/react-mask-field@1.1.0","maintainers":[{"name":"reactomancer","email":"Omar.m.zaid@hotmail.com"}],"homepage":"https://github.com/altricade/react-mask-field","bugs":{"url":"https://github.com/altricade/react-mask-field/issues"},"dist":{"shasum":"1367abb7bb130ec77f69961880b6ea3a9e2424d6","tarball":"https://registry.npmjs.org/@altricade/react-mask-field/-/react-mask-field-1.1.0.tgz","fileCount":9,"integrity":"sha512-7a9d07bisjHIxgvPRkH6criny9kZ/f+MQ/WZRM0doC5Z31gj5ssPh6slF6El9env4zGMaka8mFWpWJLQUizQiw==","signatures":[{"sig":"MEUCIQCMOLhlnzXqUCkW5c5FqB/FfhB35ltu5wc7VBL9H/5NLQIgdwkuHsWGlxOSKyjQ5NADfJ4+9q8cOX9kTU2nIjUc0ME=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":182456},"main":"dist/cjs/index.js","types":"dist/index.d.ts","module":"dist/esm/index.js","gitHead":"0c9095f69d0b2ffaa2e8fcfd1417a48ff652c66f","scripts":{"lint":"eslint src/**/*.{ts,tsx}","test":"jest","build":"rollup -c","format":"prettier --write \"src/**/*.{ts,tsx}\"","prepare":"npm run build","lint:fix":"eslint src/**/*.{ts,tsx} --fix","test:watch":"jest --watch","test:coverage":"jest --coverage"},"_npmUser":{"name":"reactomancer","email":"Omar.m.zaid@hotmail.com"},"repository":{"url":"git+https://github.com/altricade/react-mask-field.git","type":"git"},"_npmVersion":"10.5.0","description":"A modern, flexible and accessible input mask component for React","directories":{},"_nodeVersion":"20.12.2","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","react":"^19.0.0","tslib":"^2.8.1","eslint":"^8.57.1","rollup":"^4.36.0","ts-jest":"^29.2.6","prettier":"^3.5.3","react-dom":"^19.0.0","typescript":"^5.8.2","@types/jest":"^29.5.14","@types/react":"^19.0.11","@types/react-dom":"^19.0.4","rollup-plugin-dts":"^6.1.1","eslint-plugin-react":"^7.37.4","@rollup/plugin-terser":"^0.4.4","@testing-library/react":"^16.2.0","eslint-config-prettier":"^9.1.0","jest-environment-jsdom":"^29.7.0","@rollup/plugin-commonjs":"^28.0.3","@rollup/plugin-typescript":"^12.1.2","@testing-library/jest-dom":"^6.6.3","@typescript-eslint/parser":"^7.18.0","eslint-plugin-react-hooks":"^4.6.2","@rollup/plugin-node-resolve":"^16.0.1","@typescript-eslint/eslint-plugin":"^7.18.0","rollup-plugin-peer-deps-external":"^2.2.4"},"peerDependencies":{"react":"^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0","react-dom":"^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react-mask-field_1.1.0_1742294984674_0.5668951998109153","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@altricade/react-mask-field","version":"1.2.0","keywords":["react","input","mask","input-mask","form","typescript","text-mask","masked-input"],"author":{"url":"altricade","name":"Zaid Omar"},"license":"MIT","_id":"@altricade/react-mask-field@1.2.0","maintainers":[{"name":"reactomancer","email":"Omar.m.zaid@hotmail.com"}],"homepage":"https://altricade.github.io/react-mask-field/","bugs":{"url":"https://github.com/altricade/react-mask-field/issues"},"dist":{"shasum":"3032f6c7fb4936cd6870a0bdc2162111878c721f","tarball":"https://registry.npmjs.org/@altricade/react-mask-field/-/react-mask-field-1.2.0.tgz","fileCount":9,"integrity":"sha512-Fx6zEFyBcjtzNhZS8lhiLqSyxc22sMgGsWu6AY0nMuA/vqpgsa1j+/MJMHfMYgQjE2vFxPFu6VcMVU9o27Lmxg==","signatures":[{"sig":"MEUCIDxg2KZtho2DDDPKjxrmjNtJXv3sn/1vjSkFL/8f6woXAiEAiwhkd+wsy4CY9K9iYz3gngTuPty/2NLxyf+Z0BDXRBY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":184255},"main":"dist/cjs/index.js","types":"dist/index.d.ts","module":"dist/esm/index.js","gitHead":"bbe9f45dbab21068f4463add8798215bc8c5fdd0","scripts":{"lint":"eslint src/**/*.{ts,tsx}","test":"jest","build":"rollup -c","format":"prettier --write \"src/**/*.{ts,tsx}\"","prepare":"npm run build","lint:fix":"eslint src/**/*.{ts,tsx} --fix","storybook":"storybook dev -p 6006","test:watch":"jest --watch","test:coverage":"jest --coverage","build-storybook":"storybook build","deploy-storybook":"npm run build-storybook && npx gh-pages -d storybook-static"},"_npmUser":{"name":"reactomancer","email":"Omar.m.zaid@hotmail.com"},"repository":{"url":"git+https://github.com/altricade/react-mask-field.git","type":"git"},"_npmVersion":"10.5.0","description":"A modern, flexible and accessible input mask component for React","directories":{},"_nodeVersion":"20.12.2","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","react":"^19.0.0","tslib":"^2.8.1","eslint":"^8.57.1","rollup":"^4.36.0","ts-jest":"^29.2.6","gh-pages":"^6.3.0","prettier":"^3.5.3","react-dom":"^19.0.0","storybook":"^8.6.7","typescript":"^5.8.2","@types/jest":"^29.5.14","@types/react":"^19.0.11","@storybook/test":"^8.6.7","@storybook/react":"^8.6.7","@types/react-dom":"^19.0.4","@storybook/blocks":"^8.6.7","rollup-plugin-dts":"^6.1.1","eslint-plugin-react":"^7.37.4","@rollup/plugin-terser":"^0.4.4","@storybook/react-vite":"^8.6.7","@storybook/addon-links":"^8.6.7","@testing-library/react":"^16.2.0","eslint-config-prettier":"^9.1.0","jest-environment-jsdom":"^29.7.0","@rollup/plugin-commonjs":"^28.0.3","eslint-plugin-storybook":"^0.11.6","@chromatic-com/storybook":"^3.2.6","@rollup/plugin-typescript":"^12.1.2","@testing-library/jest-dom":"^6.6.3","@typescript-eslint/parser":"^7.18.0","eslint-plugin-react-hooks":"^4.6.2","@rollup/plugin-node-resolve":"^16.0.1","@storybook/addon-essentials":"^8.6.7","@storybook/addon-onboarding":"^8.6.7","@storybook/addon-interactions":"^8.6.7","@typescript-eslint/eslint-plugin":"^7.18.0","rollup-plugin-peer-deps-external":"^2.2.4"},"peerDependencies":{"react":"^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0","react-dom":"^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react-mask-field_1.2.0_1742296959532_0.5568739533046492","host":"s3://npm-registry-packages-npm-production"}},"1.2.1":{"name":"@altricade/react-mask-field","version":"1.2.1","description":"A modern, flexible and accessible input mask component for React","main":"dist/cjs/index.js","module":"dist/esm/index.js","types":"dist/index.d.ts","scripts":{"build":"rollup -c","test":"jest","test:watch":"jest --watch","test:coverage":"jest --coverage","lint":"eslint src/**/*.{ts,tsx}","lint:fix":"eslint src/**/*.{ts,tsx} --fix","format":"prettier --write \"src/**/*.{ts,tsx}\"","prepare":"npm run build","storybook":"storybook dev -p 6006","build-storybook":"storybook build","deploy-storybook":"npm run build-storybook && npx gh-pages -d storybook-static"},"peerDependencies":{"react":"^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0","react-dom":"^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"},"keywords":["react","input","mask","input-mask","form","typescript","text-mask","masked-input"],"author":{"name":"Zaid Omar","url":"altricade"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/altricade/react-mask-field.git"},"bugs":{"url":"https://github.com/altricade/react-mask-field/issues"},"homepage":"https://altricade.github.io/react-mask-field/","devDependencies":{"@chromatic-com/storybook":"^3.2.6","@rollup/plugin-commonjs":"^28.0.3","@rollup/plugin-node-resolve":"^16.0.1","@rollup/plugin-terser":"^0.4.4","@rollup/plugin-typescript":"^12.1.2","@storybook/addon-essentials":"^8.6.7","@storybook/addon-interactions":"^8.6.7","@storybook/addon-links":"^8.6.7","@storybook/addon-onboarding":"^8.6.7","@storybook/blocks":"^8.6.7","@storybook/react":"^8.6.7","@storybook/react-vite":"^8.6.7","@storybook/test":"^8.6.7","@testing-library/jest-dom":"^6.6.3","@testing-library/react":"^16.2.0","@types/jest":"^29.5.14","@types/react":"^19.0.11","@types/react-dom":"^19.0.4","@typescript-eslint/eslint-plugin":"^7.18.0","@typescript-eslint/parser":"^7.18.0","eslint":"^8.57.1","eslint-config-prettier":"^9.1.0","eslint-plugin-react":"^7.37.4","eslint-plugin-react-hooks":"^4.6.2","eslint-plugin-storybook":"^0.11.6","gh-pages":"^6.3.0","jest":"^29.7.0","jest-environment-jsdom":"^29.7.0","prettier":"^3.5.3","react":"^19.0.0","react-dom":"^19.0.0","rollup":"^4.36.0","rollup-plugin-dts":"^6.1.1","rollup-plugin-peer-deps-external":"^2.2.4","storybook":"^8.6.7","ts-jest":"^29.2.6","tslib":"^2.8.1","typescript":"^5.8.2"},"_id":"@altricade/react-mask-field@1.2.1","gitHead":"d4c89ddbf8705d7ab0cee4a2f8a9e6203f708274","_nodeVersion":"20.12.2","_npmVersion":"10.5.0","dist":{"integrity":"sha512-9lYzY4LrEF42f9b4/lbaRnJ+g/+zcBxtfjiUACjl5oUeu3CTHiJk6DqOh4lt9v0ZHfNv3YeICVYV2uAWWyzXww==","shasum":"f90e24593bac9560ec767ea5796b57c7051caaee","tarball":"https://registry.npmjs.org/@altricade/react-mask-field/-/react-mask-field-1.2.1.tgz","fileCount":9,"unpackedSize":192839,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCICep8GgThP00HiEoSX6JJtFcsj6NzX93AFfw2/LJjw5tAiAga9qpti0igY+BN0LKKJmDWMOS8MnWkBkB/JGbkEHNOw=="}]},"_npmUser":{"name":"reactomancer","email":"Omar.m.zaid@hotmail.com"},"directories":{},"maintainers":[{"name":"reactomancer","email":"Omar.m.zaid@hotmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/react-mask-field_1.2.1_1742299328280_0.22678211542653082"},"_hasShrinkwrap":false}},"time":{"created":"2025-03-18T07:56:26.607Z","modified":"2025-03-18T12:02:08.640Z","1.0.0":"2025-03-18T07:56:26.871Z","1.0.1":"2025-03-18T08:09:13.869Z","1.0.2":"2025-03-18T10:40:41.388Z","1.1.0":"2025-03-18T10:49:44.884Z","1.2.0":"2025-03-18T11:22:39.763Z","1.2.1":"2025-03-18T12:02:08.485Z"},"bugs":{"url":"https://github.com/altricade/react-mask-field/issues"},"author":{"name":"Zaid Omar","url":"altricade"},"license":"MIT","homepage":"https://altricade.github.io/react-mask-field/","keywords":["react","input","mask","input-mask","form","typescript","text-mask","masked-input"],"repository":{"type":"git","url":"git+https://github.com/altricade/react-mask-field.git"},"description":"A modern, flexible and accessible input mask component for React","maintainers":[{"name":"reactomancer","email":"Omar.m.zaid@hotmail.com"}],"readme":"# React Mask Field\n\nA lightweight, flexible input masking library for React applications built with TypeScript. This library provides customizable masked input components with type safety and modern React practices.\n\n[![Storybook](https://img.shields.io/badge/Storybook-FF4785?style=for-the-badge&logo=storybook&logoColor=white)](https://altricade.github.io/react-mask-field/)\n[![npm version](https://img.shields.io/npm/v/@altricade/react-mask-field.svg?style=for-the-badge)](https://www.npmjs.com/package/@altricade/react-mask-field)\n[![TypeScript](https://img.shields.io/badge/TypeScript-007ACC?style=for-the-badge&logo=typescript&logoColor=white)](https://www.typescriptlang.org/)\n[![React](https://img.shields.io/badge/React-20232A?style=for-the-badge&logo=react&logoColor=61DAFB)](https://reactjs.org/)\n\n## Features\n\n- 🚀 **Modern React API** - Based on hooks and functional components\n- 📦 **Lightweight** - No external dependencies\n- 🔒 **Type-safe** - Written in TypeScript with full type definitions\n- 🧰 **Specialized Components** - Components for common use cases like phone numbers, dates, and credit cards\n- 🎨 **Customizable** - Flexible formatting options\n- ⚛️ **Compatible** - Works with React 16.8+ including React 18 and React 19\n- 🛡️ **Clean DOM** - Properly filters out non-standard props from DOM elements\n- 📚 **Interactive Documentation** - Comprehensive [Storybook documentation](https://altricade.github.io/react-mask-field/) with live examples\n\n## Documentation\n\nExplore our interactive component documentation with live examples:\n\n[**View Storybook Documentation**](https://altricade.github.io/react-mask-field/)\n\nThe Storybook provides:\n\n- Interactive examples of all components\n- Configurable props with live preview\n- Code snippets for common use cases\n- Detailed API documentation\n\nFor information on building and deploying the Storybook, see [STORYBOOK.md](./STORYBOOK.md).\n\n## Installation\n\n```bash\nnpm install @altricade/react-mask-field\n# or\nyarn add @altricade/react-mask-field\n# or\npnpm add @altricade/react-mask-field\n```\n\n## Basic Usage\n\n```tsx\nimport React from 'react';\nimport { MaskField } from '@altricade/react-mask-field';\n\nfunction App() {\n  return <MaskField mask=\"(999) 999-9999\" onChange={e => console.log(e.target.value)} />;\n}\n```\n\n## Specialized Components\n\n### Phone Input\n\n```tsx\nimport React, { useState } from 'react';\nimport { PhoneInput } from '@altricade/react-mask-field';\n\nfunction PhoneForm() {\n  const [phone, setPhone] = useState('');\n\n  return <PhoneInput countryCode=\"US\" value={phone} onChange={e => setPhone(e.target.value)} />;\n}\n```\n\n### Date Input\n\n```tsx\nimport React from 'react';\nimport { DateInput } from '@altricade/react-mask-field';\n\nfunction DateForm() {\n  return (\n    <DateInput\n      format=\"MM/DD/YYYY\"\n      onChange={e => console.log(e.target.value)}\n      enableDateValidation\n    />\n  );\n}\n```\n\n### Credit Card Input\n\n```tsx\nimport React, { useState } from 'react';\nimport { CreditCardInput, CardType } from '@altricade/react-mask-field';\n\nfunction PaymentForm() {\n  const [cardType, setCardType] = useState<CardType | null>(null);\n\n  return (\n    <div>\n      <CreditCardInput\n        onChange={e => console.log(e.target.value)}\n        onCardTypeChange={setCardType}\n        detectCardType\n      />\n      {cardType && <div>Card type: {cardType}</div>}\n    </div>\n  );\n}\n```\n\n### Time Input\n\n```tsx\nimport React from 'react';\nimport { TimeInput } from '@altricade/react-mask-field';\n\nfunction TimeForm() {\n  return <TimeInput format=\"12h\" showSeconds onChange={e => console.log(e.target.value)} />;\n}\n```\n\n## API Documentation\n\n### `MaskField` Component\n\nThe core component that provides masking functionality.\n\n#### Props\n\n| Prop                      | Type                                                     | Default     | Description                                             |\n| ------------------------- | -------------------------------------------------------- | ----------- | ------------------------------------------------------- |\n| `mask`                    | `string`                                                 | (required)  | Mask pattern for the input                              |\n| `value`                   | `string`                                                 | `''`        | The controlled input value                              |\n| `maskChar`                | `string`                                                 | `'_'`       | Character to cover unfilled parts of the mask           |\n| `formatChars`             | `object`                                                 | See below   | Key-value map of format characters to RegExp strings    |\n| `beforeMaskedValueChange` | `(newState, oldState, userInput, maskOptions) => string` | `undefined` | Function to modify the masked value before it's applied |\n\nDefault `formatChars`:\n\n```js\n{\n  '9': '[0-9]',\n  'a': '[A-Za-z]',\n  '*': '[A-Za-z0-9]'\n}\n```\n\n## Mask Format\n\nThe mask pattern supports the following format characters by default:\n\n- `9`: Any numeric character (0-9)\n- `a`: Any alphabetic character (A-Z, a-z)\n- `*`: Any alphanumeric character (A-Z, a-z, 0-9)\n\nFixed characters in the mask (like parentheses, dashes, etc.) will be automatically inserted as the user types.\n\n## Implementation Details\n\n- Uses a simplified masking algorithm that properly restricts input based on the mask pattern\n- Supports different placeholder types (9 for digits, a for letters, \\* for alphanumeric)\n- Properly handles the maskChar property for placeholder generation\n- Maintains proper event handling for onChange callbacks\n- Filters out non-standard props from DOM elements to prevent React warnings\n\n## Examples\n\n### Phone Number\n\n```\nmask=\"(999) 999-9999\"\n```\n\nThis will format input as a US phone number like (123) 456-7890.\n\n### Credit Card\n\n```\nmask=\"9999 9999 9999 9999\"\n```\n\nThis will format input as a credit card number with spaces after every 4 digits.\n\n### Date\n\n```\nmask=\"99/99/9999\"\n```\n\nThis will format input as a date like 01/31/2023.\n\n## License\n\nMIT\n","readmeFilename":"README.md"}