{"_id":"@desource/phone-mask-svelte","_rev":"15-8bb35cbf3e45ca883881d0fb2b79ccd8","name":"@desource/phone-mask-svelte","dist-tags":{"latest":"1.6.4"},"versions":{"1.0.0":{"name":"@desource/phone-mask-svelte","version":"1.0.0","keywords":["svelte","svelte5","phone","mask","input","component","international","libphonenumber","country-code","phone-number","formatting","validation","typescript"],"author":{"name":"Stefan Popov","email":"stefan@desource-labs.org"},"license":"MIT","_id":"@desource/phone-mask-svelte@1.0.0","maintainers":[{"name":"stefanpopov","email":"stef4n.popov@gmail.com"}],"homepage":"https://github.com/DeSource-Labs/phone-mask/tree/main/packages/phone-mask-svelte#readme","bugs":{"url":"https://github.com/DeSource-Labs/phone-mask/issues"},"dist":{"shasum":"7f87326acdaad999fde6589aaab6f18c14cedaf9","tarball":"https://registry.npmjs.org/@desource/phone-mask-svelte/-/phone-mask-svelte-1.0.0.tgz","fileCount":31,"integrity":"sha512-bpC0emcgS8fJ5sPo5MQ8X0Ug4aCC9QZbhYtg3SFKMgM3r7Cl1Es8y2baBVG7lUpCCTm/qJ3E35e9lxWTL8SHRQ==","signatures":[{"sig":"MEUCIGMmSDDBY5ET3knPdDGcwFuN7dxll62srdlYWRqBsWAHAiEA4dRDOsxQc2yy7puOPfZkrPP+BLU2kfMGUQl81WSNrjg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":161211},"main":"dist/index.cjs","type":"module","_from":"file:desource-phone-mask-svelte-1.0.0.tgz","types":"dist/types/index.d.ts","module":"dist/index.mjs","svelte":"dist/index.mjs","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/index.mjs","svelte":"./dist/index.mjs","require":"./dist/index.cjs"},"./assets/lib.css":"./dist/phone-mask-svelte.css"},"private":false,"scripts":{"dev":"vite demo","build":"pnpm clean && pnpm build:internal","clean":"rimraf dist tsconfig.build.tsbuildinfo test-results coverage","test:e2e":"playwright test","build:lib":"vite build","test:unit":"vitest run","typecheck":"svelte-check --tsconfig tsconfig.json","build:types":"tsc --project tsconfig.build.json","build:internal":"pnpm build:lib && pnpm build:types","test:unit:coverage":"vitest run --coverage.enabled --coverage.provider=v8 --coverage.reporter=lcov --coverage.reportsDirectory=coverage"},"_npmUser":{"name":"stefanpopov","email":"stef4n.popov@gmail.com"},"_resolved":"/tmp/904c72f345a9b4a2507c11644b815925/desource-phone-mask-svelte-1.0.0.tgz","_integrity":"sha512-bpC0emcgS8fJ5sPo5MQ8X0Ug4aCC9QZbhYtg3SFKMgM3r7Cl1Es8y2baBVG7lUpCCTm/qJ3E35e9lxWTL8SHRQ==","repository":{"url":"git+https://github.com/DeSource-Labs/phone-mask.git","type":"git","directory":"packages/phone-mask-svelte"},"_npmVersion":"11.11.0","description":"🌍 Svelte 5 component and composable for international phone number masking. Powered by @desource/phone-mask with Google libphonenumber sync.","directories":{},"_nodeVersion":"25.8.0","dependencies":{"@desource/phone-mask":"1.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"svelte":"^5.53.7","svelte-check":"^4.4.4","@sveltejs/vite-plugin-svelte":"^6.2.4"},"peerDependencies":{"svelte":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/phone-mask-svelte_1.0.0_1772815349537_0.45684744810423794","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@desource/phone-mask-svelte","version":"1.1.0","keywords":["svelte","svelte5","phone","mask","input","component","international","libphonenumber","country-code","phone-number","formatting","validation","typescript"],"author":{"name":"Stefan Popov","email":"stefan@desource-labs.org"},"license":"MIT","_id":"@desource/phone-mask-svelte@1.1.0","maintainers":[{"name":"stefanpopov","email":"stef4n.popov@gmail.com"}],"homepage":"https://github.com/DeSource-Labs/phone-mask/tree/main/packages/phone-mask-svelte#readme","bugs":{"url":"https://github.com/DeSource-Labs/phone-mask/issues"},"dist":{"shasum":"0b33ed95782c383ca7000c04473e905c7cd7adf7","tarball":"https://registry.npmjs.org/@desource/phone-mask-svelte/-/phone-mask-svelte-1.1.0.tgz","fileCount":35,"integrity":"sha512-Fa1zF4VTXI5LkmsJRSTCbNfOWD0ZaafWMXrW51aY3zm41MiQs4UWhvuJ33lHkgCZDwEO4ZW+7IwAB/oXpcI0bw==","signatures":[{"sig":"MEUCIQD7TvFJu5V4YMY80nRDigeGB+STzv0dH7hVZJxEDWpg0wIgLLnN1C+untuJDKPnwcikrakLInXrqMb/cdAj/RgHfWA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":191708},"main":"dist/index.cjs","type":"module","_from":"file:desource-phone-mask-svelte-1.1.0.tgz","types":"dist/types/index.d.ts","module":"dist/index.mjs","svelte":"dist/index.mjs","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/index.mjs","svelte":"./dist/index.mjs","require":"./dist/index.cjs"},"./assets/lib.css":"./dist/phone-mask-svelte.css"},"private":false,"scripts":{"dev":"vite demo","build":"pnpm clean && pnpm build:internal","clean":"rimraf dist tsconfig.build.tsbuildinfo test-results coverage","test:e2e":"playwright test","build:lib":"vite build","test:unit":"vitest run","typecheck":"svelte-check --tsconfig tsconfig.json","build:types":"tsc --project tsconfig.build.json","build:internal":"pnpm build:lib && pnpm build:types","test:unit:coverage":"vitest run --coverage.enabled --coverage.provider=v8 --coverage.reporter=lcov --coverage.reportsDirectory=coverage"},"_npmUser":{"name":"stefanpopov","email":"stef4n.popov@gmail.com"},"_resolved":"/tmp/0d10044bf004f2d8f97289b6fdd0520a/desource-phone-mask-svelte-1.1.0.tgz","_integrity":"sha512-Fa1zF4VTXI5LkmsJRSTCbNfOWD0ZaafWMXrW51aY3zm41MiQs4UWhvuJ33lHkgCZDwEO4ZW+7IwAB/oXpcI0bw==","repository":{"url":"git+https://github.com/DeSource-Labs/phone-mask.git","type":"git","directory":"packages/phone-mask-svelte"},"_npmVersion":"11.11.0","description":"🌍 Svelte 5 component, composable, action, and attachment for international phone number masking. Powered by @desource/phone-mask with Google libphonenumber sync.","directories":{},"_nodeVersion":"25.8.1","dependencies":{"@desource/phone-mask":"1.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"svelte":"^5.53.11","svelte-check":"^4.4.5","@testing-library/svelte":"^5.3.1","@sveltejs/vite-plugin-svelte":"^6.2.4"},"peerDependencies":{"svelte":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/phone-mask-svelte_1.1.0_1773596887450_0.6875263519217591","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@desource/phone-mask-svelte","version":"1.1.1","keywords":["svelte","svelte5","phone","mask","input","component","international","libphonenumber","country-code","phone-number","formatting","validation","typescript"],"author":{"name":"Stefan Popov","email":"stefan@desource-labs.org"},"license":"MIT","_id":"@desource/phone-mask-svelte@1.1.1","maintainers":[{"name":"stefanpopov","email":"stef4n.popov@gmail.com"}],"homepage":"https://github.com/DeSource-Labs/phone-mask/tree/main/packages/phone-mask-svelte#readme","bugs":{"url":"https://github.com/DeSource-Labs/phone-mask/issues"},"dist":{"shasum":"912b61c5944888e6f29eff0edee4a3e5d1fd010c","tarball":"https://registry.npmjs.org/@desource/phone-mask-svelte/-/phone-mask-svelte-1.1.1.tgz","fileCount":35,"integrity":"sha512-U7wCddQk85oGXByTjqrQTyv2YqdSReFWiZcuUv8Qf3G8Cuqd2UJNVBDdIO1I+SdGi0129IvGbKU3/XUj69+mGg==","signatures":[{"sig":"MEUCIBxrApmtA56Zdyx+Ttd5tGpulhC+6SfVu9uhBEmT5/+zAiEAw4XjR5ZfpZNP6vuc43qO1TlJWL3qacfBpZp8OxX/gE0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":191856},"main":"dist/index.cjs","type":"module","_from":"file:desource-phone-mask-svelte-1.1.1.tgz","types":"dist/types/index.d.ts","module":"dist/index.mjs","svelte":"dist/index.mjs","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/index.mjs","svelte":"./dist/index.mjs","require":"./dist/index.cjs"},"./assets/lib.css":"./dist/phone-mask-svelte.css"},"private":false,"scripts":{"dev":"vite demo","build":"pnpm clean && pnpm build:internal","clean":"rimraf dist tsconfig.build.tsbuildinfo test-results coverage","test:e2e":"playwright test","build:lib":"vite build","test:unit":"vitest run","typecheck":"svelte-check --tsconfig tsconfig.json","build:types":"tsc --project tsconfig.build.json","build:internal":"pnpm build:lib && pnpm build:types","test:unit:coverage":"vitest run --coverage.enabled --coverage.provider=v8 --coverage.reporter=lcov --coverage.reportsDirectory=coverage"},"_npmUser":{"name":"stefanpopov","email":"stef4n.popov@gmail.com"},"_resolved":"/tmp/ec20631c357fee67be0cefe0ef238a05/desource-phone-mask-svelte-1.1.1.tgz","_integrity":"sha512-U7wCddQk85oGXByTjqrQTyv2YqdSReFWiZcuUv8Qf3G8Cuqd2UJNVBDdIO1I+SdGi0129IvGbKU3/XUj69+mGg==","repository":{"url":"git+https://github.com/DeSource-Labs/phone-mask.git","type":"git","directory":"packages/phone-mask-svelte"},"_npmVersion":"11.11.0","description":"🌍 Svelte 5 component, composable, action, and attachment for international phone number masking. Powered by @desource/phone-mask with Google libphonenumber sync.","directories":{},"_nodeVersion":"25.8.1","dependencies":{"@desource/phone-mask":"1.1.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"svelte":"^5.53.11","svelte-check":"^4.4.5","@testing-library/svelte":"^5.3.1","@sveltejs/vite-plugin-svelte":"^6.2.4"},"peerDependencies":{"svelte":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/phone-mask-svelte_1.1.1_1773599968696_0.860921524429396","host":"s3://npm-registry-packages-npm-production"}},"1.1.2":{"name":"@desource/phone-mask-svelte","version":"1.1.2","keywords":["svelte","svelte5","phone","mask","input","component","international","libphonenumber","country-code","phone-number","formatting","validation","typescript"],"author":{"name":"Stefan Popov","email":"stefan@desource-labs.org"},"license":"MIT","_id":"@desource/phone-mask-svelte@1.1.2","maintainers":[{"name":"stefanpopov","email":"stef4n.popov@gmail.com"}],"homepage":"https://github.com/DeSource-Labs/phone-mask/tree/main/packages/phone-mask-svelte#readme","bugs":{"url":"https://github.com/DeSource-Labs/phone-mask/issues"},"dist":{"shasum":"cd598fc17baaef792733932410f072b7e1ca46c2","tarball":"https://registry.npmjs.org/@desource/phone-mask-svelte/-/phone-mask-svelte-1.1.2.tgz","fileCount":35,"integrity":"sha512-dSt+sTLzTjTlkPQ99740D4qIwO0GQqNmHxsctqT4V6FGSJE2gmApg9zAHNOZlNGYaXJQXx/rWq+NFLlTheYiJw==","signatures":[{"sig":"MEUCIQCKZAdWqKQ9XQ081wCJVD3dIhjvQhBeqehwF9xC9E+I0AIgOUsl/0LS/4eDT0/7l8zB8B1Pm3Q/ZA2+1IoJm25ZvEY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":106821},"main":"dist/index.cjs","type":"module","_from":"file:desource-phone-mask-svelte-1.1.2.tgz","types":"dist/types/index.d.ts","module":"dist/index.mjs","svelte":"dist/index.mjs","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/index.mjs","svelte":"./dist/index.mjs","require":"./dist/index.cjs"},"./assets/lib.css":"./dist/phone-mask-svelte.css"},"private":false,"scripts":{"dev":"vite demo","build":"pnpm clean && pnpm build:internal","clean":"rimraf dist tsconfig.tsbuildinfo test-results coverage","test:e2e":"playwright test","build:lib":"vite build","test:unit":"vitest run","typecheck":"svelte-check --tsconfig tsconfig.json","build:types":"tsc --project tsconfig.json","clean:modules":"rimraf node_modules","build:internal":"pnpm build:lib && pnpm build:types","test:unit:coverage":"vitest run --coverage.enabled --coverage.provider=v8 --coverage.reporter=lcov --coverage.reportsDirectory=coverage"},"_npmUser":{"name":"stefanpopov","email":"stef4n.popov@gmail.com"},"_resolved":"/tmp/e53b15b8e0b9ad069fe34231a0e82b82/desource-phone-mask-svelte-1.1.2.tgz","_integrity":"sha512-dSt+sTLzTjTlkPQ99740D4qIwO0GQqNmHxsctqT4V6FGSJE2gmApg9zAHNOZlNGYaXJQXx/rWq+NFLlTheYiJw==","repository":{"url":"git+https://github.com/DeSource-Labs/phone-mask.git","type":"git","directory":"packages/phone-mask-svelte"},"_npmVersion":"11.11.0","description":"🌍 Svelte 5 component, composable, action, and attachment for international phone number masking. Powered by @desource/phone-mask with Google libphonenumber sync.","directories":{},"_nodeVersion":"25.8.1","dependencies":{"@desource/phone-mask":"1.1.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"svelte":"^5.54.1","svelte-check":"^4.4.5","@testing-library/svelte":"^5.3.1","@sveltejs/vite-plugin-svelte":"^7.0.0"},"peerDependencies":{"svelte":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/phone-mask-svelte_1.1.2_1774194533581_0.599617573608932","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@desource/phone-mask-svelte","version":"1.2.0","keywords":["svelte","svelte5","phone","mask","input","component","international","libphonenumber","country-code","phone-number","formatting","validation","typescript"],"author":{"name":"Stefan Popov","email":"stefan@desource-labs.org"},"license":"MIT","_id":"@desource/phone-mask-svelte@1.2.0","maintainers":[{"name":"stefanpopov","email":"stef4n.popov@gmail.com"}],"homepage":"https://github.com/DeSource-Labs/phone-mask/tree/main/packages/phone-mask-svelte#readme","bugs":{"url":"https://github.com/DeSource-Labs/phone-mask/issues"},"dist":{"shasum":"94d3e2e7ee8fef78c58b3be5918359793a9d40b5","tarball":"https://registry.npmjs.org/@desource/phone-mask-svelte/-/phone-mask-svelte-1.2.0.tgz","fileCount":35,"integrity":"sha512-v1mYSrhLVa18V4g/62nVGjxhKADb4NJjUS2IWsMGW5zZ0Y4noCl9EQUAqfrtUvHFOfA5EH7FGZObfVFmCdNoQw==","signatures":[{"sig":"MEQCIAvpBmmOuyqQOu/a0HhoivbJ8kE3J/gxQw+mj7+l9N50AiBxKuyl192d0tJDZ0o6deRJI3c2UoEZQD2GGc7UKtmcRA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":107247},"main":"dist/index.cjs","type":"module","_from":"file:desource-phone-mask-svelte-1.2.0.tgz","types":"dist/types/index.d.ts","module":"dist/index.mjs","svelte":"dist/index.mjs","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/index.mjs","svelte":"./dist/index.mjs","require":"./dist/index.cjs"},"./assets/lib.css":"./dist/phone-mask-svelte.css"},"private":false,"scripts":{"dev":"vite demo","build":"pnpm clean && pnpm build:internal","clean":"rimraf dist tsconfig.tsbuildinfo test-results coverage","test:e2e":"playwright test","build:lib":"vite build","test:unit":"vitest run","typecheck":"svelte-check --tsconfig tsconfig.json","build:types":"tsc --project tsconfig.json","clean:modules":"rimraf node_modules","build:internal":"pnpm build:lib && pnpm build:types","test:unit:coverage":"vitest run --coverage.enabled --coverage.provider=v8 --coverage.reporter=lcov --coverage.reportsDirectory=coverage"},"_npmUser":{"name":"stefanpopov","email":"stef4n.popov@gmail.com"},"_resolved":"/tmp/70d8bf442c3cc80a57f2c00e3e1ac372/desource-phone-mask-svelte-1.2.0.tgz","_integrity":"sha512-v1mYSrhLVa18V4g/62nVGjxhKADb4NJjUS2IWsMGW5zZ0Y4noCl9EQUAqfrtUvHFOfA5EH7FGZObfVFmCdNoQw==","repository":{"url":"git+https://github.com/DeSource-Labs/phone-mask.git","type":"git","directory":"packages/phone-mask-svelte"},"_npmVersion":"11.11.1","description":"🌍 Svelte 5 component, composable, action, and attachment for international phone number masking. Powered by @desource/phone-mask with Google libphonenumber sync.","directories":{},"_nodeVersion":"25.8.2","dependencies":{"@desource/phone-mask":"1.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"svelte":"^5.54.1","svelte-check":"^4.4.5","@testing-library/svelte":"^5.3.1","@sveltejs/vite-plugin-svelte":"^7.0.0"},"peerDependencies":{"svelte":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/phone-mask-svelte_1.2.0_1774433039407_0.09535477445110274","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@desource/phone-mask-svelte","version":"1.3.0","keywords":["svelte","svelte5","phone","mask","input","component","international","libphonenumber","country-code","phone-number","formatting","validation","typescript"],"author":{"name":"Stefan Popov","email":"stefan@desource-labs.org"},"license":"MIT","_id":"@desource/phone-mask-svelte@1.3.0","maintainers":[{"name":"stefanpopov","email":"stef4n.popov@gmail.com"}],"homepage":"https://github.com/DeSource-Labs/phone-mask/tree/main/packages/phone-mask-svelte#readme","bugs":{"url":"https://github.com/DeSource-Labs/phone-mask/issues"},"dist":{"shasum":"43d1e4f967e000a9c29d5ffc311d18f473861e32","tarball":"https://registry.npmjs.org/@desource/phone-mask-svelte/-/phone-mask-svelte-1.3.0.tgz","fileCount":39,"integrity":"sha512-yWghKxg9TuU2P98GznIYfp3ClUgisrxABvm4UWyabGucmG2MTi9w1363Lat5/DwdWnECHvVFmuioUIgKRW4xAw==","signatures":[{"sig":"MEYCIQDTgdhAlqVjIRLbwWq0LdifG+ruPS4JCQis4QFP5KyRjQIhAOWpqzS0a4X7JSpvxkv65tlGmClLdSJAFlMfc+cP88d3","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":111606},"main":"dist/index.cjs","type":"module","_from":"file:desource-phone-mask-svelte-1.3.0.tgz","types":"dist/types/index.d.ts","module":"dist/index.mjs","svelte":"dist/index.mjs","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/index.mjs","svelte":"./dist/index.mjs","require":"./dist/index.cjs"},"./core":{"types":"./dist/types/core.d.ts","import":"./dist/core.mjs","require":"./dist/core.cjs"},"./assets/lib.css":"./dist/phone-mask-svelte.css"},"private":false,"scripts":{"dev":"vite demo","build":"pnpm clean && pnpm build:internal","clean":"rimraf dist tsconfig.tsbuildinfo test-results coverage","test:e2e":"playwright test","build:lib":"vite build","test:unit":"vitest run","typecheck":"svelte-check --tsconfig tsconfig.json","build:types":"tsc --project tsconfig.json","clean:modules":"rimraf node_modules","build:internal":"pnpm build:lib && pnpm build:types","test:unit:coverage":"vitest run --coverage.enabled --coverage.provider=v8 --coverage.reporter=lcov --coverage.reportsDirectory=coverage"},"_npmUser":{"name":"stefanpopov","email":"stef4n.popov@gmail.com"},"_resolved":"/tmp/6df3c4813ca5b32c709de03bee20da57/desource-phone-mask-svelte-1.3.0.tgz","_integrity":"sha512-yWghKxg9TuU2P98GznIYfp3ClUgisrxABvm4UWyabGucmG2MTi9w1363Lat5/DwdWnECHvVFmuioUIgKRW4xAw==","repository":{"url":"git+https://github.com/DeSource-Labs/phone-mask.git","type":"git","directory":"packages/phone-mask-svelte"},"_npmVersion":"11.11.1","description":"🌍 Svelte 5 component, composable, action, and attachment for international phone number masking. Powered by @desource/phone-mask with Google libphonenumber sync.","directories":{},"_nodeVersion":"25.8.2","dependencies":{"@desource/phone-mask":"1.3.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"svelte":"^5.55.0","svelte-check":"^4.4.5","@testing-library/svelte":"^5.3.1","@sveltejs/vite-plugin-svelte":"^7.0.0"},"peerDependencies":{"svelte":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/phone-mask-svelte_1.3.0_1774905963032_0.6258770421997504","host":"s3://npm-registry-packages-npm-production"}},"1.3.1":{"name":"@desource/phone-mask-svelte","version":"1.3.1","keywords":["svelte","svelte5","phone","mask","input","component","international","libphonenumber","country-code","phone-number","formatting","validation","typescript"],"author":{"name":"Stefan Popov","email":"stefan@desource-labs.org"},"license":"MIT","_id":"@desource/phone-mask-svelte@1.3.1","maintainers":[{"name":"stefanpopov","email":"stef4n.popov@gmail.com"}],"homepage":"https://github.com/DeSource-Labs/phone-mask/tree/main/packages/phone-mask-svelte#readme","bugs":{"url":"https://github.com/DeSource-Labs/phone-mask/issues"},"dist":{"shasum":"19135395ff18a3baeca8d2d53474087cda830f2d","tarball":"https://registry.npmjs.org/@desource/phone-mask-svelte/-/phone-mask-svelte-1.3.1.tgz","fileCount":39,"integrity":"sha512-/HHmr+VmCeYX0AU7Z46fDx4x7hFE/2PanFi0Dl5yJYV/KG+DUSWUs5PcLwXdA4yPxFN0mSD15jnra7dazTxYxg==","signatures":[{"sig":"MEUCIQCmEsJQvAshHW2SYBmW1M4IQ9DUvg1Tz+NplC9c1630XAIgXVi7I6mnyzlXuU67VtOiWbgZ1ClVWtFVj2LHXy1h9pQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@desource%2fphone-mask-svelte@1.3.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":114468},"main":"dist/index.cjs","type":"module","_from":"file:desource-phone-mask-svelte-1.3.1.tgz","types":"dist/types/index.d.ts","module":"dist/index.mjs","svelte":"dist/index.mjs","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/index.mjs","svelte":"./dist/index.mjs","require":"./dist/index.cjs"},"./core":{"types":"./dist/types/core.d.ts","import":"./dist/core.mjs","require":"./dist/core.cjs"},"./assets/lib.css":"./dist/phone-mask-svelte.css"},"private":false,"scripts":{"dev":"vite demo","build":"pnpm clean && pnpm build:internal","clean":"rimraf dist tsconfig.tsbuildinfo test-results coverage","test:e2e":"playwright test","build:lib":"vite build","test:unit":"vitest run","typecheck":"svelte-check --tsconfig tsconfig.json","build:types":"tsc --project tsconfig.json","clean:modules":"rimraf node_modules","build:internal":"pnpm build:lib && pnpm build:types","test:unit:coverage":"vitest run --coverage.enabled --coverage.provider=v8 --coverage.reporter=lcov --coverage.reportsDirectory=coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c990f1e0-13f4-4abe-9252-caa9de754a24"}},"_resolved":"/tmp/052f571f1da9b94a0b192ca7a0fe0856/desource-phone-mask-svelte-1.3.1.tgz","_integrity":"sha512-/HHmr+VmCeYX0AU7Z46fDx4x7hFE/2PanFi0Dl5yJYV/KG+DUSWUs5PcLwXdA4yPxFN0mSD15jnra7dazTxYxg==","repository":{"url":"git+https://github.com/DeSource-Labs/phone-mask.git","type":"git","directory":"packages/phone-mask-svelte"},"_npmVersion":"11.12.1","description":"🌍 Svelte 5 component, composable, action, and attachment for international phone number masking. Powered by @desource/phone-mask with Google libphonenumber sync.","directories":{},"_nodeVersion":"25.9.0","dependencies":{"@desource/phone-mask":"1.3.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"svelte":"^5.55.4","svelte-check":"^4.4.6","@testing-library/svelte":"^5.3.1","@sveltejs/vite-plugin-svelte":"^7.0.0"},"peerDependencies":{"svelte":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/phone-mask-svelte_1.3.1_1777638838815_0.5090192982670458","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"@desource/phone-mask-svelte","version":"1.4.0","keywords":["svelte","svelte5","phone","mask","input","component","international","libphonenumber","country-code","phone-number","formatting","validation","typescript"],"author":{"name":"Stefan Popov","email":"stefan@desource-labs.org"},"license":"MIT","_id":"@desource/phone-mask-svelte@1.4.0","maintainers":[{"name":"stefanpopov","email":"stef4n.popov@gmail.com"}],"homepage":"https://github.com/DeSource-Labs/phone-mask/tree/main/packages/phone-mask-svelte#readme","bugs":{"url":"https://github.com/DeSource-Labs/phone-mask/issues"},"dist":{"shasum":"1c90660faef391737c84be9ebf109f4032c2fe70","tarball":"https://registry.npmjs.org/@desource/phone-mask-svelte/-/phone-mask-svelte-1.4.0.tgz","fileCount":39,"integrity":"sha512-HATX9F9v/0QaYyxQLtyMeVu1ueDNDOu0i0gNQs1+bmkjSKXPaiPi2GP6cEFVL61HlDdiYej9vBPLl0o2xsSemQ==","signatures":[{"sig":"MEUCIQC6iHL+rwuJogZOmMCR6NqogaiD4w/NK7DoQk4AW0WliQIgJgJrKVIWOx2DjAs+hrBi9TpeEbEbOa4kR2uZqfnqAE0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@desource%2fphone-mask-svelte@1.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":115482},"main":"dist/index.cjs","type":"module","_from":"file:desource-phone-mask-svelte-1.4.0.tgz","types":"dist/types/index.d.ts","module":"dist/index.mjs","svelte":"dist/index.mjs","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/index.mjs","svelte":"./dist/index.mjs","require":"./dist/index.cjs"},"./core":{"types":"./dist/types/core.d.ts","import":"./dist/core.mjs","require":"./dist/core.cjs"},"./assets/lib.css":"./dist/phone-mask-svelte.css"},"private":false,"scripts":{"dev":"vite demo","build":"pnpm clean && pnpm build:internal","clean":"rimraf dist tsconfig.tsbuildinfo test-results coverage","test:e2e":"playwright test","build:lib":"vite build","test:unit":"vitest run","typecheck":"svelte-check --tsconfig tsconfig.json","build:types":"tsc --project tsconfig.json","clean:modules":"rimraf node_modules","build:internal":"pnpm build:lib && pnpm build:types","test:unit:coverage":"vitest run --coverage.enabled --coverage.provider=v8 --coverage.reporter=lcov --coverage.reportsDirectory=coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c990f1e0-13f4-4abe-9252-caa9de754a24"}},"_resolved":"/tmp/3fcf5d9ae76c76f598bf586b7af872b9/desource-phone-mask-svelte-1.4.0.tgz","_integrity":"sha512-HATX9F9v/0QaYyxQLtyMeVu1ueDNDOu0i0gNQs1+bmkjSKXPaiPi2GP6cEFVL61HlDdiYej9vBPLl0o2xsSemQ==","repository":{"url":"git+https://github.com/DeSource-Labs/phone-mask.git","type":"git","directory":"packages/phone-mask-svelte"},"_npmVersion":"11.12.1","description":"🌍 Svelte 5 component, composable, action, and attachment for international phone number masking. Powered by @desource/phone-mask with Google libphonenumber sync.","directories":{},"_nodeVersion":"25.9.0","dependencies":{"@desource/phone-mask":"1.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"svelte":"^5.55.5","svelte-check":"^4.4.8","@testing-library/svelte":"^5.3.1","@sveltejs/vite-plugin-svelte":"^7.1.2"},"peerDependencies":{"svelte":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/phone-mask-svelte_1.4.0_1778254287364_0.23256679596415464","host":"s3://npm-registry-packages-npm-production"}},"1.4.1":{"name":"@desource/phone-mask-svelte","version":"1.4.1","keywords":["svelte","svelte5","phone","mask","input","component","international","libphonenumber","country-code","phone-number","formatting","validation","typescript"],"author":"Stefan Popov <stefan@desource-labs.org>","license":"MIT","_id":"@desource/phone-mask-svelte@1.4.1","maintainers":[{"name":"stefanpopov","email":"stef4n.popov@gmail.com"}],"homepage":"https://github.com/DeSource-Labs/phone-mask/tree/main/packages/phone-mask-svelte#readme","bugs":{"url":"https://github.com/DeSource-Labs/phone-mask/issues"},"dist":{"shasum":"ebc1db83d8ac4143fc9b784a3f1c70e5be3f73a9","tarball":"https://registry.npmjs.org/@desource/phone-mask-svelte/-/phone-mask-svelte-1.4.1.tgz","fileCount":39,"integrity":"sha512-dWLClmxekIG0g1yOn+3+3vD8Fgt9nOCx4kVtgd6V+2zew2vHKRM/btUDQiI4raLOEd9bk7d4llyh+ahiQncPsg==","signatures":[{"sig":"MEQCIHw0nPJVuFHqhQJqbm3d6cOWnVSunDrM/kQHNdeXt+YNAiAX2tHMX8wdIU+A43rI3fuq17nUxPLgvYqZUZ5Uu70FEw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@desource%2fphone-mask-svelte@1.4.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":116034},"main":"dist/index.cjs","type":"module","types":"dist/types/index.d.ts","module":"dist/index.mjs","svelte":"dist/index.mjs","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/index.mjs","svelte":"./dist/index.mjs","require":"./dist/index.cjs"},"./core":{"types":"./dist/types/core.d.ts","import":"./dist/core.mjs","require":"./dist/core.cjs"},"./assets/lib.css":"./dist/phone-mask-svelte.css"},"private":false,"scripts":{"dev":"vite demo","build":"pnpm clean && pnpm build:internal","clean":"rimraf dist tsconfig.tsbuildinfo test-results coverage","test:e2e":"playwright test","build:lib":"vite build","test:unit":"vitest run","typecheck":"svelte-check --tsconfig tsconfig.json","build:types":"tsc --project tsconfig.json","clean:modules":"rimraf node_modules","build:internal":"pnpm build:lib && pnpm build:types","test:unit:coverage":"vitest run --coverage.enabled --coverage.provider=v8 --coverage.reporter=lcov --coverage.reportsDirectory=coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c990f1e0-13f4-4abe-9252-caa9de754a24"}},"repository":{"url":"git+https://github.com/DeSource-Labs/phone-mask.git","type":"git","directory":"packages/phone-mask-svelte"},"description":"🌍 Svelte 5 component, composable, action, and attachment for international phone number masking. Powered by @desource/phone-mask with Google libphonenumber sync.","directories":{},"_nodeVersion":"25.9.0","dependencies":{"@desource/phone-mask":"1.4.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"svelte":"^5.56.4","svelte-check":"^4.7.2","@testing-library/svelte":"^5.4.2","@sveltejs/vite-plugin-svelte":"^7.2.0"},"peerDependencies":{"svelte":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/phone-mask-svelte_1.4.1_1783979125633_0.7743609677344807","host":"s3://npm-registry-packages-npm-production"}},"1.5.0":{"name":"@desource/phone-mask-svelte","version":"1.5.0","keywords":["svelte","svelte5","phone","mask","input","component","international","libphonenumber","country-code","phone-number","formatting","validation","typescript"],"author":"Stefan Popov <stefan@desource-labs.org>","license":"MIT","_id":"@desource/phone-mask-svelte@1.5.0","maintainers":[{"name":"stefanpopov","email":"stef4n.popov@gmail.com"}],"homepage":"https://github.com/DeSource-Labs/phone-mask/tree/main/packages/phone-mask-svelte#readme","bugs":{"url":"https://github.com/DeSource-Labs/phone-mask/issues"},"dist":{"shasum":"da93f7a4e73b405e39b7fb9960744b433ad248e9","tarball":"https://registry.npmjs.org/@desource/phone-mask-svelte/-/phone-mask-svelte-1.5.0.tgz","fileCount":39,"integrity":"sha512-YwylIe+dq6N0dsrGly7SXpsuyfmm8pNoUU7kuV8Baote70bZjVWR+mt9GcUaR/7S0pffW72PE3ZO5efWM2hYmA==","signatures":[{"sig":"MEUCIEcqCgCitvuGLjA+b2QmRUlKEnK2pV0eHuCxSJRAQ23UAiEAnnGJmkDl5WxkrvzHwLFeod1cBMebQwuV4ZewLlattTQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@desource%2fphone-mask-svelte@1.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":120354},"main":"dist/index.cjs","type":"module","types":"dist/types/index.d.ts","module":"dist/index.mjs","svelte":"dist/index.mjs","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/index.mjs","svelte":"./dist/index.mjs","require":"./dist/index.cjs"},"./core":{"types":"./dist/types/core.d.ts","import":"./dist/core.mjs","require":"./dist/core.cjs"},"./assets/lib.css":"./dist/phone-mask-svelte.css"},"private":false,"scripts":{"dev":"vite demo","build":"pnpm clean && pnpm build:internal","clean":"rimraf dist tsconfig.tsbuildinfo test-results coverage","test:e2e":"playwright test","build:css":"sass src/style.scss dist/phone-mask-svelte.css --no-source-map --style=compressed","build:lib":"vite build","test:unit":"vitest run","typecheck":"svelte-check --tsconfig tsconfig.json","build:types":"tsc --project tsconfig.json","clean:modules":"rimraf node_modules","build:internal":"pnpm build:lib && pnpm build:types && pnpm build:css","test:unit:coverage":"vitest run --coverage.enabled --coverage.provider=v8 --coverage.reporter=lcov --coverage.reportsDirectory=coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c990f1e0-13f4-4abe-9252-caa9de754a24"}},"repository":{"url":"git+https://github.com/DeSource-Labs/phone-mask.git","type":"git","directory":"packages/phone-mask-svelte"},"description":"🌍 Svelte 5 component, composable, action, and attachment for international phone number masking. Powered by @desource/phone-mask with Google libphonenumber sync.","directories":{},"_nodeVersion":"25.9.0","dependencies":{"@desource/phone-mask":"1.5.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"svelte":"^5.56.8","svelte-check":"^4.7.4","@testing-library/svelte":"^5.4.2","@sveltejs/vite-plugin-svelte":"^7.2.0"},"peerDependencies":{"svelte":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/phone-mask-svelte_1.5.0_1785691052576_0.02083201340768026","host":"s3://npm-registry-packages-npm-production"}},"1.6.0":{"name":"@desource/phone-mask-svelte","version":"1.6.0","keywords":["svelte","svelte5","phone","mask","input","component","international","libphonenumber","country-code","phone-number","formatting","validation","typescript"],"author":"Stefan Popov <stefan@desource-labs.org>","license":"MIT","_id":"@desource/phone-mask-svelte@1.6.0","maintainers":[{"name":"stefanpopov","email":"stef4n.popov@gmail.com"}],"homepage":"https://github.com/DeSource-Labs/phone-mask/tree/main/packages/phone-mask-svelte#readme","bugs":{"url":"https://github.com/DeSource-Labs/phone-mask/issues"},"dist":{"shasum":"b025832899145d3a675030b6559cbb291c503441","tarball":"https://registry.npmjs.org/@desource/phone-mask-svelte/-/phone-mask-svelte-1.6.0.tgz","fileCount":39,"integrity":"sha512-AZPH27l64jS2IrG/lCVgJk8cTZbEPZbSv5th00kWCo0Y1pVUYQhkskxokDsmUhw2Z1ECTBJQPCzyZmilcYmn/Q==","signatures":[{"sig":"MEUCIQC9kKkkGSv02Ljo4xB88tn4SaOrOKPAtCqS7EfrNSir0AIgJovxNW0WzhY/NK/MB199BXUU9bt1Wqp86fkJhINBC+g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@desource%2fphone-mask-svelte@1.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":120954},"main":"dist/index.cjs","type":"module","types":"dist/types/index.d.ts","module":"dist/index.mjs","svelte":"dist/index.mjs","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/index.mjs","svelte":"./dist/index.mjs","require":"./dist/index.cjs"},"./core":{"types":"./dist/types/core.d.ts","import":"./dist/core.mjs","require":"./dist/core.cjs"},"./assets/lib.css":"./dist/phone-mask-svelte.css"},"private":false,"scripts":{"dev":"vite demo","build":"pnpm clean && pnpm build:internal","clean":"rimraf dist tsconfig.tsbuildinfo test-results coverage","test:e2e":"playwright test","build:css":"sass src/style.scss dist/phone-mask-svelte.css --no-source-map --style=compressed","build:lib":"vite build","test:unit":"vitest run","typecheck":"svelte-check --tsconfig tsconfig.json","build:types":"tsc --project tsconfig.json","clean:modules":"rimraf node_modules","build:internal":"pnpm build:lib && pnpm build:types && pnpm build:css","test:unit:coverage":"vitest run --coverage.enabled --coverage.provider=v8 --coverage.reporter=lcov --coverage.reportsDirectory=coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c990f1e0-13f4-4abe-9252-caa9de754a24"}},"repository":{"url":"git+https://github.com/DeSource-Labs/phone-mask.git","type":"git","directory":"packages/phone-mask-svelte"},"description":"🌍 Svelte 5 component, composable, action, and attachment for international phone number masking. Powered by @desource/phone-mask with Google libphonenumber sync.","directories":{},"_nodeVersion":"25.9.0","dependencies":{"@desource/phone-mask":"1.6.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"svelte":"^5.56.8","svelte-check":"^4.7.4","@testing-library/svelte":"^5.4.2","@sveltejs/vite-plugin-svelte":"^7.2.0"},"peerDependencies":{"svelte":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/phone-mask-svelte_1.6.0_1786098004761_0.9517963452021956","host":"s3://npm-registry-packages-npm-production"}},"1.6.1":{"name":"@desource/phone-mask-svelte","version":"1.6.1","keywords":["svelte","svelte5","phone","mask","input","component","international","libphonenumber","country-code","phone-number","formatting","validation","typescript"],"author":"Stefan Popov <stefan@desource-labs.org>","license":"MIT","_id":"@desource/phone-mask-svelte@1.6.1","maintainers":[{"name":"stefanpopov","email":"stef4n.popov@gmail.com"}],"homepage":"https://github.com/DeSource-Labs/phone-mask/tree/main/packages/phone-mask-svelte#readme","bugs":{"url":"https://github.com/DeSource-Labs/phone-mask/issues"},"dist":{"shasum":"a5ead770923b15026a0e43b250aa33686d5c06a8","tarball":"https://registry.npmjs.org/@desource/phone-mask-svelte/-/phone-mask-svelte-1.6.1.tgz","fileCount":39,"integrity":"sha512-3h1i9vPKZpM6Y1IAh1AoPPDMx+t3MIW1GoctZFATK4nIfem7FkmrSCUh/wD1Mr8LTWL5SFZPDEZDmN7OR5Ui4w==","signatures":[{"sig":"MEUCICV47NjVo/D0MPO8mDXgiZp8ESCJI/t7Xkb7880TEqnCAiEAiv0UP5OjJSQeuBiHizh3T1E80y2sZJxEEpSubqvHQ1w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@desource%2fphone-mask-svelte@1.6.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":121143},"main":"dist/index.cjs","type":"module","types":"dist/types/index.d.ts","module":"dist/index.mjs","svelte":"dist/index.mjs","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/index.mjs","svelte":"./dist/index.mjs","require":"./dist/index.cjs"},"./core":{"types":"./dist/types/core.d.ts","import":"./dist/core.mjs","require":"./dist/core.cjs"},"./assets/lib.css":"./dist/phone-mask-svelte.css"},"private":false,"scripts":{"dev":"vite demo","build":"pnpm clean && pnpm build:internal","clean":"rimraf dist tsconfig.tsbuildinfo test-results coverage","test:e2e":"playwright test","build:css":"sass src/style.scss dist/phone-mask-svelte.css --no-source-map --style=compressed","build:lib":"vite build","test:unit":"vitest run","typecheck":"svelte-check --tsconfig tsconfig.json","build:types":"tsc --project tsconfig.json","clean:modules":"rimraf node_modules","build:internal":"pnpm build:lib && pnpm build:types && pnpm build:css","test:unit:coverage":"vitest run --coverage.enabled --coverage.provider=v8 --coverage.reporter=lcov --coverage.reportsDirectory=coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c990f1e0-13f4-4abe-9252-caa9de754a24"}},"repository":{"url":"git+https://github.com/DeSource-Labs/phone-mask.git","type":"git","directory":"packages/phone-mask-svelte"},"description":"🌍 Svelte 5 component, composable, action, and attachment for international phone number masking. Powered by @desource/phone-mask with Google libphonenumber sync.","directories":{},"_nodeVersion":"25.9.0","dependencies":{"@desource/phone-mask":"1.6.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"svelte":"^5.56.8","svelte-check":"^4.7.4","@testing-library/svelte":"^5.4.2","@sveltejs/vite-plugin-svelte":"^7.2.0"},"peerDependencies":{"svelte":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/phone-mask-svelte_1.6.1_1786099323688_0.047327840832302126","host":"s3://npm-registry-packages-npm-production"}},"1.6.2":{"name":"@desource/phone-mask-svelte","version":"1.6.2","keywords":["svelte","svelte5","phone","mask","input","component","international","libphonenumber","country-code","phone-number","formatting","validation","typescript"],"author":"Stefan Popov <stefan@desource-labs.org>","license":"MIT","_id":"@desource/phone-mask-svelte@1.6.2","maintainers":[{"name":"stefanpopov","email":"stef4n.popov@gmail.com"}],"homepage":"https://github.com/DeSource-Labs/phone-mask/tree/main/packages/phone-mask-svelte#readme","bugs":{"url":"https://github.com/DeSource-Labs/phone-mask/issues"},"dist":{"shasum":"5b479873fad9767c5d2c3a84dbbd642c140bdb95","tarball":"https://registry.npmjs.org/@desource/phone-mask-svelte/-/phone-mask-svelte-1.6.2.tgz","fileCount":39,"integrity":"sha512-nHSWerindxT7wdXhg0mDrX7r1l7zR8smw+Tn/U1QCPrpg3IaSYVujORUPPQt2im1dw3EOcSSSeGbSAocz8QQdw==","signatures":[{"sig":"MEUCIQCpvmDaUwy6Ws2BYTDST6bHSchVByW56v6bShqKJBiJQAIgWhp87ZtBOrGVbFd/4N8794cbDFPolVJaPFIjhP2kgOw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@desource%2fphone-mask-svelte@1.6.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":121482},"main":"dist/index.cjs","type":"module","types":"dist/types/index.d.ts","module":"dist/index.mjs","svelte":"dist/index.mjs","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/index.mjs","svelte":"./dist/index.mjs","require":"./dist/index.cjs"},"./core":{"types":"./dist/types/core.d.ts","import":"./dist/core.mjs","require":"./dist/core.cjs"},"./assets/lib.css":"./dist/phone-mask-svelte.css"},"private":false,"scripts":{"dev":"vite demo","build":"pnpm clean && pnpm build:internal","clean":"rimraf dist tsconfig.tsbuildinfo test-results coverage","test:e2e":"playwright test","build:css":"sass src/style.scss dist/phone-mask-svelte.css --no-source-map --style=compressed","build:lib":"vite build","test:unit":"vitest run","typecheck":"svelte-check --tsconfig tsconfig.json","build:types":"tsc --project tsconfig.json","clean:modules":"rimraf node_modules","build:internal":"pnpm build:lib && pnpm build:types && pnpm build:css","test:unit:coverage":"vitest run --coverage.enabled --coverage.provider=v8 --coverage.reporter=lcov --coverage.reportsDirectory=coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c990f1e0-13f4-4abe-9252-caa9de754a24"}},"repository":{"url":"git+https://github.com/DeSource-Labs/phone-mask.git","type":"git","directory":"packages/phone-mask-svelte"},"description":"🌍 Svelte 5 component, composable, action, and attachment for international phone number masking. Powered by @desource/phone-mask with Google libphonenumber sync.","directories":{},"_nodeVersion":"26.7.0","dependencies":{"@desource/phone-mask":"1.6.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"svelte":"^5.56.10","svelte-check":"^4.7.6","@testing-library/svelte":"^5.4.2","@sveltejs/vite-plugin-svelte":"^7.3.0"},"peerDependencies":{"svelte":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/phone-mask-svelte_1.6.2_1787574774064_0.522975643115515","host":"s3://npm-registry-packages-npm-production"}},"1.6.3":{"name":"@desource/phone-mask-svelte","version":"1.6.3","keywords":["svelte","svelte5","phone","mask","input","component","international","libphonenumber","country-code","phone-number","formatting","validation","typescript"],"author":"Stefan Popov <stefan@desource-labs.org>","license":"MIT","_id":"@desource/phone-mask-svelte@1.6.3","maintainers":[{"name":"stefanpopov","email":"stef4n.popov@gmail.com"}],"homepage":"https://github.com/DeSource-Labs/phone-mask/tree/main/packages/phone-mask-svelte#readme","bugs":{"url":"https://github.com/DeSource-Labs/phone-mask/issues"},"dist":{"shasum":"65528380ccca4c138a8eccca042555cd67b6f5cd","tarball":"https://registry.npmjs.org/@desource/phone-mask-svelte/-/phone-mask-svelte-1.6.3.tgz","fileCount":39,"integrity":"sha512-sshmdJPTmmBnmuKOQTMJycrVTcqdxRZs98hcABpiABu6aikN1lX4EfDt/CoHYN3fHN6My5NEkQ4e8vHIfVOntw==","signatures":[{"sig":"MEQCICcpkoxuvVlb1qkoVCESuFziW9yxeuOPEuOovlfzEjNQAiBj8h/ByNuyCB6+jFU/HKkDFM+mRXCtsT8qNRfW4YKlUw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@desource%2fphone-mask-svelte@1.6.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":121634},"main":"dist/index.cjs","type":"module","types":"dist/types/index.d.ts","module":"dist/index.mjs","svelte":"dist/index.mjs","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/index.mjs","svelte":"./dist/index.mjs","require":"./dist/index.cjs"},"./core":{"types":"./dist/types/core.d.ts","import":"./dist/core.mjs","require":"./dist/core.cjs"},"./assets/lib.css":"./dist/phone-mask-svelte.css"},"private":false,"scripts":{"dev":"vite demo","build":"pnpm clean && pnpm build:internal","clean":"rimraf dist tsconfig.tsbuildinfo test-results coverage","test:e2e":"playwright test","build:css":"sass src/style.scss dist/phone-mask-svelte.css --no-source-map --style=compressed","build:lib":"vite build","test:unit":"vitest run","typecheck":"svelte-check --tsconfig tsconfig.json","build:types":"tsc --project tsconfig.json","clean:modules":"rimraf node_modules","build:internal":"pnpm build:lib && pnpm build:types && pnpm build:css","test:unit:coverage":"vitest run --coverage.enabled --coverage.provider=v8 --coverage.reporter=lcov --coverage.reportsDirectory=coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c990f1e0-13f4-4abe-9252-caa9de754a24"}},"repository":{"url":"git+https://github.com/DeSource-Labs/phone-mask.git","type":"git","directory":"packages/phone-mask-svelte"},"description":"🌍 Svelte 5 component, composable, action, and attachment for international phone number masking. Powered by @desource/phone-mask with Google libphonenumber sync.","directories":{},"_nodeVersion":"26.8.1","dependencies":{"@desource/phone-mask":"1.6.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"svelte":"^5.57.0","svelte-check":"^4.7.6","@testing-library/svelte":"^5.4.2","@sveltejs/vite-plugin-svelte":"^7.3.0"},"peerDependencies":{"svelte":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/phone-mask-svelte_1.6.3_1788824874976_0.07150732670734361","host":"s3://npm-registry-packages-npm-production"}},"1.6.4":{"_id":"@desource/phone-mask-svelte@1.6.4","bugs":{"url":"https://github.com/DeSource-Labs/phone-mask/issues"},"dist":{"shasum":"b51b9e1ca69749a413daff0d4ee6fb59f88a9e1f","tarball":"https://registry.npmjs.org/@desource/phone-mask-svelte/-/phone-mask-svelte-1.6.4.tgz","fileCount":39,"integrity":"sha512-ZgXqOF6YzB0psEFGOU8arPIn0ojgUBUEu5NAbk82F0EdLc/pNgjK7EOaFZj80THTgcbWrxw3B5MKPtn0OGMTgg==","signatures":[{"sig":"MEYCIQC8JWqx1eH0wHDVCrahpETG4R/f4vDEwiOY+daiQqdGWwIhANaLyz/vlQ6tKoQSqFgciRQIuxOemdPwJf76gv9ciDUx","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIBPDBYF8r2SPUbO1zYZhwx4dOpk9fachHpmZYzBNRdBQAiBZSgAmomBgeNoJ39rc0G8ucvm43w9/MW/oKNeKtneCKQ=="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@desource%2fphone-mask-svelte@1.6.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":122081},"main":"dist/index.cjs","name":"@desource/phone-mask-svelte","type":"module","types":"dist/types/index.d.ts","author":"Stefan Popov <stefan@desourcelabs.com>","module":"dist/index.mjs","svelte":"dist/index.mjs","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/index.mjs","svelte":"./dist/index.mjs","require":"./dist/index.cjs"},"./core":{"types":"./dist/types/core.d.ts","import":"./dist/core.mjs","require":"./dist/core.cjs"},"./assets/lib.css":"./dist/phone-mask-svelte.css"},"license":"MIT","private":false,"scripts":{"dev":"vite demo","build":"pnpm clean && pnpm build:internal","clean":"rimraf dist tsconfig.tsbuildinfo test-results coverage","test:e2e":"playwright test","build:css":"sass src/style.scss dist/phone-mask-svelte.css --no-source-map --style=compressed","build:lib":"vite build","test:unit":"vitest run","typecheck":"svelte-check --tsconfig tsconfig.json","build:types":"tsc --project tsconfig.json","clean:modules":"rimraf node_modules","build:internal":"pnpm build:lib && pnpm build:types && pnpm build:css","test:unit:coverage":"vitest run --coverage.enabled --coverage.provider=v8 --coverage.reporter=lcov --coverage.reportsDirectory=coverage"},"version":"1.6.4","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c990f1e0-13f4-4abe-9252-caa9de754a24"}},"homepage":"https://github.com/DeSource-Labs/phone-mask/tree/main/packages/phone-mask-svelte#readme","keywords":["svelte","svelte5","phone","mask","input","component","international","libphonenumber","country-code","phone-number","formatting","validation","typescript"],"repository":{"url":"git+https://github.com/DeSource-Labs/phone-mask.git","type":"git","directory":"packages/phone-mask-svelte"},"description":"🌍 Svelte 5 component, composable, action, and attachment for international phone number masking. Powered by @desource/phone-mask with Google libphonenumber sync.","directories":{},"maintainers":[{"name":"stefanpopov","email":"stef4n.popov@gmail.com"}],"dependencies":{"@desource/phone-mask":"1.6.4"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"svelte":"^5.57.1","svelte-check":"^4.7.6","@testing-library/svelte":"^5.4.2","@sveltejs/vite-plugin-svelte":"^7.3.1"},"peerDependencies":{"svelte":"^5.0.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/phone-mask-svelte_1.6.4_1790382011787_0.9610474953798858"}}},"time":{"created":"2026-03-06T16:42:29.384Z","modified":"2026-09-26T00:20:12.209Z","1.0.0":"2026-03-06T16:42:29.684Z","1.1.0":"2026-03-15T17:48:07.612Z","1.1.1":"2026-03-15T18:39:28.862Z","1.1.2":"2026-03-22T15:48:53.720Z","1.2.0":"2026-03-25T10:03:59.576Z","1.3.0":"2026-03-30T21:26:03.175Z","1.3.1":"2026-05-01T12:33:58.959Z","1.4.0":"2026-05-08T15:31:27.507Z","1.4.1":"2026-07-13T21:45:25.779Z","1.5.0":"2026-08-02T17:17:32.728Z","1.6.0":"2026-08-07T10:20:04.913Z","1.6.1":"2026-08-07T10:42:03.838Z","1.6.2":"2026-08-24T12:32:54.207Z","1.6.3":"2026-09-07T23:47:55.106Z","1.6.4":"2026-09-26T00:20:11.905Z"},"bugs":{"url":"https://github.com/DeSource-Labs/phone-mask/issues"},"author":"Stefan Popov <stefan@desourcelabs.com>","license":"MIT","homepage":"https://github.com/DeSource-Labs/phone-mask/tree/main/packages/phone-mask-svelte#readme","keywords":["svelte","svelte5","phone","mask","input","component","international","libphonenumber","country-code","phone-number","formatting","validation","typescript"],"repository":{"url":"git+https://github.com/DeSource-Labs/phone-mask.git","type":"git","directory":"packages/phone-mask-svelte"},"description":"🌍 Svelte 5 component, composable, action, and attachment for international phone number masking. Powered by @desource/phone-mask with Google libphonenumber sync.","maintainers":[{"name":"stefanpopov","email":"stef4n.popov@gmail.com"}],"readme":"# @desource/phone-mask-svelte\n\n> Svelte 5 phone input component with Google's libphonenumber data\n\n[![npm version](https://img.shields.io/npm/v/@desource/phone-mask-svelte?color=blue&logo=svelte)](https://www.npmjs.com/package/@desource/phone-mask-svelte)\n[![codewiki](https://img.shields.io/badge/code%20wiki-000000?logo=googlegemini&logoColor=white)](https://codewiki.google/github.com/desource-labs/phone-mask)\n[![bundle size](https://img.shields.io/bundlephobia/minzip/@desource/phone-mask-svelte?label=gzip%20size&color=purple)](https://bundlephobia.com/package/@desource/phone-mask-svelte)\n[![context7 docs](https://img.shields.io/badge/context7%20docs-000000)](https://context7.com/desource-labs/phone-mask)\n[![license](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/DeSource-Labs/phone-mask/blob/main/LICENSE)\n\nBeautiful, accessible, extreme small & tree-shakeable Svelte 5 phone input with auto-formatting, country selector, and validation.\n\n## ✨ Features\n\n- 🎨 **Beautiful UI** — Modern design with light/dark themes\n- 🔍 **Smart Country Search** — Fuzzy matching with keyboard navigation\n- 🎭 **Auto-formatting** — As-you-type formatting with smart cursor\n- ✅ **Validation** — Built-in validation with visual feedback\n- 📋 **Copy Button** — One-click copy to clipboard\n- 🌐 **Auto-detection** — GeoIP and locale-based detection\n- ♿ **Accessible** — ARIA labels, keyboard navigation\n- 📱 **Mobile-friendly** — Optimized for touch devices\n- 🎯 **TypeScript** — Full type safety\n- 🧩 **Four modes** — Component, composable, attachment, or action\n- ⚡ **Optimized** — Tree-shaking and code splitting\n\n## 📦 Installation\n\n```bash\nnpm install @desource/phone-mask-svelte\n# or\nyarn add @desource/phone-mask-svelte\n# or\npnpm add @desource/phone-mask-svelte\n```\n\n## 🚀 Quick Start\n\n### Importing\n\nComponent mode:\n\n```ts\nimport { PhoneInput } from '@desource/phone-mask-svelte';\nimport '@desource/phone-mask-svelte/assets/lib.css'; // Import styles\n```\n\nComposable mode:\n\n```ts\nimport { usePhoneMask } from '@desource/phone-mask-svelte';\n```\n\nCore kit utilities and mask data re-exported from the core package subpaths:\n\n```ts\nimport { getFlagEmoji, formatDigitsWithMap } from '@desource/phone-mask-svelte/core';\n```\n\nAttachment mode (for existing `<input>` elements, requires Svelte 5.29+):\n\n```ts\nimport { phoneMaskAttachment as phoneMask } from '@desource/phone-mask-svelte';\n```\n\nAction mode (for existing `<input>` elements, works with all Svelte 5 versions):\n\n```ts\nimport { phoneMaskAction as phoneMask } from '@desource/phone-mask-svelte';\n```\n\n### Component Mode\n\n```svelte\n<script lang=\"ts\">\n  import { PhoneInput } from '@desource/phone-mask-svelte';\n  import '@desource/phone-mask-svelte/assets/lib.css';\n\n  let phone = $state('');\n  let isValid = $state(false);\n</script>\n\n<PhoneInput bind:value={phone} country=\"US\" onvalidationchange={(v) => (isValid = v)} />\n\n{#if isValid}\n  <p>✓ Valid phone number</p>\n{/if}\n```\n\n### Composable Mode\n\nFor custom input implementations:\n\n```svelte\n<script lang=\"ts\">\n  import { usePhoneMask } from '@desource/phone-mask-svelte';\n\n  let value = $state('');\n\n  const phoneMask = usePhoneMask({\n    value: () => value,\n    onChange: (digits) => (value = digits),\n    country: () => 'US',\n    detect: () => false\n  });\n</script>\n\n<div>\n  <input bind:this={phoneMask.inputRef} type=\"tel\" placeholder=\"Phone number\" />\n  <p>Formatted: {phoneMask.fullFormatted}</p>\n  <p>Valid: {phoneMask.isComplete ? 'Yes' : 'No'}</p>\n  <p>Country: {phoneMask.country.name}</p>\n  <button onclick={() => phoneMask.setCountry('GB')}>Use UK</button>\n</div>\n```\n\n### Attachment Mode\n\nFor existing `<input>` elements without a wrapper component. Requires Svelte 5.29+.\n\n```svelte\n<script lang=\"ts\">\n  import { phoneMaskAttachment as phoneMask } from '@desource/phone-mask-svelte';\n  import type { PMaskPhoneNumber, PMaskFull } from '@desource/phone-mask-svelte';\n\n  let country = $state('US');\n\n  function handleChange(phone: PMaskPhoneNumber) {\n    console.log('Full:', phone.full, 'Digits:', phone.digits);\n  }\n\n  function handleCountryChange(c: PMaskFull) {\n    console.log('Country:', c.name);\n  }\n</script>\n\n<div class=\"phone-wrapper\">\n  <select bind:value={country}>\n    <option value=\"US\">🇺🇸 +1</option>\n    <option value=\"GB\">🇬🇧 +44</option>\n    <option value=\"DE\">🇩🇪 +49</option>\n  </select>\n\n  <input\n    {@attach phoneMask({ country, onChange: handleChange, onCountryChange: handleCountryChange })}\n    placeholder=\"Phone number\"\n  />\n</div>\n```\n\nShorthand (country code string):\n\n```svelte\n<input {@attach phoneMask('US')} />\n```\n\nWith auto-detection:\n\n```svelte\n<input {@attach phoneMask({ detect: true, onChange: handleChange })} />\n```\n\n### Action Mode\n\nFor existing `<input>` elements without a wrapper component. Works with **all Svelte 5 versions** (including pre-5.29). Reactive parameter changes are applied through Svelte's `use:` action `update()` lifecycle hook.\n\n```svelte\n<script lang=\"ts\">\n  import { phoneMaskAction as phoneMask } from '@desource/phone-mask-svelte';\n  import type { PMaskPhoneNumber, PMaskFull } from '@desource/phone-mask-svelte';\n\n  let country = $state('US');\n\n  function handleChange(phone: PMaskPhoneNumber) {\n    console.log('Full:', phone.full, 'Digits:', phone.digits);\n  }\n\n  function handleCountryChange(c: PMaskFull) {\n    console.log('Country:', c.name);\n  }\n</script>\n\n<div class=\"phone-wrapper\">\n  <select bind:value={country}>\n    <option value=\"US\">🇺🇸 +1</option>\n    <option value=\"GB\">🇬🇧 +44</option>\n    <option value=\"DE\">🇩🇪 +49</option>\n  </select>\n\n  <input\n    use:phoneMask={{ country, onChange: handleChange, onCountryChange: handleCountryChange }}\n    placeholder=\"Phone number\"\n  />\n</div>\n```\n\nShorthand (country code string):\n\n```svelte\n<input use:phoneMask={'US'} />\n```\n\nWith auto-detection:\n\n```svelte\n<input use:phoneMask={{ detect: true, onChange: handleChange }} />\n```\n\n### Send Raw Digits to Backend\n\n```svelte\n<script lang=\"ts\">\n  import { PhoneInput, type PMaskPhoneNumber } from '@desource/phone-mask-svelte';\n\n  let digits = $state('');\n\n  async function handlePhoneChange(phone: PMaskPhoneNumber) {\n    await fetch('/api/profile/phone', {\n      method: 'POST',\n      headers: { 'content-type': 'application/json' },\n      body: JSON.stringify({\n        phoneDigits: phone.digits, // unformatted value for backend\n        phoneFull: phone.full // optional full number with country code\n      })\n    });\n  }\n</script>\n\n<PhoneInput bind:value={digits} country=\"US\" onchange={handlePhoneChange} />\n```\n\n### Dynamic Mask Updates on Country Change\n\n```svelte\n<script lang=\"ts\">\n  import { usePhoneMask, type PCountryKey } from '@desource/phone-mask-svelte';\n\n  let selectedCountry = $state<PCountryKey>('US');\n  let digits = $state('');\n\n  const phoneMask = usePhoneMask({\n    value: () => digits,\n    onChange: (value) => (digits = value),\n    country: () => selectedCountry\n  });\n\n  function onCountrySelect(nextCountry: PCountryKey) {\n    selectedCountry = nextCountry;\n    phoneMask.setCountry(nextCountry); // updates mask immediately\n  }\n</script>\n\n<select\n  value={selectedCountry}\n  onchange={(e) => onCountrySelect((e.currentTarget as HTMLSelectElement).value as PCountryKey)}\n>\n  <option value=\"US\">US</option>\n  <option value=\"GB\">GB</option>\n  <option value=\"DE\">DE</option>\n</select>\n\n<input bind:this={phoneMask.inputRef} type=\"tel\" />\n<p>{phoneMask.fullFormatted}</p>\n<p>{phoneMask.isComplete ? 'complete' : 'incomplete'}</p>\n```\n\n### Multi-tenant: tenantId Default Country + Tenant-specific Validation Rules\n\n```svelte\n<script lang=\"ts\">\n  import { usePhoneMask, type PCountryKey } from '@desource/phone-mask-svelte';\n\n  type TenantPolicy = {\n    defaultCountry: PCountryKey;\n    prefixRule?: RegExp;\n  };\n\n  let { tenantId }: { tenantId: string } = $props();\n\n  const TENANT_POLICIES: Record<string, TenantPolicy> = {\n    acme: { defaultCountry: 'US', prefixRule: /^(202|303)\\d{7}$/ },\n    globex: { defaultCountry: 'GB', prefixRule: /^7\\d{9}$/ }\n  };\n\n  const policy = $derived(TENANT_POLICIES[tenantId] ?? { defaultCountry: 'US' as const });\n  let digits = $state('');\n\n  const phoneMask = usePhoneMask({\n    value: () => digits,\n    onChange: (value) => (digits = value),\n    country: () => policy.defaultCountry\n  });\n\n  const isTenantValid = $derived(\n    phoneMask.isComplete && (policy.prefixRule ? policy.prefixRule.test(phoneMask.digits) : true)\n  );\n</script>\n\n<input bind:this={phoneMask.inputRef} type=\"tel\" />\n<p>Default country: {policy.defaultCountry}</p>\n<p>Tenant validation: {isTenantValid ? 'pass' : 'fail'}</p>\n```\n\n## 📖 Component API\n\n### Props\n\n> **Note:** The component supports both controlled and bindable modes. Use `bind:value` for two-way binding or `value` + `onchange` for controlled mode.\n\n```ts\ninterface PhoneInputProps {\n  // Bindable value (digits only, without country code)\n  value?: string;\n\n  // Optional id/name applied to the underlying <input> for forms/autofill\n  id?: string;\n  name?: string;\n\n  // Preselected country (ISO 3166-1 alpha-2)\n  country?: CountryKey;\n\n  // Auto-detect country from IP/locale\n  detect?: boolean; // Default: true\n\n  // Locale for country names\n  locale?: string; // Default: browser language\n\n  // Size variant\n  size?: 'compact' | 'normal' | 'large'; // Default: 'normal'\n\n  // Visual theme (\"auto\" | \"light\" | \"dark\")\n  theme?: 'auto' | 'light' | 'dark'; // Default: 'auto'\n\n  // Disabled state\n  disabled?: boolean; // Default: false\n\n  // Readonly state\n  readonly?: boolean; // Default: false\n\n  // Show copy button\n  showCopy?: boolean; // Default: true\n\n  // Show clear button\n  showClear?: boolean; // Default: false\n\n  // Show validation state (borders & outline)\n  withValidity?: boolean; // Default: true\n\n  // Custom search placeholder\n  searchPlaceholder?: string; // Default: 'Search country or code...'\n\n  // Custom no results text\n  noResultsText?: string; // Default: 'No countries found'\n\n  // Custom clear button label\n  clearButtonLabel?: string; // Default: 'Clear phone number'\n\n  // Dropdown menu custom CSS class\n  dropdownClass?: string;\n\n  // Disable default styles\n  disableDefaultStyles?: boolean; // Default: false\n\n  // Extra CSS class merged onto root element\n  class?: string;\n\n  // Callback when the phone number changes.\n  // Provides an object with:\n  // - full: Full phone number with country code (e.g. +1234567890)\n  // - fullFormatted: Full phone number formatted according to country rules (e.g. +1 234-567-890)\n  // - digits: Only the digits of the phone number without country code (e.g. 234567890)\n  onchange?: (value: PhoneNumber) => void;\n\n  // Callback when the selected country changes\n  oncountrychange?: (country: MaskFull) => void;\n\n  // Callback when the validation state changes\n  onvalidationchange?: (isValid: boolean) => void;\n\n  // Callback when the input is focused\n  onfocus?: (event: FocusEvent) => void;\n\n  // Callback when the input is blurred\n  onblur?: (event: FocusEvent) => void;\n\n  // Callback when phone number is copied\n  oncopy?: (value: string) => void;\n\n  // Callback when input is cleared\n  onclear?: () => void;\n}\n```\n\n### Exposed Methods\n\nAccess component methods via `bind:this`:\n\n```svelte\n<script lang=\"ts\">\n  import { PhoneInput } from '@desource/phone-mask-svelte';\n  import type { PhoneInputExposed } from '@desource/phone-mask-svelte';\n\n  let phoneInput = $state<PhoneInputExposed | null>(null);\n</script>\n\n<PhoneInput bind:this={phoneInput} />\n<button onclick={() => phoneInput?.focus()}>Focus</button>\n```\n\n```ts\ninterface PhoneInputExposed {\n  focus: () => void; // Focus the input\n  blur: () => void; // Blur the input\n  clear: () => void; // Clear the input value\n  selectCountry: (code: string) => void; // Programmatically select a country by ISO code\n  getFullNumber: () => string; // Returns full phone number with country code (e.g. +1234567890)\n  getFullFormattedNumber: () => string; // Returns formatted number with country code (e.g. +1 234-567-890)\n  getDigits: () => string; // Returns only digits without country code (e.g. 234567890)\n  isValid: () => boolean; // Checks if the current phone number is valid\n  isComplete: () => boolean; // Alias for isValid()\n}\n```\n\n### Snippets\n\n```svelte\n<PhoneInput bind:value={phone}>\n  {#snippet flag(country)}\n    <img src=\"/flags/{country.code.toLowerCase()}.svg\" alt={country.name} />\n  {/snippet}\n\n  {#snippet copysvg(copied)}\n    {copied ? '✓' : '📋'}\n  {/snippet}\n\n  {#snippet clearsvg()}\n    ✕\n  {/snippet}\n\n  {#snippet actionsbefore()}\n    <button onclick={handleCustomAction}>Custom</button>\n  {/snippet}\n</PhoneInput>\n```\n\n| Snippet         | Props                    | Description                                       |\n| --------------- | ------------------------ | ------------------------------------------------- |\n| `flag`          | `MaskFull`               | Custom flag icon in the country list and selector |\n| `copysvg`       | `boolean` (copied state) | Custom copy button icon                           |\n| `clearsvg`      | —                        | Custom clear button icon                          |\n| `actionsbefore` | —                        | Content rendered before default action buttons    |\n\n## 🧩 Composable API\n\n### Options\n\n> **Note:** The composable uses getter functions for reactive options. Do NOT pass values directly.\n\n```ts\ninterface UsePhoneMaskOptions {\n  // Getter returning current digit value (controlled) - REQUIRED\n  value: () => string;\n\n  // Callback when the digits value changes - REQUIRED\n  onChange: (digits: string) => void;\n\n  // Getter for ISO country code (e.g., 'US', 'DE', 'GB')\n  country?: () => string | undefined;\n\n  // Getter for locale string (default: navigator.language)\n  locale?: () => string | undefined;\n\n  // Getter for auto-detect flag (default: false)\n  detect?: () => boolean | undefined;\n\n  // Callback when the phone changes (full, fullFormatted, digits)\n  onPhoneChange?: (phone: PhoneNumber) => void;\n\n  // Country change callback\n  onCountryChange?: (country: MaskFull) => void;\n}\n```\n\n### Return Value\n\n> **Important:** Do NOT destructure the returned object — all properties are reactive getters and destructuring breaks reactivity.\n\n```ts\ninterface UsePhoneMaskReturn {\n  // Ref to attach to your input element\n  inputRef: HTMLInputElement | null;\n\n  // Raw digits without formatting (e.g., \"1234567890\")\n  digits: string;\n\n  // Phone formatter instance\n  formatter: FormatterHelpers;\n\n  // Full phone number with country code (e.g., \"+11234567890\")\n  full: string;\n\n  // Full phone number formatted (e.g., \"+1 123-456-7890\")\n  fullFormatted: string;\n\n  // Whether the phone number is complete\n  isComplete: boolean;\n\n  // Whether the input is empty\n  isEmpty: boolean;\n\n  // Whether to show validation warning\n  shouldShowWarn: boolean;\n\n  // Current country data\n  country: MaskFull;\n\n  // Current locale used for country names\n  locale: string;\n\n  // Change country programmatically\n  setCountry: (countryCode?: string | null) => boolean;\n\n  // Clear the input\n  clear: () => void;\n}\n```\n\n```svelte\n<script lang=\"ts\">\n  // ✅ CORRECT — access as properties\n  const phoneMask = usePhoneMask(options);\n  phoneMask.digits;\n\n  // ❌ WRONG — loses reactivity\n  const { digits } = usePhoneMask(options);\n</script>\n```\n\n## ⚡ Attachment API\n\nThe `phoneMaskAttachment` Svelte attachment (Svelte 5.29+) applies phone masking directly to any `<input>` element via `{@attach phoneMaskAttachment(...)}`. Unlike `use:` actions, the attachment factory re-runs reactively when reactive state in the call site changes — no manual `update()` needed.\n\n### Basic Usage\n\n```svelte\n<script lang=\"ts\">\n  import { phoneMaskAttachment } from '@desource/phone-mask-svelte';\n</script>\n\n<input {@attach phoneMaskAttachment('US')} />\n```\n\n### Options\n\n```ts\nimport type { PMaskFull, PMaskPhoneNumber } from '@desource/phone-mask-svelte';\n\ninterface PhoneMaskBindingOptions {\n  // Predefined country ISO code (e.g., 'US', 'DE', 'GB')\n  country?: string;\n\n  // Locale for country names (default: navigator.language)\n  locale?: string;\n\n  // Auto-detect country from IP/locale (default: false)\n  detect?: boolean;\n\n  // Value change callback\n  onChange?: (phone: PMaskPhoneNumber) => void;\n\n  // Country change callback\n  onCountryChange?: (country: PMaskFull) => void;\n}\n```\n\nThe parameter can be a country code string (shorthand) or an options object:\n\n```svelte\n<!-- Shorthand -->\n<input {@attach phoneMaskAttachment('DE')} />\n\n<!-- Full options -->\n<input {@attach phoneMaskAttachment({ country: 'DE', onChange: handleChange })} />\n\n<!-- Auto-detect -->\n<input {@attach phoneMaskAttachment({ detect: true, onCountryChange: handleCountryChange })} />\n```\n\n### Reactive Country\n\nPass reactive state directly — the factory re-runs automatically when `selectedCountry` changes:\n\n```svelte\n<script lang=\"ts\">\n  import { phoneMaskAttachment as phoneMask } from '@desource/phone-mask-svelte';\n\n  let selectedCountry = $state('US');\n  let phoneData = $state<{ full: string; digits: string } | null>(null);\n</script>\n\n<select bind:value={selectedCountry}>\n  <option value=\"US\">🇺🇸 United States</option>\n  <option value=\"GB\">🇬🇧 United Kingdom</option>\n  <option value=\"DE\">🇩🇪 Germany</option>\n</select>\n\n<input {@attach phoneMask({ country: selectedCountry, onChange: (p) => (phoneData = p) })} placeholder=\"Phone number\" />\n```\n\n## 🎬 Action API\n\nThe `phoneMaskAction` Svelte action applies phone masking directly to any `<input>` element via `use:phoneMaskAction`. It works with **all Svelte 5 versions** — no Svelte 5.29+ required.\n\nWhen the bound parameter object changes (e.g. a new `country` value), Svelte automatically calls the action's `update()` hook, which re-applies the new options and switches the country if needed.\n\n### Basic Usage\n\n```svelte\n<script lang=\"ts\">\n  import { phoneMaskAction } from '@desource/phone-mask-svelte';\n</script>\n\n<input use:phoneMaskAction={'US'} />\n```\n\n### Options\n\n```ts\nimport type { PMaskFull, PMaskPhoneNumber } from '@desource/phone-mask-svelte';\n\ninterface PhoneMaskBindingOptions {\n  // Predefined country ISO code (e.g., 'US', 'DE', 'GB')\n  country?: string;\n\n  // Locale for country names (default: navigator.language)\n  locale?: string;\n\n  // Auto-detect country from GeoIP on mount; falls back to locale detection\n  detect?: boolean;\n\n  // Value change callback — fires on every phone number change\n  onChange?: (phone: PMaskPhoneNumber) => void;\n\n  // Country change callback — fires on initial mount and on country switch\n  onCountryChange?: (country: PMaskFull) => void;\n}\n```\n\nThe parameter can be a country code string (shorthand) or an options object:\n\n```svelte\n<!-- Shorthand -->\n<input use:phoneMaskAction={'DE'} />\n\n<!-- Full options -->\n<input use:phoneMaskAction={{ country: 'DE', onChange: handleChange }} />\n\n<!-- Auto-detect -->\n<input use:phoneMaskAction={{ detect: true, onCountryChange: handleCountryChange }} />\n```\n\n### Reactive Country\n\nPass reactive `$state` inside the options object — Svelte calls `update()` automatically when `selectedCountry` changes:\n\n```svelte\n<script lang=\"ts\">\n  import { phoneMaskAction as phoneMask } from '@desource/phone-mask-svelte';\n\n  let selectedCountry = $state('US');\n  let phoneData = $state<{ full: string; digits: string } | null>(null);\n</script>\n\n<select bind:value={selectedCountry}>\n  <option value=\"US\">🇺🇸 United States</option>\n  <option value=\"GB\">🇬🇧 United Kingdom</option>\n  <option value=\"DE\">🇩🇪 Germany</option>\n</select>\n\n<input use:phoneMask={{ country: selectedCountry, onChange: (p) => (phoneData = p) }} placeholder=\"Phone number\" />\n```\n\n### Action vs Attachment\n\n|                          | `use:phoneMaskAction`         | `{@attach phoneMaskAttachment(...)}` |\n| ------------------------ | ----------------------------- | ------------------------------------ |\n| Svelte version required  | All Svelte 5                  | Svelte 5.29+                         |\n| Reactivity mechanism     | `update()` hook (auto-called) | Factory re-runs reactively           |\n| Manual `update()` needed | No (Svelte handles it)        | No                                   |\n\n## 🎨 Component Styling\n\n### CSS Custom Properties\n\nCustomize colors via CSS variables:\n\n```css\n.desource-phone-input,\n.desource-phone-dropdown {\n  /* Colors */\n  --pi-bg: #ffffff;\n  --pi-fg: #111827;\n  --pi-muted: #6b7280;\n  --pi-border: #e5e7eb;\n  --pi-border-hover: #d1d5db;\n  --pi-border-focus: #3b82f6;\n  --pi-focus-ring: 3px solid rgb(59 130 246 / 0.15);\n  --pi-disabled-bg: #f9fafb;\n  --pi-disabled-fg: #9ca3af;\n  /* Sizes */\n  --pi-font-size: 16px;\n  --pi-height: 44px;\n  /* Spacing */\n  --pi-padding: 12px;\n  /* Border radius */\n  --pi-radius: 8px;\n  /* Shadows */\n  --pi-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);\n  --pi-shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -2px rgb(0 0 0 / 0.05);\n  /* Validation */\n  --pi-warning: #f59e0b;\n  --pi-warning-light: #fbbf24;\n  --pi-success: #10b981;\n  --pi-focus-ring-warning: 3px solid rgb(245 158 11 / 0.15);\n  --pi-focus-ring-success: 3px solid rgb(16 185 129 / 0.15);\n}\n```\n\n### Dark Theme\n\n```svelte\n<PhoneInput bind:value={phone} theme=\"dark\" />\n```\n\nOr with CSS:\n\n```css\n.desource-phone-input.theme-dark {\n  --pi-bg: #1f2937;\n  --pi-fg: #f9fafb;\n  --pi-border: #374151;\n}\n```\n\n## 📚 Examples\n\n### With Validation\n\n```svelte\n<script lang=\"ts\">\n  import { PhoneInput } from '@desource/phone-mask-svelte';\n\n  let phone = $state('');\n  let isValid = $state(false);\n\n  const errorMessage = $derived(!phone ? '' : isValid ? '' : 'Please enter a valid phone number');\n</script>\n\n<div>\n  <PhoneInput bind:value={phone} country=\"US\" onvalidationchange={(v) => (isValid = v)} />\n\n  {#if errorMessage}\n    <span class=\"error\">{errorMessage}</span>\n  {/if}\n</div>\n```\n\n### Auto-detect Country\n\n```svelte\n<script lang=\"ts\">\n  import { PhoneInput } from '@desource/phone-mask-svelte';\n  import type { PMaskFull } from '@desource/phone-mask-svelte';\n\n  let phone = $state('');\n  let detectedCountry = $state('');\n\n  function handleCountryChange(country: PMaskFull) {\n    detectedCountry = country.name;\n  }\n</script>\n\n<PhoneInput bind:value={phone} detect oncountrychange={handleCountryChange} />\n\n{#if detectedCountry}\n  <p>Detected: {detectedCountry}</p>\n{/if}\n```\n\n### Programmatic Control\n\n```svelte\n<script lang=\"ts\">\n  import { PhoneInput } from '@desource/phone-mask-svelte';\n  import type { PhoneInputExposed } from '@desource/phone-mask-svelte';\n\n  let phone = $state('');\n  let phoneInput = $state<PhoneInputExposed | null>(null);\n</script>\n\n<PhoneInput bind:this={phoneInput} bind:value={phone} />\n\n<div>\n  <button onclick={() => phoneInput?.focus()}>Focus</button>\n  <button onclick={() => phoneInput?.clear()}>Clear</button>\n  <button onclick={() => phoneInput?.selectCountry('GB')}>Switch to UK</button>\n  <p>Full: {phoneInput?.getFullFormattedNumber()}</p>\n  <p>Valid: {phoneInput?.isValid()}</p>\n</div>\n```\n\n### Multiple Inputs\n\n```svelte\n<script lang=\"ts\">\n  import { PhoneInput } from '@desource/phone-mask-svelte';\n\n  let form = $state({ mobile: '', home: '', work: '' });\n</script>\n\n<div class=\"form\">\n  <label>\n    Mobile\n    <PhoneInput bind:value={form.mobile} country=\"US\" />\n  </label>\n\n  <label>\n    Home\n    <PhoneInput bind:value={form.home} country=\"US\" />\n  </label>\n\n  <label>\n    Work\n    <PhoneInput bind:value={form.work} country=\"US\" />\n  </label>\n</div>\n```\n\n### Custom Composable Implementation\n\n```svelte\n<script lang=\"ts\">\n  import { usePhoneMask } from '@desource/phone-mask-svelte';\n  import type { PMaskPhoneNumber } from '@desource/phone-mask-svelte';\n\n  let inputValue = $state('');\n  let selectedCountry = $state('US');\n\n  const phoneMask = usePhoneMask({\n    value: () => inputValue,\n    country: () => selectedCountry,\n    detect: () => false,\n    onChange: (digits) => {\n      inputValue = digits;\n    },\n    onPhoneChange: (data: PMaskPhoneNumber) => {\n      console.log('Phone:', data.fullFormatted);\n    }\n  });\n</script>\n\n<div class=\"custom-phone\">\n  <select bind:value={selectedCountry}>\n    <option value=\"US\">🇺🇸 +1</option>\n    <option value=\"GB\">🇬🇧 +44</option>\n    <option value=\"DE\">🇩🇪 +49</option>\n  </select>\n\n  <input bind:this={phoneMask.inputRef} type=\"tel\" placeholder=\"Phone number\" />\n</div>\n\n<p>Formatted: {phoneMask.fullFormatted}</p>\n<p>Valid: {phoneMask.isComplete ? 'Yes' : 'No'}</p>\n<p>Country: {phoneMask.country.name}</p>\n```\n\n## 🎯 Browser Support\n\n- Chrome/Edge 90+\n- Firefox 88+\n- Safari 14+\n- iOS Safari 14+\n- Chrome Mobile\n\n## 📦 What's Included\n\n```\n@desource/phone-mask-svelte/\n├── dist/\n│   ├── index.mjs              # Main ESM/Svelte entry\n│   ├── index.cjs              # Main CommonJS entry\n│   ├── core.mjs               # Core kit utilities and mask data subpath\n│   ├── core.cjs               # Core kit utilities and mask data CJS subpath\n│   ├── phone-mask-svelte.css  # Component styles\n│   └── types/                 # TypeScript declaration files\n├── README.md                  # This file\n└── package.json               # Package manifest\n```\n\n## 🔗 Related\n\n- [@desource/phone-mask](../phone-mask) — Core library\n- [@desource/phone-mask-nuxt](../phone-mask-nuxt) — Nuxt module\n- [@desource/phone-mask-vue](../phone-mask-vue) — Vue 3 bindings\n- [@desource/phone-mask-react](../phone-mask-react) — React bindings\n\n## 📄 License\n\n[MIT](../../LICENSE) © 2026 DeSource Labs\n\n## 🤝 Contributing\n\nSee [Contributing Guide](../../CONTRIBUTING.md)\n\n---\n\n<div align=\"center\">\n  <sub>Made with ❤️ by <a href=\"https://github.com/DeSource-Labs\">DeSource Labs</a></sub>\n</div>\n","readmeFilename":""}