{"_id":"@oneluiz/dual-datepicker","_rev":"32-c367d93b580663f48c26e821f7a03313","name":"@oneluiz/dual-datepicker","dist-tags":{"latest":"4.0.2"},"versions":{"1.0.0":{"name":"@oneluiz/dual-datepicker","version":"1.0.0","keywords":["angular","datepicker","date-range","calendar","dual-calendar","date-picker","angular-component","standalone","typescript"],"author":{"name":"Luis Cortes"},"license":"MIT","_id":"@oneluiz/dual-datepicker@1.0.0","maintainers":[{"name":"oneluiz","email":"luizcortesj@gmail.com"}],"homepage":"https://github.com/oneluiz/ng-dual-datepicker#readme","bugs":{"url":"https://github.com/oneluiz/ng-dual-datepicker/issues"},"dist":{"shasum":"217d3d70f8d2bb37cd8d9205fe2cbbc8a557ab89","tarball":"https://registry.npmjs.org/@oneluiz/dual-datepicker/-/dual-datepicker-1.0.0.tgz","fileCount":12,"integrity":"sha512-G01+oF19R0XOlD6R8NWTADnCWIkC9Zz/htV62wZgebsfzQ0tvXq25GkCtARW457/V6/wmQLSKHJrCtqo9Fz3BA==","signatures":[{"sig":"MEUCIQDFrIQI/sgBq0BrXVGbnYrDh9tXqsMDoy1NqXMSCqdT8gIgd+aImNOiLE8sye9DPuCiWbsaAjcx/kXqlosh6kF0W70=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":33727},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.esm.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.esm.js","require":"./dist/index.js"}},"gitHead":"d7d971e77950e51ce1ecb57b5a88e4efc7a980c6","scripts":{"build":"npm run clean && tsc && node create-esm.js","clean":"rm -rf dist","prepare":"npm run build"},"_npmUser":{"name":"oneluiz","email":"luizcortesj@gmail.com"},"repository":{"url":"git+https://github.com/oneluiz/ng-dual-datepicker.git","type":"git"},"_npmVersion":"11.4.2","description":"A customizable dual-calendar date range picker component for Angular 17+","directories":{},"_nodeVersion":"20.19.0","_hasShrinkwrap":false,"devDependencies":{"rxjs":"^7.8.2","zone.js":"^0.14.10","typescript":"5.2","@angular/core":"^17.3.12","@angular/forms":"^17.3.12","@angular/common":"^17.3.12"},"peerDependencies":{"@angular/core":"^17.0.0 || ^18.0.0","@angular/forms":"^17.0.0 || ^18.0.0","@angular/common":"^17.0.0 || ^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/dual-datepicker_1.0.0_1771439306429_0.951171725921041","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@oneluiz/dual-datepicker","version":"1.0.1","keywords":["angular","datepicker","date-range","calendar","dual-calendar","date-picker","angular-component","standalone","typescript"],"author":{"name":"Luis Cortes"},"license":"MIT","_id":"@oneluiz/dual-datepicker@1.0.1","maintainers":[{"name":"oneluiz","email":"luizcortesj@gmail.com"}],"homepage":"https://github.com/oneluiz/ng-dual-datepicker#readme","bugs":{"url":"https://github.com/oneluiz/ng-dual-datepicker/issues"},"dist":{"shasum":"bc6a8ba7feee4ac7ca57af69e88ec9625d8c94fe","tarball":"https://registry.npmjs.org/@oneluiz/dual-datepicker/-/dual-datepicker-1.0.1.tgz","fileCount":12,"integrity":"sha512-GWsgY81Om5VL11tZ9v4iaGKukVLzVx4tvL+smH1laW+E3/rWGqpnLiZtt8TPP/atFFCJgVwIrEpyz9F2QHoubA==","signatures":[{"sig":"MEYCIQCrCJFwN8vn5VcuZjRn+Lfs+zaJgvdFICLin6PTp/3FEAIhALobH2d+ZX3UsVR1g0CrWlnhKRzNdWV9C+RhHZaFNDng","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":34305},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.esm.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.esm.js","require":"./dist/index.js"}},"gitHead":"b00090bf70081c31ef27c16df76efb1635fe41dd","scripts":{"build":"npm run clean && tsc && node create-esm.js","clean":"rm -rf dist","prepare":"npm run build"},"_npmUser":{"name":"oneluiz","email":"luizcortesj@gmail.com"},"repository":{"url":"git+https://github.com/oneluiz/ng-dual-datepicker.git","type":"git"},"_npmVersion":"11.4.2","description":"A customizable dual-calendar date range picker component for Angular 17+","directories":{},"_nodeVersion":"20.19.0","_hasShrinkwrap":false,"devDependencies":{"rxjs":"^7.8.2","zone.js":"^0.14.10","typescript":"5.2","@angular/core":"^17.3.12","@angular/forms":"^17.3.12","@angular/common":"^17.3.12"},"peerDependencies":{"@angular/core":"^17.0.0 || ^18.0.0","@angular/forms":"^17.0.0 || ^18.0.0","@angular/common":"^17.0.0 || ^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/dual-datepicker_1.0.1_1771439908268_0.7089158154809538","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@oneluiz/dual-datepicker","version":"1.0.2","keywords":["angular","datepicker","date-range","calendar","dual-calendar","date-picker","angular-component","standalone","typescript"],"author":{"name":"Luis Cortes"},"license":"MIT","_id":"@oneluiz/dual-datepicker@1.0.2","maintainers":[{"name":"oneluiz","email":"luizcortesj@gmail.com"}],"homepage":"https://github.com/oneluiz/ng-dual-datepicker#readme","bugs":{"url":"https://github.com/oneluiz/ng-dual-datepicker/issues"},"dist":{"shasum":"20fcac30bdcd684795e384d53e07a571dec48317","tarball":"https://registry.npmjs.org/@oneluiz/dual-datepicker/-/dual-datepicker-1.0.2.tgz","fileCount":12,"integrity":"sha512-ypiAB5pJcpdeg657yQ547BTs2jv9DkKQMAb7x1pwswCF9/9wukiFLAY//MuvPD2SsPKCGSU+AAYhnoZgAf7Jug==","signatures":[{"sig":"MEUCIAWLDOVIH62p3XV3aTx2ryISkgGk3VrAszyRY6pRm4gJAiEAmmMSlyvbkF9Lb1cHUU3fIbr3DalsRu0r1mF9ovM8FYc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":34425},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.esm.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.esm.js","require":"./dist/index.js"}},"gitHead":"54e0ab1324325042c57abf484c23a1511a7fa791","scripts":{"build":"npm run clean && tsc && node create-esm.js","clean":"rm -rf dist","prepare":"npm run build"},"_npmUser":{"name":"oneluiz","email":"luizcortesj@gmail.com"},"repository":{"url":"git+https://github.com/oneluiz/ng-dual-datepicker.git","type":"git"},"_npmVersion":"11.4.2","description":"A customizable dual-calendar date range picker component for Angular 17+","directories":{},"_nodeVersion":"20.19.0","_hasShrinkwrap":false,"devDependencies":{"rxjs":"^7.8.2","zone.js":"^0.14.10","typescript":"5.2","@angular/core":"^17.3.12","@angular/forms":"^17.3.12","@angular/common":"^17.3.12"},"peerDependencies":{"@angular/core":"^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0","@angular/forms":"^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0","@angular/common":"^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/dual-datepicker_1.0.2_1771440366322_0.27670684781619226","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@oneluiz/dual-datepicker","version":"1.0.3","keywords":["angular","datepicker","date-range","calendar","dual-calendar","date-picker","angular-component","standalone","typescript"],"author":{"name":"Luis Cortes"},"license":"MIT","_id":"@oneluiz/dual-datepicker@1.0.3","maintainers":[{"name":"oneluiz","email":"luizcortesj@gmail.com"}],"homepage":"https://github.com/oneluiz/ng-dual-datepicker#readme","bugs":{"url":"https://github.com/oneluiz/ng-dual-datepicker/issues"},"dist":{"shasum":"0e12e97d383bbb7601bcf15cec840b563a64dfc5","tarball":"https://registry.npmjs.org/@oneluiz/dual-datepicker/-/dual-datepicker-1.0.3.tgz","fileCount":12,"integrity":"sha512-qFsV7peXyjkV7Y2p+uPDKmTP9Gd9d//N5fZJl8XuvjFt6met9LfLpcx0u42pur//ZYqjm7amDsAi1ZeVlGRyBw==","signatures":[{"sig":"MEUCICX7YPB26UsEEaCH89nq6k/OCVle6LIWMzD4JqwdMJ4eAiEA6413OIVNTPQ2eCdreNWQiwsr2kA7E02vobmSMgEdjiU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":34425},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.esm.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.esm.js","require":"./dist/index.js"}},"gitHead":"ad09340c22fdc4b6a756e0452f3a39381e38aa1e","scripts":{"build":"npm run clean && tsc && node create-esm.js","clean":"rm -rf dist","prepare":"npm run build"},"_npmUser":{"name":"oneluiz","email":"luizcortesj@gmail.com"},"repository":{"url":"git+https://github.com/oneluiz/ng-dual-datepicker.git","type":"git"},"_npmVersion":"11.4.2","description":"A customizable dual-calendar date range picker component for Angular 17+","directories":{},"_nodeVersion":"20.19.0","_hasShrinkwrap":false,"devDependencies":{"rxjs":"^7.8.2","zone.js":"^0.14.10","typescript":"5.2","@angular/core":"^17.3.12","@angular/forms":"^17.3.12","@angular/common":"^17.3.12"},"peerDependencies":{"@angular/core":"^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0","@angular/forms":"^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0","@angular/common":"^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/dual-datepicker_1.0.3_1771441467188_0.1734795368455746","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"@oneluiz/dual-datepicker","version":"2.0.0","keywords":["angular","datepicker","date-range","calendar","dual-calendar","date-picker","angular-component","standalone","typescript"],"author":{"name":"Luis Cortes"},"license":"MIT","_id":"@oneluiz/dual-datepicker@2.0.0","maintainers":[{"name":"oneluiz","email":"luizcortesj@gmail.com"}],"homepage":"https://github.com/oneluiz/ng-dual-datepicker#readme","bugs":{"url":"https://github.com/oneluiz/ng-dual-datepicker/issues"},"dist":{"shasum":"885162e629c6427a3c2e846e0885cfeb2850456b","tarball":"https://registry.npmjs.org/@oneluiz/dual-datepicker/-/dual-datepicker-2.0.0.tgz","fileCount":13,"integrity":"sha512-L36Gb0ZdirdkIuFv0w4iK2CDBzC/H1NJJySxSHPaYiZtv1O0RaGqr9KWdl7TbGPSRJZuJMw822yma5/C70Cc7Q==","signatures":[{"sig":"MEYCIQCKyJuiQpvXlmvkwk+P6lw+kCboEQQVs5TObwlXxsRRtQIhANW8gChb8csA+jpf0Sz1w3MZUK7i4wTniWHeBPm0UjtA","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":126581},"gitHead":"00afa9ce4b5d4c2f7e5dd5f83afe4b3c8f7916d4","scripts":{"build":"ng-packagr -p ng-package.json","prepare":"npm run build"},"_npmUser":{"name":"oneluiz","email":"luizcortesj@gmail.com"},"repository":{"url":"git+https://github.com/oneluiz/ng-dual-datepicker.git","type":"git"},"_npmVersion":"11.4.2","description":"A customizable dual-calendar date range picker component for Angular 17+","directories":{},"_nodeVersion":"20.19.0","_hasShrinkwrap":false,"packageManager":"pnpm@10.13.1+sha512.37ebf1a5c7a30d5fabe0c5df44ee8da4c965ca0c5af3dbab28c3a1681b70a256218d05c81c9c0dcf767ef6b8551eb5b960042b9ed4300c59242336377e01cfad","devDependencies":{"rxjs":"^7.8.2","zone.js":"^0.14.10","ng-packagr":"^18.2.1","typescript":"5.5","@angular/core":"^17.3.12","@angular/forms":"^17.3.12","@angular/common":"^17.3.12","@angular/compiler":"^18.2.14","@angular/compiler-cli":"^18.2.14"},"peerDependencies":{"@angular/core":"^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0","@angular/forms":"^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0","@angular/common":"^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/dual-datepicker_2.0.0_1771442328497_0.45770028237984905","host":"s3://npm-registry-packages-npm-production"}},"2.0.1":{"name":"@oneluiz/dual-datepicker","version":"2.0.1","keywords":["angular","datepicker","date-range","calendar","dual-calendar","date-picker","angular-component","standalone","typescript"],"author":{"name":"Luis Cortes"},"license":"MIT","_id":"@oneluiz/dual-datepicker@2.0.1","maintainers":[{"name":"oneluiz","email":"luizcortesj@gmail.com"}],"homepage":"https://github.com/oneluiz/ng-dual-datepicker#readme","bugs":{"url":"https://github.com/oneluiz/ng-dual-datepicker/issues"},"dist":{"shasum":"dd12831ec68af2d1c0ee2db02dae3952b0e40d47","tarball":"https://registry.npmjs.org/@oneluiz/dual-datepicker/-/dual-datepicker-2.0.1.tgz","fileCount":3,"integrity":"sha512-RSNPg5oAAhxW0nUqpAmkYqfzF7cP0QTMd0IOo3mt0l2X6cNWj8iajGWarBGI1XgnpA0pwqF7pyV7SH0h25o5zw==","signatures":[{"sig":"MEUCIQDbAb1BbWyG5m0D/Wpvj3GdIiLK/a33uPLG5jh40oJHWgIgAv5uvmmxo30HpYhaDXaN/NaJ6cagUvB5nSWdQJxeLhw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":9699},"module":"fesm2022/oneluiz-dual-datepicker.mjs","exports":{".":{"esm":"./esm2022/oneluiz-dual-datepicker.mjs","types":"./index.d.ts","default":"./fesm2022/oneluiz-dual-datepicker.mjs","esm2022":"./esm2022/oneluiz-dual-datepicker.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"00afa9ce4b5d4c2f7e5dd5f83afe4b3c8f7916d4","typings":"index.d.ts","_npmUser":{"name":"oneluiz","email":"luizcortesj@gmail.com"},"repository":{"url":"git+https://github.com/oneluiz/ng-dual-datepicker.git","type":"git"},"_npmVersion":"11.4.2","description":"A customizable dual-calendar date range picker component for Angular 17+","directories":{},"sideEffects":false,"_nodeVersion":"20.19.0","dependencies":{"tslib":"^2.3.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.13.1+sha512.37ebf1a5c7a30d5fabe0c5df44ee8da4c965ca0c5af3dbab28c3a1681b70a256218d05c81c9c0dcf767ef6b8551eb5b960042b9ed4300c59242336377e01cfad","peerDependencies":{"@angular/core":"^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0","@angular/forms":"^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0","@angular/common":"^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/dual-datepicker_2.0.1_1771442604830_0.369956344942199","host":"s3://npm-registry-packages-npm-production"}},"2.0.2":{"name":"@oneluiz/dual-datepicker","version":"2.0.2","keywords":["angular","datepicker","date-range","calendar","dual-calendar","date-picker","angular-component","standalone","typescript"],"author":{"name":"Luis Cortes"},"license":"MIT","_id":"@oneluiz/dual-datepicker@2.0.2","maintainers":[{"name":"oneluiz","email":"luizcortesj@gmail.com"}],"homepage":"https://github.com/oneluiz/ng-dual-datepicker#readme","bugs":{"url":"https://github.com/oneluiz/ng-dual-datepicker/issues"},"dist":{"shasum":"815c9144c988a0dae698689d401b98d207439ea5","tarball":"https://registry.npmjs.org/@oneluiz/dual-datepicker/-/dual-datepicker-2.0.2.tgz","fileCount":11,"integrity":"sha512-Y6IVFYGhtwB/ldABORXNSwKnIusws4t3IUgCZrBgLd9Qz/3CJF7PQ8y6sUVBhXjSqHfqdBfLVAgc3M6pfjD9UA==","signatures":[{"sig":"MEQCIFWliE5eHjfv4w/qTiYHXsN2N5Dnu4rotuU2yRIYe7ROAiB/IqCKGf8va8wS/HqmseFR+pqovlx9hVhlQ1zGCDX4Yg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":118426},"module":"fesm2022/oneluiz-dual-datepicker.mjs","exports":{".":{"esm":"./esm2022/oneluiz-dual-datepicker.mjs","types":"./index.d.ts","default":"./fesm2022/oneluiz-dual-datepicker.mjs","esm2022":"./esm2022/oneluiz-dual-datepicker.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"00afa9ce4b5d4c2f7e5dd5f83afe4b3c8f7916d4","typings":"index.d.ts","_npmUser":{"name":"oneluiz","email":"luizcortesj@gmail.com"},"repository":{"url":"git+https://github.com/oneluiz/ng-dual-datepicker.git","type":"git"},"_npmVersion":"11.4.2","description":"A customizable dual-calendar date range picker component for Angular 17+","directories":{},"sideEffects":false,"_nodeVersion":"20.19.0","dependencies":{"tslib":"^2.3.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.13.1+sha512.37ebf1a5c7a30d5fabe0c5df44ee8da4c965ca0c5af3dbab28c3a1681b70a256218d05c81c9c0dcf767ef6b8551eb5b960042b9ed4300c59242336377e01cfad","peerDependencies":{"@angular/core":"^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0","@angular/forms":"^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0","@angular/common":"^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/dual-datepicker_2.0.2_1771442684093_0.08435888987767082","host":"s3://npm-registry-packages-npm-production"}},"2.1.0":{"name":"@oneluiz/dual-datepicker","version":"2.1.0","keywords":["angular","datepicker","date-range","calendar","dual-calendar","date-picker","angular-component","standalone","typescript"],"author":{"name":"Luis Cortes"},"license":"MIT","_id":"@oneluiz/dual-datepicker@2.1.0","maintainers":[{"name":"oneluiz","email":"luizcortesj@gmail.com"}],"homepage":"https://oneluiz.github.io/ng-dual-datepicker/","bugs":{"url":"https://github.com/oneluiz/ng-dual-datepicker/issues"},"dist":{"shasum":"9001667ef8af8a4e0d5a9ca7a26115ac76bc2000","tarball":"https://registry.npmjs.org/@oneluiz/dual-datepicker/-/dual-datepicker-2.1.0.tgz","fileCount":11,"integrity":"sha512-qU1WiNQQQEB9bAN1/imyJQKyhugU62rBFl3sSsyYqZfbfL+gV0iI4x0dh8i1PlF50GUHzvGGW8wyOL3Kdpzbyg==","signatures":[{"sig":"MEQCICpx4113e890x5CsMIpdVd1iky1re0JZNkabciiyvxugAiA1+y6CRIcZB9D+alz12xJOHHxLI72ZTbOK+iaqxKxX7g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":125291},"module":"fesm2022/oneluiz-dual-datepicker.mjs","exports":{".":{"esm":"./esm2022/oneluiz-dual-datepicker.mjs","types":"./index.d.ts","default":"./fesm2022/oneluiz-dual-datepicker.mjs","esm2022":"./esm2022/oneluiz-dual-datepicker.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"320597b6ca86bdd3310de72747c4f485b69e784d","typings":"index.d.ts","_npmUser":{"name":"oneluiz","email":"luizcortesj@gmail.com"},"repository":{"url":"git+https://github.com/oneluiz/ng-dual-datepicker.git","type":"git"},"_npmVersion":"11.4.2","description":"A customizable dual-calendar date range picker component for Angular 17+","directories":{},"sideEffects":false,"_nodeVersion":"20.19.0","dependencies":{"tslib":"^2.3.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.13.1+sha512.37ebf1a5c7a30d5fabe0c5df44ee8da4c965ca0c5af3dbab28c3a1681b70a256218d05c81c9c0dcf767ef6b8551eb5b960042b9ed4300c59242336377e01cfad","peerDependencies":{"@angular/core":"^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0","@angular/forms":"^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0","@angular/common":"^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/dual-datepicker_2.1.0_1771445414689_0.9140302388296098","host":"s3://npm-registry-packages-npm-production"}},"2.2.0":{"name":"@oneluiz/dual-datepicker","version":"2.2.0","keywords":["angular","datepicker","date-range","calendar","dual-calendar","date-picker","angular-component","standalone","typescript"],"author":{"name":"Luis Cortes"},"license":"MIT","_id":"@oneluiz/dual-datepicker@2.2.0","maintainers":[{"name":"oneluiz","email":"luizcortesj@gmail.com"}],"homepage":"https://oneluiz.github.io/ng-dual-datepicker/","bugs":{"url":"https://github.com/oneluiz/ng-dual-datepicker/issues"},"dist":{"shasum":"e8ef812998fef84c4fdced4891704b0c6a7bcd38","tarball":"https://registry.npmjs.org/@oneluiz/dual-datepicker/-/dual-datepicker-2.2.0.tgz","fileCount":11,"integrity":"sha512-3tqBe9y08jEDaLGhLAf7Qylcb2/MAkbrcxbFDOwCWpiyS9+3T546+2va7vcb0mCMPP0gLNgHSLxzFKW4rBvitg==","signatures":[{"sig":"MEYCIQC0kQgbG7osawsP0ZkVZTzQ9nheS40aS6746X/zrhDwCQIhANFXYaRMIO2mNLFQEBlRsEWkRS/+aJ9VBQp/qDVDns5t","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":128993},"module":"fesm2022/oneluiz-dual-datepicker.mjs","exports":{".":{"esm":"./esm2022/oneluiz-dual-datepicker.mjs","types":"./index.d.ts","default":"./fesm2022/oneluiz-dual-datepicker.mjs","esm2022":"./esm2022/oneluiz-dual-datepicker.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"dfb992d0c89b8ef070b75876a65370980e66e418","typings":"index.d.ts","_npmUser":{"name":"oneluiz","email":"luizcortesj@gmail.com"},"repository":{"url":"git+https://github.com/oneluiz/ng-dual-datepicker.git","type":"git"},"_npmVersion":"11.4.2","description":"A customizable dual-calendar date range picker component for Angular 17+","directories":{},"sideEffects":false,"_nodeVersion":"20.19.0","dependencies":{"tslib":"^2.3.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.13.1+sha512.37ebf1a5c7a30d5fabe0c5df44ee8da4c965ca0c5af3dbab28c3a1681b70a256218d05c81c9c0dcf767ef6b8551eb5b960042b9ed4300c59242336377e01cfad","peerDependencies":{"@angular/core":"^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0","@angular/forms":"^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0","@angular/common":"^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/dual-datepicker_2.2.0_1771446348647_0.3761508971415586","host":"s3://npm-registry-packages-npm-production"}},"2.2.1":{"name":"@oneluiz/dual-datepicker","version":"2.2.1","keywords":["angular","datepicker","date-range","calendar","dual-calendar","date-picker","angular-component","standalone","typescript"],"author":{"name":"Luis Cortes"},"license":"MIT","_id":"@oneluiz/dual-datepicker@2.2.1","maintainers":[{"name":"oneluiz","email":"luizcortesj@gmail.com"}],"homepage":"https://oneluiz.github.io/ng-dual-datepicker/","bugs":{"url":"https://github.com/oneluiz/ng-dual-datepicker/issues"},"dist":{"shasum":"27d6d32a4acfdc98e96880672a37a5ce43c3c290","tarball":"https://registry.npmjs.org/@oneluiz/dual-datepicker/-/dual-datepicker-2.2.1.tgz","fileCount":11,"integrity":"sha512-CUpX2J5+zVBlyZJNqGBgd8+cAMP5jURNKAfDz9fI5dES5DMlVVPLPfhru/0Ir8R6K5Nv3ZfTssEEpQCa/dh+EQ==","signatures":[{"sig":"MEUCIQDlTgA86e4MUgq7uFwr4RDamyggyxs0JqJgLyJkN00btAIgYTeN8tlrPaM5OvXIFu5jwbY4vmbfmm49CbcOsGDZEAs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":130180},"module":"fesm2022/oneluiz-dual-datepicker.mjs","exports":{".":{"esm":"./esm2022/oneluiz-dual-datepicker.mjs","types":"./index.d.ts","default":"./fesm2022/oneluiz-dual-datepicker.mjs","esm2022":"./esm2022/oneluiz-dual-datepicker.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"17997ed6068831121ac3f5866cdc7d3e773291a4","typings":"index.d.ts","_npmUser":{"name":"oneluiz","email":"luizcortesj@gmail.com"},"repository":{"url":"git+https://github.com/oneluiz/ng-dual-datepicker.git","type":"git"},"_npmVersion":"11.4.2","description":"A customizable dual-calendar date range picker component for Angular 17+","directories":{},"sideEffects":false,"_nodeVersion":"20.19.0","dependencies":{"tslib":"^2.3.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.13.1+sha512.37ebf1a5c7a30d5fabe0c5df44ee8da4c965ca0c5af3dbab28c3a1681b70a256218d05c81c9c0dcf767ef6b8551eb5b960042b9ed4300c59242336377e01cfad","peerDependencies":{"@angular/core":"^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0","@angular/forms":"^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0","@angular/common":"^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/dual-datepicker_2.2.1_1771446870912_0.907290305204244","host":"s3://npm-registry-packages-npm-production"}},"2.3.0":{"name":"@oneluiz/dual-datepicker","version":"2.3.0","keywords":["angular","datepicker","date-range","calendar","dual-calendar","date-picker","angular-component","standalone","typescript"],"author":{"name":"Luis Cortes"},"license":"MIT","_id":"@oneluiz/dual-datepicker@2.3.0","maintainers":[{"name":"oneluiz","email":"luizcortesj@gmail.com"}],"homepage":"https://oneluiz.github.io/ng-dual-datepicker/","bugs":{"url":"https://github.com/oneluiz/ng-dual-datepicker/issues"},"dist":{"shasum":"592d68f27f4cea4b66407cc805b133cd2e411587","tarball":"https://registry.npmjs.org/@oneluiz/dual-datepicker/-/dual-datepicker-2.3.0.tgz","fileCount":11,"integrity":"sha512-PQNLbMWF4ynnjjjlxudmVKAZwQyq1LoPv8xISVJ0ikf3wy0c30fg1o+2i5GHeWOKKZ82HtX0o2SEuMR7QnsTUw==","signatures":[{"sig":"MEYCIQDkqql+9G+n4h2/Zt6mt3PJnhcroqaz++IQ9iFMeK6HhgIhAIPR8m/Ws9zzUBaQ/RtWlFR41DcAZg5eu9y+N2Tl5FyB","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":131159},"module":"fesm2022/oneluiz-dual-datepicker.mjs","exports":{".":{"esm":"./esm2022/oneluiz-dual-datepicker.mjs","types":"./index.d.ts","default":"./fesm2022/oneluiz-dual-datepicker.mjs","esm2022":"./esm2022/oneluiz-dual-datepicker.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"8ed973a88556aefe85f52f491711f00deaad0d00","typings":"index.d.ts","_npmUser":{"name":"oneluiz","email":"luizcortesj@gmail.com"},"repository":{"url":"git+https://github.com/oneluiz/ng-dual-datepicker.git","type":"git"},"_npmVersion":"11.4.2","description":"A customizable dual-calendar date range picker component for Angular 17+","directories":{},"sideEffects":false,"_nodeVersion":"20.19.0","dependencies":{"tslib":"^2.3.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.13.1+sha512.37ebf1a5c7a30d5fabe0c5df44ee8da4c965ca0c5af3dbab28c3a1681b70a256218d05c81c9c0dcf767ef6b8551eb5b960042b9ed4300c59242336377e01cfad","peerDependencies":{"@angular/core":"^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0","@angular/forms":"^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0","@angular/common":"^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/dual-datepicker_2.3.0_1771447227065_0.5163364248129612","host":"s3://npm-registry-packages-npm-production"}},"2.4.0":{"name":"@oneluiz/dual-datepicker","version":"2.4.0","keywords":["angular","datepicker","date-range","calendar","dual-calendar","date-picker","angular-component","standalone","typescript","reactive-forms","signals","control-value-accessor"],"author":{"name":"Luis Cortes"},"license":"MIT","_id":"@oneluiz/dual-datepicker@2.4.0","maintainers":[{"name":"oneluiz","email":"luizcortesj@gmail.com"}],"homepage":"https://oneluiz.github.io/ng-dual-datepicker/","bugs":{"url":"https://github.com/oneluiz/ng-dual-datepicker/issues"},"dist":{"shasum":"ff39dfbf5cb3a5402f3345cc84e4de2450a28878","tarball":"https://registry.npmjs.org/@oneluiz/dual-datepicker/-/dual-datepicker-2.4.0.tgz","fileCount":11,"integrity":"sha512-UiVlmZQB6qTfMSOfcup5dXiOI1sgi4pqWrMm2+UfirQ1K8L8eqm8wexYmPjAMBnrzVLYq4dldNrT0A+0CX8caA==","signatures":[{"sig":"MEUCIQDOBMNY5dJ/DdwC4AtWvb7wQVVHARgMVeRbDqeWN709SQIgOUbdbvKdn5IzsL31ijZFkEmX2rvpDW7EqkFqN7u9frs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":151426},"module":"fesm2022/oneluiz-dual-datepicker.mjs","exports":{".":{"esm":"./esm2022/oneluiz-dual-datepicker.mjs","types":"./index.d.ts","default":"./fesm2022/oneluiz-dual-datepicker.mjs","esm2022":"./esm2022/oneluiz-dual-datepicker.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"3f3c43770da8e9a3415576c794453b94d3ad9eef","typings":"index.d.ts","_npmUser":{"name":"oneluiz","email":"luizcortesj@gmail.com"},"repository":{"url":"git+https://github.com/oneluiz/ng-dual-datepicker.git","type":"git"},"_npmVersion":"11.4.2","description":"A customizable dual-calendar date range picker component for Angular 17+ with Reactive Forms and Signals support","directories":{},"sideEffects":false,"_nodeVersion":"20.19.0","dependencies":{"tslib":"^2.3.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.13.1+sha512.37ebf1a5c7a30d5fabe0c5df44ee8da4c965ca0c5af3dbab28c3a1681b70a256218d05c81c9c0dcf767ef6b8551eb5b960042b9ed4300c59242336377e01cfad","peerDependencies":{"@angular/core":"^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0","@angular/forms":"^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0","@angular/common":"^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/dual-datepicker_2.4.0_1771457856377_0.4864667829166307","host":"s3://npm-registry-packages-npm-production"}},"2.5.0":{"name":"@oneluiz/dual-datepicker","version":"2.5.0","keywords":["angular","datepicker","date-range","calendar","dual-calendar","date-picker","angular-component","standalone","typescript","reactive-forms","signals","control-value-accessor"],"author":{"name":"Luis Cortes"},"license":"MIT","_id":"@oneluiz/dual-datepicker@2.5.0","maintainers":[{"name":"oneluiz","email":"luizcortesj@gmail.com"}],"homepage":"https://oneluiz.github.io/ng-dual-datepicker/","bugs":{"url":"https://github.com/oneluiz/ng-dual-datepicker/issues"},"dist":{"shasum":"d236a362afc4e2cab78e74527ff812af24b173b4","tarball":"https://registry.npmjs.org/@oneluiz/dual-datepicker/-/dual-datepicker-2.5.0.tgz","fileCount":15,"integrity":"sha512-yobHL3D4giyig22ya9S/6VUJtHyBLDi5PfrGgcfeKOd6XT/9QrWW4Z/rB4Rr6BVUnkoWgM44Q2SoiomuLG/pxQ==","signatures":[{"sig":"MEQCIDya1WDxfk53m9wC09IzpyAhA6XqoActLS3CQQRWI81+AiBSdO/hUANsfHxxiBH5N6rT92SVVoMBOMBmMwU/u9+gnQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":202571},"module":"fesm2022/oneluiz-dual-datepicker.mjs","exports":{".":{"esm":"./esm2022/oneluiz-dual-datepicker.mjs","types":"./index.d.ts","default":"./fesm2022/oneluiz-dual-datepicker.mjs","esm2022":"./esm2022/oneluiz-dual-datepicker.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"8702f014b3845506a797cd3fc7bd99418ae1f160","typings":"index.d.ts","_npmUser":{"name":"oneluiz","email":"luizcortesj@gmail.com"},"repository":{"url":"git+https://github.com/oneluiz/ng-dual-datepicker.git","type":"git"},"_npmVersion":"11.4.2","description":"A customizable dual-calendar date range picker component for Angular 17+ with Reactive Forms and Signals support","directories":{},"sideEffects":false,"_nodeVersion":"20.19.0","dependencies":{"tslib":"^2.3.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.13.1+sha512.37ebf1a5c7a30d5fabe0c5df44ee8da4c965ca0c5af3dbab28c3a1681b70a256218d05c81c9c0dcf767ef6b8551eb5b960042b9ed4300c59242336377e01cfad","peerDependencies":{"@angular/core":"^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0","@angular/forms":"^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0","@angular/common":"^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/dual-datepicker_2.5.0_1771476219407_0.8280983754077886","host":"s3://npm-registry-packages-npm-production"}},"2.6.0":{"name":"@oneluiz/dual-datepicker","version":"2.6.0","keywords":["angular","datepicker","date-range","calendar","dual-calendar","date-picker","angular-component","standalone","typescript","reactive-forms","signals","control-value-accessor"],"author":{"name":"Luis Cortes"},"license":"MIT","_id":"@oneluiz/dual-datepicker@2.6.0","maintainers":[{"name":"oneluiz","email":"luizcortesj@gmail.com"}],"homepage":"https://oneluiz.github.io/ng-dual-datepicker/","bugs":{"url":"https://github.com/oneluiz/ng-dual-datepicker/issues"},"dist":{"shasum":"41cd257f51d8cc12061495721bcf103e319f2474","tarball":"https://registry.npmjs.org/@oneluiz/dual-datepicker/-/dual-datepicker-2.6.0.tgz","fileCount":17,"integrity":"sha512-R12xpsFfjx1bF6QAr495tu+RfWPZJTDdHrazQsQkLHbCFZrBZD2zdXKWCWnCkxBWkca5GwMHanzyFTW0DGFK6A==","signatures":[{"sig":"MEQCIFLwnEXUxHJ4OT7zTP1asqdS5CMOoPvo3622yM9Z63ifAiATyumzsWxHTkhMIfLxqBStBoxXenlDx+zZ+xJq3MaDYA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":269283},"module":"fesm2022/oneluiz-dual-datepicker.mjs","exports":{".":{"esm":"./esm2022/oneluiz-dual-datepicker.mjs","types":"./index.d.ts","default":"./fesm2022/oneluiz-dual-datepicker.mjs","esm2022":"./esm2022/oneluiz-dual-datepicker.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"2035318d3705c350d904f5af973eea8824629818","typings":"index.d.ts","_npmUser":{"name":"oneluiz","email":"luizcortesj@gmail.com"},"repository":{"url":"git+https://github.com/oneluiz/ng-dual-datepicker.git","type":"git"},"_npmVersion":"11.4.2","description":"A customizable dual-calendar date range picker component for Angular 17+ with Reactive Forms and Signals support","directories":{},"sideEffects":false,"_nodeVersion":"20.19.0","dependencies":{"tslib":"^2.3.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.13.1+sha512.37ebf1a5c7a30d5fabe0c5df44ee8da4c965ca0c5af3dbab28c3a1681b70a256218d05c81c9c0dcf767ef6b8551eb5b960042b9ed4300c59242336377e01cfad","peerDependencies":{"@angular/core":"^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0","@angular/forms":"^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0","@angular/common":"^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/dual-datepicker_2.6.0_1771477971961_0.9112156556192115","host":"s3://npm-registry-packages-npm-production"}},"2.7.0":{"name":"@oneluiz/dual-datepicker","version":"2.7.0","keywords":["angular","datepicker","date-range","calendar","dual-calendar","date-picker","angular-component","standalone","typescript","reactive-forms","signals","control-value-accessor"],"author":{"name":"Luis Cortes"},"license":"MIT","_id":"@oneluiz/dual-datepicker@2.7.0","maintainers":[{"name":"oneluiz","email":"luizcortesj@gmail.com"}],"homepage":"https://oneluiz.github.io/ng-dual-datepicker/","bugs":{"url":"https://github.com/oneluiz/ng-dual-datepicker/issues"},"dist":{"shasum":"806e852423f1f534b59948b41724ab5cf4f2192f","tarball":"https://registry.npmjs.org/@oneluiz/dual-datepicker/-/dual-datepicker-2.7.0.tgz","fileCount":25,"integrity":"sha512-PUG9nO2iQqbW0Nk43NjD7t8B9DAwValZs7FSn85/trPSArfj4eybhTYaHMH9eT0UNhrLmJ/zdc2mhR6bvQaBFQ==","signatures":[{"sig":"MEUCIDVllO7ZLiUAkuYxVNSBLEgPKGhuvFAC1MLABrXJItMRAiEAzviBBWM1j9b7K5FdNjAdIDhoSrw+pNKP3O5IRuAUYO0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1961384},"gitHead":"a7b9cb2b682b01fe3eb870c4ecbe63295570ab25","scripts":{"build":"ng-packagr -p ng-package.json","demo:build":"ng build demo --base-href=/ng-dual-datepicker/ && cd docs && mv browser/* . 2>/dev/null || true && rm -rf browser 2>/dev/null || true && touch .nojekyll && cd ..","demo:serve":"ng serve demo","publish:pkg":"cd dist && npm publish --access public"},"_npmUser":{"name":"oneluiz","email":"luizcortesj@gmail.com"},"repository":{"url":"git+https://github.com/oneluiz/ng-dual-datepicker.git","type":"git"},"_npmVersion":"11.4.2","description":"A customizable dual-calendar date range picker component for Angular 17+ with Reactive Forms, Signals, and Multi-Range support","directories":{},"_nodeVersion":"20.19.0","_hasShrinkwrap":false,"packageManager":"pnpm@10.13.1+sha512.37ebf1a5c7a30d5fabe0c5df44ee8da4c965ca0c5af3dbab28c3a1681b70a256218d05c81c9c0dcf767ef6b8551eb5b960042b9ed4300c59242336377e01cfad","devDependencies":{"rxjs":"^7.8.2","zone.js":"^0.14.10","ng-packagr":"^18.2.1","typescript":"5.5","@angular/cli":"^18.2.14","@angular/core":"^18.2.14","@angular/forms":"^18.2.14","@angular/common":"^18.2.14","@angular/compiler":"^18.2.14","@angular/compiler-cli":"^18.2.14","@angular/platform-browser":"^18.2.14","@angular-devkit/build-angular":"^18.2.14","@angular/platform-browser-dynamic":"^18.2.14"},"peerDependencies":{"@angular/core":"^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0","@angular/forms":"^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0","@angular/common":"^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/dual-datepicker_2.7.0_1771479908506_0.13465862591579691","host":"s3://npm-registry-packages-npm-production"}},"3.0.0":{"name":"@oneluiz/dual-datepicker","version":"3.0.0","keywords":["angular","datepicker","date-range","calendar","dual-calendar","date-picker","angular-component","standalone","typescript","reactive-forms","signals","control-value-accessor"],"author":{"name":"Luis Cortes"},"license":"MIT","_id":"@oneluiz/dual-datepicker@3.0.0","maintainers":[{"name":"oneluiz","email":"luizcortesj@gmail.com"}],"homepage":"https://oneluiz.github.io/ng-dual-datepicker/","bugs":{"url":"https://github.com/oneluiz/ng-dual-datepicker/issues"},"dist":{"shasum":"82ec9177d185466e059d0c77a20806f3ef0ebbc8","tarball":"https://registry.npmjs.org/@oneluiz/dual-datepicker/-/dual-datepicker-3.0.0.tgz","fileCount":27,"integrity":"sha512-cth13VhJhYT0dZ/gUK/oBoTf1UHAgWIGC55hOYViy6Ix6ckHYXOmTZXNCoJBQa/kwS+idZLxOr5vZvrV8MTixw==","signatures":[{"sig":"MEYCIQCGsk5e2A1ntd5y32bSNIKuWBwUnVQ/tuYTjiBGcM7vQwIhAI4gZW/lrdvoPVwv7Nk9IiP6Lgj5yRpMWh0eD/Jt9PXw","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1967927},"gitHead":"a0789f621cd777a149ca9c360e662c59c0a504f7","scripts":{"build":"ng-packagr -p ng-package.json","demo:build":"ng build demo --base-href=/ng-dual-datepicker/ && cd docs && mv browser/* . 2>/dev/null || true && rm -rf browser 2>/dev/null || true && touch .nojekyll && cd ..","demo:serve":"ng serve demo","publish:pkg":"cd dist && npm publish --access public"},"_npmUser":{"name":"oneluiz","email":"luizcortesj@gmail.com"},"repository":{"url":"git+https://github.com/oneluiz/ng-dual-datepicker.git","type":"git"},"_npmVersion":"11.4.2","description":"A customizable dual-calendar date range picker component for Angular 17+ with Reactive Forms, Signals, and Multi-Range support","directories":{},"_nodeVersion":"20.19.0","_hasShrinkwrap":false,"packageManager":"pnpm@10.13.1+sha512.37ebf1a5c7a30d5fabe0c5df44ee8da4c965ca0c5af3dbab28c3a1681b70a256218d05c81c9c0dcf767ef6b8551eb5b960042b9ed4300c59242336377e01cfad","devDependencies":{"rxjs":"^7.8.2","zone.js":"^0.14.10","ng-packagr":"^18.2.1","typescript":"5.5","@angular/cli":"^18.2.14","@angular/core":"^18.2.14","@angular/forms":"^18.2.14","@angular/common":"^18.2.14","@angular/compiler":"^18.2.14","@angular/compiler-cli":"^18.2.14","@angular/platform-browser":"^18.2.14","@angular-devkit/build-angular":"^18.2.14","@angular/platform-browser-dynamic":"^18.2.14"},"peerDependencies":{"@angular/core":"^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0","@angular/forms":"^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0","@angular/common":"^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/dual-datepicker_3.0.0_1771483231438_0.9636844395324613","host":"s3://npm-registry-packages-npm-production"}},"3.0.1":{"name":"@oneluiz/dual-datepicker","version":"3.0.1","keywords":["angular","datepicker","date-range","calendar","dual-calendar","date-picker","angular-component","standalone","typescript","reactive-forms","signals","control-value-accessor"],"author":{"name":"Luis Cortes"},"license":"MIT","_id":"@oneluiz/dual-datepicker@3.0.1","maintainers":[{"name":"oneluiz","email":"luizcortesj@gmail.com"}],"homepage":"https://oneluiz.github.io/ng-dual-datepicker/","bugs":{"url":"https://github.com/oneluiz/ng-dual-datepicker/issues"},"dist":{"shasum":"9a3040149aac5be9bb8860704ba8c7cc903b75df","tarball":"https://registry.npmjs.org/@oneluiz/dual-datepicker/-/dual-datepicker-3.0.1.tgz","fileCount":17,"integrity":"sha512-20VwG776rkxPvEt+yu4Lj++6fBvpeA9sMtWww+BerH3mCjv4yWee+MOprfLxblOsZkf9CMmkhr9SZUeogLWWxw==","signatures":[{"sig":"MEYCIQC9dHyi4z3spOyNNnJCKsTgHZfPu+ebp0jqjuCgv2u6MwIhAIED+mv781q8zYX6xRr90Pw9kSb15BJJcKls1Kn649Hx","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@oneluiz%2fdual-datepicker@3.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":309938},"module":"fesm2022/oneluiz-dual-datepicker.mjs","exports":{".":{"esm":"./esm2022/oneluiz-dual-datepicker.mjs","types":"./index.d.ts","default":"./fesm2022/oneluiz-dual-datepicker.mjs","esm2022":"./esm2022/oneluiz-dual-datepicker.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"02087784b8fd5d8c625f2e1ab44c770663701256","typings":"index.d.ts","_npmUser":{"name":"oneluiz","email":"luizcortesj@gmail.com"},"repository":{"url":"git+https://github.com/oneluiz/ng-dual-datepicker.git","type":"git"},"_npmVersion":"10.8.2","description":"A customizable dual-calendar date range picker component for Angular 17+ with Reactive Forms, Signals, and Multi-Range support","directories":{},"sideEffects":false,"_nodeVersion":"20.20.0","dependencies":{"tslib":"^2.3.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.13.1+sha512.37ebf1a5c7a30d5fabe0c5df44ee8da4c965ca0c5af3dbab28c3a1681b70a256218d05c81c9c0dcf767ef6b8551eb5b960042b9ed4300c59242336377e01cfad","peerDependencies":{"@angular/core":"^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0","@angular/forms":"^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0","@angular/common":"^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/dual-datepicker_3.0.1_1771520688012_0.059993466853469624","host":"s3://npm-registry-packages-npm-production"}},"3.1.0":{"name":"@oneluiz/dual-datepicker","version":"3.1.0","keywords":["angular","datepicker","date-range","calendar","dual-calendar","date-picker","angular-component","standalone","typescript","reactive-forms","signals","control-value-accessor"],"author":{"name":"Luis Cortes"},"license":"MIT","_id":"@oneluiz/dual-datepicker@3.1.0","maintainers":[{"name":"oneluiz","email":"luizcortesj@gmail.com"}],"homepage":"https://oneluiz.github.io/ng-dual-datepicker/","bugs":{"url":"https://github.com/oneluiz/ng-dual-datepicker/issues"},"dist":{"shasum":"00cbf081d3f8e4e7a091c0e978a5248f79e9e9e1","tarball":"https://registry.npmjs.org/@oneluiz/dual-datepicker/-/dual-datepicker-3.1.0.tgz","fileCount":17,"integrity":"sha512-fnyvUTSjOBJghxOLwb+vQZzLLNnxsrCbf2/WBBLgV3EXvuAKUA0Euraxdh3YqrZWlRSYr79fvlSepRrkeIzX3g==","signatures":[{"sig":"MEYCIQCiYdCHXynapRBWFXouMG4JxvJJcPLKrFjbOTdsiq1i2AIhAJb4Z0C7UCZRdpezWhDOKXgyndvCyB4rkhD32jwZQ5p9","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@oneluiz%2fdual-datepicker@3.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":375750},"module":"fesm2022/oneluiz-dual-datepicker.mjs","exports":{".":{"esm":"./esm2022/oneluiz-dual-datepicker.mjs","types":"./index.d.ts","default":"./fesm2022/oneluiz-dual-datepicker.mjs","esm2022":"./esm2022/oneluiz-dual-datepicker.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"a056a7d2a680027e2b2b67238ba0bddc827e71b4","typings":"index.d.ts","_npmUser":{"name":"oneluiz","email":"luizcortesj@gmail.com"},"repository":{"url":"git+https://github.com/oneluiz/ng-dual-datepicker.git","type":"git"},"_npmVersion":"10.8.2","description":"A customizable dual-calendar date range picker component for Angular 17+ with Reactive Forms, Signals, and Multi-Range support","directories":{},"sideEffects":false,"_nodeVersion":"20.20.0","dependencies":{"tslib":"^2.3.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.13.1+sha512.37ebf1a5c7a30d5fabe0c5df44ee8da4c965ca0c5af3dbab28c3a1681b70a256218d05c81c9c0dcf767ef6b8551eb5b960042b9ed4300c59242336377e01cfad","peerDependencies":{"@angular/core":"^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0","@angular/forms":"^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0","@angular/common":"^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/dual-datepicker_3.1.0_1771523657759_0.8623427328773721","host":"s3://npm-registry-packages-npm-production"}},"3.1.1":{"name":"@oneluiz/dual-datepicker","version":"3.1.1","keywords":["angular","datepicker","date-range","calendar","dual-calendar","date-picker","angular-component","standalone","typescript","reactive-forms","signals","control-value-accessor"],"author":{"name":"Luis Cortes"},"license":"MIT","_id":"@oneluiz/dual-datepicker@3.1.1","maintainers":[{"name":"oneluiz","email":"luizcortesj@gmail.com"}],"homepage":"https://oneluiz.github.io/ng-dual-datepicker/","bugs":{"url":"https://github.com/oneluiz/ng-dual-datepicker/issues"},"dist":{"shasum":"28df4812b80d62b4dbedf567d30dbec3fbb864fc","tarball":"https://registry.npmjs.org/@oneluiz/dual-datepicker/-/dual-datepicker-3.1.1.tgz","fileCount":17,"integrity":"sha512-9rVjd1np3b/ID3ux3Rzn3nM4qy4ALrZiZE2L/G579JA/yI1xgjnaRrXO2xEa/D+56HbOOEUJY6qYus9JS6fgnA==","signatures":[{"sig":"MEUCID322DLJ9/3qGp+fdNPAQeXJyfNEioRD8MFzz1SUyRltAiEA6YDqFW6rAzcxiG0BtCz9Vzv9FRzG6/HiQgnBL1a2Ndk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@oneluiz%2fdual-datepicker@3.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":390598},"module":"fesm2022/oneluiz-dual-datepicker.mjs","exports":{".":{"esm":"./esm2022/oneluiz-dual-datepicker.mjs","types":"./index.d.ts","default":"./fesm2022/oneluiz-dual-datepicker.mjs","esm2022":"./esm2022/oneluiz-dual-datepicker.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"694a5543cd0c4c3fbbc85a5cf0d05f753ee1a026","typings":"index.d.ts","_npmUser":{"name":"oneluiz","email":"luizcortesj@gmail.com"},"repository":{"url":"git+https://github.com/oneluiz/ng-dual-datepicker.git","type":"git"},"_npmVersion":"10.8.2","description":"A customizable dual-calendar date range picker component for Angular 17+ with Reactive Forms, Signals, and Multi-Range support","directories":{},"sideEffects":false,"_nodeVersion":"20.20.0","dependencies":{"tslib":"^2.3.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.13.1+sha512.37ebf1a5c7a30d5fabe0c5df44ee8da4c965ca0c5af3dbab28c3a1681b70a256218d05c81c9c0dcf767ef6b8551eb5b960042b9ed4300c59242336377e01cfad","peerDependencies":{"@angular/core":"^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0","@angular/forms":"^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0","@angular/common":"^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/dual-datepicker_3.1.1_1771525841551_0.9797880250685471","host":"s3://npm-registry-packages-npm-production"}},"3.2.0":{"name":"@oneluiz/dual-datepicker","version":"3.2.0","keywords":["angular","datepicker","date-range","calendar","dual-calendar","date-picker","angular-component","standalone","typescript","reactive-forms","signals","control-value-accessor"],"author":{"name":"Luis Cortes"},"license":"MIT","_id":"@oneluiz/dual-datepicker@3.2.0","maintainers":[{"name":"oneluiz","email":"luizcortesj@gmail.com"}],"homepage":"https://oneluiz.github.io/ng-dual-datepicker/","bugs":{"url":"https://github.com/oneluiz/ng-dual-datepicker/issues"},"dist":{"shasum":"6e3fc4d8af4651a9c15f65f843b852f29806401b","tarball":"https://registry.npmjs.org/@oneluiz/dual-datepicker/-/dual-datepicker-3.2.0.tgz","fileCount":17,"integrity":"sha512-KDqvUBrw4BRMcXJQpf3ROeOVu68xySGopsNe/o4KuQgRnr4TDmrlVM1mbiOg/GmL+Az8jBDqxkkCRSE8C+hL6A==","signatures":[{"sig":"MEUCICTpzXtC0fN5r7uJmkfnDAyX7aUCBz7upDOh9dGl2YkGAiEA7Y6SwGQ+WefmeSLxIZysXFxrj1itDQmG6I90bJmQn6E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@oneluiz%2fdual-datepicker@3.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":481010},"module":"fesm2022/oneluiz-dual-datepicker.mjs","exports":{".":{"esm":"./esm2022/oneluiz-dual-datepicker.mjs","types":"./index.d.ts","default":"./fesm2022/oneluiz-dual-datepicker.mjs","esm2022":"./esm2022/oneluiz-dual-datepicker.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"3e6d793401bfe9a56abd60fc53b480b6dd8017bc","typings":"index.d.ts","_npmUser":{"name":"oneluiz","email":"luizcortesj@gmail.com"},"repository":{"url":"git+https://github.com/oneluiz/ng-dual-datepicker.git","type":"git"},"_npmVersion":"10.8.2","description":"A customizable dual-calendar date range picker component for Angular 17+ with Reactive Forms, Signals, and Multi-Range support","directories":{},"sideEffects":false,"_nodeVersion":"20.20.0","dependencies":{"tslib":"^2.3.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.13.1+sha512.37ebf1a5c7a30d5fabe0c5df44ee8da4c965ca0c5af3dbab28c3a1681b70a256218d05c81c9c0dcf767ef6b8551eb5b960042b9ed4300c59242336377e01cfad","peerDependencies":{"@angular/core":"^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0","@angular/forms":"^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0","@angular/common":"^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/dual-datepicker_3.2.0_1771607626751_0.7080400459351801","host":"s3://npm-registry-packages-npm-production"}},"3.3.0":{"name":"@oneluiz/dual-datepicker","version":"3.3.0","keywords":["angular","datepicker","date-range","calendar","dual-calendar","date-picker","angular-component","standalone","typescript","reactive-forms","signals","control-value-accessor"],"author":{"name":"Luis Cortes"},"license":"MIT","_id":"@oneluiz/dual-datepicker@3.3.0","maintainers":[{"name":"oneluiz","email":"luizcortesj@gmail.com"}],"homepage":"https://oneluiz.github.io/ng-dual-datepicker/","bugs":{"url":"https://github.com/oneluiz/ng-dual-datepicker/issues"},"dist":{"shasum":"5e064ee49f0d28e32aa29769ad63c6fdd4c59b51","tarball":"https://registry.npmjs.org/@oneluiz/dual-datepicker/-/dual-datepicker-3.3.0.tgz","fileCount":28,"integrity":"sha512-msVTXcXYtJnPniY94jY/fwLe6PPrsDbrn3XkZIqkbjMBpc9JK6Tx9jgRlwlByNYw/pi7LsErHFCOWoWC4lmw4g==","signatures":[{"sig":"MEUCIQC06U5gHiCcYu+S8UZBopHWHgEFhw5QRTVHqOXWBUGgQgIgXt7aOMShTie0TFHolquMTOidOBj3MIsEkawerCKnt6Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@oneluiz%2fdual-datepicker@3.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":532658},"module":"fesm2022/oneluiz-dual-datepicker.mjs","exports":{".":{"esm":"./esm2022/oneluiz-dual-datepicker.mjs","types":"./index.d.ts","default":"./fesm2022/oneluiz-dual-datepicker.mjs","esm2022":"./esm2022/oneluiz-dual-datepicker.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"e3b0180ad30c7e8de7bb7a872c6d3402e6cf45bd","typings":"index.d.ts","_npmUser":{"name":"oneluiz","email":"luizcortesj@gmail.com"},"repository":{"url":"git+https://github.com/oneluiz/ng-dual-datepicker.git","type":"git"},"_npmVersion":"10.8.2","description":"A customizable dual-calendar date range picker component for Angular 17+ with Reactive Forms, Signals, and Multi-Range support","directories":{},"sideEffects":false,"_nodeVersion":"20.20.0","dependencies":{"tslib":"^2.3.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.13.1+sha512.37ebf1a5c7a30d5fabe0c5df44ee8da4c965ca0c5af3dbab28c3a1681b70a256218d05c81c9c0dcf767ef6b8551eb5b960042b9ed4300c59242336377e01cfad","peerDependencies":{"@angular/core":"^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0","@angular/forms":"^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0","@angular/common":"^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/dual-datepicker_3.3.0_1771622574109_0.6866158920915497","host":"s3://npm-registry-packages-npm-production"}},"3.4.0":{"name":"@oneluiz/dual-datepicker","version":"3.4.0","keywords":["angular","datepicker","date-range","calendar","dual-calendar","date-picker","angular-component","standalone","typescript","reactive-forms","signals","control-value-accessor"],"author":{"name":"Luis Cortes"},"license":"MIT","_id":"@oneluiz/dual-datepicker@3.4.0","maintainers":[{"name":"oneluiz","email":"luizcortesj@gmail.com"}],"homepage":"https://oneluiz.github.io/ng-dual-datepicker/","bugs":{"url":"https://github.com/oneluiz/ng-dual-datepicker/issues"},"dist":{"shasum":"e4e650d98410942b0d42828d73068bde9dc92890","tarball":"https://registry.npmjs.org/@oneluiz/dual-datepicker/-/dual-datepicker-3.4.0.tgz","fileCount":28,"integrity":"sha512-dM7E5yJmDpKuMrvSJHnQGnuh2Xt6HomGWzyOU7IoX/ObOmuFA5wioA2rSQlcrh9aD/+9crQsQ4tfYHS0ncA1Zg==","signatures":[{"sig":"MEQCIAOe41cqgNrkGRpYUpm75dm3WTQ9W4nFDONt6doU27dPAiB+UTgTphoYOvpLLfhhhN7R3Z74LykLSvKBfO25qkDnkA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@oneluiz%2fdual-datepicker@3.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":626664},"module":"fesm2022/oneluiz-dual-datepicker.mjs","exports":{".":{"esm":"./esm2022/oneluiz-dual-datepicker.mjs","types":"./index.d.ts","default":"./fesm2022/oneluiz-dual-datepicker.mjs","esm2022":"./esm2022/oneluiz-dual-datepicker.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"6b4c55be634c9f633858e78a72f9fcc8b89ce373","typings":"index.d.ts","_npmUser":{"name":"oneluiz","email":"luizcortesj@gmail.com"},"repository":{"url":"git+https://github.com/oneluiz/ng-dual-datepicker.git","type":"git"},"_npmVersion":"10.8.2","description":"A customizable dual-calendar date range picker component for Angular 17+ with Reactive Forms, Signals, Multi-Range support, and Time Picker","directories":{},"sideEffects":false,"_nodeVersion":"20.20.0","dependencies":{"tslib":"^2.3.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.13.1+sha512.37ebf1a5c7a30d5fabe0c5df44ee8da4c965ca0c5af3dbab28c3a1681b70a256218d05c81c9c0dcf767ef6b8551eb5b960042b9ed4300c59242336377e01cfad","peerDependencies":{"@angular/core":"^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0","@angular/forms":"^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0","@angular/common":"^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/dual-datepicker_3.4.0_1771625519834_0.43826783173751394","host":"s3://npm-registry-packages-npm-production"}},"3.5.0":{"name":"@oneluiz/dual-datepicker","version":"3.5.0","keywords":["angular","datepicker","date-range","calendar","dual-calendar","date-picker","angular-component","standalone","typescript","reactive-forms","signals","control-value-accessor"],"author":{"name":"Luis Cortes"},"license":"MIT","_id":"@oneluiz/dual-datepicker@3.5.0","maintainers":[{"name":"oneluiz","email":"luizcortesj@gmail.com"}],"homepage":"https://oneluiz.github.io/ng-dual-datepicker/","bugs":{"url":"https://github.com/oneluiz/ng-dual-datepicker/issues"},"dist":{"shasum":"e8ec31c7d3e24d721c67816e7994d5a28fed7329","tarball":"https://registry.npmjs.org/@oneluiz/dual-datepicker/-/dual-datepicker-3.5.0.tgz","fileCount":36,"integrity":"sha512-ih9gQwTOKwGj0AaZnNtfnXYrotVpoCqChZKQckeGt5ospMXbstzdVD9X3+uRqw9/gIx8Btp74U/PYVsqqggHSQ==","signatures":[{"sig":"MEUCIQDEAi22hZAz05Fys3O5LnUcPbP2gnJ31mHdfHHnwtXV0QIgVSa8hBBndP8utGjNA7+/VA9P924CBFEtHzQc0i5fyTw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@oneluiz%2fdual-datepicker@3.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":762516},"module":"fesm2022/oneluiz-dual-datepicker.mjs","exports":{".":{"esm":"./esm2022/oneluiz-dual-datepicker.mjs","types":"./index.d.ts","default":"./fesm2022/oneluiz-dual-datepicker.mjs","esm2022":"./esm2022/oneluiz-dual-datepicker.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"3cd0141e22fd408f960ab4c84ba1f33b6e58d2ab","typings":"index.d.ts","_npmUser":{"name":"oneluiz","email":"luizcortesj@gmail.com"},"repository":{"url":"git+https://github.com/oneluiz/ng-dual-datepicker.git","type":"git"},"_npmVersion":"10.8.2","description":"A customizable dual-calendar date range picker for Angular 17+ with Reactive Forms, Signals, Headless Architecture, Multi-Range support, and Time Picker","directories":{},"sideEffects":false,"_nodeVersion":"20.20.0","dependencies":{"tslib":"^2.3.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.13.1+sha512.37ebf1a5c7a30d5fabe0c5df44ee8da4c965ca0c5af3dbab28c3a1681b70a256218d05c81c9c0dcf767ef6b8551eb5b960042b9ed4300c59242336377e01cfad","peerDependencies":{"@angular/core":"^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0","@angular/forms":"^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0","@angular/common":"^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/dual-datepicker_3.5.0_1771649481532_0.4036368216628632","host":"s3://npm-registry-packages-npm-production"}},"3.5.1":{"name":"@oneluiz/dual-datepicker","version":"3.5.1","keywords":["angular","datepicker","date-range","calendar","dual-calendar","date-picker","angular-component","standalone","typescript","reactive-forms","signals","control-value-accessor","timezone-safe","date-adapter"],"author":{"name":"Luis Cortes"},"license":"MIT","_id":"@oneluiz/dual-datepicker@3.5.1","maintainers":[{"name":"oneluiz","email":"luizcortesj@gmail.com"}],"homepage":"https://oneluiz.github.io/ng-dual-datepicker/","bugs":{"url":"https://github.com/oneluiz/ng-dual-datepicker/issues"},"dist":{"shasum":"1b093d23f55826e28c618fb589c016a99e44cc2f","tarball":"https://registry.npmjs.org/@oneluiz/dual-datepicker/-/dual-datepicker-3.5.1.tgz","fileCount":44,"integrity":"sha512-/8V5MW08EE0Qj7kqqlgkwNBdp/wOrnRZlr8vg/E/kDIR6ymmiUFIVAs4y4LhQLRJumLcsiZ06viLYhbYrAUeTA==","signatures":[{"sig":"MEQCIGqKOqpFyDUshzwlDEg9gt+EwmuwzLdfl3msbx7qSc3yAiAr+P6c2bjW1u97gtn5Yts3waeWOaIJPn+OazpCOnFDFw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@oneluiz%2fdual-datepicker@3.5.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":916245},"module":"fesm2022/oneluiz-dual-datepicker.mjs","exports":{".":{"esm":"./esm2022/oneluiz-dual-datepicker.mjs","types":"./index.d.ts","default":"./fesm2022/oneluiz-dual-datepicker.mjs","esm2022":"./esm2022/oneluiz-dual-datepicker.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"8d6b684670e1ed8318eacf2bd860f5960aa4e41f","typings":"index.d.ts","_npmUser":{"name":"oneluiz","email":"luizcortesj@gmail.com"},"repository":{"url":"git+https://github.com/oneluiz/ng-dual-datepicker.git","type":"git"},"_npmVersion":"10.8.2","description":"A customizable dual-calendar date range picker for Angular 17+ with Reactive Forms, Signals, Headless Architecture, Multi-Range support, Time Picker, and Timezone-Safe Date Adapter","directories":{},"sideEffects":false,"_nodeVersion":"20.20.0","dependencies":{"tslib":"^2.3.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.13.1+sha512.37ebf1a5c7a30d5fabe0c5df44ee8da4c965ca0c5af3dbab28c3a1681b70a256218d05c81c9c0dcf767ef6b8551eb5b960042b9ed4300c59242336377e01cfad","peerDependencies":{"@angular/core":"^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0","@angular/forms":"^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0","@angular/common":"^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/dual-datepicker_3.5.1_1771679143527_0.7692952040850665","host":"s3://npm-registry-packages-npm-production"}},"3.6.0":{"name":"@oneluiz/dual-datepicker","version":"3.6.0","keywords":["angular","datepicker","date-range","calendar","dual-calendar","date-picker","angular-component","standalone","typescript","reactive-forms","signals","control-value-accessor","timezone-safe","date-adapter"],"author":{"name":"Luis Cortes"},"license":"MIT","_id":"@oneluiz/dual-datepicker@3.6.0","maintainers":[{"name":"oneluiz","email":"luizcortesj@gmail.com"}],"homepage":"https://oneluiz.github.io/ng-dual-datepicker/","bugs":{"url":"https://github.com/oneluiz/ng-dual-datepicker/issues"},"dist":{"shasum":"746e7e5505b33d2888abb9ed3fac8395a4b3e567","tarball":"https://registry.npmjs.org/@oneluiz/dual-datepicker/-/dual-datepicker-3.6.0.tgz","fileCount":52,"integrity":"sha512-duT+S6yLja0CGTp1SAPd3NNpw4gAyzWcMxqdTTtOan6Bshpv/Adg4KX86Ie5Xmfu5P3MNtUh4VnCBPrSO7PW0Q==","signatures":[{"sig":"MEUCIQDioaPGV8DEMmX2QHHaJf6k09ss3IVD8CzkkOIv1RuhlAIgS2IfD6sEXYPbDRqeWHC2EbpurWSk2I5KdqzoWb4H5jo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@oneluiz%2fdual-datepicker@3.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1057757},"module":"fesm2022/oneluiz-dual-datepicker.mjs","exports":{".":{"esm":"./esm2022/oneluiz-dual-datepicker.mjs","types":"./index.d.ts","default":"./fesm2022/oneluiz-dual-datepicker.mjs","esm2022":"./esm2022/oneluiz-dual-datepicker.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"347273871120e59a25affcd840288f849daf1322","typings":"index.d.ts","_npmUser":{"name":"oneluiz","email":"luizcortesj@gmail.com"},"repository":{"url":"git+https://github.com/oneluiz/ng-dual-datepicker.git","type":"git"},"_npmVersion":"10.8.2","description":"A customizable dual-calendar date range picker for Angular 17+ with Reactive Forms, Signals, Headless Architecture, Plugin-Driven Presets, Multi-Range support, Time Picker, and Timezone-Safe Date Adapter","directories":{},"sideEffects":false,"_nodeVersion":"20.20.0","dependencies":{"tslib":"^2.3.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.13.1+sha512.37ebf1a5c7a30d5fabe0c5df44ee8da4c965ca0c5af3dbab28c3a1681b70a256218d05c81c9c0dcf767ef6b8551eb5b960042b9ed4300c59242336377e01cfad","peerDependencies":{"@angular/core":"^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0","@angular/forms":"^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0","@angular/common":"^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/dual-datepicker_3.6.0_1771680964304_0.4183073008776541","host":"s3://npm-registry-packages-npm-production"}},"3.9.0":{"name":"@oneluiz/dual-datepicker","version":"3.9.0","keywords":["angular","datepicker","date-range","calendar","dual-calendar","date-picker","angular-component","standalone","typescript","reactive-forms","signals","control-value-accessor","timezone-safe","date-adapter"],"author":{"name":"Luis Cortes"},"license":"MIT","_id":"@oneluiz/dual-datepicker@3.9.0","maintainers":[{"name":"oneluiz","email":"luizcortesj@gmail.com"}],"homepage":"https://oneluiz.github.io/ng-dual-datepicker/","bugs":{"url":"https://github.com/oneluiz/ng-dual-datepicker/issues"},"dist":{"shasum":"07e4fba70562d5dce03f2154c7746854b509cc91","tarball":"https://registry.npmjs.org/@oneluiz/dual-datepicker/-/dual-datepicker-3.9.0.tgz","fileCount":70,"integrity":"sha512-Uo3bVk1BhKRO467VlKRFwcQTV9LjbjGAI6V5xj1OyCPe2QJ8Q+57+277Gd/Z6dgPNMH7b42i+nJO9QF3pXVvjw==","signatures":[{"sig":"MEYCIQDBOuvC+kFuwvDl3kS1DDdfKxIW/fG3H36o9QGf5DnLHgIhAPLUiEd6wWGFMkQ2VMl1AgLNQ9rlenmE21XnM1hkiY7K","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@oneluiz%2fdual-datepicker@3.9.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1286175},"module":"fesm2022/oneluiz-dual-datepicker.mjs","exports":{".":{"esm":"./esm2022/oneluiz-dual-datepicker.mjs","types":"./index.d.ts","default":"./fesm2022/oneluiz-dual-datepicker.mjs","esm2022":"./esm2022/oneluiz-dual-datepicker.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"077a0d2686229baa093191b2e8d6cad6a04abc9a","typings":"index.d.ts","_npmUser":{"name":"oneluiz","email":"luizcortesj@gmail.com"},"repository":{"url":"git+https://github.com/oneluiz/ng-dual-datepicker.git","type":"git"},"_npmVersion":"10.8.2","description":"A customizable dual-calendar date range picker for Angular 17+ with Reactive Forms, Signals, Headless Architecture, Plugin-Driven Presets, Multi-Range support, Time Picker, and Timezone-Safe Date Adapter","directories":{},"sideEffects":false,"_nodeVersion":"20.20.0","dependencies":{"tslib":"^2.3.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.13.1+sha512.37ebf1a5c7a30d5fabe0c5df44ee8da4c965ca0c5af3dbab28c3a1681b70a256218d05c81c9c0dcf767ef6b8551eb5b960042b9ed4300c59242336377e01cfad","peerDependencies":{"@angular/core":"^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0","@angular/forms":"^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0","@angular/common":"^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/dual-datepicker_3.9.0_1771690650926_0.7328176231543393","host":"s3://npm-registry-packages-npm-production"}},"3.9.1":{"name":"@oneluiz/dual-datepicker","version":"3.9.1","keywords":["angular","datepicker","date-range","calendar","dual-calendar","date-picker","angular-component","standalone","typescript","reactive-forms","signals","control-value-accessor","timezone-safe","date-adapter"],"author":{"name":"Luis Cortes"},"license":"MIT","_id":"@oneluiz/dual-datepicker@3.9.1","maintainers":[{"name":"oneluiz","email":"luizcortesj@gmail.com"}],"homepage":"https://oneluiz.github.io/ng-dual-datepicker/","bugs":{"url":"https://github.com/oneluiz/ng-dual-datepicker/issues"},"dist":{"shasum":"11a31ab152afee4c6b6312f223b8014bb1c1e36c","tarball":"https://registry.npmjs.org/@oneluiz/dual-datepicker/-/dual-datepicker-3.9.1.tgz","fileCount":70,"integrity":"sha512-G8V6k5DOWVC+rPgsBTFzX6/OVOz6OB0o6sGwyf1Z5oHjT48fGiL6kVh8BPCo4PVvwwMgTvH5EbCFScvT6wrZzA==","signatures":[{"sig":"MEQCIEO0qwdA4eQcvrHuO2LieyVm+6Kk9ppU9R3o76BQ+58gAiAcWaYfABX4aix1/zNIltM31bYR7RRInY+Gm8bOSFCKZw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@oneluiz%2fdual-datepicker@3.9.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1286175},"module":"fesm2022/oneluiz-dual-datepicker.mjs","exports":{".":{"esm":"./esm2022/oneluiz-dual-datepicker.mjs","types":"./index.d.ts","default":"./fesm2022/oneluiz-dual-datepicker.mjs","esm2022":"./esm2022/oneluiz-dual-datepicker.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"fab7e44bb83b74f42a347f7df3af1236589cae66","typings":"index.d.ts","_npmUser":{"name":"oneluiz","email":"luizcortesj@gmail.com"},"repository":{"url":"git+https://github.com/oneluiz/ng-dual-datepicker.git","type":"git"},"_npmVersion":"10.8.2","description":"A customizable dual-calendar date range picker for Angular 17+ with Reactive Forms, Signals, Headless Architecture, Plugin-Driven Presets, Multi-Range support, Time Picker, and Timezone-Safe Date Adapter","directories":{},"sideEffects":false,"_nodeVersion":"20.20.0","dependencies":{"tslib":"^2.3.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.13.1+sha512.37ebf1a5c7a30d5fabe0c5df44ee8da4c965ca0c5af3dbab28c3a1681b70a256218d05c81c9c0dcf767ef6b8551eb5b960042b9ed4300c59242336377e01cfad","peerDependencies":{"@angular/core":"^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0","@angular/forms":"^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0","@angular/common":"^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/dual-datepicker_3.9.1_1771692574219_0.7096765984324314","host":"s3://npm-registry-packages-npm-production"}},"3.9.2":{"name":"@oneluiz/dual-datepicker","version":"3.9.2","keywords":["angular","datepicker","date-range","calendar","dual-calendar","date-picker","angular-component","standalone","typescript","reactive-forms","signals","control-value-accessor","timezone-safe","date-adapter"],"author":{"name":"Luis Cortes"},"license":"MIT","_id":"@oneluiz/dual-datepicker@3.9.2","maintainers":[{"name":"oneluiz","email":"luizcortesj@gmail.com"}],"homepage":"https://oneluiz.github.io/ng-dual-datepicker/","bugs":{"url":"https://github.com/oneluiz/ng-dual-datepicker/issues"},"dist":{"shasum":"76b2e4e141fdc68773075fced6331899265f127b","tarball":"https://registry.npmjs.org/@oneluiz/dual-datepicker/-/dual-datepicker-3.9.2.tgz","fileCount":72,"integrity":"sha512-d50fLh2oXNav18oJFsjHmC2FoWrLDB05I5mbwTObMgE+vU3m17z0ddtr5n27GCwzMtBvBFUDp4Jy1/r9uhVa5Q==","signatures":[{"sig":"MEQCIDtJsEdCwNIDHsgrGb53zJRmMY2rn1bsCyXKboFBf714AiA371TSW1DSbzXv9RwgBZiqNGAAbSU0PUyuj9PGYR6ZmQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@oneluiz%2fdual-datepicker@3.9.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1294338},"module":"fesm2022/oneluiz-dual-datepicker.mjs","exports":{".":{"esm":"./esm2022/oneluiz-dual-datepicker.mjs","types":"./index.d.ts","default":"./fesm2022/oneluiz-dual-datepicker.mjs","esm2022":"./esm2022/oneluiz-dual-datepicker.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"e6bb6c39808ddea1e7cbea6615ee89ae63bb3cdb","typings":"index.d.ts","_npmUser":{"name":"oneluiz","email":"luizcortesj@gmail.com"},"repository":{"url":"git+https://github.com/oneluiz/ng-dual-datepicker.git","type":"git"},"_npmVersion":"10.8.2","description":"A customizable dual-calendar date range picker for Angular 17+ with Reactive Forms, Signals, Headless Architecture, Plugin-Driven Presets, Multi-Range support, Time Picker, and Timezone-Safe Date Adapter","directories":{},"sideEffects":false,"_nodeVersion":"20.20.0","dependencies":{"tslib":"^2.3.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.13.1+sha512.37ebf1a5c7a30d5fabe0c5df44ee8da4c965ca0c5af3dbab28c3a1681b70a256218d05c81c9c0dcf767ef6b8551eb5b960042b9ed4300c59242336377e01cfad","peerDependencies":{"@angular/core":"^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0","@angular/forms":"^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0","@angular/common":"^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/dual-datepicker_3.9.2_1771693208510_0.934920791912033","host":"s3://npm-registry-packages-npm-production"}},"3.9.3":{"name":"@oneluiz/dual-datepicker","version":"3.9.3","keywords":["angular","datepicker","date-range","calendar","dual-calendar","date-picker","angular-component","standalone","typescript","reactive-forms","signals","control-value-accessor","timezone-safe","date-adapter"],"author":{"name":"Luis Cortes"},"license":"MIT","_id":"@oneluiz/dual-datepicker@3.9.3","maintainers":[{"name":"oneluiz","email":"luizcortesj@gmail.com"}],"homepage":"https://oneluiz.github.io/ng-dual-datepicker/","bugs":{"url":"https://github.com/oneluiz/ng-dual-datepicker/issues"},"dist":{"shasum":"5b90b0e692d29b429e126320a81d9f99c81ba3c0","tarball":"https://registry.npmjs.org/@oneluiz/dual-datepicker/-/dual-datepicker-3.9.3.tgz","fileCount":72,"integrity":"sha512-cuBgRQdjVrzjUqbR+nijVHqL4hHm8MMp4oiZyQLOnRUfhQNLQTVhZGbK86aXUX6qYzWUOD4uGV1WU4ahMEFqWA==","signatures":[{"sig":"MEUCIQCLG3E0W3f9XHau8/a4j4FEV47KoVruoEJ9cPzAcbjWYgIgGYpmcrxa/q5K3+raIOpbv2VjYeeF4H7GfDOIW7GD1gM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@oneluiz%2fdual-datepicker@3.9.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1294338},"module":"fesm2022/oneluiz-dual-datepicker.mjs","exports":{".":{"esm":"./esm2022/oneluiz-dual-datepicker.mjs","types":"./index.d.ts","default":"./fesm2022/oneluiz-dual-datepicker.mjs","esm2022":"./esm2022/oneluiz-dual-datepicker.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"1c80541260a17035ad57b3b05f9c847eee325b85","typings":"index.d.ts","_npmUser":{"name":"oneluiz","email":"luizcortesj@gmail.com"},"repository":{"url":"git+https://github.com/oneluiz/ng-dual-datepicker.git","type":"git"},"_npmVersion":"10.8.2","description":"A customizable dual-calendar date range picker for Angular 17+ with Reactive Forms, Signals, Headless Architecture, Plugin-Driven Presets, Multi-Range support, Time Picker, and Timezone-Safe Date Adapter","directories":{},"sideEffects":false,"_nodeVersion":"20.20.0","dependencies":{"tslib":"^2.3.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.13.1+sha512.37ebf1a5c7a30d5fabe0c5df44ee8da4c965ca0c5af3dbab28c3a1681b70a256218d05c81c9c0dcf767ef6b8551eb5b960042b9ed4300c59242336377e01cfad","peerDependencies":{"@angular/core":"^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0","@angular/forms":"^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0","@angular/common":"^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/dual-datepicker_3.9.3_1771693472865_0.24381596182857002","host":"s3://npm-registry-packages-npm-production"}},"4.0.0":{"name":"@oneluiz/dual-datepicker","version":"4.0.0","keywords":["angular","datepicker","date-range","calendar","dual-calendar","date-picker","angular-component","standalone","typescript","reactive-forms","signals","control-value-accessor","timezone-safe","date-adapter"],"author":{"name":"Luis Cortes"},"license":"MIT","_id":"@oneluiz/dual-datepicker@4.0.0","maintainers":[{"name":"oneluiz","email":"luizcortesj@gmail.com"}],"homepage":"https://oneluiz.github.io/ng-dual-datepicker/","bugs":{"url":"https://github.com/oneluiz/ng-dual-datepicker/issues"},"dist":{"shasum":"f1bad48fa325ecc9fd5c2c26122f04486f2e9c95","tarball":"https://registry.npmjs.org/@oneluiz/dual-datepicker/-/dual-datepicker-4.0.0.tgz","fileCount":42,"integrity":"sha512-CXvlO27o78EXaJmVKV3woAKamV0ty6UuRa1h2RWdVQ0d4Oo3ZV/4jbIY9s7qIgqgUenSiThdgYD3ZJdYyn/VAg==","signatures":[{"sig":"MEQCIB2fmBblUx+NDQFknkMUtqTQwbezIdD1kx0vj7hEMB/8AiBr+zyIC1Dsjh9/CGcv+tQpYVo5dk4+pb5PlQVSZct1uQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@oneluiz%2fdual-datepicker@4.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1133907},"module":"fesm2022/oneluiz-dual-datepicker.mjs","exports":{".":{"esm":"./esm2022/oneluiz-dual-datepicker.mjs","types":"./index.d.ts","default":"./fesm2022/oneluiz-dual-datepicker.mjs","esm2022":"./esm2022/oneluiz-dual-datepicker.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"b2e7b41afbebe3008786269c19459ebc18a025db","typings":"index.d.ts","_npmUser":{"name":"oneluiz","email":"luizcortesj@gmail.com"},"repository":{"url":"git+https://github.com/oneluiz/ng-dual-datepicker.git","type":"git"},"_npmVersion":"10.8.2","description":"A customizable dual-calendar date range picker for Angular 17+ with Reactive Forms, Signals, Headless Architecture, Plugin-Driven Presets, Multi-Range support, Time Picker, and Timezone-Safe Date Adapter","directories":{},"sideEffects":false,"_nodeVersion":"20.20.0","dependencies":{"tslib":"^2.3.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.13.1+sha512.37ebf1a5c7a30d5fabe0c5df44ee8da4c965ca0c5af3dbab28c3a1681b70a256218d05c81c9c0dcf767ef6b8551eb5b960042b9ed4300c59242336377e01cfad","peerDependencies":{"@angular/core":"^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0","@angular/forms":"^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0","@angular/common":"^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/dual-datepicker_4.0.0_1771698737313_0.563739694716733","host":"s3://npm-registry-packages-npm-production"}},"4.0.1":{"name":"@oneluiz/dual-datepicker","version":"4.0.1","keywords":["angular","datepicker","date-range","calendar","dual-calendar","date-picker","angular-component","standalone","typescript","reactive-forms","signals","control-value-accessor","timezone-safe","date-adapter"],"author":{"name":"Luis Cortes"},"license":"MIT","_id":"@oneluiz/dual-datepicker@4.0.1","maintainers":[{"name":"oneluiz","email":"luizcortesj@gmail.com"}],"homepage":"https://oneluiz.github.io/ng-dual-datepicker/","bugs":{"url":"https://github.com/oneluiz/ng-dual-datepicker/issues"},"dist":{"shasum":"9b9343f28282a9e1d88ad706b094fb0017fa46e4","tarball":"https://registry.npmjs.org/@oneluiz/dual-datepicker/-/dual-datepicker-4.0.1.tgz","fileCount":11,"integrity":"sha512-sdKdN4/WfaJ+D9M0QBPI7hjS0539zPISVHISlrmdl+5BDva0Q9iySCpeeU04xjVDUt8DRlu3yeKU6c/yRC+1eQ==","signatures":[{"sig":"MEUCIERsw215iFd++VUKPeFUe0qLXMMdocibBnb/KkN3+TgfAiEA7RHiJF7ZcveprJcPy6dl12cxYAmC8qFlR6m5pDqqHzM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":553027},"module":"fesm2022/oneluiz-dual-datepicker.mjs","exports":{".":{"types":"./types/oneluiz-dual-datepicker.d.ts","default":"./fesm2022/oneluiz-dual-datepicker.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"d2ddcbeeeb575d9fe768f1a4fc4f143e08428220","typings":"types/oneluiz-dual-datepicker.d.ts","_npmUser":{"name":"oneluiz","email":"luizcortesj@gmail.com"},"repository":{"url":"git+https://github.com/oneluiz/ng-dual-datepicker.git","type":"git"},"_npmVersion":"10.9.4","description":"A customizable dual-calendar date range picker for Angular 17+ with Reactive Forms, Signals, Headless Architecture, Plugin-Driven Presets, Multi-Range support, Time Picker, and Timezone-Safe Date Adapter","directories":{},"sideEffects":false,"_nodeVersion":"22.22.1","dependencies":{"tslib":"^2.3.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.13.1+sha512.37ebf1a5c7a30d5fabe0c5df44ee8da4c965ca0c5af3dbab28c3a1681b70a256218d05c81c9c0dcf767ef6b8551eb5b960042b9ed4300c59242336377e01cfad","peerDependencies":{"@angular/core":"^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0 || ^21.0.0","@angular/forms":"^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0 || ^21.0.0","@angular/common":"^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0 || ^21.0.0"},"_npmOperationalInternal":{"tmp":"tmp/dual-datepicker_4.0.1_1774282270500_0.6407587966498969","host":"s3://npm-registry-packages-npm-production"}},"4.0.2":{"name":"@oneluiz/dual-datepicker","version":"4.0.2","description":"A customizable dual-calendar date range picker for Angular 17+ with Reactive Forms, Signals, Headless Architecture, Plugin-Driven Presets, Multi-Range support, Time Picker, and Timezone-Safe Date Adapter","keywords":["angular","datepicker","date-range","calendar","dual-calendar","date-picker","angular-component","standalone","typescript","reactive-forms","signals","control-value-accessor","timezone-safe","date-adapter"],"author":{"name":"Luis Cortes"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/oneluiz/ng-dual-datepicker.git"},"bugs":{"url":"https://github.com/oneluiz/ng-dual-datepicker/issues"},"homepage":"https://oneluiz.github.io/ng-dual-datepicker/","peerDependencies":{"@angular/common":"^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0 || ^21.0.0","@angular/core":"^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0 || ^21.0.0","@angular/forms":"^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0 || ^21.0.0"},"packageManager":"pnpm@10.13.1+sha512.37ebf1a5c7a30d5fabe0c5df44ee8da4c965ca0c5af3dbab28c3a1681b70a256218d05c81c9c0dcf767ef6b8551eb5b960042b9ed4300c59242336377e01cfad","module":"fesm2022/oneluiz-dual-datepicker.mjs","typings":"types/oneluiz-dual-datepicker.d.ts","exports":{"./package.json":{"default":"./package.json"},".":{"types":"./types/oneluiz-dual-datepicker.d.ts","default":"./fesm2022/oneluiz-dual-datepicker.mjs"}},"sideEffects":false,"dependencies":{"tslib":"^2.3.0"},"_id":"@oneluiz/dual-datepicker@4.0.2","gitHead":"61f244daa8d91bf61189ec2e039317c36912db1b","_nodeVersion":"20.20.1","_npmVersion":"10.8.2","dist":{"integrity":"sha512-tK2rvV2kGK9qb3589kMT+LxYV+VGKgdJM6xtQNucj/bVhmCfdFtuHfa9AawekelhOtXoB6DHDm0S83xqlFFErA==","shasum":"5c37765a37a72e50abd76200c9392cfc70dceaf1","tarball":"https://registry.npmjs.org/@oneluiz/dual-datepicker/-/dual-datepicker-4.0.2.tgz","fileCount":12,"unpackedSize":604271,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@oneluiz%2fdual-datepicker@4.0.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCmcVrRbXuovemcUplyUmF8CDfAFxCbvtdQCq0HPnx6NQIgCUfDya8kcIpzBP5iM+Pfk72a9SEoVCwm6X/JLxLGk5c="}]},"_npmUser":{"name":"oneluiz","email":"luizcortesj@gmail.com"},"directories":{},"maintainers":[{"name":"oneluiz","email":"luizcortesj@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/dual-datepicker_4.0.2_1774283681372_0.7847262371334289"},"_hasShrinkwrap":false}},"time":{"created":"2026-02-18T18:28:26.325Z","modified":"2026-03-23T16:34:41.813Z","1.0.0":"2026-02-18T18:28:26.560Z","1.0.1":"2026-02-18T18:38:28.418Z","1.0.2":"2026-02-18T18:46:06.524Z","1.0.3":"2026-02-18T19:04:27.338Z","2.0.0":"2026-02-18T19:18:48.648Z","2.0.1":"2026-02-18T19:23:24.967Z","2.0.2":"2026-02-18T19:24:44.279Z","2.1.0":"2026-02-18T20:10:14.812Z","2.2.0":"2026-02-18T20:25:48.808Z","2.2.1":"2026-02-18T20:34:31.116Z","2.3.0":"2026-02-18T20:40:27.224Z","2.4.0":"2026-02-18T23:37:36.535Z","2.5.0":"2026-02-19T04:43:39.565Z","2.6.0":"2026-02-19T05:12:52.110Z","2.7.0":"2026-02-19T05:45:08.729Z","3.0.0":"2026-02-19T06:40:31.688Z","3.0.1":"2026-02-19T17:04:48.216Z","3.1.0":"2026-02-19T17:54:17.914Z","3.1.1":"2026-02-19T18:30:41.699Z","3.2.0":"2026-02-20T17:13:46.919Z","3.3.0":"2026-02-20T21:22:54.381Z","3.4.0":"2026-02-20T22:11:59.987Z","3.5.0":"2026-02-21T04:51:21.732Z","3.5.1":"2026-02-21T13:05:43.713Z","3.6.0":"2026-02-21T13:36:04.556Z","3.9.0":"2026-02-21T16:17:31.115Z","3.9.1":"2026-02-21T16:49:34.386Z","3.9.2":"2026-02-21T17:00:08.708Z","3.9.3":"2026-02-21T17:04:33.070Z","4.0.0":"2026-02-21T18:32:17.525Z","4.0.1":"2026-03-23T16:11:10.663Z","4.0.2":"2026-03-23T16:34:41.535Z"},"bugs":{"url":"https://github.com/oneluiz/ng-dual-datepicker/issues"},"author":{"name":"Luis Cortes"},"license":"MIT","homepage":"https://oneluiz.github.io/ng-dual-datepicker/","keywords":["angular","datepicker","date-range","calendar","dual-calendar","date-picker","angular-component","standalone","typescript","reactive-forms","signals","control-value-accessor","timezone-safe","date-adapter"],"repository":{"type":"git","url":"git+https://github.com/oneluiz/ng-dual-datepicker.git"},"description":"A customizable dual-calendar date range picker for Angular 17+ with Reactive Forms, Signals, Headless Architecture, Plugin-Driven Presets, Multi-Range support, Time Picker, and Timezone-Safe Date Adapter","maintainers":[{"name":"oneluiz","email":"luizcortesj@gmail.com"}],"readme":"# ng-dual-datepicker\n\nA lightweight, zero-dependency date range picker for Angular 17+. Built with standalone components, Reactive Forms, and Angular Signals. No Angular Material required.\n\n> **🚀 v4.0.0**: [**Public API Formalization**](#v400-public-api-formalization) - Stable, documented API contract. ~50% smaller package. Better tree-shaking. Breaking changes documented in [CHANGELOG.md](CHANGELOG.md) 📦  \n> **🆕 v3.5.1**: [**Timezone-Safe Date Adapter**](docs/TIMEZONE_ADAPTER.md) - Fixes enterprise-critical timezone bugs in ERP, BI, POS, and invoicing systems 🛡️  \n> **🆕 v3.5.0**: [**Headless Architecture**](docs/HEADLESS.md) - Use date range state WITHOUT the UI component. Perfect for SSR, services, and global dashboard filters! 🎯\n\n[![npm version](https://img.shields.io/npm/v/@oneluiz/dual-datepicker)](https://www.npmjs.com/package/@oneluiz/dual-datepicker)\n[![npm provenance](https://img.shields.io/badge/provenance-available-brightgreen)](https://www.npmjs.com/package/@oneluiz/dual-datepicker)\n![license](https://img.shields.io/npm/l/@oneluiz/dual-datepicker)\n![Angular](https://img.shields.io/badge/Angular-17%2B-red)\n\n```bash\nnpm install @oneluiz/dual-datepicker\n```\n\n## 🎯 [Live Demo](https://oneluiz.github.io/ng-dual-datepicker/)\n\n**[Check out the interactive examples →](https://oneluiz.github.io/ng-dual-datepicker/)**\n\n---\n\n## 🌟 What's New\n\n### v4.0.0: Public API Formalization\n\n**Major release** formalizing the stable public API contract:\n\n**What Changed:**\n- ✅ **Stable Public API** - Clear contract with 11 main exports\n- ✅ **~50% Smaller Package** - 250 KB (was 500 KB)\n- ✅ **Better Tree-Shaking** - Pure ESM bundles\n- ⚠️ **Breaking Changes** - Internal APIs removed, DateAdapter methods renamed\n\n**Migration:**\n```typescript\n// ❌ Before (v3.x)\nimport { CalendarGridFactory } from '@oneluiz/dual-datepicker';\nconst date = adapter.parse('2026-01-15');\n\n// ✅ After (v4.0)\nimport { DualDateRangeStore } from '@oneluiz/dual-datepicker';\nconst date = adapter.parseISODate('2026-01-15');\n```\n\n**[📖 Read the full migration guide in CHANGELOG.md →](CHANGELOG.md#400---2026-02-21)**\n\n### Timezone-Safe Date Adapter (v3.5.1)\n\n**Fixed**: Enterprise timezone bugs that caused date ranges to shift by ±1 day.\n\n```typescript\n// ✅ No more timezone shift bugs!\nconst store = inject(DualDateRangeStore);\nstore.applyPreset('THIS_MONTH');\nconst range = store.range(); // { start: \"2024-03-01\", end: \"2024-03-31\" }\n// Always correct, even across timezones and DST transitions\n\n// ✅ Optional: Use your preferred date library\nproviders: [\n  { provide: DATE_ADAPTER, useClass: LuxonDateAdapter }\n]\n```\n\n**[📖 Read the Timezone Adapter Guide →](docs/TIMEZONE_ADAPTER.md)**\n\n### Headless Architecture (v3.5.0)\n\nUse date range logic **without the UI component**:\n\n```typescript\n// Inject the store anywhere - no UI needed!\nconst rangeStore = inject(DualDateRangeStore);\n\n// Apply preset\nrangeStore.applyPreset('THIS_MONTH');\n\n// Use in API calls\nconst range = rangeStore.range();\nhttp.get(`/api/sales?start=${range.start}&end=${range.end}`);\n```\n\n**Perfect for:**\n- 📊 Dashboard filters (control multiple charts)\n- 🏢 SSR applications\n- 🔄 Global state management\n- 🎯 Service-layer filtering\n- 📈 Analytics and BI tools\n\n**[📖 Read the Headless Architecture Guide →](docs/HEADLESS.md)**\n\n---\n\n## 📋 Table of Contents\n\n- [Features](#-features)\n- [Why Choose This Library?](#-why-choose-this-library)\n- [Installation](#-installation)\n- [Quick Start](#-quick-start)\n  - [Basic Usage](#basic-usage)\n  - [Reactive Forms](#with-reactive-forms)\n  - [Angular Signals](#with-angular-signals)\n  - [Headless Usage](#headless-usage-new) ⭐ NEW\n- [Advanced Features](#-advanced-features)\n  - [Multi-Range Selection](#multi-range-support)\n  - [Disabled Dates](#disabled-dates)\n  - [Display Format](#display-format)\n  - [Apply/Confirm Button](#applyconfirm-button)\n  - [Time Picker](#time-picker)\n  - [Hover Range Preview](#hover-range-preview)\n  - [Custom Presets](#custom-presets)\n  - [Date Adapter System](#date-adapter-system)\n  - [Keyboard Navigation](#keyboard-navigation)\n- [Customization](#-customization)\n  - [Theming System](#theming-system)\n  - [Styling Options](#styling-options)\n  - [Localization (i18n)](#localization-i18n)\n- [API Reference](#-api-reference)\n  - [Inputs](#inputs)\n  - [Outputs](#outputs)\n  - [Methods](#public-methods)\n  - [Types](#types)\n- [Examples](#-usage-examples)\n- [Accessibility](#-accessibility)\n- [Requirements](#-requirements)\n- [License & Support](#-license--support)\n\n---\n\n## ✨ Features\n\n- 🪶 **Zero Dependencies** – No external libraries required\n- 🎯 **Standalone Component** – No NgModule imports needed\n- ⚡ **Angular Signals** – Modern reactive state management\n- 🔄 **Reactive Forms** – Full ControlValueAccessor implementation\n- 🔥 **Multi-Range Support** – Select multiple date ranges (Material CAN'T do this!)\n- 🚫 **Disabled Dates** – Block weekends, holidays, or custom logic\n- 🎨 **Display Format** – Customize date display (DD/MM/YYYY, MM/DD/YYYY, etc.)\n- ✅ **Apply/Confirm Button** – Require confirmation before emitting (perfect for dashboards)\n- � **Theming System** – Built-in themes for Bootstrap, Bulma, Foundation, Tailwind, + Custom\n- �🎨 **Fully Customizable** – Every color, padding, border configurable\n- 📦 **Lightweight** – ~60 KB gzipped total bundle\n- 🚀 **Performance** – OnPush change detection + trackBy optimization\n- ♿ **Accessible** – Full keyboard navigation, ARIA labels, WCAG 2.1 AA compliant\n- 🌍 **i18n Ready** – Customizable month/day names\n- 📱 **Responsive** – Works on desktop and mobile\n- 🔌 **Date Adapters** – Use DayJS, date-fns, Luxon, or custom libraries\n\n---\n\n## 🤔 Why Choose This Library?\n\n| Feature | ng-dual-datepicker | Angular Material DateRangePicker |\n|---------|-------------------|----------------------------------|\n| **Bundle Size** | ~60 KB gzipped | ~300+ KB (with dependencies) |\n| **Dependencies** | Zero | Requires @angular/material, @angular/cdk |\n| **Standalone** | ✅ Native | ⚠️ Requires module setup |\n| **Signals Support** | ✅ Built-in | ❌ Not yet |\n| **Multi-Range Support** | ✅ Yes | ❌ Not available |\n| **Customization** | Full styling control | Theme-constrained |\n| **Learning Curve** | Minimal | Requires Material knowledge |\n| **Change Detection** | OnPush optimized | Default |\n| **Setup Time** | < 1 minute | ~10+ minutes (theming, modules) |\n\n### When to Use This\n\n**✅ Use ng-dual-datepicker if you:**\n- Don't want to install Angular Material just for a date picker\n- Need precise control over styling and behavior\n- Want minimal bundle size impact\n- Prefer standalone components\n- Need Angular Signals support now\n- Need multi-range selection\n- Are building a custom design system\n\n**⚠️ Use Angular Material DateRangePicker if you:**\n- Already use Angular Material throughout your app\n- Need Material Design compliance\n- Want a battle-tested enterprise solution with extensive ecosystem\n\n---\n\n## 📦 Installation\n\n```bash\nnpm install @oneluiz/dual-datepicker\n```\n\n**Requirements:** Angular 17.0.0 or higher\n\n---\n\n## 🚀 Quick Start\n\n### Basic Usage\n\n```typescript\nimport { Component } from '@angular/core';\nimport { DualDatepickerComponent, DateRange } from '@oneluiz/dual-datepicker';\n\n@Component({\n  selector: 'app-root',\n  standalone: true,\n  imports: [DualDatepickerComponent],\n  template: `\n    <ngx-dual-datepicker\n      (dateRangeChange)=\"onRangeChange($event)\">\n    </ngx-dual-datepicker>\n  `\n})\nexport class AppComponent {\n  onRangeChange(range: DateRange) {\n    console.log('Start:', range.startDate);\n    console.log('End:', range.endDate);\n  }\n}\n```\n\n### With Reactive Forms\n\n```typescript\nimport { FormControl } from '@angular/forms';\nimport { DateRange } from '@oneluiz/dual-datepicker';\n\ndateRange = new FormControl<DateRange | null>(null);\n```\n\n```html\n<ngx-dual-datepicker [formControl]=\"dateRange\"></ngx-dual-datepicker>\n```\n\n### With Angular Signals\n\n```typescript\nimport { signal } from '@angular/core';\n\ndateRange = signal<DateRange | null>(null);\n```\n\n```html\n<ngx-dual-datepicker\n  [(ngModel)]=\"dateRange()\"\n  (dateRangeChange)=\"dateRange.set($event)\">\n</ngx-dual-datepicker>\n```\n\n### Headless Usage (NEW) ⭐\n\n**Use date range state WITHOUT the UI component** - perfect for SSR, services, and global filters!\n\n```typescript\nimport { Component, inject } from '@angular/core';\nimport { DualDateRangeStore } from '@oneluiz/dual-datepicker';\nimport { HttpClient } from '@angular/common/http';\n\n@Component({\n  template: `\n    <div class=\"dashboard\">\n      <button (click)=\"setPreset('TODAY')\">Today</button>\n      <button (click)=\"setPreset('THIS_MONTH')\">This Month</button>\n      <p>{{ rangeText() }}</p>\n    </div>\n  `\n})\nexport class DashboardComponent {\n  private rangeStore = inject(DualDateRangeStore);\n  private http = inject(HttpClient);\n  \n  // Expose signals for template\n  rangeText = this.rangeStore.rangeText;\n  \n  setPreset(key: string) {\n    this.rangeStore.applyPreset(key);\n    \n    // Use in API call\n    const range = this.rangeStore.range();\n    this.http.get(`/api/sales`, { \n      params: { start: range.start, end: range.end } \n    }).subscribe(data => console.log(data));\n  }\n}\n```\n\n**Benefits:**\n- ✅ No UI component needed\n- ✅ SSR-compatible\n- ✅ Global state management\n- ✅ Perfect for services and guards\n- ✅ Testable and deterministic\n\n#### SSR-Safe Clock Injection\n\nPresets like \"Last 7 Days\" now use **clock injection** for SSR hydration consistency:\n\n```typescript\n// Server (SSR)\nimport { DATE_CLOCK } from '@oneluiz/dual-datepicker';\n\nconst requestTime = new Date();\n\nrenderApplication(AppComponent, {\n  providers: [\n    { provide: DATE_CLOCK, useValue: { now: () => requestTime } }\n  ]\n});\n```\n\n```typescript\n// Client (Browser)\nbootstrapApplication(AppComponent, {\n  providers: [\n    { provide: DATE_CLOCK, useValue: { now: () => new Date(getServerTime()) } }\n  ]\n});\n```\n\n**Result**: Server and client resolve identical presets ✅ No hydration mismatch!\n\n**[📖 Full Headless Architecture Guide →](HEADLESS.md)** | **[💻 Code Examples →](HEADLESS_EXAMPLES.ts)** | **[🚀 SSR Clock Injection Guide →](SSR_CLOCK_INJECTION.md)**\n\n---\n\n## 🎯 Advanced Features\n\n### Multi-Range Support\n\n**🔥 Material CAN'T do this!** Select multiple date ranges in a single picker - perfect for booking systems, blackout periods, and complex scheduling.\n\n```typescript\nimport { Component } from '@angular/core';\nimport { MultiDateRange } from '@oneluiz/dual-datepicker';\n\n@Component({\n  template: `\n    <ngx-dual-datepicker\n      [multiRange]=\"true\"\n      (multiDateRangeChange)=\"onMultiRangeChange($event)\">\n    </ngx-dual-datepicker>\n\n    @if (selectedRanges && selectedRanges.ranges.length > 0) {\n      <div class=\"selected-ranges\">\n        <h3>Selected Ranges ({{ selectedRanges.ranges.length }})</h3>\n        @for (range of selectedRanges.ranges; track $index) {\n          <div class=\"range-item\">\n            {{ range.startDate }} → {{ range.endDate }}\n          </div>\n        }\n      </div>\n    }\n  `\n})\nexport class MultiRangeExample {\n  selectedRanges: MultiDateRange | null = null;\n\n  onMultiRangeChange(ranges: MultiDateRange) {\n    this.selectedRanges = ranges;\n    console.log('Selected ranges:', ranges.ranges);\n  }\n}\n```\n\n**Perfect Use Cases:**\n- 🏨 Hotel booking systems\n- 📅 Event blackout periods\n- 🔧 Maintenance windows\n- 📊 Availability calendars\n- 👷 Shift scheduling\n\n### Disabled Dates\n\n**Block specific dates or apply custom logic to disable dates.** Perfect for booking systems, business day selection, and holiday management.\n\n#### Option 1: Disable Specific Dates (Array)\n\n```typescript\nimport { Component } from '@angular/core';\n\n@Component({\n  template: `\n    <ngx-dual-datepicker\n      [disabledDates]=\"holidays\"\n      (dateRangeChange)=\"onDateRangeChange($event)\">\n    </ngx-dual-datepicker>\n  `\n})\nexport class DisabledDatesExample {\n  holidays: Date[] = [\n    new Date(2026, 0, 1),   // New Year\n    new Date(2026, 11, 25), // Christmas\n  ];\n\n  onDateRangeChange(range: DateRange) {\n    console.log('Selected range:', range);\n  }\n}\n```\n\n#### Option 2: Disable with Function (Weekends + Holidays)\n\n```typescript\nimport { Component } from '@angular/core';\n\n@Component({\n  template: `\n    <ngx-dual-datepicker\n      [disabledDates]=\"isDateDisabled\"\n      (dateRangeChange)=\"onDateRangeChange($event)\">\n    </ngx-dual-datepicker>\n  `\n})\nexport class BusinessDaysExample {\n  holidays: Date[] = [\n    new Date(2026, 0, 1),   // New Year\n    new Date(2026, 11, 25), // Christmas\n  ];\n\n  // Disable weekends and holidays\n  isDateDisabled = (date: Date): boolean => {\n    const day = date.getDay();\n    \n    // Disable weekends (0 = Sunday, 6 = Saturday)\n    if (day === 0 || day === 6) {\n      return true;\n    }\n    \n    // Check if date is a holiday\n    return this.holidays.some(holiday => \n      holiday.getFullYear() === date.getFullYear() &&\n      holiday.getMonth() === date.getMonth() &&\n      holiday.getDate() === date.getDate()\n    );\n  };\n\n  onDateRangeChange(range: DateRange) {\n    console.log('Selected range:', range);\n  }\n}\n```\n\n**Perfect Use Cases:**\n- 🏢 Business day selection (no weekends)\n- 📅 Booking systems (unavailable dates)\n- 🎉 Holiday management\n- 🚫 Blackout dates for reservations\n- 📆 Appointment scheduling\n\n**Features:**\n- ✅ Two modes: Array or Function\n- ✅ Visual styling (strikethrough, grayed out)\n- ✅ Cannot be selected via mouse or keyboard\n- ✅ Flexible custom logic support\n\n### Display Format\n\n**Customize how dates appear in the input field.** Use flexible format tokens to match regional preferences and localization needs.\n\n#### Basic Usage\n\n```typescript\nimport { Component } from '@angular/core';\n\n@Component({\n  template: `\n    <!-- Default: \"D MMM\" (1 Jan, 15 Feb) -->\n    <ngx-dual-datepicker\n      displayFormat=\"D MMM\"\n      (dateRangeChange)=\"onDateRangeChange($event)\">\n    </ngx-dual-datepicker>\n\n    <!-- European: \"DD/MM/YYYY\" (01/01/2026, 15/02/2026) -->\n    <ngx-dual-datepicker\n      displayFormat=\"DD/MM/YYYY\"\n      (dateRangeChange)=\"onDateRangeChange($event)\">\n    </ngx-dual-datepicker>\n\n    <!-- US: \"MM/DD/YYYY\" (01/01/2026, 02/15/2026) -->\n    <ngx-dual-datepicker\n      displayFormat=\"MM/DD/YYYY\"\n      (dateRangeChange)=\"onDateRangeChange($event)\">\n    </ngx-dual-datepicker>\n\n    <!-- ISO: \"YYYY-MM-DD\" (2026-01-01, 2026-02-15) -->\n    <ngx-dual-datepicker\n      displayFormat=\"YYYY-MM-DD\"\n      (dateRangeChange)=\"onDateRangeChange($event)\">\n    </ngx-dual-datepicker>\n\n    <!-- Long: \"MMM DD, YYYY\" (Jan 01, 2026) -->\n    <ngx-dual-datepicker\n      displayFormat=\"MMM DD, YYYY\"\n      (dateRangeChange)=\"onDateRangeChange($event)\">\n    </ngx-dual-datepicker>\n  `\n})\nexport class DisplayFormatExample {\n  onDateRangeChange(range: DateRange) {\n    console.log('Selected range:', range);\n  }\n}\n```\n\n#### Available Format Tokens\n\n| Token | Output | Description |\n|-------|--------|-------------|\n| `YYYY` | 2026 | Full year (4 digits) |\n| `YY` | 26 | 2-digit year |\n| `MMMM` | January | Full month name |\n| `MMM` | Jan | Short month name (3 letters) |\n| `MM` | 01-12 | 2-digit month (zero-padded) |\n| `M` | 1-12 | Month number (no padding) |\n| `DD` | 01-31 | 2-digit day (zero-padded) |\n| `D` | 1-31 | Day number (no padding) |\n\n#### Custom Format Examples\n\n```typescript\n// Mix and match tokens with any separators\ndisplayFormat=\"D/M/YY\"          // 1/2/26\ndisplayFormat=\"DD-MM-YYYY\"      // 01-02-2026\ndisplayFormat=\"MMMM D, YYYY\"    // January 1, 2026\ndisplayFormat=\"D. MMMM YYYY\"    // 1. January 2026\ndisplayFormat=\"YY.MM.DD\"        // 26.01.01\n```\n\n**Perfect Use Cases:**\n- 🌍 Localization (match regional formats)\n- 🇪🇺 European format (DD/MM/YYYY)\n- 🇺🇸 US format (MM/DD/YYYY)\n- 💻 ISO format (YYYY-MM-DD for APIs)\n- 📱 Mobile-friendly short formats\n- 📄 Long formats for reports\n\n**Features:**\n- ✅ Flexible token system\n- ✅ Any separator (/, -, space, comma, dot)\n- ✅ Mix and match freely\n- ✅ Works with locale month names\n- ✅ No external dependencies\n\n### Apply/Confirm Button\n\n**Require explicit confirmation before emitting changes.** Perfect for dashboards and enterprise applications where recalculating data or making API calls is expensive.\n\n#### How It Works\n\n```typescript\nimport { Component } from '@angular/core';\nimport { DateRange } from '@oneluiz/dual-datepicker';\n\n@Component({\n  template: `\n    <ngx-dual-datepicker\n      [requireApply]=\"true\"\n      (dateRangeChange)=\"onDateRangeChange($event)\">\n    </ngx-dual-datepicker>\n\n    @if (selectedRange) {\n      <div class=\"data-display\">\n        <!-- Expensive data loaded only after Apply -->\n        <app-dashboard-data [range]=\"selectedRange\"></app-dashboard-data>\n      </div>\n    }\n  `\n})\nexport class DashboardExample {\n  selectedRange: DateRange | null = null;\n\n  onDateRangeChange(range: DateRange) {\n    this.selectedRange = range;\n    // This only fires AFTER user clicks Apply button\n    // Prevents unnecessary API calls during date selection\n    this.loadExpensiveData(range.startDate, range.endDate);\n  }\n\n  loadExpensiveData(start: string, end: string) {\n    // API call, database query, heavy calculation, etc.\n    this.apiService.fetchDashboardData(start, end).subscribe(...);\n  }\n}\n```\n\n#### User Flow\n\n1. **User selects dates** - Clicks start and end dates in calendar\n2. **Pending state** - Selection highlighted as \"pending\" (not confirmed)\n3. **No events yet** - `dateRangeChange` is NOT emitted\n4. **Apply** - User clicks \"Apply\" button → dates confirmed, event emitted\n5. **Cancel** - Or clicks \"Cancel\" button → pending selection discarded\n\n#### Visual Behavior\n\n- Selected dates show in calendar with pending styling\n- Apply button enabled when both dates selected\n- Cancel button enabled when there are pending changes\n- Apply button triggers event emission and closes picker\n- Cancel clears pending selection and keeps current dates\n\n**Perfect Use Cases:**\n- 📊 Dashboards that load data on date change  \n- 📈 Reports with expensive calculations/aggregations\n- 🔍 Analytics with API calls to fetch metrics\n- 💰 Financial systems with complex data processing\n- 📉 BI tools with heavy database queries\n- 🧮 Any scenario where immediate updates are costly\n\n**Key Benefits:**\n- ✅ Prevent unwanted API calls during selection\n- ✅ User control - explicit confirmation required\n- ✅ Professional enterprise UX pattern\n- ✅ Reduces server load and improves performance\n- ✅ Works with all other features (presets, formats, etc.)\n\n**Comparison with Immediate Mode:**\n\n| Behavior | Immediate Mode | Apply Mode |\n|----------|---------------|------------|\n| Event emission | On each date click | Only on Apply click |\n| API calls | Multiple (start + end) | Single (only Apply) |\n| User control | Automatic | Explicit confirmation |\n| Best for | Simple forms | Dashboards, reports |\n\n---\n\n### Time Picker\n\n**Select precise datetime ranges with optional time picker.** Choose exact start and end times in addition to dates, with support for 12h/24h formats and configurable minute steps.\n\n#### Basic Usage\n\n```typescript\nimport { Component } from '@angular/core';\nimport { DateRange } from '@oneluiz/dual-datepicker';\n\n@Component({\n  template: `\n    <ngx-dual-datepicker\n      [enableTimePicker]=\"true\"\n      (dateRangeChange)=\"onDateRangeChange($event)\">\n    </ngx-dual-datepicker>\n  `\n})\nexport class AppointmentComponent {\n  onDateRangeChange(range: DateRange) {\n    console.log('Start:', range.startDate, 'at', range.startTime);\n    console.log('End:', range.endDate, 'at', range.endTime);\n    // startTime and endTime are in 'HH:mm' format\n  }\n}\n```\n\n#### Configuration Options\n\n```typescript\n// 12-hour format with AM/PM\n<ngx-dual-datepicker\n  [enableTimePicker]=\"true\"\n  timeFormat=\"12h\"\n  defaultStartTime=\"09:00\"\n  defaultEndTime=\"17:00\"\n  (dateRangeChange)=\"onDateRangeChange($event)\">\n</ngx-dual-datepicker>\n\n// 30-minute intervals\n<ngx-dual-datepicker\n  [enableTimePicker]=\"true\"\n  [minuteStep]=\"30\"\n  (dateRangeChange)=\"onDateRangeChange($event)\">\n</ngx-dual-datepicker>\n\n// With Apply button for controlled changes\n<ngx-dual-datepicker\n  [enableTimePicker]=\"true\"\n  [requireApply]=\"true\"\n  (dateRangeChange)=\"onDateRangeChange($event)\">\n</ngx-dual-datepicker>\n```\n\n#### DateRange with Time\n\nWhen `enableTimePicker` is true, the DateRange includes optional time properties:\n\n```typescript\ninterface DateRange {\n  startDate: string;     // 'YYYY-MM-DD'\n  endDate: string;       // 'YYYY-MM-DD'\n  rangeText: string;     // Display text\n  startTime?: string;    // 'HH:mm' or 'HH:mm AM/PM'\n  endTime?: string;      // 'HH:mm' or 'HH:mm AM/PM'\n}\n```\n\n#### Configuration Inputs\n\n| Input | Type | Default | Description |\n|-------|------|---------|-------------|\n| `enableTimePicker` | boolean | `false` | Enable time selection |\n| `timeFormat` | `'12h'` \\| `'24h'` | `'24h'` | Time display format |\n| `minuteStep` | number | `15` | Minute intervals (1, 5, 15, or 30) |\n| `defaultStartTime` | string | `'00:00'` | Default start time (HH:mm) |\n| `defaultEndTime` | string | `'23:59'` | Default end time (HH:mm) |\n\n#### Perfect Use Cases\n\n- 📅 **Appointment booking systems** - Schedule meetings with exact times\n- 🎫 **Event scheduling** - Create events with start and end times\n- 🏢 **Meeting planners** - Book conference rooms with time slots\n- 📊 **Time-based reporting** - Generate reports for specific time ranges\n- 👥 **Shift management** - Assign work shifts with precise times\n- 🎬 **Reservation systems** - Book resources with time constraints\n\n#### Key Features\n\n- ✅ Optional - disabled by default (backward compatible)\n- ✅ 12h (AM/PM) or 24h time format\n- ✅ Configurable minute steps (1, 5, 15, 30)\n- ✅ Default start/end times support\n- ✅ Works with all themes\n- ✅ Integrates with requireApply mode\n- ✅ Fully accessible with keyboard navigation\n\n**For complete documentation, see [TIME_PICKER.md](TIME_PICKER.md)**\n\n---\n\n### Hover Range Preview\n\n**Automatic visual feedback while selecting dates.** Provides instant visual preview of the date range when hovering over dates before clicking to confirm.\n\n#### How It Works\n\n```typescript\nimport { Component } from '@angular/core';\nimport { DateRange } from '@oneluiz/dual-datepicker';\n\n@Component({\n  template: `\n    <ngx-dual-datepicker\n      (dateRangeChange)=\"onDateRangeChange($event)\">\n    </ngx-dual-datepicker>\n  `\n})\nexport class SimpleExample {\n  selectedRange: DateRange | null = null;\n\n  onDateRangeChange(range: DateRange) {\n    this.selectedRange = range;\n    console.log('Range selected:', range);\n  }\n}\n```\n\n#### User Flow\n\n1. **Select start date** - User clicks on any date\n2. **Hover over dates** - Move mouse over other dates\n3. **Visual preview** - See potential range highlighted instantly\n4. **Select end date** - Click to confirm the range\n\n#### Visual Styling\n\n- **Light purple background** (#e0e7ff) for preview range\n- **Purple dashed border** (#6366f1) around preview dates\n- **70% opacity** - subtle, non-intrusive preview\n- **Clear distinction** from confirmed selected range\n\n**Key Benefits:**\n- ✅ Better UX - visual preview before confirming selection\n- ✅ Instant feedback - see range immediately on mouse hover\n- ✅ Intuitive interaction - natural mouse behavior\n- ✅ Zero configuration - automatic, always enabled\n- ✅ Professional feel - premium date picker experience\n\n**Works With All Modes:**\n- ✅ Single range mode\n- ✅ Multi-range mode  \n- ✅ requireApply mode\n- ✅ All presets, formats, and disabled dates\n\n**No Configuration Needed:**  \nHover preview is automatically enabled and works seamlessly with all other features. Just use the datepicker normally!\n\n### Custom Presets\n\n**Power feature for dashboards, reporting, ERP, and BI systems!**\n\n#### Using Pre-built Presets\n\n```typescript\nimport { CommonPresets } from '@oneluiz/dual-datepicker';\n\n// Dashboard presets\npresets = CommonPresets.dashboard;\n// → Last 7, 15, 30, 60, 90 days + last 6 months\n\n// Reporting presets\npresets = CommonPresets.reporting;\n// → Today, This week, Last week, This month, Last month, This quarter\n\n// Financial/ERP presets\npresets = CommonPresets.financial;\n// → Month to date, Quarter to date, Year to date\n\n// Analytics presets\npresets = CommonPresets.analytics;\n// → Last 7/14/30/60/90/180/365 days\n```\n\n#### Creating Custom Presets\n\n```typescript\nimport { PresetConfig, getToday, getThisMonth, getLastMonth } from '@oneluiz/dual-datepicker';\n\ncustomPresets: PresetConfig[] = [\n  { label: 'Today', getValue: getToday },\n  { label: 'This Month', getValue: getThisMonth },\n  { label: 'Last Month', getValue: getLastMonth },\n  { \n    label: 'Custom Logic', \n    getValue: () => {\n      // Your custom date calculation\n      const today = new Date();\n      const start = new Date(today.getFullYear(), today.getMonth(), 1);\n      return {\n        start: formatDate(start),\n        end: formatDate(today)\n      };\n    }\n  }\n];\n```\n\n```html\n<ngx-dual-datepicker [presets]=\"customPresets\"></ngx-dual-datepicker>\n```\n\n**Why This Is Powerful:**\n- ✅ Perfect for dashboards: \"Last 7 days\", \"Month to date\"\n- ✅ Perfect for reporting: \"This quarter\", \"Last quarter\"\n- ✅ Perfect for financial systems: \"Quarter to date\", \"Year to date\"\n- ✅ Perfect for analytics: Consistent date ranges for BI tools\n\n### Date Adapter System\n\nUse custom date libraries (DayJS, date-fns, Luxon) instead of native JavaScript `Date` objects.\n\n#### Example: date-fns Adapter\n\n```typescript\nimport { Injectable } from '@angular/core';\nimport { DateAdapter } from '@oneluiz/dual-datepicker';\nimport { parse, format, addDays, isValid } from 'date-fns';\n\n@Injectable()\nexport class DateFnsAdapter extends DateAdapter<Date> {\n  parse(value: any): Date | null {\n    if (!value) return null;\n    const parsed = parse(value, 'yyyy-MM-dd', new Date());\n    return isValid(parsed) ? parsed : null;\n  }\n\n  format(date: Date, formatStr: string = 'yyyy-MM-dd'): string {\n    return format(date, formatStr);\n  }\n\n  addDays(date: Date, days: number): Date {\n    return addDays(date, days);\n  }\n\n  // ... implement other required methods\n}\n```\n\n#### Providing the Adapter\n\n```typescript\nimport { DATE_ADAPTER } from '@oneluiz/dual-datepicker';\n\n@Component({\n  providers: [\n    { provide: DATE_ADAPTER, useClass: DateFnsAdapter }\n  ]\n})\nexport class AppComponent {}\n```\n\n**Benefits:**\n- ✅ Zero vendor lock-in\n- ✅ Use same date library across your app\n- ✅ Adapt to custom backend formats\n- ✅ Full TypeScript support\n\n### Keyboard Navigation\n\n**Full keyboard control** for accessibility (WCAG 2.1 AA compliant):\n\n| Key(s) | Action |\n|--------|--------|\n| `←` / `→` | Navigate between days |\n| `↑` / `↓` | Navigate by weeks |\n| `Enter` / `Space` | Select focused day |\n| `Escape` | Close datepicker |\n| `Home` / `End` | Jump to first/last day |\n| `PageUp` / `PageDown` | Navigate months |\n| `Shift + PageUp/Down` | Navigate years |\n| `Tab` | Navigate between input, presets, and calendar |\n\n```html\n<!-- Enabled by default -->\n<ngx-dual-datepicker></ngx-dual-datepicker>\n\n<!-- Disable if needed -->\n<ngx-dual-datepicker [enableKeyboardNavigation]=\"false\"></ngx-dual-datepicker>\n```\n\n---\n\n## 🎨 Customization\n\n### Theming System\n\nThe datepicker now supports 6 built-in themes: `default`, `bootstrap`, `bulma`, `foundation`, `tailwind`, and `custom`.\n\n```typescript\n<ngx-dual-datepicker theme=\"bootstrap\"></ngx-dual-datepicker>\n```\n\n```scss\n// In your styles.scss\n@import '@oneluiz/dual-datepicker/themes/bootstrap';\n```\n\n**Available Themes:**\n- `default` - Original styling (no import needed)\n- `bootstrap` - Bootstrap 5 compatible styling\n- `bulma` - Bulma CSS compatible styling\n- `foundation` - Foundation CSS compatible styling\n- `tailwind` - Tailwind CSS compatible styling\n- `custom` - CSS variables-based customization\n\n**📚 For detailed theming documentation, see [THEMING.md](./THEMING.md)**\n\n### Styling Options\n\n```html\n<ngx-dual-datepicker\n  inputBackgroundColor=\"#ffffff\"\n  inputTextColor=\"#495057\"\n  inputBorderColor=\"#ced4da\"\n  inputBorderColorHover=\"#80bdff\"\n  inputBorderColorFocus=\"#0d6efd\"\n  inputPadding=\"0.375rem 0.75rem\">\n</ngx-dual-datepicker>\n```\n\n#### Pre-styled Examples\n\n**Bootstrap Style:**\n```html\n<ngx-dual-datepicker\n  inputBackgroundColor=\"#ffffff\"\n  inputBorderColor=\"#ced4da\"\n  inputBorderColorFocus=\"#80bdff\">\n</ngx-dual-datepicker>\n```\n\n**GitHub Style:**\n```html\n<ngx-dual-datepicker\n  inputBackgroundColor=\"#f3f4f6\"\n  inputBorderColor=\"transparent\"\n  inputBorderColorHover=\"#d1d5db\">\n</ngx-dual-datepicker>\n```\n\n### Localization (i18n)\n\n```typescript\nimport { LocaleConfig } from '@oneluiz/dual-datepicker';\n\nspanishLocale: LocaleConfig = {\n  monthNames: ['Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio',\n               'Julio', 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre'],\n  monthNamesShort: ['Ene', 'Feb', 'Mar', 'Abr', 'May', 'Jun',\n                    'Jul', 'Ago', 'Sep', 'Oct', 'Nov', 'Dic'],\n  dayNames: ['Domingo', 'Lunes', 'Martes', 'Miércoles', 'Jueves', 'Viernes', 'Sábado'],\n  dayNamesShort: ['Dom', 'Lun', 'Mar', 'Mié', 'Jue', 'Vie', 'Sáb']\n};\n```\n\n```html\n<ngx-dual-datepicker [locale]=\"spanishLocale\"></ngx-dual-datepicker>\n```\n\n---\n\n## 📖 API Reference\n\n### Inputs\n\n| Property | Type | Default | Description |\n|----------|------|---------|-------------|\n| `ngModel` | `DateRange \\| null` | `null` | Two-way binding for selected date range |\n| `placeholder` | `string` | `'Select date range'` | Input placeholder text |\n| `presets` | `PresetConfig[]` | `[]` | Array of preset configurations |\n| `showPresets` | `boolean` | `true` | Show/hide the presets sidebar |\n| `showClearButton` | `boolean` | `false` | Show/hide the Clear button |\n| `closeOnSelection` | `boolean` | `false` | Close picker when both dates selected |\n| `closeOnPresetSelection` | `boolean` | `false` | Close picker when preset clicked |\n| `closeOnClickOutside` | `boolean` | `true` | Close picker when clicking outside |\n| `multiRange` | `boolean` | `false` | Enable multi-range selection mode |\n| `disabledDates` | `Date[] \\| ((date: Date) => boolean)` | `undefined` | Array of dates or function to disable specific dates |\n| `displayFormat` | `string` | `'D MMM'` | Format for displaying dates in input (tokens: YYYY, YY, MMMM, MMM, MM, M, DD, D) |\n| `requireApply` | `boolean` | `false` | Require Apply button confirmation before emitting changes |\n| `enableTimePicker` | `boolean` | `false` | Enable time selection |\n| `timeFormat` | `'12h' \\| '24h'` | `'24h'` | Time display format (12-hour with AM/PM or 24-hour) |\n| `minuteStep` | `number` | `15` | Step for minute selector (1, 5, 15, or 30) |\n| `defaultStartTime` | `string` | `'00:00'` | Default start time in HH:mm format |\n| `defaultEndTime` | `string` | `'23:59'` | Default end time in HH:mm format |\n| `theme` | `ThemeType` | `'default'` | Theme preset: 'default', 'bootstrap', 'bulma', 'foundation', 'tailwind', 'custom' |\n| `enableKeyboardNavigation` | `boolean` | `true` | Enable keyboard navigation |\n| `inputBackgroundColor` | `string` | `'#fff'` | Input background color |\n| `inputTextColor` | `string` | `'#495057'` | Input text color |\n| `inputBorderColor` | `string` | `'#ced4da'` | Input border color |\n| `inputBorderColorHover` | `string` | `'#9ca3af'` | Input border color on hover |\n| `inputBorderColorFocus` | `string` | `'#80bdff'` | Input border color on focus |\n| `inputPadding` | `string` | `'0.375rem 0.75rem'` | Input padding |\n| `locale` | `LocaleConfig` | English defaults | Custom month/day names for i18n |\n\n### Outputs\n\n| Event | Type | Description |\n|-------|------|-------------|\n| `dateRangeChange` | `EventEmitter<DateRange>` | Emitted when date range changes |\n| `dateRangeSelected` | `EventEmitter<DateRange>` | Emitted when both dates are selected |\n| `multiDateRangeChange` | `EventEmitter<MultiDateRange>` | Emitted in multi-range mode |\n| `multiDateRangeSelected` | `EventEmitter<MultiDateRange>` | Emitted when multi-range selection is complete |\n\n### Public Methods\n\n```typescript\nimport { Component, ViewChild } from '@angular/core';\nimport { DualDatepickerComponent } from '@oneluiz/dual-datepicker';\n\n@Component({\n  template: `\n    <ngx-dual-datepicker #datepicker></ngx-dual-datepicker>\n    <button (click)=\"clearSelection()\">Clear</button>\n  `\n})\nexport class MyComponent {\n  @ViewChild('datepicker') datepicker!: DualDatepickerComponent;\n\n  clearSelection() {\n    this.datepicker.clear();\n  }\n}\n```\n\n| Method | Description |\n|--------|-------------|\n| `clear()` | Clears current selection and resets component |\n\n### Types\n\n```typescript\ninterface DateRange {\n  startDate: string;   // ISO format: 'YYYY-MM-DD'\n  endDate: string;     // ISO format: 'YYYY-MM-DD'\n  rangeText: string;   // Display text: 'DD Mon - DD Mon'\n  startTime?: string;  // Optional: 'HH:mm' or 'HH:mm AM/PM' (when enableTimePicker=true)\n  endTime?: string;    // Optional: 'HH:mm' or 'HH:mm AM/PM' (when enableTimePicker=true)\n}\n\ninterface MultiDateRange {\n  ranges: DateRange[];  // Array of selected date ranges\n}\n\ninterface PresetRange {\n  start: string;  // ISO format: 'YYYY-MM-DD'\n  end: string;    // ISO format: 'YYYY-MM-DD'\n}\n\ninterface PresetConfig {\n  label: string;\n  getValue: () => PresetRange;\n}\n\ninterface LocaleConfig {\n  monthNames?: string[];         // Full month names (12 items)\n  monthNamesShort?: string[];    // Short month names (12 items)\n  dayNames?: string[];           // Full day names (7 items, starting Sunday)\n  dayNamesShort?: string[];      // Short day names (7 items, starting Sunday)\n}\n```\n\n---\n\n## 💡 Usage Examples\n\n### With Events\n\n```typescript\n@Component({\n  template: `\n    <ngx-dual-datepicker\n      (dateRangeSelected)=\"onDateRangeSelected($event)\">\n    </ngx-dual-datepicker>\n    \n    @if (selectedRange) {\n      <div>Selected: {{ selectedRange.rangeText }}</div>\n    }\n  `\n})\nexport class ExampleComponent {\n  selectedRange: DateRange | null = null;\n\n  onDateRangeSelected(range: DateRange) {\n    this.selectedRange = range;\n    // Both dates selected - fetch data\n    this.fetchData(range.startDate, range.endDate);\n  }\n\n  fetchData(start: string, end: string) {\n    // Dates are in 'YYYY-MM-DD' format\n  }\n}\n```\n\n### With Angular Signals\n\n```typescript\nimport { Component, signal, computed } from '@angular/core';\n\n@Component({\n  template: `\n    <ngx-dual-datepicker\n      (dateRangeChange)=\"onDateChange($event)\">\n    </ngx-dual-datepicker>\n    \n    @if (isRangeSelected()) {\n      <div>\n        <p>{{ rangeText() }}</p>\n        <p>Days: {{ daysDifference() }}</p>\n      </div>\n    }\n  `\n})\nexport class SignalsExample {\n  startDate = signal('');\n  endDate = signal('');\n  \n  isRangeSelected = computed(() => \n    this.startDate() !== '' && this.endDate() !== ''\n  );\n  \n  rangeText = computed(() => \n    `${this.startDate()} to ${this.endDate()}`\n  );\n  \n  daysDifference = computed(() => {\n    if (!this.isRangeSelected()) return 0;\n    const start = new Date(this.startDate());\n    const end = new Date(this.endDate());\n    return Math.ceil((end.getTime() - start.getTime()) / (1000 * 60 * 60 * 24));\n  });\n\n  onDateChange(range: DateRange) {\n    this.startDate.set(range.startDate);\n    this.endDate.set(range.endDate);\n  }\n}\n```\n\n### With Complete Customization\n\n```html\n<ngx-dual-datepicker\n  placeholder=\"Pick your dates\"\n  [presets]=\"customPresets\"\n  [showClearButton]=\"true\"\n  [closeOnSelection]=\"true\"\n  [locale]=\"spanishLocale\"\n  inputBackgroundColor=\"#fef3c7\"\n  inputTextColor=\"#92400e\"\n  inputBorderColor=\"#fbbf24\"\n  inputBorderColorFocus=\"#d97706\"\n  inputPadding=\"12px 16px\"\n  (dateRangeSelected)=\"onDateRangeSelected($event)\">\n</ngx-dual-datepicker>\n```\n\n---\n\n## ♿ Accessibility\n\n**WCAG 2.1 Level AA Compliant**\n\n- ✅ Full keyboard navigation\n- ✅ Screen reader support with ARIA labels\n- ✅ Semantic HTML with proper `role` attributes\n- ✅ Focus management with visual indicators\n- ✅ High contrast support\n\n---\n\n## 🛠️ Requirements\n\n- **Angular:** 17.0.0 or higher\n- **TypeScript:** 5.0+ (recommended)\n\n---\n\n## 📄 License & Support\n\n**License:** MIT © Luis Cortes\n\n**Issues:** [Report bugs](https://github.com/oneluiz/ng-dual-datepicker/issues)\n\n**Star this project:** If you find it useful, please ⭐ the [GitHub repository](https://github.com/oneluiz/ng-dual-datepicker)!\n\n---\n\nMade with ❤️ by [Luis Cortes](https://github.com/oneluiz)\n**\n\n## Why ng-dual-datepicker?\n\n| Feature | ng-dual-datepicker | Angular Material DateRangePicker |\n|---------|-------------------|----------------------------------|\n| **Bundle Size** | ~60 KB gzipped | ~300+ KB (with dependencies) |\n| **Dependencies** | Zero | Requires @angular/material, @angular/cdk |\n| **Standalone** | ✅ Native | ⚠️ Requires module setup |\n| **Signals Support** | ✅ Built-in | ❌ Not yet |\n| **Multi-Range Support** | ✅ NEW v2.7.0 | ❌ Not available |\n| **Customization** | Full styling control | Theme-constrained |\n| **Learning Curve** | Minimal | Requires Material knowledge |\n| **Change Detection** | OnPush optimized | Default |\n| **Setup Time** | < 1 minute | ~10+ minutes (theming, modules) |\n\n## ✨ Key Features\n\n- 🪶 **Zero Dependencies** – No external libraries required\n- 🎯 **Standalone Component** – No NgModule imports needed\n- ⚡ **Angular Signals** – Modern reactive state management\n- 🔄 **Reactive Forms** – Full ControlValueAccessor implementation\n- 🔥 **Multi-Range Support** – Select multiple date ranges (NEW v2.7.0 - Material CAN'T do this!)\n- 🎨 **Fully Customizable** – Every color, padding, border configurable\n- 📦 **Lightweight** – ~60 KB gzipped total bundle\n- 🚀 **Performance** – OnPush change detection + trackBy optimization\n- ♿ **Accessible** – ARIA labels, semantic HTML, full keyboard navigation\n- 🌍 **i18n Ready** – Customizable month/day names\n- 📱 **Responsive** – Works on desktop and mobile\n\n## 🤔 When Should I Use This?\n\n**Use ng-dual-datepicker if you:**\n- Don't want to install Angular Material just for a date picker\n- Need precise control over styling and behavior\n- Want minimal bundle size impact\n- Prefer standalone components over NgModules\n- Need Angular Signals support now\n- Are building a custom design system\n\n**Use Angular Material DateRangePicker if you:**\n- Already use Angular Material throughout your app\n- Need Material Design compliance\n- Want a battle-tested enterprise solution with extensive ecosystem support\n\n## ⚡ Performance\n\n```typescript\n@Component({\n  changeDetection: ChangeDetectionStrategy.OnPush, // ✅ Optimized\n  standalone: true                                   // ✅ No module overhead\n})\n```\n\n- **OnPush change detection** – Minimal re-renders\n- **trackBy functions** – Efficient list rendering\n- **No external CSS** – No runtime stylesheet downloads\n- **Tree-shakeable** – Only import what you use\n\n## ♿ Accessibility (A11y)\n\n**✅ WCAG 2.1 Level AA Compliant**\n\n- ✅ **Full keyboard navigation** – Complete keyboard control (v3.1.0)\n- ✅ **Screen reader support** – ARIA labels included for all interactive elements\n- ✅ **Semantic HTML** – Proper HTML structure with `role` attributes\n- ✅ **Focus management** – Intelligent focus tracking and visual indicators\n\n### ⌨️ Keyboard Navigation (NEW in v3.1.0)\n\nNavigate the datepicker entirely with your keyboard:\n\n| Key(s) | Action |\n|--------|--------|\n| **Arrow Keys** | |\n| `←` / `→` | Navigate between days (horizontal) |\n| `↑` / `↓` | Navigate by weeks (vertical) |\n| **Selection** | |\n| `Enter` / `Space` | Select focused day |\n| `Escape` | Close datepicker |\n| **Navigation Shortcuts** | |\n| `Home` | Jump to first day of visible range |\n| `End` | Jump to last day of visible range |\n| `PageUp` / `PageDown` | Navigate months |\n| `Shift + PageUp` / `Shift + PageDown` | Navigate years |\n| `Tab` | Navigate between input, presets, and calendar |\n\n**Visual Indicators:**\n- Blue outline ring indicates focused day\n- Light blue background on keyboard-focused days\n- Automatic focus management when opening/closing picker\n\n**Screen Reader Support:**\n- `role=\"combobox\"` on input field\n- `aria-expanded`, `aria-haspopup` states\n- `aria-label`, `aria-selected`, `aria-current` on calendar days\n\n**Configuration:**\n```typescript\n// Keyboard navigation enabled by default\n<ngx-dual-datepicker></ngx-dual-datepicker>\n\n// Disable if needed\n<ngx-dual-datepicker [enableKeyboardNavigation]=\"false\"></ngx-dual-datepicker>\n```\n\n## 📦 Installation\n\n```bash\nnpm install @oneluiz/dual-datepicker\n```\n\n## 🚀 Quick Start\n\n### Basic Usage\n\n```typescript\nimport { Component } from '@angular/core';\nimport { DualDatepickerComponent, DateRange } from '@oneluiz/dual-datepicker';\n\n@Component({\n  selector: 'app-root',\n  standalone: true,\n  imports: [DualDatepickerComponent],\n  template: `\n    <ngx-dual-datepicker\n      (dateRangeChange)=\"onRangeChange($event)\">\n    </ngx-dual-datepicker>\n  `\n})\nexport class AppComponent {\n  onRangeChange(range: DateRange) {\n    console.log('Start:', range.startDate);\n    console.log('End:', range.endDate);\n  }\n}\n```\n\n### With Reactive Forms\n\n```typescript\nimport { FormControl } from '@angular/forms';\nimport { DateRange } from '@oneluiz/dual-datepicker';\n\ndateRange = new FormControl<DateRange | null>(null);\n```\n\n```html\n<ngx-dual-datepicker [formControl]=\"dateRange\"></ngx-dual-datepicker>\n```\n\n### With Angular Signals\n\n```typescript\nimport { signal } from '@angular/core';\n\ndateRange = signal<DateRange | null>(null);\n```\n\n```html\n<ngx-dual-datepicker\n  [(ngModel)]=\"dateRange()\"\n  (dateRangeChange)=\"dateRange.set($event)\">\n</ngx-dual-datepicker>\n```\n\n### Custom Styling\n\n```html\n<ngx-dual-datepicker\n  inputBackgroundColor=\"#1a1a2e\"\n  inputTextColor=\"#eee\"\n  inputBorderColor=\"#4a5568\"\n  inputBorderColorFocus=\"#3182ce\">\n</ngx-dual-datepicker>\n```\n\n## 📚 Advanced Usage\n\n### 4. Use with Angular Signals ⚡ New!\n\nThe component now uses Angular Signals internally for better performance and reactivity:\n\n```typescript\nimport { Component, signal, computed } from '@angular/core';\nimport { DualDatepickerComponent, DateRange } from '@oneluiz/dual-datepicker';\n\n@Component({\n  selector: 'app-signals-example',\n  standalone: true,\n  imports: [DualDatepickerComponent],\n  template: `\n    <ngx-dual-datepicker\n      [startDate]=\"startDate()\"\n      [endDate]=\"endDate()\"\n      (dateRangeChange)=\"onDateChange($event)\">\n    </ngx-dual-datepicker>\n    \n    @if (isRangeSelected()) {\n      <div>\n        <p>{{ rangeText() }}</p>\n        <p>Days selected: {{ daysDifference() }}</p>\n      </div>\n    }\n  `\n})\nexport class SignalsExampleComponent {\n  startDate = signal('');\n  endDate = signal('');\n  \n  // Computed values\n  isRangeSelected = computed(() => \n    this.startDate() !== '' && this.endDate() !== ''\n  );\n  \n  rangeText = computed(() => \n    this.isRangeSelected() \n      ? `${this.startDate()} to ${this.endDate()}`\n      : 'No range selected'\n  );\n  \n  daysDifference = computed(() => {\n    if (!this.isRangeSelected()) return 0;\n    const start = new Date(this.startDate());\n    const end = new Date(this.endDate());\n    return Math.ceil((end.getTime() - start.getTime()) / (1000 * 60 * 60 * 24));\n  });\n\n  onDateChange(range: DateRange) {\n    this.startDate.set(range.startDate);\n    this.endDate.set(range.endDate);\n  }\n}\n```\n\n### 5. Multi-Range Support 🔥 NEW v2.7.0!\n\n**Material CAN'T do this!** Select multiple date ranges in a single picker - perfect for booking systems, blackout periods, and complex scheduling.\n\n```typescript\nimport { Component } from '@angular/core';\nimport { DualDatepickerComponent, MultiDateRange } from '@oneluiz/dual-datepicker';\n\n@Component({\n  selector: 'app-multi-range',\n  standalone: true,\n  imports: [DualDatepickerComponent],\n  template: `\n    <ngx-dual-datepicker\n      [multiRange]=\"true\"\n      [showClearButton]=\"true\"\n      (multiDateRangeChange)=\"onMultiRangeChange($event)\">\n    </ngx-dual-datepicker>\n\n    @if (selectedRanges && selectedRanges.ranges.length > 0) {\n      <div class=\"selected-ranges\">\n        <h3>Selected Ranges ({{ selectedRanges.ranges.length }})</h3>\n        @for (range of selectedRanges.ranges; track $index) {\n          <div class=\"range-item\">\n            <strong>Range {{ $index + 1 }}:</strong> {{ range.rangeText }}\n            <br />\n            <span>{{ range.startDate }} → {{ range.endDate }}</span>\n          </div>\n        }\n      </div>\n    }\n  `\n})\nexport class MultiRangeExample {\n  selectedRanges: MultiDateRange | null = null;\n\n  onMultiRangeChange(ranges: MultiDateRange) {\n    this.selectedRanges = ranges;\n    console.log('Selected ranges:', ranges.ranges);\n    // Output example:\n    // [\n    //   { startDate: '2026-01-01', endDate: '2026-01-05', rangeText: 'Jan 1 – Jan 5' },\n    //   { startDate: '2026-01-10', endDate: '2026-01-15', rangeText: 'Jan 10 – Jan 15' },\n    //   { startDate: '2026-02-01', endDate: '2026-02-07', rangeText: 'Feb 1 – Feb 7' }\n    // ]\n  }\n}\n```\n\n#### Perfect Use Cases\n\n- 🏨 **Hotel Booking Systems** - Block multiple periods for reservations\n- 📅 **Event Blackout Periods** - Mark multiple dates as unavailable\n- 🔧 **Maintenance Windows** - Schedule multiple maintenance periods\n- 📊 **Availability Calendars** - Show multiple available/unavailable periods\n- 👷 **Shift Scheduling** - Select multiple work periods\n- 💼 **Business Meetings** - Block out multiple date ranges\n\n#### Key Features\n\n- ✅ Select unlimited date ranges\n- ✅ Visual feedback - all ranges highlighted in calendar\n- ✅ Easy management - add/remove ranges with one click\n- ✅ Separate events for multi-range (`multiDateRangeChange`, `multiDateRangeSelected`)\n- ✅ Clear all ranges with one button\n- ❌ **Angular Material CANNOT do this!**\n\n## 🔌 Date Adapter System\n\nThe library supports custom date adapters, allowing you to use different date libraries (DayJS, date-fns, Luxon) or custom backend models instead of native JavaScript `Date` objects.\n\n### Using Native Date (Default)\n\nBy default, the component uses `NativeDateAdapter` which works with JavaScript `Date` objects:\n\n```typescript\nimport { DualDatepickerComponent } from '@oneluiz/dual-datepicker';\n\n@Component({\n  standalone: true,\n  imports: [DualDatepickerComponent],\n  template: `<ngx-dual-datepicker></ngx-dual-datepicker>`\n})\nexport class AppComponent {}\n```\n\n### Creating a Custom Adapter\n\nExample using **date-fns**:\n\n```typescript\nimport { Injectable } from '@angular/core';\nimport { DateAdapter } from '@oneluiz/dual-datepicker';\nimport { \n  parse, format, addDays, addMonths, \n  getYear, getMonth, getDate, getDay,\n  isSameDay, isBefore, isAfter, isWithinInterval,\n  isValid \n} from 'date-fns';\n\n@Injectable()\nexport class DateFnsAdapter extends DateAdapter<Date> {\n  parse(value: any): Date | null {\n    if (!value) return null;\n    if (value instanceof Date) return value;\n    \n    const parsed = parse(value, 'yyyy-MM-dd', new Date());\n    return isValid(parsed) ? parsed : null;\n  }\n\n  format(date: Date, formatStr: string = 'yyyy-MM-dd'): string {\n    return format(date, formatStr);\n  }\n\n  addDays(date: Date, days: number): Date {\n    return addDays(date, days);\n  }\n\n  addMonths(date: Date, months: number): Date {\n    return addMonths(date, months);\n  }\n\n  getYear(date: Date): number {\n    return getYear(date);\n  }\n\n  getMonth(date: Date): number {\n    return getMonth(date);\n  }\n\n  getDate(date: Date): number {\n    return getDate(date);\n  }\n\n  getDay(date: Date): number {\n    return getDay(date);\n  }\n\n  createDate(year: number, month: number, day: number): Date {\n    return new Date(year, month, day);\n  }\n\n  today(): Date {\n    return new Date();\n  }\n\n  isSameDay(a: Date | null, b: Date | null): boolean {\n    if (!a || !b) return false;\n    return isSameDay(a, b);\n  }\n\n  isBefore(a: Date | null, b: Date | null): boolean {\n    if (!a || !b) return false;\n    return isBefore(a, b);\n  }\n\n  isAfter(a: Date | null, b: Date | null): boolean {\n    if (!a || !b) return false;\n    return isAfter(a, b);\n  }\n\n  isBetween(date: Date | null, start: Date | null, end: Date | null): boolean {\n    if (!date || !start || !end) return false;\n    return isWithinInterval(date, { start, end });\n  }\n\n  clone(date: Date): Date {\n    return new Date(date);\n  }\n\n  isValid(date: any): boolean {\n    return isValid(date);\n  }\n}\n```\n\n### Providing Custom Adapter\n\n```typescript\nimport { Component } from '@angular/core';\nimport { DualDatepickerComponent, DATE_ADAPTER } from '@oneluiz/dual-datepicker';\nimport { DateFnsAdapter } from './date-fns-adapter';\n\n@Component({\n  standalone: true,\n  imports: [DualDatepickerComponent],\n  providers: [\n    { provide: DATE_ADAPTER, useClass: DateFnsAdapter }\n  ],\n  template: `<ngx-dual-datepicker></ngx-dual-datepicker>`\n})\nexport class AppComponent {}\n```\n\n### Example: DayJS Adapter\n\n```typescript\nimport { Injectable } from '@angular/core';\nimport { DateAdapter } from '@oneluiz/dual-datepicker';\nimport dayjs, { Dayjs } from 'dayjs';\n\n@Injectable()\nexport class DayJSAdapter extends DateAdapter<Dayjs> {\n  parse(value: any): Dayjs | null {\n    if (!value) return null;\n    const parsed = dayjs(value);\n    return parsed.isValid() ? parsed : null;\n  }\n\n  format(date: Dayjs, format: string = 'YYYY-MM-DD'): string {\n    return date.format(format);\n  }\n\n  addDays(date: Dayjs, days: number): Dayjs {\n    return date.add(days, 'day');\n  }\n\n  addMonths(date: Dayjs, months: number): Dayjs {\n    return date.add(months, 'month');\n  }\n\n  getYear(date: Dayjs): number {\n    return date.year();\n  }\n\n  getMonth(date: Dayjs): number {\n    return date.month();\n  }\n\n  getDate(date: Dayjs): number {\n    return date.date();\n  }\n\n  getDay(date: Dayjs): number {\n    return date.day();\n  }\n\n  createDate(year: number, month: number, day: number): Dayjs {\n    return dayjs().year(year).month(month).date(day);\n  }\n\n  today(): Dayjs {\n    return dayjs();\n  }\n\n  isSameDay(a: Dayjs | null, b: Dayjs | null): boolean {\n    if (!a || !b) return false;\n    return a.isSame(b, 'day');\n  }\n\n  isBefore(a: Dayjs | null, b: Dayjs | null): boolean {\n    if (!a || !b) return false;\n    return a.isBefore(b);\n  }\n\n  isAfter(a: Dayjs | null, b: Dayjs | null): boolean {\n    if (!a || !b) return false;\n    return a.isAfter(b);\n  }\n\n  isBetween(date: Dayjs | null, start: Dayjs | null, end: Dayjs | null): boolean {\n    if (!date || !start || !end) return false;\n    return date.isAfter(start) && date.isBefore(end) || date.isSame(start) || date.isSame(end);\n  }\n\n  clone(date: Dayjs): Dayjs {\n    return date.clone();\n  }\n\n  isValid(date: any): boolean {\n    return dayjs.isDayjs(date) && date.isValid();\n  }\n}\n```\n\n### Benefits of Date Adapters\n\n- ✅ **Zero vendor lock-in** - Use any date library you prefer\n- ✅ **Consistency** - Use the same date library across your entire app\n- ✅ **Custom backend models** - Adapt to your API's date format\n- ✅ **Type safety** - Full TypeScript support with generics\n\n## 🎨 Customization\n\n### Custom Colors (Bootstrap Style)\n\n```typescript\n<ngx-dual-datepicker\n  [(ngModel)]=\"dateRange\"\n  inputBackgroundColor=\"#ffffff\"\n  inputTextColor=\"#495057\"\n  inputBorderColor=\"#ced4da\"\n  inputBorderColorHover=\"#80bdff\"\n  inputBorderColorFocus=\"#80bdff\"\n  inputPadding=\"0.375rem 0.75rem\">\n</ngx-dual-datepicker>\n```\n\n### Custom Colors (GitHub Style)\n\n```typescript\n<ngx-dual-datepicker\n  [(ngModel)]=\"dateRange\"\n  inputBackgroundColor=\"#f3f4f6\"\n  inputTextColor=\"#24292e\"\n  inputBorderColor=\"transparent\"\n  inputBorderColorHover=\"#d1d5db\"\n  inputBorderColorFocus=\"#80bdff\"\n  inputPadding=\"6px 10px\">\n</ngx-dual-datepicker>\n```\n\n### ⚡ Custom Presets (Power Feature)\n\n**This is where our library shines!** Unlike Angular Material, we offer an incredibly flexible preset system perfect for dashboards, reporting, POS, BI apps, and ERP systems.\n\n#### Simple Pattern (Backward Compatible)\n\n```typescript\ncustomPresets: PresetConfig[] = [\n  { label: 'Last 15 days', daysAgo: 15 },\n  { label: 'Last 3 months', daysAgo: 90 },\n  { label: 'Last 6 months', daysAgo: 180 },\n  { label: 'Last year', daysAgo: 365 }\n];\n```\n\n#### **NEW v2.6.0** - Flexible Pattern with `getValue()` 🔥\n\nThe real power comes with the `getValue()` pattern. Define **any custom logic** you need:\n\n```typescript\nimport { PresetConfig } from '@oneluiz/dual-datepicker';\n\ncustomPresets: PresetConfig[] = [\n  { \n    label: 'Today', \n    getValue: () => {\n      const today = new Date();\n      return {\n        start: formatDate(today),\n        end: formatDate(today)\n      };\n    }\n  },\n  { \n    label: 'This Month', \n    getValue: () => {\n      const today = new Date();\n      const start = new Date(today.getFullYear(), today.getMonth(), 1);\n      const end = new Date(today.getFullYear(), today.getMonth() + 1, 0);\n      return {\n        start: formatDate(start),\n        end: formatDate(end)\n      };\n    }\n  },\n  { \n    label: 'Last Month', \n    getValue: () => {\n      const today = new Date();\n      const start = new Date(today.getFullYear(), today.getMonth() - 1, 1);\n      const end = new Date(today.getFullYear(), today.getMonth(), 0);\n      return {\n        start: formatDate(start),\n        end: formatDate(end)\n      };\n    }\n  },\n  { \n    label: 'Quarter to Date', \n    getValue: () => {\n      const today = new Date();\n      const currentMonth = today.getMonth();\n      const quarterStartMonth = Math.floor(currentMonth / 3) * 3;\n      const start = new Date(today.getFullYear(), quarterStartMonth, 1);\n      return {\n        start: formatDate(start),\n        end: formatDate(today)\n      };\n    }\n  }\n];\n```\n\n#### **Even Better** - Use Pre-built Utilities 🚀\n\nWe provide **ready-to-use preset utilities** for common scenarios:\n\n```typescript\nimport { CommonPresets } from '@oneluiz/dual-datepicker';\n\n// Dashboard presets\npresets = CommonPresets.dashboard;\n// → Today, Yesterday, Last 7 days, Last 30 days, This month, Last month\n\n// Reporting presets\npresets = CommonPresets.reporting;\n// → Today, This week, Last week, This month, Last month, This quarter, Last quarter\n\n// Financial/ERP presets\npresets = CommonPresets.financial;\n// → Month to date, Quarter to date, Year to date, Last month, Last quarter, Last year\n\n// Analytics/BI presets\npresets = CommonPresets.analytics;\n// → Last 7/14/30/60/90/180/365 days\n\n// Simple presets\npresets = CommonPresets.simple;\n// → Today, Last 7 days, Last 30 days, This year\n```\n\n#### Create Your Own Utilities\n\nImport individual utilities and mix them:\n\n```typescript\nimport { \n  getToday, \n  getThisMonth, \n  getLastMonth, \n  getQuarterToDate,\n  getYearToDate,\n  PresetConfig \n} from '@oneluiz/dual-datepicker';\n\ncustomPresets: PresetConfig[] = [\n  { label: 'Today', getValue: getToday },\n  { label: 'This Month', getValue: getThisMonth },\n  { label: 'Last Month', getValue: getLastMonth },\n  { label: 'Quarter to Date', getValue: getQuarterToDate },\n  { label: 'Year to Date', getValue: getYearToDate },\n  { \n    label: 'Custom Logic', \n    getValue: () => {\n      // Your custom date calculation\n      return { start: '2026-01-01', end: '2026-12-31' };\n    }\n  }\n];\n```\n\n#### Why This Is Powerful\n\n✅ **Perfect for Dashboards** - \"Last 7 days\", \"Month to date\", \"Quarter to date\"  \n✅ **Perfect for Reporting** - \"This week\", \"Last week\", \"This quarter\"  \n✅ **Perfect for Financial Systems** - \"Quarter to date\", \"Year to date\", \"Fiscal year\"  \n✅ **Perfect for Analytics** - Consistent date ranges for BI tools  \n✅ **Perfect for ERP** - Custom business logic and fiscal calendars  \n\n**Angular Material doesn't offer this level of flexibility!** 🎯\n\n```html\n<ngx-dual-datepicker\n  [(ngModel)]=\"dateRange\"\n  [presets]=\"customPresets\">\n</ngx-dual-datepicker>\n```\n\n## 📖 API Reference\n\n### Inputs\n\n| Property | Type | Default | Description |\n|----------|------|---------|-------------|\n| `ngModel` | `DateRange` | `{ start: null, end: null }` | Two-way binding for selected date range |\n| `placeholder` | `string` | `'Select date range'` | Input placeholder text |\n| `presets` | `PresetConfig[]` | Default presets | Array of preset configurations |\n| `showPresets` | `boolean` | `true` | Show/hide the presets sidebar |\n| `showClearButton` | `boolean` | `false` | Show/hide the Clear button in dropdown |\n| `closeOnSelection` | `boolean` | `false` | Close picker when both dates selected |\n| `closeOnPresetSelection` | `boolean` | `false` | Close picker when preset is clicked |\n| `closeOnClickOutside` | `boolean` | `true` | Close picker when clicking outside |\n| `inputBackgroundColor` | `string` | `'#fff'` | Input background color |\n| `inputTextColor` | `string` | `'#495057'` | Input text color |\n| `inputBorderColor` | `string` | `'#ced4da'` | Input border color |\n| `inputBorderColorHover` | `string` | `'#9ca3af'` | Input border color on hover |\n| `inputBorderColorFocus` | `string` | `'#80bdff'` | Input border color on focus |\n| `inputPadding` | `string` | `'0.375rem 0.75rem'` | Input padding |\n| `locale` | `LocaleConfig` | English defaults | Custom month/day names for i18n |\n\n### Outputs\n\n| Event | Type | Description |\n|-------|------|-------------|\n| `ngModelChange` | `EventEmitter<DateRange>` | Emitted when date range changes |\n\n### Public Methods\n\nYou can call these methods programmatically using a template reference or ViewChild:\n\n```typescript\nimport { Component, ViewChild } from '@angular/core';\nimport { DualDatepickerComponent } from '@oneluiz/dual-datepicker';\n\n@Component({\n  template: `\n    <div style=\"display: flex; gap: 10px;\">\n      <ngx-dual-datepicker #datepicker></ngx-dual-datepicker>\n      <button (click)=\"clearSelection()\">Clear</button>\n    </div>\n  `\n})\nexport class MyComponent {\n  @ViewChild('datepicker') datepicker!: DualDatepickerComponent;\n\n  clearSelection() {\n    this.datepicker.clear(); // v3.0.0: method renamed from limpiar() to clear()\n  }\n}\n```\n\n| Method | Description |\n|--------|----------|\n| `clear()` | Clears the current date selection and resets the component (v3.0.0: renamed from `limpiar()`) |\n\n### Types\n\n```typescript\ninterface DateRange {\n  startDate: string;   // v3.0.0: renamed from 'fechaInicio' - ISO format: 'YYYY-MM-DD'\n  endDate: string;     // v3.0.0: renamed from 'fechaFin' - ISO format: 'YYYY-MM-DD'\n  rangeText: string;   // v3.0.0: renamed from 'rangoTexto' - Display text: 'DD Mon - DD Mon'\n}\n\ninterface PresetRange {\n  start: string;  // ISO date format: 'YYYY-MM-DD'\n  end: string;    // ISO date format: 'YYYY-MM-DD'\n}\n\ninterface PresetConfig {\n  label: string;\n  getValue: () => PresetRange;  // v3.0.0: NOW REQUIRED (daysAgo removed)\n}\n\ninterface LocaleConfig {\n  monthNames?: string[];         // Full month names (12 items)\n  monthNamesShort?: string[];    // Short month names (12 items)\n  dayNames?: string[];           // Full day names (7 items, starting Sunday)\n  dayNamesShort?: string[];      // Short day names (7 items, starting Sunday)\n  firstDayOfWeek?: number;       // 0 = Sunday, 1 = Monday, etc. (not yet implemented)\n}\n```\n\n### CommonPresets\n\nv3.0.0: No default presets shipped with component. Use `CommonPresets` utility or create custom:\n\n```typescript\nimport { CommonPresets, getLastNDays } from '@oneluiz/dual-datepicker';\n\n// Use pre-built collections\npresets = CommonPresets.dashboard;  // Last 7, 15, 30, 60, 90 days + last 6 months\n\n// Or create custom presets\npresets: PresetConfig[] = [\n  { label: 'Last 15 days', getValue: () => getLastNDays(15) },\n  { label: 'Last 3 months', getValue: () => getLastNDays(90) },\n  { label: 'Last 6 months', getValue: () => getLastNDays(180) },\n  { label: 'Last year', getValue: () => getLastNDays(365) }\n];\n```\n\nAvailable `CommonPresets` collections:\n- `CommonPresets.simple` - Last 7, 30, 60, 90 days\n- `CommonPresets.dashboard` - Last 7, 15, 30, 60, 90 days + last 6 months\n- `CommonPresets.analytics` - Last 30, 60, 90, 180, 365 days + YTD\n\nHelper functions:\n- `getLastNDays(n)` - Returns range for last N days\n- `getThisMonth()` - Returns range for current month\n- `getLastMonth()` - Returns range for previous month\n- `getYearToDate()` - Returns range from Jan 1 to today\n\n## Usage Examples\n\n### Minimal Usage\n\n```html\n<ngx-dual-datepicker [(ngModel)]=\"dateRange\"></ngx-dual-datepicker>\n```\n\n### With Initial Dates\n\n```html\n<ngx-dual-datepicker\n  [startDate]=\"'2024-01-15'\"\n  [endDate]=\"'2024-01-30'\"\n  (dateRangeSelected)=\"onDateRangeSelected($event)\">\n</ngx-dual-datepicker>\n```\n\n### With Events\n\n```typescript\n@Component({\n  selector: 'app-example',\n  template: `\n    <ngx-dual-datepicker\n      [startDate]=\"startDate\"\n      [endDate]=\"endDate\"\n      (dateRangeSelected)=\"onDateRangeSelected($event)\"\n      (dateRangeChange)=\"onDateRangeChange($event)\">\n    </ngx-dual-datepicker>\n    \n    <div *ngIf=\"selectedRange\">\n      Selected: {{ selectedRange.rangeText }}\n    </div>\n  `\n})\nexport class ExampleComponent {\n  startDate: string = '';\n  endDate: string = '';\n  selectedRange: DateRange | null = null;\n\n  onDateRangeChange(range: DateRange) {\n    console.log('Date changed:', range.startDate);\n    // Emitted when user selects first date (before completing range)\n  }\n\n  onDateRangeSelected(range: DateRange) {\n    console.log('Range selected:', range);\n    this.selectedRange = range;\n    \n    // Both dates selected - do something\n    this.fetchData(range.startDate, range.endDate);\n  }\n\n  fetchData(startDate: string, endDate: string) {\n    // Your API call here\n    // Dates are in 'YYYY-MM-DD' format\n  }\n}\n```\n\n### With ngModel\n\n```typescript\n@Component({\n  selector: 'app-example',\n  template: `\n    <ngx-dual-datepicker\n      [(ngModel)]=\"dateRange\"\n      (ngModelChange)=\"onDateRangeChange($event)\">\n    </ngx-dual-datepicker>\n    \n    <div *ngIf=\"dateRange\">\n      Selected: {{ dateRange.rangeText }}\n      <br>\n      From: {{ dateRange.startDate }} to {{ dateRange.endDate }}\n    </div>\n  `\n})\nexport class ExampleComponent {\n  dateRange: DateRange | null = null;\n\n  onDateRangeChange(range: DateRange) {\n    console.log('Start:', range.startDate);\n    console.log('End:', range.endDate);\n    console.log('Text:', range.rangeText);\n  }\n}\n```\n\n### With Styling\n\n```html\n<ngx-dual-datepicker\n  [startDate]=\"startDate\"\n  [endDate]=\"endDate\"\n  placeholder=\"Pick your dates\"\n  inputBackgroundColor=\"#fef3c7\"\n  inputTextColor=\"#92400e\"\n  inputBorderColor=\"#fbbf24\"\n  inputBorderColorHover=\"#f59e0b\"\n  inputBorderColorFocus=\"#d97706\"\n  inputPadding=\"12px 16px\"\n  (dateRangeSelected)=\"onDateRangeSelected($event)\">\n</ngx-dual-datepicker>\n```\n\n## 🛠️ Requirements\n\n- Angular 17.0.0 or higher\n\n## 🗺️ Roadmap\n\nRecently shipped:\n\n**v3.4.0:**\n- ✅ **Time Picker** - Select precise datetime ranges with 12h/24h format\n- ✅ **Configurable Minute Steps** - Choose 1, 5, 15, or 30-minute intervals\n- ✅ **Default Times** - Set default start/end times\n- ✅ **Full Theme Support** - Works seamlessly with all built-in themes\n\n**v3.3.0:**\n- ✅ **Theming System** - Pre-built themes for Bootstrap, Bulma, Foundation, Tailwind CSS, and Custom\n- ✅ **CSS Variables Support** - 13 customizable variables for branding\n- ✅ **Framework Integration** - Match your existing design system seamlessly\n\n**v3.2.0:**\n- ✅ **Hover Range Preview** - Visual feedback before confirming selection\n- ✅ **Apply/Confirm Button** - Require confirmation for enterprise dashboards\n- ✅ **Display Format** - Customize date display (DD/MM/YYYY, MM/DD/YYYY, etc.)\n- ✅ **Disabled Dates** - Block weekends, holidays, or custom logic\n\n**v3.1.0:**\n- ✅ **Complete Keyboard Navigation** - Arrow keys, Enter/Space, Tab, Escape, Home/End, PageUp/Down\n- ✅ **Full Accessibility Audit** - WCAG 2.1 Level AA compliance\n\n**v2.7.0:**\n- ✅ **Multi-range Support** - Select UNLIMITED date ranges (Material CAN'T do this!)\n\n**v2.6.0:**\n- ✅ **Flexible Preset System** - `getValue()` pattern for custom date logic\n- ✅ **Pre-built Preset Utilities** - CommonPresets for Dashboard, Reporting, Financial, Analytics\n\n**v2.5.0:**\n- ✅ **Date Adapter System** - Support for DayJS, date-fns, Luxon, and custom date libraries\n\nPlanned features:\n\n- ⬜ **Mobile Optimizations** - Enhanced touch gestures and responsive layout\n- ⬜ **Range Shortcuts** - Quick selection buttons (Today, This Week, etc.)\n- ⬜ **Time Constraints** - Min/max time validation and business hours\n- ⬜ **Multi-range + Time Picker** - Combined support for multiple datetime ranges\n\n## 📄 License\n\nMIT © Luis Cortes\n\n## 🤝 Contributing\n\nContributions are welcome! Please feel free to submit a Pull Request.\n\n## 🐛 Issues\n\nFound a bug? Please [open an issue](https://github.com/oneluiz/ng-dual-datepicker/issues).\n\n## ⭐ Support\n\nIf you find this package useful, please give it a star on [GitHub](https://github.com/oneluiz/ng-dual-datepicker)!\n\n---\n\nMade with ❤️ by [Luis Cortes](https://github.com/oneluiz)\n","readmeFilename":"README.md"}