{"_id":"@conorheffron/booking-sys-frontend","_rev":"51-acdfb7e2b2132e77935384e986aad735","name":"@conorheffron/booking-sys-frontend","dist-tags":{"latest":"3.6.6"},"versions":{"3.1.3":{"name":"@conorheffron/booking-sys-frontend","version":"3.1.3","license":"GPL-3.0-or-later","_id":"@conorheffron/booking-sys-frontend@3.1.3","maintainers":[{"name":"conorheffron","email":"conor.heffron@hotmail.com"}],"dist":{"shasum":"b2832aede8e15ec26a547244ce70c066a066b98e","tarball":"https://registry.npmjs.org/@conorheffron/booking-sys-frontend/-/booking-sys-frontend-3.1.3.tgz","fileCount":29,"integrity":"sha512-vYjgXsr0qWPa2Zs2lF3+6KQRmqA2QukqOPrKvdF8PKPV3rwCHQ7CQLey6njaqVpoG3Ltw/06Ac8BsXKRO6+XjA==","signatures":[{"sig":"MEQCIEWIde8EOZkyDFilH6bklMfJv/Azt2ce/PDwoSWzpHqLAiBnyp1M5/fw2OgelRN5c6+XcGJCxmPQHfkzxSDuTscsng==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":290796},"gitHead":"1cd0b3452ad24f7cda45dc917296a3ec91f3a423","private":false,"scripts":{"dev":"vite","lint":"eslint .","test":"jest","build":"vite build","serve":"vite preview --port 5000","preview":"vite preview"},"_npmUser":{"name":"conorheffron","actor":{"name":"conorheffron","type":"user","email":"conor.heffron@hotmail.com"},"email":"conor.heffron@hotmail.com"},"_npmVersion":"10.8.2","description":"React + TypeScript frontend for Booking System","directories":{},"_nodeVersion":"20.19.2","dependencies":{"react":"^18.2.0","bootstrap":"^5.3.6","react-dom":"^18.2.0","react-router-dom":"^7.6.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","vite":"^6.3.5","ts-jest":"^29.4.0","typescript":"^5.3.3","@types/jest":"^29.5.14","@types/react":"^18.2.15","whatwg-fetch":"^3.6.20","@types/react-dom":"^18.2.7","identity-obj-proxy":"^3.0.0","@vitejs/plugin-react":"^4.0.0","@testing-library/react":"^16.3.0","jest-environment-jsdom":"^30.0.0","@testing-library/jest-dom":"^6.6.3"},"_npmOperationalInternal":{"tmp":"tmp/booking-sys-frontend_3.1.3_1751612192703_0.9464396932729375","host":"s3://npm-registry-packages-npm-production"}},"3.1.4":{"name":"@conorheffron/booking-sys-frontend","version":"3.1.4","license":"GPL-3.0-or-later","_id":"@conorheffron/booking-sys-frontend@3.1.4","maintainers":[{"name":"conorheffron","email":"conor.heffron@hotmail.com"}],"dist":{"shasum":"5e6fc9f3c0625e1db6751a5dce6aad44262fe10b","tarball":"https://registry.npmjs.org/@conorheffron/booking-sys-frontend/-/booking-sys-frontend-3.1.4.tgz","fileCount":29,"integrity":"sha512-69lybslO+9Tmci61S68LSj4gnSWrvm/Rs4kcwk7hDSUb/Ptd7rFnlct+THirDzj9pw9Oygk3YcI6CRgLry05Vg==","signatures":[{"sig":"MEUCIQDKev/aQcMVQGHbemd8cY/FKg3XhrWyd11AgS9u7/P3QwIgJn4iuOBka/YzshekLgOyCMbWZrI1onCB6g37anOoyBA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":291004},"gitHead":"70920b1bb9b1862cba0001c5fb01fd8d849b67a2","private":false,"scripts":{"dev":"vite","lint":"eslint .","test":"jest","build":"vite build","serve":"vite preview --port 5000","preview":"vite preview"},"_npmUser":{"name":"conorheffron","actor":{"name":"conorheffron","type":"user","email":"conor.heffron@hotmail.com"},"email":"conor.heffron@hotmail.com"},"_npmVersion":"10.8.2","description":"React + TypeScript frontend for Booking System","directories":{},"_nodeVersion":"20.19.2","dependencies":{"react":"^18.2.0","bootstrap":"^5.3.6","react-dom":"^18.2.0","react-router-dom":"^7.6.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","vite":"^6.3.5","ts-jest":"^29.4.0","typescript":"^5.3.3","@types/jest":"^29.5.14","@types/react":"^18.2.15","whatwg-fetch":"^3.6.20","@types/react-dom":"^18.2.7","identity-obj-proxy":"^3.0.0","@vitejs/plugin-react":"^4.0.0","@testing-library/react":"^16.3.0","jest-environment-jsdom":"^30.0.0","@testing-library/jest-dom":"^6.6.3"},"_npmOperationalInternal":{"tmp":"tmp/booking-sys-frontend_3.1.4_1751613151610_0.9023351487599414","host":"s3://npm-registry-packages-npm-production"}},"3.1.5":{"name":"@conorheffron/booking-sys-frontend","version":"3.1.5","license":"GPL-3.0-or-later","_id":"@conorheffron/booking-sys-frontend@3.1.5","maintainers":[{"name":"conorheffron","email":"conor.heffron@hotmail.com"}],"dist":{"shasum":"ef30dc578b2390ed0bfcb27ffee8ac9b297ed286","tarball":"https://registry.npmjs.org/@conorheffron/booking-sys-frontend/-/booking-sys-frontend-3.1.5.tgz","fileCount":29,"integrity":"sha512-w5AwvHfKpIllPiJP1VZ8OLccDlbVhYBwMjQNbEYRdIseNU8Nhbz+aJ1s3bAitZirul19lO3+BKQVCBWVsb7RrA==","signatures":[{"sig":"MEQCIC6rn4lt48L9ORyaEzPH3kxcMbsn/23kxzZFSDPmQGcOAiAjzsURZw74IficiqzWIbTAvuFtolmSAmJ4Zgk162Wjnw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":291004},"gitHead":"32e3455913c491914d5e11139b7d8907b1505808","private":false,"scripts":{"dev":"vite","lint":"eslint .","test":"jest","build":"vite build","serve":"vite preview --port 5000","preview":"vite preview"},"_npmUser":{"name":"conorheffron","actor":{"name":"conorheffron","type":"user","email":"conor.heffron@hotmail.com"},"email":"conor.heffron@hotmail.com"},"_npmVersion":"10.8.2","description":"React + TypeScript frontend for Booking System","directories":{},"_nodeVersion":"20.19.2","dependencies":{"react":"^18.2.0","bootstrap":"^5.3.6","react-dom":"^18.2.0","react-router-dom":"^7.6.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","vite":"^6.3.5","ts-jest":"^29.4.0","typescript":"^5.3.3","@types/jest":"^29.5.14","@types/react":"^18.2.15","whatwg-fetch":"^3.6.20","@types/react-dom":"^18.2.7","identity-obj-proxy":"^3.0.0","@vitejs/plugin-react":"^4.0.0","@testing-library/react":"^16.3.0","jest-environment-jsdom":"^30.0.0","@testing-library/jest-dom":"^6.6.3"},"_npmOperationalInternal":{"tmp":"tmp/booking-sys-frontend_3.1.5_1751613840862_0.4418412585405227","host":"s3://npm-registry-packages-npm-production"}},"3.1.6":{"name":"@conorheffron/booking-sys-frontend","version":"3.1.6","license":"GPL-3.0-or-later","_id":"@conorheffron/booking-sys-frontend@3.1.6","maintainers":[{"name":"conorheffron","email":"conor.heffron@hotmail.com"}],"dist":{"shasum":"ea914c06c8d5584f934dd8118d6b5a7252abcd2d","tarball":"https://registry.npmjs.org/@conorheffron/booking-sys-frontend/-/booking-sys-frontend-3.1.6.tgz","fileCount":29,"integrity":"sha512-yjEIP8Ojvbw7VGIqla2bxufqrEk20VZZiQM+JtH6E2V6vsAneqrDZYXoPeG2BEJSQsUAVUXvs3pG2s49nXz88w==","signatures":[{"sig":"MEQCIEB+m6FU+Nf6AUk8KtyyLVLk+oQSjaeK5kcAfGXcEax3AiBcca0A72KXYgUVe4QAARIzTiHWuED2UlyRdgtSvQc4Tw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":291237},"gitHead":"d2a461031701bbba233ac953dab8628ebd6cf08b","private":false,"scripts":{"dev":"vite","lint":"eslint .","test":"jest","build":"vite build","serve":"vite preview --port 5000","preview":"vite preview"},"_npmUser":{"name":"conorheffron","actor":{"name":"conorheffron","type":"user","email":"conor.heffron@hotmail.com"},"email":"conor.heffron@hotmail.com"},"_npmVersion":"10.8.2","description":"React + TypeScript frontend for Booking System","directories":{},"_nodeVersion":"20.19.2","dependencies":{"react":"^18.2.0","bootstrap":"^5.3.6","react-dom":"^18.2.0","react-router-dom":"^7.6.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","vite":"^6.3.5","ts-jest":"^29.4.0","typescript":"^5.3.3","@types/jest":"^29.5.14","@types/react":"^18.2.15","whatwg-fetch":"^3.6.20","@types/react-dom":"^18.2.7","identity-obj-proxy":"^3.0.0","@vitejs/plugin-react":"^4.0.0","@testing-library/react":"^16.3.0","jest-environment-jsdom":"^30.0.0","@testing-library/jest-dom":"^6.6.3"},"_npmOperationalInternal":{"tmp":"tmp/booking-sys-frontend_3.1.6_1751683562854_0.1866318922259549","host":"s3://npm-registry-packages-npm-production"}},"3.1.7":{"name":"@conorheffron/booking-sys-frontend","version":"3.1.7","license":"GPL-3.0-or-later","_id":"@conorheffron/booking-sys-frontend@3.1.7","maintainers":[{"name":"conorheffron","email":"conor.heffron@hotmail.com"}],"dist":{"shasum":"d12de3245024053befa13c2f75fad97979ca3224","tarball":"https://registry.npmjs.org/@conorheffron/booking-sys-frontend/-/booking-sys-frontend-3.1.7.tgz","fileCount":29,"integrity":"sha512-/KuDuJOaeiQVfEEmMuaGeeD9rcPjAL0XgJ+DakBfnshRPOAgeUccBa8VMFqKB3oYLr2OkJfeCSZcS+j2yQj/8Q==","signatures":[{"sig":"MEUCIDl+8w0//1RsHYrvUyDxQ/FDMVbRsLZ2lKlArrF6wdeDAiEA2vayi+MJvMmLaBF4WiQJc9KCoo3IQ/ophxMQWXHKxOY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":295624},"gitHead":"5ee4b6fe4e59a1207cadcd9b54d36b83e899daf1","private":false,"scripts":{"dev":"vite","lint":"eslint .","test":"jest","build":"vite build","serve":"vite preview --port 5000","preview":"vite preview"},"_npmUser":{"name":"conorheffron","actor":{"name":"conorheffron","type":"user","email":"conor.heffron@hotmail.com"},"email":"conor.heffron@hotmail.com"},"_npmVersion":"10.8.2","description":"React + TypeScript frontend for Booking System","directories":{},"_nodeVersion":"20.19.2","dependencies":{"react":"^18.2.0","bootstrap":"^5.3.6","react-dom":"^18.2.0","react-router-dom":"^7.6.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","vite":"^6.3.5","ts-jest":"^29.4.0","typescript":"^5.3.3","@types/jest":"^29.5.14","@types/react":"^18.2.15","whatwg-fetch":"^3.6.20","@types/react-dom":"^18.2.7","identity-obj-proxy":"^3.0.0","@vitejs/plugin-react":"^4.0.0","@testing-library/react":"^16.3.0","jest-environment-jsdom":"^30.0.0","@testing-library/jest-dom":"^6.6.3"},"_npmOperationalInternal":{"tmp":"tmp/booking-sys-frontend_3.1.7_1751703338222_0.5171263811019493","host":"s3://npm-registry-packages-npm-production"}},"3.1.8":{"name":"@conorheffron/booking-sys-frontend","version":"3.1.8","license":"GPL-3.0-or-later","_id":"@conorheffron/booking-sys-frontend@3.1.8","maintainers":[{"name":"conorheffron","email":"conor.heffron@hotmail.com"}],"dist":{"shasum":"e7c20e714458681ab2b5980df33cc3a5c51553e5","tarball":"https://registry.npmjs.org/@conorheffron/booking-sys-frontend/-/booking-sys-frontend-3.1.8.tgz","fileCount":29,"integrity":"sha512-yuLCi8AgFj6l8bhY7IdXCYiPCsnowQoiArVhZPfIJRnT73HcEOQnvKGrVUByLVpNALx01C+t7SJXl8uuFQJGeg==","signatures":[{"sig":"MEQCIClrtarQKeZNRbm2I8DcS0PR7ZpD4xRDK2q76aaNf82dAiBUk6w8NmH4E1wZXql1cAhtpCuc/RLTJejUgB4vDQ2XVQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":295619},"gitHead":"109ef044f36142edd32dd99868ad01e54fb1e434","private":false,"scripts":{"dev":"vite","lint":"eslint .","test":"jest","build":"vite build","serve":"vite preview --port 5000","preview":"vite preview"},"_npmUser":{"name":"conorheffron","actor":{"name":"conorheffron","type":"user","email":"conor.heffron@hotmail.com"},"email":"conor.heffron@hotmail.com"},"_npmVersion":"10.8.2","description":"React + TypeScript frontend for Booking System","directories":{},"_nodeVersion":"20.19.2","dependencies":{"react":"^18.2.0","bootstrap":"^5.3.6","react-dom":"^18.2.0","react-router-dom":"^7.6.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","vite":"^6.3.5","ts-jest":"^29.4.0","typescript":"^5.3.3","@types/jest":"^29.5.14","@types/react":"^18.2.15","whatwg-fetch":"^3.6.20","@types/react-dom":"^18.2.7","identity-obj-proxy":"^3.0.0","@vitejs/plugin-react":"^4.0.0","@testing-library/react":"^16.3.0","jest-environment-jsdom":"^30.0.0","@testing-library/jest-dom":"^6.6.3"},"_npmOperationalInternal":{"tmp":"tmp/booking-sys-frontend_3.1.8_1751803401618_0.6366451095610457","host":"s3://npm-registry-packages-npm-production"}},"3.1.9":{"name":"@conorheffron/booking-sys-frontend","version":"3.1.9","license":"GPL-3.0-or-later","_id":"@conorheffron/booking-sys-frontend@3.1.9","maintainers":[{"name":"conorheffron","email":"conor.heffron@hotmail.com"}],"dist":{"shasum":"d8632003b64b208ec3d182e177ddc5440afbd7ea","tarball":"https://registry.npmjs.org/@conorheffron/booking-sys-frontend/-/booking-sys-frontend-3.1.9.tgz","fileCount":31,"integrity":"sha512-UV135F7jCv/MJLhPWYr0qcZ0QT66gGMM9/sBMgwNCaqyyxvWW28KQxbljaQvzcEg8xCsXjdlK4TqcZTCQEdiCA==","signatures":[{"sig":"MEUCIQDBFmOxN/2all1tIrULgaVYLcroacW3CKiOf4eTYrXM1gIgLLPZifvU8VmTH8dHn3KR++xCtjUGIuqacGLhL2Hq/5Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":298996},"gitHead":"e022da48ff97c13481bcfe4652d81e93a0b55734","private":false,"scripts":{"dev":"vite","lint":"eslint .","test":"jest","build":"vite build","serve":"vite preview --port 5000","preview":"vite preview"},"_npmUser":{"name":"conorheffron","actor":{"name":"conorheffron","type":"user","email":"conor.heffron@hotmail.com"},"email":"conor.heffron@hotmail.com"},"_npmVersion":"10.8.2","description":"React + TypeScript frontend for Booking System","directories":{},"_nodeVersion":"20.19.3","dependencies":{"react":"^18.2.0","bootstrap":"^5.3.6","react-dom":"^18.2.0","react-router-dom":"^7.6.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","vite":"^6.3.5","ts-jest":"^29.4.0","typescript":"^5.3.3","@types/jest":"^29.5.14","@types/react":"^18.2.15","whatwg-fetch":"^3.6.20","@types/react-dom":"^18.2.7","identity-obj-proxy":"^3.0.0","@vitejs/plugin-react":"^4.0.0","@testing-library/react":"^16.3.0","jest-environment-jsdom":"^30.0.0","@testing-library/jest-dom":"^6.6.3"},"_npmOperationalInternal":{"tmp":"tmp/booking-sys-frontend_3.1.9_1752102189961_0.4020367550020716","host":"s3://npm-registry-packages-npm-production"}},"3.2.1":{"name":"@conorheffron/booking-sys-frontend","version":"3.2.1","license":"GPL-3.0-or-later","_id":"@conorheffron/booking-sys-frontend@3.2.1","maintainers":[{"name":"conorheffron","email":"conor.heffron@hotmail.com"}],"dist":{"shasum":"efa1dd6c22d5be788964df7a9dbc2c13282146fa","tarball":"https://registry.npmjs.org/@conorheffron/booking-sys-frontend/-/booking-sys-frontend-3.2.1.tgz","fileCount":31,"integrity":"sha512-GkaZXT3po7YkgIkuGkgFrrcXwFroTBnNmUpqrJFVv5Qrv5N/3c7xHrBb3oAiIlNBg4vMGb945MLL/sAaV2K6XQ==","signatures":[{"sig":"MEUCIQDUmFlYy+/vpMmnMVa4NOzw6CMQzA/poF2eAT5uv2hS3AIgWST9hQcLAQaizKSp2lKmwl/4rfryTy+re4BfY6EX/30=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":298996},"gitHead":"fa725f9d2dccddb9a7cbed77a06348087b60b9bc","private":false,"scripts":{"dev":"vite","lint":"eslint .","test":"jest","build":"vite build","serve":"vite preview --port 5000","preview":"vite preview"},"_npmUser":{"name":"conorheffron","email":"conor.heffron@hotmail.com"},"_npmVersion":"10.8.2","description":"React + TypeScript frontend for Booking System","directories":{},"_nodeVersion":"20.19.3","dependencies":{"react":"^18.2.0","bootstrap":"^5.3.6","react-dom":"^18.2.0","react-router-dom":"^7.6.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","vite":"^6.3.5","ts-jest":"^29.4.0","typescript":"^5.3.3","@types/jest":"^29.5.14","@types/react":"^18.2.15","whatwg-fetch":"^3.6.20","@types/react-dom":"^18.2.7","identity-obj-proxy":"^3.0.0","@vitejs/plugin-react":"^4.0.0","@testing-library/react":"^16.3.0","jest-environment-jsdom":"^30.0.0","@testing-library/jest-dom":"^6.6.3"},"_npmOperationalInternal":{"tmp":"tmp/booking-sys-frontend_3.2.1_1752709462825_0.8434097576680073","host":"s3://npm-registry-packages-npm-production"}},"3.2.2":{"name":"@conorheffron/booking-sys-frontend","version":"3.2.2","license":"GPL-3.0-or-later","_id":"@conorheffron/booking-sys-frontend@3.2.2","maintainers":[{"name":"conorheffron","email":"conor.heffron@hotmail.com"}],"dist":{"shasum":"cfd7cd7dd10a8336442c6bcf79effc420659aab7","tarball":"https://registry.npmjs.org/@conorheffron/booking-sys-frontend/-/booking-sys-frontend-3.2.2.tgz","fileCount":31,"integrity":"sha512-VwGhaQWJvIw7Fetsuu5B+neYtD8MH4+81pRfvM2zVni+7MxsdgUNaS5rRMxK8qiIItvwG53sAYZ5WAhPzZdJMA==","signatures":[{"sig":"MEQCICNsMl156aETxNLheb5OZ9JM89o4VO39AZ+CP90hkXfnAiAUMnFKo0UxGkd8XHyz43e1kaJdOvH41wJhhnLXivBL2g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":298996},"gitHead":"8db76a1612e355b2d7804492369c5af6117dd577","private":false,"scripts":{"dev":"vite","lint":"eslint .","test":"jest","build":"vite build","serve":"vite preview --port 5000","preview":"vite preview"},"_npmUser":{"name":"conorheffron","email":"conor.heffron@hotmail.com"},"_npmVersion":"10.8.2","description":"React + TypeScript frontend for Booking System","directories":{},"_nodeVersion":"20.19.4","dependencies":{"react":"^18.2.0","bootstrap":"^5.3.6","react-dom":"^18.2.0","react-router-dom":"^7.6.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","vite":"^6.3.5","ts-jest":"^29.4.0","typescript":"^5.3.3","@types/jest":"^29.5.14","@types/react":"^18.2.15","whatwg-fetch":"^3.6.20","@types/react-dom":"^18.2.7","identity-obj-proxy":"^3.0.0","@vitejs/plugin-react":"^4.0.0","@testing-library/react":"^16.3.0","jest-environment-jsdom":"^30.0.0","@testing-library/jest-dom":"^6.6.3"},"_npmOperationalInternal":{"tmp":"tmp/booking-sys-frontend_3.2.2_1753314266746_0.8428207529876699","host":"s3://npm-registry-packages-npm-production"}},"3.2.3":{"name":"@conorheffron/booking-sys-frontend","version":"3.2.3","license":"GPL-3.0-or-later","_id":"@conorheffron/booking-sys-frontend@3.2.3","maintainers":[{"name":"conorheffron","email":"conor.heffron@hotmail.com"}],"dist":{"shasum":"57402a0c74c8018c86289b18c9490004be3baad9","tarball":"https://registry.npmjs.org/@conorheffron/booking-sys-frontend/-/booking-sys-frontend-3.2.3.tgz","fileCount":31,"integrity":"sha512-9tsZ2OjNwHwiud7102S5ioKGbP9rPpvvl1KpSQDLHsFHEC49LxFqfQIoMs59jKaLv7+mt5YOLeBuPYNFcOeTqg==","signatures":[{"sig":"MEYCIQD9Sjk/J2MF+Ki+47oHPMHAnNC3q6/hzr4++O9JfneQwAIhAJoPdyjCD6hNyJ5WAd3tlpOrH0H/SuAl/jHWmWvHaEwe","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":298996},"gitHead":"37ce507322eade27e67e665b2623053fc83fecb2","private":false,"scripts":{"dev":"vite","lint":"eslint .","test":"jest","build":"vite build","serve":"vite preview --port 5000","preview":"vite preview"},"_npmUser":{"name":"conorheffron","email":"conor.heffron@hotmail.com"},"_npmVersion":"10.8.2","description":"React + TypeScript frontend for Booking System","directories":{},"_nodeVersion":"20.19.4","dependencies":{"react":"^18.2.0","bootstrap":"^5.3.6","react-dom":"^18.2.0","react-router-dom":"^7.6.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","vite":"^6.3.5","ts-jest":"^29.4.0","typescript":"^5.3.3","@types/jest":"^29.5.14","@types/react":"^18.2.15","whatwg-fetch":"^3.6.20","@types/react-dom":"^18.2.7","identity-obj-proxy":"^3.0.0","@vitejs/plugin-react":"^4.0.0","@testing-library/react":"^16.3.0","jest-environment-jsdom":"^30.0.0","@testing-library/jest-dom":"^6.6.3"},"_npmOperationalInternal":{"tmp":"tmp/booking-sys-frontend_3.2.3_1755032624105_0.05889028278539077","host":"s3://npm-registry-packages-npm-production"}},"3.2.4":{"name":"@conorheffron/booking-sys-frontend","version":"3.2.4","license":"GPL-3.0-or-later","_id":"@conorheffron/booking-sys-frontend@3.2.4","maintainers":[{"name":"conorheffron","email":"conor.heffron@hotmail.com"}],"dist":{"shasum":"aa5e4bdc77102043a9e9982183c4d4deade2b4f1","tarball":"https://registry.npmjs.org/@conorheffron/booking-sys-frontend/-/booking-sys-frontend-3.2.4.tgz","fileCount":31,"integrity":"sha512-Atm0NNdjXwcwBIvRIT7m/udndSZiIxDviy3KTowKMvIfEeJacMiifUvT507PUOY9NtnuOgBN7TrQEWxMCJQD6A==","signatures":[{"sig":"MEQCIBus3hkGUm8r7fwBpGJIkyqkLc8sDcxAXRZ0zSjM6CPwAiBTvlNLyO/03F22fiMshwn2Rukll9wN6/Q3vXYGab9aeQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":298996},"gitHead":"67833b108f236913b984f4740ada34c8040ede5e","private":false,"scripts":{"dev":"vite","lint":"eslint .","test":"jest","build":"vite build","serve":"vite preview --port 5000","preview":"vite preview"},"_npmUser":{"name":"conorheffron","email":"conor.heffron@hotmail.com"},"_npmVersion":"10.8.2","description":"React + TypeScript frontend for Booking System","directories":{},"_nodeVersion":"20.19.4","dependencies":{"react":"^18.2.0","bootstrap":"^5.3.6","react-dom":"^18.2.0","react-router-dom":"^7.6.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","vite":"^6.3.5","ts-jest":"^29.4.0","typescript":"^5.3.3","@types/jest":"^29.5.14","@types/react":"^18.2.15","whatwg-fetch":"^3.6.20","@types/react-dom":"^18.2.7","identity-obj-proxy":"^3.0.0","@vitejs/plugin-react":"^4.0.0","@testing-library/react":"^16.3.0","jest-environment-jsdom":"^30.0.0","@testing-library/jest-dom":"^6.6.3"},"_npmOperationalInternal":{"tmp":"tmp/booking-sys-frontend_3.2.4_1755640045478_0.7557816177991561","host":"s3://npm-registry-packages-npm-production"}},"3.2.5":{"name":"@conorheffron/booking-sys-frontend","version":"3.2.5","license":"GPL-3.0-or-later","_id":"@conorheffron/booking-sys-frontend@3.2.5","maintainers":[{"name":"conorheffron","email":"conor.heffron@hotmail.com"}],"dist":{"shasum":"cded8325bad6363eac7fba0800df470866bfa0de","tarball":"https://registry.npmjs.org/@conorheffron/booking-sys-frontend/-/booking-sys-frontend-3.2.5.tgz","fileCount":31,"integrity":"sha512-wSPFt72mApL5h32CgbgvbS+oCK+0C8j9V9iLw49KUfFhL1ylSlkYt5dz+xa8tHHe5/3+YzpwCSQDYz7SzsHv4Q==","signatures":[{"sig":"MEUCIQCRDWWL/lJyaALk3FtkZ/E4ts3uxWU1Z+Of/1XNYy+WSgIgadOjE7HZolRV/bKsozwjGW3StWiNKFR1ncDZOVEppwg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":298996},"gitHead":"6a0c19755b3a2bd0d46b9d7b1884dab7d1102d28","private":false,"scripts":{"dev":"vite","lint":"eslint .","test":"jest","build":"vite build","serve":"vite preview --port 5000","preview":"vite preview"},"_npmUser":{"name":"conorheffron","email":"conor.heffron@hotmail.com"},"_npmVersion":"10.8.2","description":"React + TypeScript frontend for Booking System","directories":{},"_nodeVersion":"20.19.4","dependencies":{"react":"^18.2.0","bootstrap":"^5.3.6","react-dom":"^18.2.0","react-router-dom":"^7.6.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","vite":"^6.3.5","ts-jest":"^29.4.0","typescript":"^5.3.3","@types/jest":"^29.5.14","@types/react":"^18.2.15","whatwg-fetch":"^3.6.20","@types/react-dom":"^18.2.7","identity-obj-proxy":"^3.0.0","@vitejs/plugin-react":"^4.0.0","@testing-library/react":"^16.3.0","jest-environment-jsdom":"^30.0.0","@testing-library/jest-dom":"^6.6.3"},"_npmOperationalInternal":{"tmp":"tmp/booking-sys-frontend_3.2.5_1756267170568_0.11682385274836493","host":"s3://npm-registry-packages-npm-production"}},"3.2.6":{"name":"@conorheffron/booking-sys-frontend","version":"3.2.6","license":"GPL-3.0-or-later","_id":"@conorheffron/booking-sys-frontend@3.2.6","maintainers":[{"name":"conorheffron","email":"conor.heffron@hotmail.com"}],"dist":{"shasum":"587460df842b191aac1609317ff2453120029b70","tarball":"https://registry.npmjs.org/@conorheffron/booking-sys-frontend/-/booking-sys-frontend-3.2.6.tgz","fileCount":31,"integrity":"sha512-nRQi7LvdvhXlrr8iGRJWZ2/FwFZ5r7QIbB+fq0tuo+OhzE9z2Z4Y8C+QY/dusuH5z0GLjbtY71wWzrlO+EROqw==","signatures":[{"sig":"MEUCIET9z15TcVOOQ1YgPlOl8iBanY80BdpyzMC03oDHZafRAiEAjRM1WGQkOME9488EtXEuYV/4gPSlNjoU3KWoTSwL6gg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":298996},"gitHead":"e3653863a89aa895e043d60630593e95bcb1959c","private":false,"scripts":{"dev":"vite","lint":"eslint .","test":"jest","build":"vite build","serve":"vite preview --port 5000","preview":"vite preview"},"_npmUser":{"name":"conorheffron","email":"conor.heffron@hotmail.com"},"_npmVersion":"10.8.2","description":"React + TypeScript frontend for Booking System","directories":{},"_nodeVersion":"20.19.4","dependencies":{"react":"^18.2.0","bootstrap":"^5.3.6","react-dom":"^18.2.0","react-router-dom":"^7.6.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","vite":"^6.3.5","ts-jest":"^29.4.0","typescript":"^5.3.3","@types/jest":"^29.5.14","@types/react":"^18.2.15","whatwg-fetch":"^3.6.20","@types/react-dom":"^18.2.7","identity-obj-proxy":"^3.0.0","@vitejs/plugin-react":"^4.0.0","@testing-library/react":"^16.3.0","jest-environment-jsdom":"^30.0.0","@testing-library/jest-dom":"^6.6.3"},"_npmOperationalInternal":{"tmp":"tmp/booking-sys-frontend_3.2.6_1756865890102_0.946794346043009","host":"s3://npm-registry-packages-npm-production"}},"3.2.7":{"name":"@conorheffron/booking-sys-frontend","version":"3.2.7","license":"GPL-3.0-or-later","_id":"@conorheffron/booking-sys-frontend@3.2.7","maintainers":[{"name":"conorheffron","email":"conor.heffron@hotmail.com"}],"dist":{"shasum":"3d4bc77d6f810e58f9855213a96d53cdf7f00d99","tarball":"https://registry.npmjs.org/@conorheffron/booking-sys-frontend/-/booking-sys-frontend-3.2.7.tgz","fileCount":31,"integrity":"sha512-PhEQRaLFDftkos1ysSV5ItJoIxRdl7Di1FvqzKGXIIqPfzyS2FT1oZAlcfCr+U9xYv6wKhtmuqiSmT/MfdeYYA==","signatures":[{"sig":"MEUCIF/8hkac494ks4YM2NX4RMdCOlGebxn4CoJCwDu+4nQuAiEAjqFWGUSU3uqu2WKQ12FwdWiz1soEJTbZDyP+ZxAPoQE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":298990},"gitHead":"624b086ed9d359c2050d508cfc56196bde91aff8","private":false,"scripts":{"dev":"vite","lint":"eslint .","test":"jest","build":"vite build","serve":"vite preview --port 5000","preview":"vite preview"},"_npmUser":{"name":"conorheffron","email":"conor.heffron@hotmail.com"},"_npmVersion":"10.8.2","description":"React + TypeScript frontend for Booking System","directories":{},"_nodeVersion":"20.19.5","dependencies":{"react":"^18.2.0","bootstrap":"^5.3.6","react-dom":"^18.2.0","react-router-dom":"^7.6.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","vite":"^6.3.5","ts-jest":"^29.4.0","typescript":"^5.3.3","@types/jest":"^29.5.14","@types/react":"^18.2.15","whatwg-fetch":"^3.6.20","@types/react-dom":"^18.2.7","identity-obj-proxy":"^3.0.0","@vitejs/plugin-react":"^4.0.0","@testing-library/react":"^16.3.0","jest-environment-jsdom":"^30.0.0","@testing-library/jest-dom":"^6.6.3"},"_npmOperationalInternal":{"tmp":"tmp/booking-sys-frontend_3.2.7_1757950843427_0.9695245715931646","host":"s3://npm-registry-packages-npm-production"}},"3.2.8":{"name":"@conorheffron/booking-sys-frontend","version":"3.2.8","license":"GPL-3.0-or-later","_id":"@conorheffron/booking-sys-frontend@3.2.8","maintainers":[{"name":"conorheffron","email":"conor.heffron@hotmail.com"}],"dist":{"shasum":"e2e19272414b7960b817481fd61b408215f2498f","tarball":"https://registry.npmjs.org/@conorheffron/booking-sys-frontend/-/booking-sys-frontend-3.2.8.tgz","fileCount":31,"integrity":"sha512-ZnYaa3hyC49q8eonK7qK37tHaxgT2cUW0JDKaNTjzo0rbHHixeue/V1KHOWAMUxRpf9kXpuxPItRYd0ysOk7RA==","signatures":[{"sig":"MEUCIHWx0g97Iq1+bN37d2B1tl25kSawKr88EqsImdECfPl5AiEAoHezCWoC+wa8IeeSzkqKDB5LyIyezmhYcEnO5lbZUak=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":298990},"gitHead":"e2209dc5994ef1d9b34b7db51839d99a58ede316","private":false,"scripts":{"dev":"vite","lint":"eslint .","test":"jest","build":"vite build","serve":"vite preview --port 5000","preview":"vite preview"},"_npmUser":{"name":"conorheffron","email":"conor.heffron@hotmail.com"},"_npmVersion":"10.8.2","description":"React + TypeScript frontend for Booking System","directories":{},"_nodeVersion":"20.19.5","dependencies":{"react":"^18.2.0","bootstrap":"^5.3.6","react-dom":"^18.2.0","react-router-dom":"^7.6.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","vite":"^6.3.5","ts-jest":"^29.4.0","typescript":"^5.3.3","@types/jest":"^29.5.14","@types/react":"^18.2.15","whatwg-fetch":"^3.6.20","@types/react-dom":"^18.2.7","identity-obj-proxy":"^3.0.0","@vitejs/plugin-react":"^4.0.0","@testing-library/react":"^16.3.0","jest-environment-jsdom":"^30.0.0","@testing-library/jest-dom":"^6.6.3"},"_npmOperationalInternal":{"tmp":"tmp/booking-sys-frontend_3.2.8_1757955118121_0.36761841010982965","host":"s3://npm-registry-packages-npm-production"}},"3.2.9":{"name":"@conorheffron/booking-sys-frontend","version":"3.2.9","license":"GPL-3.0-or-later","_id":"@conorheffron/booking-sys-frontend@3.2.9","maintainers":[{"name":"conorheffron","email":"conor.heffron@hotmail.com"}],"dist":{"shasum":"e68f92f6c273f7b15b56f90be8255e084d568252","tarball":"https://registry.npmjs.org/@conorheffron/booking-sys-frontend/-/booking-sys-frontend-3.2.9.tgz","fileCount":32,"integrity":"sha512-Xsaf2ozVjlmWySBQJfLfRgIbaK2MNU/uoDbffgXyFr8Aov0kTdCvMD0MGwC+LNNo4rzzx4Uaj5kKB4JJbFtBHQ==","signatures":[{"sig":"MEUCIQCHDJPO5lJGBTyDw84lONQaR9fbctbgDAVUx7vPoZq9JQIgNUHXRjakGHH4xtH/E8hvep1WWyc0y/lc67d7cftpbdQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":299061},"gitHead":"0043ee95b25bd8bfc9bf4a998a4b022896087896","private":false,"scripts":{"dev":"vite","lint":"eslint .","test":"jest","build":"vite build","serve":"vite preview --port 5000","preview":"vite preview"},"_npmUser":{"name":"conorheffron","email":"conor.heffron@hotmail.com"},"_npmVersion":"10.8.2","description":"React + TypeScript frontend for Booking System","directories":{},"_nodeVersion":"20.19.5","dependencies":{"react":"^18.2.0","bootstrap":"^5.3.6","react-dom":"^18.2.0","react-router-dom":"^7.6.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","vite":"^6.3.5","ts-jest":"^29.4.0","typescript":"^5.3.3","@types/jest":"^29.5.14","@types/react":"^18.2.15","whatwg-fetch":"^3.6.20","@types/react-dom":"^18.2.7","identity-obj-proxy":"^3.0.0","@vitejs/plugin-react":"^4.0.0","@testing-library/react":"^16.3.0","jest-environment-jsdom":"^30.0.0","@testing-library/jest-dom":"^6.6.3"},"_npmOperationalInternal":{"tmp":"tmp/booking-sys-frontend_3.2.9_1758298444832_0.21912192266721342","host":"s3://npm-registry-packages-npm-production"}},"3.3.1":{"name":"@conorheffron/booking-sys-frontend","version":"3.3.1","license":"GPL-3.0-or-later","_id":"@conorheffron/booking-sys-frontend@3.3.1","maintainers":[{"name":"conorheffron","email":"conor.heffron@hotmail.com"}],"dist":{"shasum":"f51e9887c7787966d779ffb529d4125c2cde9205","tarball":"https://registry.npmjs.org/@conorheffron/booking-sys-frontend/-/booking-sys-frontend-3.3.1.tgz","fileCount":32,"integrity":"sha512-C1+AlveeVyD5L3bvTfrjABYtWay8dbmQoOUyFTP9w9d8Wz2ZZpTnWIIiyH8FRNRSnqCUNtZMdnW6TNWKDDwVLg==","signatures":[{"sig":"MEUCIQDX64XCYEVjKCplQroXekb89mQObMosZTt2lmQH1sNqjQIgNezl3OWLPp5PJRRzvfKsqUoH6k/MHbo9MuKoSFDVpBc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":299061},"gitHead":"ea868bb7627e71471c312ca7119c6ec48250fd20","private":false,"scripts":{"dev":"vite","lint":"eslint .","test":"jest","build":"vite build","serve":"vite preview --port 5000","preview":"vite preview"},"_npmUser":{"name":"conorheffron","email":"conor.heffron@hotmail.com"},"_npmVersion":"10.8.2","description":"React + TypeScript frontend for Booking System","directories":{},"_nodeVersion":"20.19.5","dependencies":{"react":"^18.2.0","bootstrap":"^5.3.6","react-dom":"^18.2.0","react-router-dom":"^7.6.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","vite":"^6.3.5","ts-jest":"^29.4.0","typescript":"^5.3.3","@types/jest":"^29.5.14","@types/react":"^18.2.15","whatwg-fetch":"^3.6.20","@types/react-dom":"^18.2.7","identity-obj-proxy":"^3.0.0","@vitejs/plugin-react":"^4.0.0","@testing-library/react":"^16.3.0","jest-environment-jsdom":"^30.0.0","@testing-library/jest-dom":"^6.6.3"},"_npmOperationalInternal":{"tmp":"tmp/booking-sys-frontend_3.3.1_1758941615610_0.9270487434359391","host":"s3://npm-registry-packages-npm-production"}},"3.3.2":{"name":"@conorheffron/booking-sys-frontend","version":"3.3.2","license":"GPL-3.0-or-later","_id":"@conorheffron/booking-sys-frontend@3.3.2","maintainers":[{"name":"conorheffron","email":"conor.heffron@hotmail.com"}],"dist":{"shasum":"381c8b5d950cde81bb6fd68b057725ced86e71ef","tarball":"https://registry.npmjs.org/@conorheffron/booking-sys-frontend/-/booking-sys-frontend-3.3.2.tgz","fileCount":32,"integrity":"sha512-gtZ9tC+zg+wzWLlVe8oBn7VN3GWnnPB1DjzUfN6RuB2YdWVG9iGB5yc9BvFwHs+6b5n3NyrUYC40KPtB6A/PPA==","signatures":[{"sig":"MEYCIQCWf4xvFaNrcOVcqypN2ErGsZuyL4p+FxHfObiombnHogIhAN31hd0YAX0WN6xoEVJA9KmbPzkhaEezKTMdcbzC3cZE","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":299061},"gitHead":"b1f65eacef1c168687f5238bd2ef85ec4daf9234","private":false,"scripts":{"dev":"vite","lint":"eslint .","test":"jest","build":"vite build","serve":"vite preview --port 5000","preview":"vite preview"},"_npmUser":{"name":"conorheffron","email":"conor.heffron@hotmail.com"},"_npmVersion":"10.8.2","description":"React + TypeScript frontend for Booking System","directories":{},"_nodeVersion":"20.19.5","dependencies":{"react":"^18.2.0","bootstrap":"^5.3.6","react-dom":"^18.2.0","react-router-dom":"^7.6.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","vite":"^6.3.5","ts-jest":"^29.4.0","typescript":"^5.3.3","@types/jest":"^29.5.14","@types/react":"^18.2.15","whatwg-fetch":"^3.6.20","@types/react-dom":"^18.2.7","identity-obj-proxy":"^3.0.0","@vitejs/plugin-react":"^4.0.0","@testing-library/react":"^16.3.0","jest-environment-jsdom":"^30.0.0","@testing-library/jest-dom":"^6.6.3"},"_npmOperationalInternal":{"tmp":"tmp/booking-sys-frontend_3.3.2_1759250228330_0.6816351695595038","host":"s3://npm-registry-packages-npm-production"}},"3.3.3":{"name":"@conorheffron/booking-sys-frontend","version":"3.3.3","license":"GPL-3.0-or-later","_id":"@conorheffron/booking-sys-frontend@3.3.3","maintainers":[{"name":"conorheffron","email":"conor.heffron@hotmail.com"}],"dist":{"shasum":"780badadc5fe3c8f564697ade503f1a80a6d52cf","tarball":"https://registry.npmjs.org/@conorheffron/booking-sys-frontend/-/booking-sys-frontend-3.3.3.tgz","fileCount":32,"integrity":"sha512-Gjz1KFOiM2Iphswn4TiogPfapGMIEMgkktVe2Vv20PwZaJI14tg5wNLunYdMfOoAx7X/iL3KMctY/pQ0BIiGXA==","signatures":[{"sig":"MEQCIAOpruqIAAHN7lz7aktaRgasElnpnyTRRC22x3kXyThMAiBmuuGshGKEsykAi0AEhztCE4O1szQJqUE0iDosTtxLJQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":299061},"gitHead":"82c0ab4e46e659d3a59250f6a4fe0e6b4b689806","private":false,"scripts":{"dev":"vite","lint":"eslint .","test":"jest","build":"vite build","serve":"vite preview --port 5000","preview":"vite preview"},"_npmUser":{"name":"conorheffron","email":"conor.heffron@hotmail.com"},"_npmVersion":"10.8.2","description":"React + TypeScript frontend for Booking System","directories":{},"_nodeVersion":"20.19.5","dependencies":{"react":"^18.2.0","bootstrap":"^5.3.6","react-dom":"^18.2.0","react-router-dom":"^7.6.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","vite":"^6.3.5","ts-jest":"^29.4.0","typescript":"^5.3.3","@types/jest":"^29.5.14","@types/react":"^18.2.15","whatwg-fetch":"^3.6.20","@types/react-dom":"^18.2.7","identity-obj-proxy":"^3.0.0","@vitejs/plugin-react":"^4.0.0","@testing-library/react":"^16.3.0","jest-environment-jsdom":"^30.0.0","@testing-library/jest-dom":"^6.6.3"},"_npmOperationalInternal":{"tmp":"tmp/booking-sys-frontend_3.3.3_1759745777061_0.9982866008400171","host":"s3://npm-registry-packages-npm-production"}},"3.3.4":{"name":"@conorheffron/booking-sys-frontend","version":"3.3.4","license":"GPL-3.0-or-later","_id":"@conorheffron/booking-sys-frontend@3.3.4","maintainers":[{"name":"conorheffron","email":"conor.heffron@hotmail.com"}],"dist":{"shasum":"c6e4d857d77762f26139c924427f3b51541ec1a5","tarball":"https://registry.npmjs.org/@conorheffron/booking-sys-frontend/-/booking-sys-frontend-3.3.4.tgz","fileCount":32,"integrity":"sha512-Y7mYn6zll2RVppvt573XRFkvUxsOQBjYhYBuEcCiPcH10xADacGDaVuJStmAJH4ewzsAT7Lzm7BrFoUM+aeUow==","signatures":[{"sig":"MEQCIAkKb5xzi6/gYjth2doN9evg5ucl8uAi75fDrnP21MzrAiBg4SuzXDXWxoNXR2duiSYqDc/t0DjiO1uamNWaCdLmhw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":299061},"gitHead":"6ea0d35e7f0c2ed3bab3690c950fb4273045f204","private":false,"scripts":{"dev":"vite","lint":"eslint .","test":"jest","build":"vite build","serve":"vite preview --port 5000","preview":"vite preview"},"_npmUser":{"name":"conorheffron","email":"conor.heffron@hotmail.com"},"_npmVersion":"10.8.2","description":"React + TypeScript frontend for Booking System","directories":{},"_nodeVersion":"20.19.5","dependencies":{"react":"^18.2.0","bootstrap":"^5.3.6","react-dom":"^18.2.0","react-router-dom":"^7.6.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","vite":"^6.3.5","ts-jest":"^29.4.0","typescript":"^5.3.3","@types/jest":"^29.5.14","@types/react":"^18.2.15","whatwg-fetch":"^3.6.20","@types/react-dom":"^18.2.7","identity-obj-proxy":"^3.0.0","@vitejs/plugin-react":"^4.0.0","@testing-library/react":"^16.3.0","jest-environment-jsdom":"^30.0.0","@testing-library/jest-dom":"^6.6.3"},"_npmOperationalInternal":{"tmp":"tmp/booking-sys-frontend_3.3.4_1760003415995_0.8823876707632548","host":"s3://npm-registry-packages-npm-production"}},"3.3.5":{"name":"@conorheffron/booking-sys-frontend","version":"3.3.5","license":"GPL-3.0-or-later","_id":"@conorheffron/booking-sys-frontend@3.3.5","maintainers":[{"name":"conorheffron","email":"conor.heffron@hotmail.com"}],"dist":{"shasum":"1378fea66326558cd1ab803f0f73b62f2fb586b2","tarball":"https://registry.npmjs.org/@conorheffron/booking-sys-frontend/-/booking-sys-frontend-3.3.5.tgz","fileCount":32,"integrity":"sha512-t5EKOT3WVriMr5Qe3EvS64N/b5ZG48Qg76usFxtTtfpapn/3G1g124ZA17uX2Gwg/qxSd442pQDsib9Ym5Uuww==","signatures":[{"sig":"MEYCIQCg7ikMCTO7PmtkJElCKu2teoD8xkL2dS0taU6ULSWyvwIhAKbzkvMZEXIMjHBt6y3xMK3mErS7lG//gxuLG2gnNh0D","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":299061},"gitHead":"985822d86197a0e05840d6766edbe7c8cb5dbc09","private":false,"scripts":{"dev":"vite","lint":"eslint .","test":"jest","build":"vite build","serve":"vite preview --port 5000","preview":"vite preview"},"_npmUser":{"name":"conorheffron","email":"conor.heffron@hotmail.com"},"_npmVersion":"10.8.2","description":"React + TypeScript frontend for Booking System","directories":{},"_nodeVersion":"20.19.5","dependencies":{"react":"^18.2.0","bootstrap":"^5.3.6","react-dom":"^18.2.0","react-router-dom":"^7.6.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","vite":"^6.3.5","ts-jest":"^29.4.0","typescript":"^5.3.3","@types/jest":"^29.5.14","@types/react":"^18.2.15","whatwg-fetch":"^3.6.20","@types/react-dom":"^18.2.7","identity-obj-proxy":"^3.0.0","@vitejs/plugin-react":"^4.0.0","@testing-library/react":"^16.3.0","jest-environment-jsdom":"^30.0.0","@testing-library/jest-dom":"^6.6.3"},"_npmOperationalInternal":{"tmp":"tmp/booking-sys-frontend_3.3.5_1760450666991_0.03190267655432666","host":"s3://npm-registry-packages-npm-production"}},"3.3.6":{"name":"@conorheffron/booking-sys-frontend","version":"3.3.6","license":"GPL-3.0-or-later","_id":"@conorheffron/booking-sys-frontend@3.3.6","maintainers":[{"name":"conorheffron","email":"conor.heffron@hotmail.com"}],"dist":{"shasum":"babce581ee27cd80f4cb485de6730bdaae2d53b2","tarball":"https://registry.npmjs.org/@conorheffron/booking-sys-frontend/-/booking-sys-frontend-3.3.6.tgz","fileCount":32,"integrity":"sha512-Ctqn0LNyvo53eGiWHitRe4JrEG9Rd/r6tErhgWIRD01xamKF8XjVzqW/LVCtqfAhRkfneLpnV+6ClbLR5RERCw==","signatures":[{"sig":"MEUCIAV7F9KnfDrfpfSFMI7h/TpeDz77LGxWpj0dvdzGzaC+AiEAzkEf3dqHmUPlBHNY9jbsAfuhBqKI0mX2GvUqIUEwn8c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":299058},"gitHead":"41635b780744406b6922484549623debb1a33f56","private":false,"scripts":{"dev":"vite","lint":"eslint .","test":"jest","build":"vite build","serve":"vite preview --port 5000","preview":"vite preview"},"_npmUser":{"name":"conorheffron","email":"conor.heffron@hotmail.com"},"_npmVersion":"10.9.3","description":"React + TypeScript frontend for Booking System","directories":{},"_nodeVersion":"22.20.0","dependencies":{"react":"^18.2.0","bootstrap":"^5.3.6","react-dom":"^18.2.0","react-router-dom":"^7.6.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","vite":"^6.3.5","ts-jest":"^29.4.0","typescript":"^5.3.3","@types/jest":"^29.5.14","@types/react":"^18.2.15","whatwg-fetch":"^3.6.20","@types/react-dom":"^18.2.7","identity-obj-proxy":"^3.0.0","@vitejs/plugin-react":"^4.0.0","@testing-library/react":"^16.3.0","jest-environment-jsdom":"^30.0.0","@testing-library/jest-dom":"^6.6.3"},"_npmOperationalInternal":{"tmp":"tmp/booking-sys-frontend_3.3.6_1760986367574_0.5426709554310922","host":"s3://npm-registry-packages-npm-production"}},"3.3.7":{"name":"@conorheffron/booking-sys-frontend","version":"3.3.7","license":"GPL-3.0-or-later","_id":"@conorheffron/booking-sys-frontend@3.3.7","maintainers":[{"name":"conorheffron","email":"conor.heffron@hotmail.com"}],"dist":{"shasum":"575b8dd8bfbc0995894c6403686d83a034e4a9ed","tarball":"https://registry.npmjs.org/@conorheffron/booking-sys-frontend/-/booking-sys-frontend-3.3.7.tgz","fileCount":32,"integrity":"sha512-UjL5YcjUI79ShagfNdoqiyQcMms4UzTBI/RSAWCTuqCJAhPTU/Mg0R6BatTliPjLVRjgAsF35qv2fflSh8DWyg==","signatures":[{"sig":"MEQCIH9oNyEVHw/4BVrMefJ1E5lgQm2U/jAQ8qV+i+ie0sN7AiBmn1AGxdnMedUNx5vfh2vMxSRaJUSMw/bVEpGAh7ftoA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":299040},"gitHead":"099821fc1720e7ae0f8c75661e1e99561cb53908","private":false,"scripts":{"dev":"vite","lint":"eslint .","test":"jest","build":"vite build","serve":"vite preview --port 5000","preview":"vite preview"},"_npmUser":{"name":"conorheffron","email":"conor.heffron@hotmail.com"},"_npmVersion":"10.9.3","description":"React + TypeScript frontend for Booking System","directories":{},"_nodeVersion":"22.20.0","dependencies":{"react":"19.2.0","bootstrap":"5.3.8","react-dom":"19.2.0","react-router-dom":"7.9.4"},"_hasShrinkwrap":false,"devDependencies":{"jest":"30.2.0","vite":"7.1.11","ts-jest":"29.4.5","typescript":"5.9.3","@types/jest":"30.0.0","@types/react":"19.2.2","whatwg-fetch":"3.6.20","@types/react-dom":"19.2.2","identity-obj-proxy":"3.0.0","@vitejs/plugin-react":"5.0.4","@testing-library/react":"16.3.0","jest-environment-jsdom":"30.2.0","@testing-library/jest-dom":"6.9.1"},"_npmOperationalInternal":{"tmp":"tmp/booking-sys-frontend_3.3.7_1761209890563_0.8434628465923426","host":"s3://npm-registry-packages-npm-production"}},"3.3.8":{"name":"@conorheffron/booking-sys-frontend","version":"3.3.8","license":"GPL-3.0-or-later","_id":"@conorheffron/booking-sys-frontend@3.3.8","maintainers":[{"name":"conorheffron","email":"conor.heffron@hotmail.com"}],"dist":{"shasum":"18dffa82208c2fc22f15353af864ac6c6c462233","tarball":"https://registry.npmjs.org/@conorheffron/booking-sys-frontend/-/booking-sys-frontend-3.3.8.tgz","fileCount":32,"integrity":"sha512-DhvJhqKq/5rguJL3TOCM+8O7sLKfJTs2RNM+paULqeAxnyNp4K8sMeEQbvlEp7CIqEGRvjE0Fl3nx3Q+MnxQYg==","signatures":[{"sig":"MEQCIFKZM7JSUfzUsuoXzQ7WEHce5qtj42CSwi/dGR8ARMvoAiBfAO9HpRyuOYNfKlpE5KePCScCfM637k22SRzWdIEfwg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":299040},"gitHead":"fbe286ec952a68f859cc4de6fc87db8f2b4ee4fb","private":false,"scripts":{"dev":"vite","lint":"eslint .","test":"jest","build":"vite build","serve":"vite preview --port 5000","preview":"vite preview"},"_npmUser":{"name":"conorheffron","email":"conor.heffron@hotmail.com"},"_npmVersion":"11.6.1","description":"React + TypeScript frontend for Booking System","directories":{},"_nodeVersion":"24.11.0","dependencies":{"react":"19.2.0","bootstrap":"5.3.8","react-dom":"19.2.0","react-router-dom":"7.9.4"},"_hasShrinkwrap":false,"devDependencies":{"jest":"30.2.0","vite":"7.1.11","ts-jest":"29.4.5","typescript":"5.9.3","@types/jest":"30.0.0","@types/react":"19.2.2","whatwg-fetch":"3.6.20","@types/react-dom":"19.2.2","identity-obj-proxy":"3.0.0","@vitejs/plugin-react":"5.0.4","@testing-library/react":"16.3.0","jest-environment-jsdom":"30.2.0","@testing-library/jest-dom":"6.9.1"},"_npmOperationalInternal":{"tmp":"tmp/booking-sys-frontend_3.3.8_1762186072156_0.49257730034833225","host":"s3://npm-registry-packages-npm-production"}},"3.3.9":{"name":"@conorheffron/booking-sys-frontend","version":"3.3.9","license":"GPL-3.0-or-later","_id":"@conorheffron/booking-sys-frontend@3.3.9","maintainers":[{"name":"conorheffron","email":"conor.heffron@hotmail.com"}],"dist":{"shasum":"2b6212a5b5f2632fb4c00585d9f61598f5d0d8cc","tarball":"https://registry.npmjs.org/@conorheffron/booking-sys-frontend/-/booking-sys-frontend-3.3.9.tgz","fileCount":32,"integrity":"sha512-y9w7yESMNt9BC5uiKjGK78I/yHxputviQU6GvfoK+6t9viFEgLMrzdP8VoX+SJIvH+qOkLuZfleKPBNIgiqybw==","signatures":[{"sig":"MEUCIBfAPES7bn3356qhkFKq62lid5ENLd0xktPaXJdi/RQtAiEA01un8VfIcnKGrK1OgEKQ4Q5itThnFpUWU4tqJo/XUPo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":299051},"gitHead":"cb465aa820f6ed66312ac79bac39d8c57741a9b6","private":false,"scripts":{"dev":"vite","lint":"eslint .","test":"jest","build":"vite build","serve":"vite preview --port 5000","preview":"vite preview"},"_npmUser":{"name":"conorheffron","email":"conor.heffron@hotmail.com"},"_npmVersion":"11.6.1","description":"React + TypeScript frontend for Booking System","directories":{},"_nodeVersion":"24.11.0","dependencies":{"react":"19.2.0","bootstrap":"5.3.8","react-dom":"19.2.0","react-router-dom":"7.9.4"},"_hasShrinkwrap":false,"devDependencies":{"jest":"30.2.0","vite":"7.1.11","ts-jest":"29.4.5","typescript":"5.9.3","@types/jest":"30.0.0","@types/react":"19.2.2","whatwg-fetch":"3.6.20","@types/react-dom":"19.2.2","identity-obj-proxy":"3.0.0","@vitejs/plugin-react":"5.0.4","@testing-library/react":"16.3.0","jest-environment-jsdom":"30.2.0","@testing-library/jest-dom":"6.9.1"},"_npmOperationalInternal":{"tmp":"tmp/booking-sys-frontend_3.3.9_1762213364953_0.7665844295985436","host":"s3://npm-registry-packages-npm-production"}},"3.4.1":{"name":"@conorheffron/booking-sys-frontend","version":"3.4.1","license":"GPL-3.0-or-later","_id":"@conorheffron/booking-sys-frontend@3.4.1","maintainers":[{"name":"conorheffron","email":"conor.heffron@hotmail.com"}],"dist":{"shasum":"d3f44c1ccec7fd7b6b5beac95a1a6a2ac687e71e","tarball":"https://registry.npmjs.org/@conorheffron/booking-sys-frontend/-/booking-sys-frontend-3.4.1.tgz","fileCount":32,"integrity":"sha512-+Zn0vxJLyuB3NU6T7ascKxxsKcuQCAKNNYF6ytOQyPJOEwCiqCXXn/BbUwzAG0wI2U0Snzhgle8WqKYYDQUzMg==","signatures":[{"sig":"MEUCIEANqJe7D77fvtSUcvufc5LpFJ8MKPLad1PDFoL862EmAiEA99x9Vlsz13WNO4mLFtjqcl9kbWBetmguB3pBessHYB0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":299055},"gitHead":"92ef4ba67533abfab9c4ff3c504023c882bf0a5b","private":false,"scripts":{"dev":"vite","lint":"eslint .","test":"jest","build":"vite build","serve":"vite preview --port 5000","preview":"vite preview"},"_npmUser":{"name":"conorheffron","email":"conor.heffron@hotmail.com"},"_npmVersion":"11.6.1","description":"React + TypeScript frontend for Booking System","directories":{},"_nodeVersion":"24.11.0","dependencies":{"react":"19.2.0","bootstrap":"5.3.8","react-dom":"19.2.0","react-router-dom":"7.9.4"},"_hasShrinkwrap":false,"devDependencies":{"jest":"30.2.0","vite":"7.1.11","ts-jest":"29.4.5","typescript":"5.9.3","@types/jest":"30.0.0","@types/react":"19.2.2","whatwg-fetch":"3.6.20","@types/react-dom":"19.2.2","identity-obj-proxy":"3.0.0","@vitejs/plugin-react":"5.0.4","@testing-library/react":"16.3.0","jest-environment-jsdom":"30.2.0","@testing-library/jest-dom":"6.9.1"},"_npmOperationalInternal":{"tmp":"tmp/booking-sys-frontend_3.4.1_1762630866194_0.6895407974365395","host":"s3://npm-registry-packages-npm-production"}},"3.4.2":{"name":"@conorheffron/booking-sys-frontend","version":"3.4.2","license":"GPL-3.0-or-later","_id":"@conorheffron/booking-sys-frontend@3.4.2","maintainers":[{"name":"conorheffron","email":"conor.heffron@hotmail.com"}],"dist":{"shasum":"c4eb64a1fa1c0228491d8ebb8ed30d1952b82c25","tarball":"https://registry.npmjs.org/@conorheffron/booking-sys-frontend/-/booking-sys-frontend-3.4.2.tgz","fileCount":32,"integrity":"sha512-wjL/svD5FjTCoh2L97BO6RehlWOmLpPhRqG2LT4vm+V9b4LEHWK2oPeMapsLYi8JFhvHBs6d3UAeU9BuYGOGQA==","signatures":[{"sig":"MEUCIGezojRYEuQWY+82M2WxSJteijXZrDgA3UXAd2fC1ix3AiEAmgFuQaFWefZz1pYGUxc8eJBERejw1+pXMsUgLvjgDxg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":299055},"gitHead":"4e7ed4846d9885995199a06c77abc16d1064bef3","private":false,"scripts":{"dev":"vite","lint":"eslint .","test":"jest","build":"vite build","serve":"vite preview --port 5000","preview":"vite preview"},"_npmUser":{"name":"conorheffron","email":"conor.heffron@hotmail.com"},"_npmVersion":"11.6.2","description":"React + TypeScript frontend for Booking System","directories":{},"_nodeVersion":"24.11.1","dependencies":{"react":"19.2.0","bootstrap":"5.3.8","react-dom":"19.2.0","react-router-dom":"7.9.4"},"_hasShrinkwrap":false,"devDependencies":{"jest":"30.2.0","vite":"7.1.11","ts-jest":"29.4.5","typescript":"5.9.3","@types/jest":"30.0.0","@types/react":"19.2.2","whatwg-fetch":"3.6.20","@types/react-dom":"19.2.2","identity-obj-proxy":"3.0.0","@vitejs/plugin-react":"5.0.4","@testing-library/react":"16.3.0","jest-environment-jsdom":"30.2.0","@testing-library/jest-dom":"6.9.1"},"_npmOperationalInternal":{"tmp":"tmp/booking-sys-frontend_3.4.2_1763169758038_0.23370858730550448","host":"s3://npm-registry-packages-npm-production"}},"3.4.3":{"name":"@conorheffron/booking-sys-frontend","version":"3.4.3","license":"GPL-3.0-or-later","_id":"@conorheffron/booking-sys-frontend@3.4.3","maintainers":[{"name":"conorheffron","email":"conor.heffron@hotmail.com"}],"dist":{"shasum":"00895fdf591ffdb15dbad0e078eeebc9b2f6d520","tarball":"https://registry.npmjs.org/@conorheffron/booking-sys-frontend/-/booking-sys-frontend-3.4.3.tgz","fileCount":32,"integrity":"sha512-kgNKTPkYFmFGfGCUC/f82fn1zwv7K/MkFzsFBi0071Zjpmg2Pfy91q456D/yyuuZRWy861qUSMLpnWY5exDt6Q==","signatures":[{"sig":"MEQCIB0G5FfIQEWHGGcFkNShTj1bqTJJhartcuIWMqkADuV3AiA89el7okDd+ZuX9fYT6hV4aswF4YiVCpWcJkzYl1BuvA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":299055},"gitHead":"f84233cdd0d837804987dbff2abc530490193439","private":false,"scripts":{"dev":"vite","lint":"eslint .","test":"jest","build":"vite build","serve":"vite preview --port 5000","preview":"vite preview"},"_npmUser":{"name":"conorheffron","email":"conor.heffron@hotmail.com"},"_npmVersion":"11.6.2","description":"React + TypeScript frontend for Booking System","directories":{},"_nodeVersion":"24.11.1","dependencies":{"react":"19.2.0","bootstrap":"5.3.8","react-dom":"19.2.0","react-router-dom":"7.9.4"},"_hasShrinkwrap":false,"devDependencies":{"jest":"30.2.0","vite":"7.1.11","ts-jest":"29.4.5","typescript":"5.9.3","@types/jest":"30.0.0","@types/react":"19.2.2","whatwg-fetch":"3.6.20","@types/react-dom":"19.2.2","identity-obj-proxy":"3.0.0","@vitejs/plugin-react":"5.0.4","@testing-library/react":"16.3.0","jest-environment-jsdom":"30.2.0","@testing-library/jest-dom":"6.9.1"},"_npmOperationalInternal":{"tmp":"tmp/booking-sys-frontend_3.4.3_1763695816986_0.5411648740746069","host":"s3://npm-registry-packages-npm-production"}},"3.4.4":{"name":"@conorheffron/booking-sys-frontend","version":"3.4.4","license":"GPL-3.0-or-later","_id":"@conorheffron/booking-sys-frontend@3.4.4","maintainers":[{"name":"conorheffron","email":"conor.heffron@hotmail.com"}],"dist":{"shasum":"5067550425cc4fdb7969c3baf96781f1b7c2775a","tarball":"https://registry.npmjs.org/@conorheffron/booking-sys-frontend/-/booking-sys-frontend-3.4.4.tgz","fileCount":32,"integrity":"sha512-DMFXp7aejMKSZqsw8GVHHzq5IXx/rMmYGjrdFIuLAyJMvEIR6NDLJm0JvF+Im8xlINfOLsN3dBW1j1/oas00Tg==","signatures":[{"sig":"MEQCIG2kY/0wMZkK/Y+gh8CSM8zQyjGM7Ri9EnBXl0Y51sVMAiB06MevvQA+xIv+Hg3KSKQ+a/QAyxg+fORqzVwNDMbLMA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":299055},"gitHead":"e4b7a33e7a1ccb4e2a5000cbb2b9e2a9f7cfa173","private":false,"scripts":{"dev":"vite","lint":"eslint .","test":"jest","build":"vite build","serve":"vite preview --port 5000","preview":"vite preview"},"_npmUser":{"name":"conorheffron","email":"conor.heffron@hotmail.com"},"_npmVersion":"11.6.2","description":"React + TypeScript frontend for Booking System","directories":{},"_nodeVersion":"24.11.1","dependencies":{"react":"19.2.0","bootstrap":"5.3.8","react-dom":"19.2.0","react-router-dom":"7.9.4"},"_hasShrinkwrap":false,"devDependencies":{"jest":"30.2.0","vite":"7.1.11","ts-jest":"29.4.5","typescript":"5.9.3","@types/jest":"30.0.0","@types/react":"19.2.2","whatwg-fetch":"3.6.20","@types/react-dom":"19.2.2","identity-obj-proxy":"3.0.0","@vitejs/plugin-react":"5.0.4","@testing-library/react":"16.3.0","jest-environment-jsdom":"30.2.0","@testing-library/jest-dom":"6.9.1"},"_npmOperationalInternal":{"tmp":"tmp/booking-sys-frontend_3.4.4_1764599039731_0.37734150543136113","host":"s3://npm-registry-packages-npm-production"}},"3.4.5":{"name":"@conorheffron/booking-sys-frontend","version":"3.4.5","license":"GPL-3.0-or-later","_id":"@conorheffron/booking-sys-frontend@3.4.5","maintainers":[{"name":"conorheffron","email":"conor.heffron@hotmail.com"}],"dist":{"shasum":"0534aefa0d35a80dc4077b59f423e85cee2634d5","tarball":"https://registry.npmjs.org/@conorheffron/booking-sys-frontend/-/booking-sys-frontend-3.4.5.tgz","fileCount":32,"integrity":"sha512-iZJBrBkXBBlflb3nwRc/O48KDZ9tAMuYCIvUyDh3z2v4n6ppQO0Td7Sh4l4ZhVfEgqAX7+9diqaIkTLLA9kTzg==","signatures":[{"sig":"MEUCIFyCENF8gHIcBZWHoLxOe7cbFhmKk6tBZumMDLUckK8vAiEA3GDX1j8aXh+U5T1gI8cCeA5xO+gKn0SVtkTZV72Y5wU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":299055},"gitHead":"1d81b72e22284fb178b3b3a56b8fb47c8a1348e5","private":false,"scripts":{"dev":"vite","lint":"eslint .","test":"jest","build":"vite build","serve":"vite preview --port 5000","preview":"vite preview"},"_npmUser":{"name":"conorheffron","email":"conor.heffron@hotmail.com"},"_npmVersion":"11.6.2","description":"React + TypeScript frontend for Booking System","directories":{},"_nodeVersion":"24.11.1","dependencies":{"react":"19.2.0","bootstrap":"5.3.8","react-dom":"19.2.0","react-router-dom":"7.9.4"},"_hasShrinkwrap":false,"devDependencies":{"jest":"30.2.0","vite":"7.1.11","ts-jest":"29.4.5","typescript":"5.9.3","@types/jest":"30.0.0","@types/react":"19.2.2","whatwg-fetch":"3.6.20","@types/react-dom":"19.2.2","identity-obj-proxy":"3.0.0","@vitejs/plugin-react":"5.0.4","@testing-library/react":"16.3.0","jest-environment-jsdom":"30.2.0","@testing-library/jest-dom":"6.9.1"},"_npmOperationalInternal":{"tmp":"tmp/booking-sys-frontend_3.4.5_1765049219762_0.40074251234302305","host":"s3://npm-registry-packages-npm-production"}},"3.4.6":{"name":"@conorheffron/booking-sys-frontend","version":"3.4.6","license":"GPL-3.0-or-later","_id":"@conorheffron/booking-sys-frontend@3.4.6","maintainers":[{"name":"conorheffron","email":"conor.heffron@hotmail.com"}],"dist":{"shasum":"3a3a5362a30ca84977cdfb6b042968d777ec81b7","tarball":"https://registry.npmjs.org/@conorheffron/booking-sys-frontend/-/booking-sys-frontend-3.4.6.tgz","fileCount":32,"integrity":"sha512-2YWZ2acVmRPfia78MakDT2ch2A/nrTAwY+kqrIMhZWO1/Q0/StW4lHKfcTw62E4MVlNA8YGWCniPT1Rd39wBjg==","signatures":[{"sig":"MEUCIDXAD6+WVHGZan7+Pd+q+L+96Hieyp7zWPAbGKGJKW+1AiEAzGNK0TVJbQ+lcTgpYIYa4KtQkuqecSTSPf+sr32iPiE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":299055},"gitHead":"1bfc06c876e8d1b5e987befc0c6c53a290bf02c1","private":false,"scripts":{"dev":"vite","lint":"eslint .","test":"jest","build":"vite build","serve":"vite preview --port 5000","preview":"vite preview"},"_npmUser":{"name":"conorheffron","email":"conor.heffron@hotmail.com"},"_npmVersion":"11.6.2","description":"React + TypeScript frontend for Booking System","directories":{},"_nodeVersion":"24.11.1","dependencies":{"react":"19.2.0","bootstrap":"5.3.8","react-dom":"19.2.0","react-router-dom":"7.9.4"},"_hasShrinkwrap":false,"devDependencies":{"jest":"30.2.0","vite":"7.1.11","ts-jest":"29.4.5","typescript":"5.9.3","@types/jest":"30.0.0","@types/react":"19.2.2","whatwg-fetch":"3.6.20","@types/react-dom":"19.2.2","identity-obj-proxy":"3.0.0","@vitejs/plugin-react":"5.0.4","@testing-library/react":"16.3.0","jest-environment-jsdom":"30.2.0","@testing-library/jest-dom":"6.9.1"},"_npmOperationalInternal":{"tmp":"tmp/booking-sys-frontend_3.4.6_1765957063508_0.4485155238358862","host":"s3://npm-registry-packages-npm-production"}},"3.4.7":{"name":"@conorheffron/booking-sys-frontend","version":"3.4.7","license":"GPL-3.0-or-later","_id":"@conorheffron/booking-sys-frontend@3.4.7","maintainers":[{"name":"conorheffron","email":"conor.heffron@hotmail.com"}],"dist":{"shasum":"e8c678325fd91f5649ccababa1eacd84667a6857","tarball":"https://registry.npmjs.org/@conorheffron/booking-sys-frontend/-/booking-sys-frontend-3.4.7.tgz","fileCount":32,"integrity":"sha512-0Fd2QA0f5AV17oCfK/flqaUJt1kRcWLG2q+5DiQPKfqjFKV6QVTA/y5KVQHABufZJFs5aZkTa770yxxo2cjt1g==","signatures":[{"sig":"MEQCIFRR9SjReDolef5j+DtWYa6pM/JOqWs2PRmq0tAJ8yXyAiB8fZb0W6sZwG2WLgKYUHdXcsbMIbXljncofK4ztei49g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":299055},"gitHead":"262afb28aac8f3864e0b38c06cbc9f2aa27a687e","private":false,"scripts":{"dev":"vite","lint":"eslint .","test":"jest","build":"vite build","serve":"vite preview --port 5000","preview":"vite preview"},"_npmUser":{"name":"conorheffron","email":"conor.heffron@hotmail.com"},"_npmVersion":"11.6.2","description":"React + TypeScript frontend for Booking System","directories":{},"_nodeVersion":"24.12.0","dependencies":{"react":"19.2.0","bootstrap":"5.3.8","react-dom":"19.2.0","react-router-dom":"7.9.4"},"_hasShrinkwrap":false,"devDependencies":{"jest":"30.2.0","vite":"7.1.11","ts-jest":"29.4.5","typescript":"5.9.3","@types/jest":"30.0.0","@types/react":"19.2.2","whatwg-fetch":"3.6.20","@types/react-dom":"19.2.2","identity-obj-proxy":"3.0.0","@vitejs/plugin-react":"5.0.4","@testing-library/react":"16.3.0","jest-environment-jsdom":"30.2.0","@testing-library/jest-dom":"6.9.1"},"_npmOperationalInternal":{"tmp":"tmp/booking-sys-frontend_3.4.7_1766253726636_0.7229629720629982","host":"s3://npm-registry-packages-npm-production"}},"3.4.8":{"name":"@conorheffron/booking-sys-frontend","version":"3.4.8","license":"GPL-3.0-or-later","_id":"@conorheffron/booking-sys-frontend@3.4.8","maintainers":[{"name":"conorheffron","email":"conor.heffron@hotmail.com"}],"dist":{"shasum":"3a50bd7cd5493685d90835547e227bc2a64ec540","tarball":"https://registry.npmjs.org/@conorheffron/booking-sys-frontend/-/booking-sys-frontend-3.4.8.tgz","fileCount":32,"integrity":"sha512-7PcN4cg/JBsre6FkUQGrMWYJlNyeiGdFKwiDtKAhmqN78DMp51A7PuVh33g8fPD1gszxi06nmLDAsCwkK8BSYg==","signatures":[{"sig":"MEQCIHQBwNUq7WJiguVpm3mTLV5s8Qu2AsEJ1E31OWWGXCDnAiBD1888RNxUqrULWImcfsKJhsUvthZE14NigcgYaabAyA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":299055},"gitHead":"cf036ddebadd7782cbfc1e02d6ce4368a38b1744","private":false,"scripts":{"dev":"vite","lint":"eslint .","test":"jest","build":"vite build","serve":"vite preview --port 5000","preview":"vite preview"},"_npmUser":{"name":"conorheffron","email":"conor.heffron@hotmail.com"},"_npmVersion":"11.6.2","description":"React + TypeScript frontend for Booking System","directories":{},"_nodeVersion":"24.12.0","dependencies":{"react":"19.2.0","bootstrap":"5.3.8","react-dom":"19.2.0","react-router-dom":"7.9.4"},"_hasShrinkwrap":false,"devDependencies":{"jest":"30.2.0","vite":"7.1.11","ts-jest":"29.4.5","typescript":"5.9.3","@types/jest":"30.0.0","@types/react":"19.2.2","whatwg-fetch":"3.6.20","@types/react-dom":"19.2.2","identity-obj-proxy":"3.0.0","@vitejs/plugin-react":"5.0.4","@testing-library/react":"16.3.0","jest-environment-jsdom":"30.2.0","@testing-library/jest-dom":"6.9.1"},"_npmOperationalInternal":{"tmp":"tmp/booking-sys-frontend_3.4.8_1767447393696_0.7009261988280848","host":"s3://npm-registry-packages-npm-production"}},"3.4.9":{"name":"@conorheffron/booking-sys-frontend","version":"3.4.9","license":"GPL-3.0-or-later","_id":"@conorheffron/booking-sys-frontend@3.4.9","maintainers":[{"name":"conorheffron","email":"conor.heffron@hotmail.com"}],"dist":{"shasum":"428e598575cdcb4fb95ba9c2dacc6092e4c94a91","tarball":"https://registry.npmjs.org/@conorheffron/booking-sys-frontend/-/booking-sys-frontend-3.4.9.tgz","fileCount":32,"integrity":"sha512-HUmZTEa+R0cUAJMfScb175Bm8PMfH53M0bwl+Fe21V8BjVlAuIwsl7kQnIWalcHkxMcun3ouYs3fccj2RlMARg==","signatures":[{"sig":"MEUCIBISj0P4I6gaPYFRBv18sS8emmR8AyKxXNw5DV2yPYCSAiEAi822+KbbDTTv8VHqD9QjI8Axo7LmMRrMO6pceWAgxMc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":299056},"gitHead":"b552470664a14264879c95f0f8751207006020fa","private":false,"scripts":{"dev":"vite","lint":"eslint .","test":"jest","build":"vite build","serve":"vite preview --port 5000","preview":"vite preview"},"_npmUser":{"name":"conorheffron","email":"conor.heffron@hotmail.com"},"_npmVersion":"11.6.2","description":"React + TypeScript frontend for Booking System","directories":{},"_nodeVersion":"24.12.0","dependencies":{"react":"19.2.0","bootstrap":"5.3.8","react-dom":"19.2.0","react-router-dom":"7.12.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"30.2.0","vite":"7.1.11","ts-jest":"29.4.5","typescript":"5.9.3","@types/jest":"30.0.0","@types/react":"19.2.2","whatwg-fetch":"3.6.20","@types/react-dom":"19.2.2","identity-obj-proxy":"3.0.0","@vitejs/plugin-react":"5.0.4","@testing-library/react":"16.3.0","jest-environment-jsdom":"30.2.0","@testing-library/jest-dom":"6.9.1"},"_npmOperationalInternal":{"tmp":"tmp/booking-sys-frontend_3.4.9_1768067386360_0.14998466827556411","host":"s3://npm-registry-packages-npm-production"}},"3.5.0":{"name":"@conorheffron/booking-sys-frontend","version":"3.5.0","license":"GPL-3.0-or-later","_id":"@conorheffron/booking-sys-frontend@3.5.0","maintainers":[{"name":"conorheffron","email":"conor.heffron@hotmail.com"}],"dist":{"shasum":"14fd1ac42ae6b6892e18afccfce582346d578eb6","tarball":"https://registry.npmjs.org/@conorheffron/booking-sys-frontend/-/booking-sys-frontend-3.5.0.tgz","fileCount":32,"integrity":"sha512-UFgusxIUfPxceVX4pDj+ikWb/UalJ+grAH+WBr0B8hjWOBQNh6XPJ4km/Vni8XcbR/81Ud5g6CcpIrvxM1mA4Q==","signatures":[{"sig":"MEUCIBTBQ967CYev5gN+amqSKomu6kg/jBCLQ0BMQXOoSpqIAiEAnhWoB3XUmGAlWCYr/cf+5i9URYjUTHSsnUY+Ckjwzuc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":299056},"gitHead":"df714eb75c74e9de8c42768b2171dfd88643ef9b","private":false,"scripts":{"dev":"vite","lint":"eslint .","test":"jest","build":"vite build","serve":"vite preview --port 5000","preview":"vite preview"},"_npmUser":{"name":"conorheffron","email":"conor.heffron@hotmail.com"},"_npmVersion":"11.6.2","description":"React + TypeScript frontend for Booking System","directories":{},"_nodeVersion":"24.12.0","dependencies":{"react":"19.2.0","bootstrap":"5.3.8","react-dom":"19.2.0","react-router-dom":"7.12.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"30.2.0","vite":"7.1.11","ts-jest":"29.4.5","typescript":"5.9.3","@types/jest":"30.0.0","@types/react":"19.2.2","whatwg-fetch":"3.6.20","@types/react-dom":"19.2.2","identity-obj-proxy":"3.0.0","@vitejs/plugin-react":"5.0.4","@testing-library/react":"16.3.0","jest-environment-jsdom":"30.2.0","@testing-library/jest-dom":"6.9.1"},"_npmOperationalInternal":{"tmp":"tmp/booking-sys-frontend_3.5.0_1769030305116_0.30469620107604856","host":"s3://npm-registry-packages-npm-production"}},"3.5.1":{"name":"@conorheffron/booking-sys-frontend","version":"3.5.1","license":"GPL-3.0-or-later","_id":"@conorheffron/booking-sys-frontend@3.5.1","maintainers":[{"name":"conorheffron","email":"conor.heffron@hotmail.com"}],"dist":{"shasum":"35e0c32d9d7fb44d3343156efd0b6f180f6331b9","tarball":"https://registry.npmjs.org/@conorheffron/booking-sys-frontend/-/booking-sys-frontend-3.5.1.tgz","fileCount":32,"integrity":"sha512-xomKD368TpACz4AiCm/zmY7LPIWdBNm4XGhUvAfhxE9eSoB1Ne1whVXmkDQSEcWx0KgJKP8IGXW6xIl4yjZA/w==","signatures":[{"sig":"MEUCIFFoh9FYbJFILwwOmRLmZd4/4+bgnXhT7W6MHASUq6jgAiEAgSc/snpBNk6hUJTJ3v2RLj/31tLzlDXE+n4Eg9IDny4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":299056},"gitHead":"8e7dcdfb4f5e0b15fe60950ccba4c2d2eb4c55b6","private":false,"scripts":{"dev":"vite","lint":"eslint .","test":"jest","build":"vite build","serve":"vite preview --port 5000","preview":"vite preview"},"_npmUser":{"name":"conorheffron","email":"conor.heffron@hotmail.com"},"_npmVersion":"11.6.2","description":"React + TypeScript frontend for Booking System","directories":{},"_nodeVersion":"24.13.0","dependencies":{"react":"19.2.0","bootstrap":"5.3.8","react-dom":"19.2.0","react-router-dom":"7.12.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"30.2.0","vite":"7.1.11","ts-jest":"29.4.5","typescript":"5.9.3","@types/jest":"30.0.0","@types/react":"19.2.2","whatwg-fetch":"3.6.20","@types/react-dom":"19.2.2","identity-obj-proxy":"3.0.0","@vitejs/plugin-react":"5.0.4","@testing-library/react":"16.3.0","jest-environment-jsdom":"30.2.0","@testing-library/jest-dom":"6.9.1"},"_npmOperationalInternal":{"tmp":"tmp/booking-sys-frontend_3.5.1_1769355131833_0.1346627380699723","host":"s3://npm-registry-packages-npm-production"}},"3.5.2":{"name":"@conorheffron/booking-sys-frontend","version":"3.5.2","license":"GPL-3.0-or-later","_id":"@conorheffron/booking-sys-frontend@3.5.2","maintainers":[{"name":"conorheffron","email":"conor.heffron@hotmail.com"}],"dist":{"shasum":"e3c8de303de23900a385b4965180b19a3ca5242b","tarball":"https://registry.npmjs.org/@conorheffron/booking-sys-frontend/-/booking-sys-frontend-3.5.2.tgz","fileCount":32,"integrity":"sha512-mlIXfe/EYwz6mFM1cLn/ojQ5uHdLccUsxqOILKbdEIS82lOeLsDNEZNYUi1/BLkogefDzaNoVvH9oCq/dXdbHg==","signatures":[{"sig":"MEUCIQCOe2H7KENotFunrJuaJlgDZg9zSlHsibA4c8gl7lKmrwIgSsUuUVzTL+BrjNE7D9luIU4wXY05WbO7kUdqCtebz9g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":299056},"gitHead":"715bca8f571b40fd996d76e3f448606fcb1ff134","private":false,"scripts":{"dev":"vite","lint":"eslint .","test":"jest","build":"vite build","serve":"vite preview --port 5000","preview":"vite preview"},"_npmUser":{"name":"conorheffron","email":"conor.heffron@hotmail.com"},"_npmVersion":"11.6.2","description":"React + TypeScript frontend for Booking System","directories":{},"_nodeVersion":"24.13.0","dependencies":{"react":"19.2.0","bootstrap":"5.3.8","react-dom":"19.2.0","react-router-dom":"7.12.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"30.2.0","vite":"7.1.11","ts-jest":"29.4.5","typescript":"5.9.3","@types/jest":"30.0.0","@types/react":"19.2.2","whatwg-fetch":"3.6.20","@types/react-dom":"19.2.2","identity-obj-proxy":"3.0.0","@vitejs/plugin-react":"5.0.4","@testing-library/react":"16.3.0","jest-environment-jsdom":"30.2.0","@testing-library/jest-dom":"6.9.1"},"_npmOperationalInternal":{"tmp":"tmp/booking-sys-frontend_3.5.2_1769891484999_0.2990194016372394","host":"s3://npm-registry-packages-npm-production"}},"3.5.3":{"name":"@conorheffron/booking-sys-frontend","version":"3.5.3","license":"GPL-3.0-or-later","_id":"@conorheffron/booking-sys-frontend@3.5.3","maintainers":[{"name":"conorheffron","email":"conor.heffron@hotmail.com"}],"dist":{"shasum":"14514cefc65a7732a4898922e40174101812c845","tarball":"https://registry.npmjs.org/@conorheffron/booking-sys-frontend/-/booking-sys-frontend-3.5.3.tgz","fileCount":32,"integrity":"sha512-NTulAKoZRBAHgxXFU/fZ8vNVd7lhRoYFBINmUQhplOU5/Oehu4K2Z5e5jWKw8PdJrRMdCNWTSzAVbzplw+9BeQ==","signatures":[{"sig":"MEUCICgwFa2tNf6qrvqYiRT5NUGijysy05O0CxHXcfH8bJImAiEAti42kFCd0JtdLyH6X+KH62GbvzKNnBMHmdUPTzhtuCM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":300468},"gitHead":"a3679346f8c47b2b00e3e3cd7e5cfee07e5e1cff","private":false,"scripts":{"dev":"vite","lint":"eslint .","test":"jest","build":"vite build","serve":"vite preview --port 5000","preview":"vite preview"},"_npmUser":{"name":"conorheffron","email":"conor.heffron@hotmail.com"},"_npmVersion":"11.6.2","description":"React + TypeScript frontend for Booking System","directories":{},"_nodeVersion":"24.13.0","dependencies":{"react":"19.2.0","bootstrap":"5.3.8","react-dom":"19.2.0","react-router-dom":"7.12.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"30.2.0","vite":"7.1.11","ts-jest":"29.4.5","typescript":"5.9.3","@types/jest":"30.0.0","@types/react":"19.2.2","whatwg-fetch":"3.6.20","@types/react-dom":"19.2.2","identity-obj-proxy":"3.0.0","@vitejs/plugin-react":"5.0.4","@testing-library/react":"16.3.0","jest-environment-jsdom":"30.2.0","@testing-library/jest-dom":"6.9.1"},"_npmOperationalInternal":{"tmp":"tmp/booking-sys-frontend_3.5.3_1771693870395_0.863715821672127","host":"s3://npm-registry-packages-npm-production"}},"3.5.4":{"name":"@conorheffron/booking-sys-frontend","version":"3.5.4","license":"GPL-3.0-or-later","_id":"@conorheffron/booking-sys-frontend@3.5.4","maintainers":[{"name":"conorheffron","email":"conor.heffron@hotmail.com"}],"dist":{"shasum":"5f8df02da104d179404d53bcf7152d78a8e06af9","tarball":"https://registry.npmjs.org/@conorheffron/booking-sys-frontend/-/booking-sys-frontend-3.5.4.tgz","fileCount":32,"integrity":"sha512-FxlJH2jxWh+wRwa2SuURLMA49PHzgP0SF089iqFQCHhnSYAfGTq9048w4XVPpwXJ01+7KcOvzQFMEMIm1Bqc9A==","signatures":[{"sig":"MEUCIBH9AdDpe9fGqRGbrNekhq5w3BB1Y1Q4hIGd27PvY+KoAiEAkVqb0RIFPWoK8dqDIVPh81UVhrqnKdp8iAbePjMfjZk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":300468},"gitHead":"9899924d467c468024eb065943f4edc83252e40b","private":false,"scripts":{"dev":"vite","lint":"eslint .","test":"jest","build":"vite build","serve":"vite preview --port 5000","preview":"vite preview"},"_npmUser":{"name":"conorheffron","email":"conor.heffron@hotmail.com"},"_npmVersion":"11.8.0","description":"React + TypeScript frontend for Booking System","directories":{},"_nodeVersion":"24.13.1","dependencies":{"react":"19.2.0","bootstrap":"5.3.8","react-dom":"19.2.0","react-router-dom":"7.12.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"30.2.0","vite":"7.1.11","ts-jest":"29.4.5","typescript":"5.9.3","@types/jest":"30.0.0","@types/react":"19.2.2","whatwg-fetch":"3.6.20","@types/react-dom":"19.2.2","identity-obj-proxy":"3.0.0","@vitejs/plugin-react":"5.0.4","@testing-library/react":"16.3.0","jest-environment-jsdom":"30.2.0","@testing-library/jest-dom":"6.9.1"},"_npmOperationalInternal":{"tmp":"tmp/booking-sys-frontend_3.5.4_1772317005771_0.6065274323150578","host":"s3://npm-registry-packages-npm-production"}},"3.5.5":{"name":"@conorheffron/booking-sys-frontend","version":"3.5.5","license":"GPL-3.0-or-later","_id":"@conorheffron/booking-sys-frontend@3.5.5","maintainers":[{"name":"conorheffron","email":"conor.heffron@hotmail.com"}],"dist":{"shasum":"dedcd79fd2973d21e96ff81f1bbd5eb87b7a9521","tarball":"https://registry.npmjs.org/@conorheffron/booking-sys-frontend/-/booking-sys-frontend-3.5.5.tgz","fileCount":32,"integrity":"sha512-rhBgAp3QteKXoOHkDMPBGF0Fu+MPkYFPr2DwdNGb+YgUwxTwQ/7nKpGWV/DTfs3FxiZK3c1Qu5dExdFYadEMEg==","signatures":[{"sig":"MEUCIQDYL+WfvqUDvozVAswJg4pjmst00eBsKBog/YLejowAUwIgTQqBm/jONOrd28U6ClVYMggDtTSxDSvKLLIj81aFszU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":300380},"gitHead":"8893c1f5e58ff7cf2a8752f8757cdb5bc05fa0c5","private":false,"scripts":{"dev":"vite","lint":"eslint .","test":"jest","build":"vite build","serve":"vite preview --port 5000","preview":"vite preview"},"_npmUser":{"name":"conorheffron","email":"conor.heffron@hotmail.com"},"_npmVersion":"11.9.0","description":"React + TypeScript frontend for Booking System","directories":{},"_nodeVersion":"24.14.0","dependencies":{"react":"19.2.0","bootstrap":"5.3.8","react-dom":"19.2.0","react-router-dom":"7.12.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"30.2.0","vite":"7.1.11","ts-jest":"29.4.5","typescript":"5.9.3","@types/jest":"30.0.0","@types/react":"19.2.2","whatwg-fetch":"3.6.20","@types/react-dom":"19.2.2","identity-obj-proxy":"3.0.0","@vitejs/plugin-react":"5.0.4","@testing-library/react":"16.3.0","jest-environment-jsdom":"30.2.0","@testing-library/jest-dom":"6.9.1"},"_npmOperationalInternal":{"tmp":"tmp/booking-sys-frontend_3.5.5_1772925808762_0.9353816615601922","host":"s3://npm-registry-packages-npm-production"}},"3.5.6":{"name":"@conorheffron/booking-sys-frontend","version":"3.5.6","license":"GPL-3.0-or-later","_id":"@conorheffron/booking-sys-frontend@3.5.6","maintainers":[{"name":"conorheffron","email":"conor.heffron@hotmail.com"}],"dist":{"shasum":"2e7e56ae7543e1f9d1c24622cb9eaf164566fd4e","tarball":"https://registry.npmjs.org/@conorheffron/booking-sys-frontend/-/booking-sys-frontend-3.5.6.tgz","fileCount":32,"integrity":"sha512-b3KdyPNPyI3T6Q8OyxkiLIn6RT1TMi9HeTPcmQOzVBUYnvQdLqXm/FIHlAhjQW21J5KN/8RYr95mUCKUnDdO9A==","signatures":[{"sig":"MEUCIQCV9tH+DGniTOjr/N10yMpFWKERuT6h4Qb/AhcyZbUG0AIgY3O6FqGQZ13mgIZz09vJ54t/2tWi+NNvt7OzsYgGsxc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":300380},"gitHead":"ba87b201f086ccb7396411c0a67721d6de756283","private":false,"scripts":{"dev":"vite","lint":"eslint .","test":"jest","build":"vite build","serve":"vite preview --port 5000","preview":"vite preview"},"_npmUser":{"name":"conorheffron","email":"conor.heffron@hotmail.com"},"_npmVersion":"11.9.0","description":"React + TypeScript frontend for Booking System","directories":{},"_nodeVersion":"24.14.0","dependencies":{"react":"19.2.0","bootstrap":"5.3.8","react-dom":"19.2.0","react-router-dom":"7.12.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"30.2.0","vite":"7.1.11","ts-jest":"29.4.5","typescript":"5.9.3","@types/jest":"30.0.0","@types/react":"19.2.2","whatwg-fetch":"3.6.20","@types/react-dom":"19.2.2","identity-obj-proxy":"3.0.0","@vitejs/plugin-react":"5.0.4","@testing-library/react":"16.3.0","jest-environment-jsdom":"30.2.0","@testing-library/jest-dom":"6.9.1"},"_npmOperationalInternal":{"tmp":"tmp/booking-sys-frontend_3.5.6_1774735216890_0.9749467685384918","host":"s3://npm-registry-packages-npm-production"}},"3.5.7":{"name":"@conorheffron/booking-sys-frontend","version":"3.5.7","license":"GPL-3.0-or-later","_id":"@conorheffron/booking-sys-frontend@3.5.7","maintainers":[{"name":"conorheffron","email":"conor.heffron@hotmail.com"}],"dist":{"shasum":"59797f62afc935eb2ea82758ae51113ab812538b","tarball":"https://registry.npmjs.org/@conorheffron/booking-sys-frontend/-/booking-sys-frontend-3.5.7.tgz","fileCount":32,"integrity":"sha512-BPPKr1tcYoe3l3x1xaxkCyU37Q+UpbNbvi0zwGYT9Zuq7XdnUqRS+7E7wx3u9FsSVYIdbJkWG1mwFErq2vfsAA==","signatures":[{"sig":"MEYCIQC7iQAgsI92vxE3Qr0vZCdZx699fm7G8XFH3S8iGf93UAIhAMJFuG4qcvVwB8ublj0NcOGHPNRFJokzeScKwcK8YNnk","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":300380},"gitHead":"ab2a7ba93c2d9218130919e6f4f9be22b2fd6d9f","private":false,"scripts":{"dev":"vite","lint":"eslint .","test":"jest","build":"vite build","serve":"vite preview --port 5000","preview":"vite preview"},"_npmUser":{"name":"conorheffron","email":"conor.heffron@hotmail.com"},"_npmVersion":"11.11.0","description":"React + TypeScript frontend for Booking System","directories":{},"_nodeVersion":"24.14.1","dependencies":{"react":"19.2.0","bootstrap":"5.3.8","react-dom":"19.2.0","react-router-dom":"7.12.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"30.2.0","vite":"7.1.11","ts-jest":"29.4.5","typescript":"5.9.3","@types/jest":"30.0.0","@types/react":"19.2.2","whatwg-fetch":"3.6.20","@types/react-dom":"19.2.2","identity-obj-proxy":"3.0.0","@vitejs/plugin-react":"5.0.4","@testing-library/react":"16.3.0","jest-environment-jsdom":"30.2.0","@testing-library/jest-dom":"6.9.1"},"_npmOperationalInternal":{"tmp":"tmp/booking-sys-frontend_3.5.7_1775320359081_0.45550126348812214","host":"s3://npm-registry-packages-npm-production"}},"3.5.8":{"name":"@conorheffron/booking-sys-frontend","version":"3.5.8","license":"GPL-3.0-or-later","_id":"@conorheffron/booking-sys-frontend@3.5.8","maintainers":[{"name":"conorheffron","email":"conor.heffron@hotmail.com"}],"dist":{"shasum":"25ef5742a5d8ece751713fb3ec4adae2e7519b4f","tarball":"https://registry.npmjs.org/@conorheffron/booking-sys-frontend/-/booking-sys-frontend-3.5.8.tgz","fileCount":32,"integrity":"sha512-GuByHOv2PbMcpbyR/bEohYMFZwyLDPgy8Bl4rc6zBsM7vhrjVETj0dGzvb8yjKCPaSWOX5MvIm9AEgb6I+E36A==","signatures":[{"sig":"MEUCIQChgSF8TkT6gop+va/Cuh2Sl+8e6SjtJUfaaHQAgCiiSQIgEKL4N2GRIWj8XkfCmohx8TCQh+I5ZGrNX9igasRbNoc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":307176},"engines":{"node":"^20.19.0 || >=22.12.0"},"gitHead":"852cb8bb13df518033f4e853c055f2930cea42be","private":false,"scripts":{"dev":"vite","lint":"eslint .","test":"jest","build":"vite build","serve":"vite preview --port 5000","preview":"vite preview"},"_npmUser":{"name":"conorheffron","email":"conor.heffron@hotmail.com"},"_npmVersion":"11.11.0","description":"React + TypeScript frontend for Booking System","directories":{},"_nodeVersion":"24.14.1","dependencies":{"react":"19.2.0","bootstrap":"5.3.8","react-dom":"19.2.0","react-router-dom":"7.12.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"30.2.0","vite":"7.3.2","ts-jest":"29.4.5","typescript":"5.9.3","@types/jest":"30.0.0","@types/react":"19.2.2","whatwg-fetch":"3.6.20","@types/react-dom":"19.2.2","identity-obj-proxy":"3.0.0","@vitejs/plugin-react":"5.0.4","@testing-library/react":"16.3.0","jest-environment-jsdom":"30.2.0","@testing-library/jest-dom":"6.9.1"},"_npmOperationalInternal":{"tmp":"tmp/booking-sys-frontend_3.5.8_1778346990773_0.7700819702854624","host":"s3://npm-registry-packages-npm-production"}},"3.5.9":{"name":"@conorheffron/booking-sys-frontend","version":"3.5.9","license":"GPL-3.0-or-later","_id":"@conorheffron/booking-sys-frontend@3.5.9","maintainers":[{"name":"conorheffron","email":"conor.heffron@hotmail.com"}],"dist":{"shasum":"9d6514862437c9f1486ef44c5b839f92af027a88","tarball":"https://registry.npmjs.org/@conorheffron/booking-sys-frontend/-/booking-sys-frontend-3.5.9.tgz","fileCount":32,"integrity":"sha512-OkaaGhNo44ht0gmpOm076zN1NX9KssEMBJyfiIg2q+z5IhtoAdAqllvYoFJ556L386WjG3biKYEYBXcuvBwfWg==","signatures":[{"sig":"MEUCIQCrWVkeVTt10MHvoQQdZtnIdquR1+iX6+4AWPPUeLOo5QIgSxQq9tM6oWiNDkBSYcGOz01m7z8CUbhgaXLNBL4ObwY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":307176},"engines":{"node":"^20.19.0 || >=22.12.0"},"gitHead":"1bcbd1b6d13929f83fd4733ca4febd1573230ab1","private":false,"scripts":{"dev":"vite","lint":"eslint .","test":"jest","build":"vite build","serve":"vite preview --port 5000","preview":"vite preview"},"_npmUser":{"name":"conorheffron","email":"conor.heffron@hotmail.com"},"_npmVersion":"11.12.1","description":"React + TypeScript frontend for Booking System","directories":{},"_nodeVersion":"24.15.0","dependencies":{"react":"19.2.0","bootstrap":"5.3.8","react-dom":"19.2.0","react-router-dom":"7.12.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"30.2.0","vite":"7.3.2","ts-jest":"29.4.5","typescript":"5.9.3","@types/jest":"30.0.0","@types/react":"19.2.2","whatwg-fetch":"3.6.20","@types/react-dom":"19.2.2","identity-obj-proxy":"3.0.0","@vitejs/plugin-react":"5.0.4","@testing-library/react":"16.3.0","jest-environment-jsdom":"30.2.0","@testing-library/jest-dom":"6.9.1"},"_npmOperationalInternal":{"tmp":"tmp/booking-sys-frontend_3.5.9_1779634102101_0.6057647746841515","host":"s3://npm-registry-packages-npm-production"}},"3.6.0":{"name":"@conorheffron/booking-sys-frontend","version":"3.6.0","license":"GPL-3.0-or-later","_id":"@conorheffron/booking-sys-frontend@3.6.0","maintainers":[{"name":"conorheffron","email":"conor.heffron@hotmail.com"}],"dist":{"shasum":"b98911326fa3df7ab4863d1f0c199634b1a6a01d","tarball":"https://registry.npmjs.org/@conorheffron/booking-sys-frontend/-/booking-sys-frontend-3.6.0.tgz","fileCount":32,"integrity":"sha512-n0wHZLAQBr7TAPl5bMAB/mERyf2RciEmFbsgCSakt92Tp4/HbFTa4mZhqNp4/trhLNmkXVR6NSa88nm1zmaVxA==","signatures":[{"sig":"MEUCIQC7tfbJP/NNq5GHoDe5Md2O3Q0cCsOBnoMm0JSFv+RTlQIgNjzRkV5QweL4gjN+dSEuNgXPVPwws5q+GoJ+pkRduHw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":312446},"engines":{"node":"^20.19.0 || >=22.12.0"},"gitHead":"dd2a01eca1a1bc0828ff3c4670ff4915259cad15","private":false,"scripts":{"dev":"vite","lint":"eslint .","test":"jest","build":"vite build","serve":"vite preview --port 5000","preview":"vite preview"},"_npmUser":{"name":"conorheffron","email":"conor.heffron@hotmail.com"},"_npmVersion":"11.13.0","description":"React + TypeScript frontend for Booking System","directories":{},"_nodeVersion":"24.16.0","dependencies":{"react":"19.2.0","bootstrap":"5.3.8","react-dom":"19.2.0","react-router-dom":"7.12.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"30.2.0","vite":"7.3.2","ts-jest":"29.4.5","typescript":"5.9.3","@types/jest":"30.0.0","@types/react":"19.2.2","whatwg-fetch":"3.6.20","@types/react-dom":"19.2.2","identity-obj-proxy":"3.0.0","@vitejs/plugin-react":"5.0.4","@testing-library/react":"16.3.0","jest-environment-jsdom":"30.2.0","@testing-library/jest-dom":"6.9.1"},"_npmOperationalInternal":{"tmp":"tmp/booking-sys-frontend_3.6.0_1780180492781_0.600379626142526","host":"s3://npm-registry-packages-npm-production"}},"3.6.1":{"name":"@conorheffron/booking-sys-frontend","version":"3.6.1","license":"GPL-3.0-or-later","_id":"@conorheffron/booking-sys-frontend@3.6.1","maintainers":[{"name":"conorheffron","email":"conor.heffron@hotmail.com"}],"dist":{"shasum":"9108650219ab42f2f6e526ad12f87bfdb1ed707b","tarball":"https://registry.npmjs.org/@conorheffron/booking-sys-frontend/-/booking-sys-frontend-3.6.1.tgz","fileCount":32,"integrity":"sha512-PgJuF7epxGU5ya0jf6WuaPmCSr7Fa9aESNju+G0F8y7tJXueM1602rouPZjJSS3dmk8IJUep03Tys10bwtjHJg==","signatures":[{"sig":"MEUCIQDMmMM9yT7/L39492OjqPBMfjL8/hwbi8Gi5j5dgjx6bgIgH9kVC4u5pdiv3j2h+LcVPWxW3tVdOgI+47+oou++LyY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":312446},"engines":{"node":"^20.19.0 || >=22.12.0"},"gitHead":"362e4b3b7ead1a43508ba3f6336cf361b84b7f41","private":false,"scripts":{"dev":"vite","lint":"eslint .","test":"jest","build":"vite build","serve":"vite preview --port 5000","preview":"vite preview"},"_npmUser":{"name":"conorheffron","email":"conor.heffron@hotmail.com"},"_npmVersion":"11.13.0","description":"React + TypeScript frontend for Booking System","directories":{},"_nodeVersion":"24.16.0","dependencies":{"react":"19.2.0","bootstrap":"5.3.8","react-dom":"19.2.0","react-router-dom":"7.12.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"30.2.0","vite":"7.3.2","ts-jest":"29.4.5","typescript":"5.9.3","@types/jest":"30.0.0","@types/react":"19.2.2","whatwg-fetch":"3.6.20","@types/react-dom":"19.2.2","identity-obj-proxy":"3.0.0","@vitejs/plugin-react":"5.0.4","@testing-library/react":"16.3.0","jest-environment-jsdom":"30.2.0","@testing-library/jest-dom":"6.9.1"},"_npmOperationalInternal":{"tmp":"tmp/booking-sys-frontend_3.6.1_1780181359879_0.7983015900985233","host":"s3://npm-registry-packages-npm-production"}},"3.6.2":{"name":"@conorheffron/booking-sys-frontend","version":"3.6.2","license":"GPL-3.0-or-later","_id":"@conorheffron/booking-sys-frontend@3.6.2","maintainers":[{"name":"conorheffron","email":"conor.heffron@hotmail.com"}],"dist":{"shasum":"e71a8554b98ededc98dc4a303518766e07ef2fc9","tarball":"https://registry.npmjs.org/@conorheffron/booking-sys-frontend/-/booking-sys-frontend-3.6.2.tgz","fileCount":39,"integrity":"sha512-1bTl3cUyh9GYjJXvz4EXrvMOqzw45ptXRYbxVlu8gIPYEBNwyq25qDP6UE8GqJI7v+fWTOaM1yReiX9RPcpeKA==","signatures":[{"sig":"MEQCIH/XAfv6O1aP0oxYK2vxk5txJnAARR/Eo82L3p5gCGM6AiAXgsVso3Cf2at/wDQ/CpCV9TUiKfAA/c5TNwHh3jVDKQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":338870},"engines":{"node":"^20.19.0 || >=22.12.0"},"gitHead":"62ef708b840b0685ac335554015fb61c324b9c49","private":false,"scripts":{"dev":"vite","lint":"eslint .","test":"jest","build":"vite build","serve":"vite preview --port 5000","preview":"vite preview"},"_npmUser":{"name":"conorheffron","email":"conor.heffron@hotmail.com"},"_npmVersion":"11.13.0","description":"React + TypeScript frontend for Booking System","directories":{},"_nodeVersion":"24.16.0","dependencies":{"react":"19.2.0","bootstrap":"5.3.8","react-dom":"19.2.0","react-router-dom":"7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"30.2.0","vite":"7.3.2","ts-jest":"29.4.5","typescript":"5.9.3","@types/jest":"30.0.0","@types/react":"19.2.2","whatwg-fetch":"3.6.20","@types/react-dom":"19.2.2","identity-obj-proxy":"3.0.0","@vitejs/plugin-react":"5.0.4","@testing-library/react":"16.3.0","jest-environment-jsdom":"30.2.0","@testing-library/jest-dom":"6.9.1"},"_npmOperationalInternal":{"tmp":"tmp/booking-sys-frontend_3.6.2_1781195940889_0.5190652288317117","host":"s3://npm-registry-packages-npm-production"}},"3.6.3":{"name":"@conorheffron/booking-sys-frontend","version":"3.6.3","license":"GPL-3.0-or-later","_id":"@conorheffron/booking-sys-frontend@3.6.3","maintainers":[{"name":"conorheffron","email":"conor.heffron@hotmail.com"}],"dist":{"shasum":"b876154501fe2a95567d5dd1a45d823b7c84e73d","tarball":"https://registry.npmjs.org/@conorheffron/booking-sys-frontend/-/booking-sys-frontend-3.6.3.tgz","fileCount":39,"integrity":"sha512-cpOEbp5ityjxTL9AFmsCPs2KSvqDXwA7aALboun6ISaodRkFmVtln6xh0SWP64D4Wsxo7W8AO4G9X1WUreMRxA==","signatures":[{"sig":"MEQCIB5liKNLWsUIIe6XDG0EcbierG+diAcdpZx7TNj4GmnrAiBi8BDIiS2HG9flq/V+yhbJTwLAb38cY9uY9CrPTkuDIw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":338871},"engines":{"node":"^20.19.0 || >=22.12.0"},"gitHead":"0aabf3d72bc7b3187767b4795f5b3b96bbf88599","private":false,"scripts":{"dev":"vite","lint":"eslint .","test":"jest","build":"vite build","serve":"vite preview --port 5000","preview":"vite preview"},"_npmUser":{"name":"conorheffron","email":"conor.heffron@hotmail.com"},"_npmVersion":"11.13.0","description":"React + TypeScript frontend for Booking System","directories":{},"_nodeVersion":"24.16.0","dependencies":{"react":"19.2.0","bootstrap":"5.3.8","react-dom":"19.2.0","react-router-dom":"7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"30.2.0","vite":"8.0.16","ts-jest":"29.4.5","typescript":"5.9.3","@types/jest":"30.0.0","@types/react":"19.2.2","whatwg-fetch":"3.6.20","@types/react-dom":"19.2.2","identity-obj-proxy":"3.0.0","@vitejs/plugin-react":"5.2.0","@testing-library/react":"16.3.0","jest-environment-jsdom":"30.2.0","@testing-library/jest-dom":"6.9.1"},"_npmOperationalInternal":{"tmp":"tmp/booking-sys-frontend_3.6.3_1782218524425_0.27787945324299135","host":"s3://npm-registry-packages-npm-production"}},"3.6.4":{"name":"@conorheffron/booking-sys-frontend","version":"3.6.4","license":"GPL-3.0-or-later","_id":"@conorheffron/booking-sys-frontend@3.6.4","maintainers":[{"name":"conorheffron","email":"conor.heffron@hotmail.com"}],"dist":{"shasum":"c68242505c5aab7032eb81f544f73b1304454076","tarball":"https://registry.npmjs.org/@conorheffron/booking-sys-frontend/-/booking-sys-frontend-3.6.4.tgz","fileCount":39,"integrity":"sha512-zbDudsL3zemWT6xToQNQ/uV8CJ/t4V0yW8DvHMEFgsw69a5ZhBBo9rQ6ggJHctc7XIZzavC7qbxMZTzuTHARGg==","signatures":[{"sig":"MEUCIQCF5LOFkROa91sXfbCVyL+j2sTvMhJKfU5CWYKf6YZ5+AIgPGNzTZZ3EdBXkorcOWU4GzFLEMdxvbhT2yMdslL0ueY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":338871},"engines":{"node":"^20.19.0 || >=22.12.0"},"gitHead":"f90d256289ba9e301c49f15fd3871d8353d8ab8f","private":false,"scripts":{"dev":"vite","lint":"eslint .","test":"jest","build":"vite build","serve":"vite preview --port 5000","preview":"vite preview"},"_npmUser":{"name":"conorheffron","email":"conor.heffron@hotmail.com"},"_npmVersion":"11.13.0","description":"React + TypeScript frontend for Booking System","directories":{},"_nodeVersion":"24.16.0","dependencies":{"react":"19.2.0","bootstrap":"5.3.8","react-dom":"19.2.0","react-router-dom":"7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"30.2.0","vite":"8.0.16","ts-jest":"29.4.5","typescript":"5.9.3","@types/jest":"30.0.0","@types/react":"19.2.2","whatwg-fetch":"3.6.20","@types/react-dom":"19.2.2","identity-obj-proxy":"3.0.0","@vitejs/plugin-react":"5.2.0","@testing-library/react":"16.3.0","jest-environment-jsdom":"30.2.0","@testing-library/jest-dom":"6.9.1"},"_npmOperationalInternal":{"tmp":"tmp/booking-sys-frontend_3.6.4_1782247437989_0.03808872735921076","host":"s3://npm-registry-packages-npm-production"}},"3.6.5":{"name":"@conorheffron/booking-sys-frontend","version":"3.6.5","license":"GPL-3.0-or-later","_id":"@conorheffron/booking-sys-frontend@3.6.5","maintainers":[{"name":"conorheffron","email":"conor.heffron@hotmail.com"}],"dist":{"shasum":"9549522bb42ec12518d5ccdb2c2545c0673c2f77","tarball":"https://registry.npmjs.org/@conorheffron/booking-sys-frontend/-/booking-sys-frontend-3.6.5.tgz","fileCount":39,"integrity":"sha512-PF/muRFxs5NP7dY8Dl2MXicoRkNtzf6FAjjdMPYtHaIZrOSCcc6YbksFntqBBdtwVBtZbOzkUCWZrJBaFl9/XA==","signatures":[{"sig":"MEUCIQCVo/KhXs0QfhTeXC82iR8d8pHGBuky3AfLpIgUqOPTEQIgAmyxZc1My/1Os/whDwIAhkI9OZRKkuu57i33C2Cv6Ys=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":338871},"engines":{"node":"^20.19.0 || >=22.12.0"},"gitHead":"4362e375797883f9b715d981154bb14efd62d6e2","private":false,"scripts":{"dev":"vite","lint":"eslint .","test":"jest","build":"vite build","serve":"vite preview --port 5000","preview":"vite preview"},"_npmUser":{"name":"conorheffron","email":"conor.heffron@hotmail.com"},"_npmVersion":"11.16.0","description":"React + TypeScript frontend for Booking System","directories":{},"_nodeVersion":"24.18.0","dependencies":{"react":"19.2.0","bootstrap":"5.3.8","react-dom":"19.2.0","react-router-dom":"7.16.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"30.2.0","vite":"8.0.16","ts-jest":"29.4.5","typescript":"5.9.3","@types/jest":"30.0.0","@types/react":"19.2.2","whatwg-fetch":"3.6.20","@types/react-dom":"19.2.2","identity-obj-proxy":"3.0.0","@vitejs/plugin-react":"5.2.0","@testing-library/react":"16.3.0","jest-environment-jsdom":"30.2.0","@testing-library/jest-dom":"6.9.1"},"_npmOperationalInternal":{"tmp":"tmp/booking-sys-frontend_3.6.5_1784628745383_0.9628366991768342","host":"s3://npm-registry-packages-npm-production"}},"3.6.6":{"name":"@conorheffron/booking-sys-frontend","version":"3.6.6","private":false,"license":"GPL-3.0-or-later","description":"React + TypeScript frontend for Booking System","engines":{"node":"^20.19.0 || >=22.12.0"},"scripts":{"dev":"vite","build":"vite build","preview":"vite preview","lint":"eslint .","test":"jest","serve":"vite preview --port 5000"},"dependencies":{"bootstrap":"5.3.8","react":"19.2.0","react-dom":"19.2.0","react-router-dom":"7.18.2"},"devDependencies":{"@testing-library/jest-dom":"6.9.1","@testing-library/react":"16.3.0","@types/jest":"30.0.0","@types/react":"19.2.2","@types/react-dom":"19.2.2","@vitejs/plugin-react":"5.2.0","identity-obj-proxy":"3.0.0","jest":"30.2.0","jest-environment-jsdom":"30.2.0","ts-jest":"29.4.5","typescript":"5.9.3","vite":"8.0.16","whatwg-fetch":"3.6.20"},"gitHead":"b225b0ea584df93d5a147f54e0a9039a3a88c6e8","_id":"@conorheffron/booking-sys-frontend@3.6.6","_nodeVersion":"24.18.0","_npmVersion":"11.16.0","dist":{"integrity":"sha512-AdwFlGUYftLnhJGiNBpvazGXIWKPzAsD/tcRKmr1y8JFtUQhSR2drwUHKevPV4VUuHMNzDuFGwpHkHaeT5oL8Q==","shasum":"ae5903a6b532bce3f265fb15289c055267a9b9c4","tarball":"https://registry.npmjs.org/@conorheffron/booking-sys-frontend/-/booking-sys-frontend-3.6.6.tgz","fileCount":39,"unpackedSize":341157,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIC+hJxwZQtPx1crol90zud7t9aBCF6+MGAGd41rWV3CVAiEAjdz9amRw14T0EQW3l4ttbS1k+ao2qV2PALsMA71ZjXM="}]},"_npmUser":{"name":"conorheffron","email":"conor.heffron@hotmail.com"},"directories":{},"maintainers":[{"name":"conorheffron","email":"conor.heffron@hotmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/booking-sys-frontend_3.6.6_1786484777130_0.9193903167504462"},"_hasShrinkwrap":false}},"time":{"created":"2025-07-04T06:56:32.611Z","modified":"2026-08-11T21:46:17.472Z","3.1.3":"2025-07-04T06:56:32.930Z","3.1.4":"2025-07-04T07:12:31.868Z","3.1.5":"2025-07-04T07:24:01.055Z","3.1.6":"2025-07-05T02:46:03.041Z","3.1.7":"2025-07-05T08:15:38.542Z","3.1.8":"2025-07-06T12:03:21.886Z","3.1.9":"2025-07-09T23:03:10.183Z","3.2.1":"2025-07-16T23:44:23.083Z","3.2.2":"2025-07-23T23:44:26.960Z","3.2.3":"2025-08-12T21:03:44.366Z","3.2.4":"2025-08-19T21:47:25.944Z","3.2.5":"2025-08-27T03:59:30.843Z","3.2.6":"2025-09-03T02:18:10.393Z","3.2.7":"2025-09-15T15:40:43.653Z","3.2.8":"2025-09-15T16:51:58.382Z","3.2.9":"2025-09-19T16:14:05.088Z","3.3.1":"2025-09-27T02:53:35.896Z","3.3.2":"2025-09-30T16:37:08.553Z","3.3.3":"2025-10-06T10:16:17.326Z","3.3.4":"2025-10-09T09:50:16.254Z","3.3.5":"2025-10-14T14:04:27.226Z","3.3.6":"2025-10-20T18:52:47.834Z","3.3.7":"2025-10-23T08:58:10.774Z","3.3.8":"2025-11-03T16:07:52.383Z","3.3.9":"2025-11-03T23:42:45.217Z","3.4.1":"2025-11-08T19:41:06.416Z","3.4.2":"2025-11-15T01:22:38.233Z","3.4.3":"2025-11-21T03:30:17.259Z","3.4.4":"2025-12-01T14:23:59.980Z","3.4.5":"2025-12-06T19:26:59.933Z","3.4.6":"2025-12-17T07:37:43.674Z","3.4.7":"2025-12-20T18:02:06.832Z","3.4.8":"2026-01-03T13:36:33.895Z","3.4.9":"2026-01-10T17:49:46.505Z","3.5.0":"2026-01-21T21:18:25.257Z","3.5.1":"2026-01-25T15:32:12.044Z","3.5.2":"2026-01-31T20:31:25.213Z","3.5.3":"2026-02-21T17:11:10.611Z","3.5.4":"2026-02-28T22:16:45.990Z","3.5.5":"2026-03-07T23:23:28.964Z","3.5.6":"2026-03-28T22:00:17.063Z","3.5.7":"2026-04-04T16:32:39.270Z","3.5.8":"2026-05-09T17:16:30.961Z","3.5.9":"2026-05-24T14:48:22.295Z","3.6.0":"2026-05-30T22:34:52.951Z","3.6.1":"2026-05-30T22:49:20.033Z","3.6.2":"2026-06-11T16:39:01.060Z","3.6.3":"2026-06-23T12:42:04.575Z","3.6.4":"2026-06-23T20:43:58.150Z","3.6.5":"2026-07-21T10:12:25.566Z","3.6.6":"2026-08-11T21:46:17.298Z"},"license":"GPL-3.0-or-later","description":"React + TypeScript frontend for Booking System","maintainers":[{"name":"conorheffron","email":"conor.heffron@hotmail.com"}],"readme":"# Booking System Frontend (SPA)\n\n[![Build and deploy container app to Azure Web App - booking-sys](https://github.com/conorheffron/booking-sys/actions/workflows/main_booking-sys.yml/badge.svg)](https://github.com/conorheffron/booking-sys/actions/workflows/main_booking-sys.yml)\n[![Node.js CI](https://github.com/conorheffron/booking-sys/actions/workflows/node.js.yml/badge.svg)](https://github.com/conorheffron/booking-sys/actions/workflows/node.js.yml)\n[![Node.js Package](https://github.com/conorheffron/booking-sys/actions/workflows/npm-publish-packages.yml/badge.svg)](https://github.com/conorheffron/booking-sys/actions/workflows/npm-publish-packages.yml)\n[![NPM Version](https://img.shields.io/npm/v/@conorheffron/booking-sys-frontend.svg)](https://www.npmjs.com/package/@conorheffron/booking-sys-frontend)\n[![License: GPL v3](https://img.shields.io/badge/License-GPLv3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0)\n\nThis is the decoupled, modern **React 19 + TypeScript 5 + Vite 8** Single Page Application (SPA) frontend for the Booking System. This client-side package was successfully migrated from legacy server-side templates to a highly interactive, responsive user experience utilizing **Bootstrap 5.3**.\n\n- **NPM Package**: [@conorheffron/booking-sys-frontend](https://www.npmjs.com/package/@conorheffron/booking-sys-frontend)\n- **GitHub Repository**: [conorheffron/booking-sys (Frontend Workspace)](https://github.com/conorheffron/booking-sys/tree/main/frontend)\n- **GitHub Package**: [booking-sys-frontend (GitHub Container Registry)](https://github.com/conorheffron/booking-sys/pkgs/npm/booking-sys-frontend)\n\n---\n\n## 🏛️ Frontend System Architecture\n\nThe frontend is fully modularized. It interfaces with the backend web services through session-based REST APIs, enforcing client-side route protection and maintaining persistent user/version caches.\n\n### Client-Side Component Structure & Data Flows\n\n```mermaid\ngraph TD\n    %% Styling\n    classDef page fill:#e1f5fe,stroke:#0288d1,stroke-width:2px,color:#01579b;\n    classDef comp fill:#f3e5f5,stroke:#8e24aa,stroke-width:2px,color:#4a148c;\n    classDef util fill:#e8f5e9,stroke:#388e3c,stroke-width:2px,color:#1b5e20;\n    classDef api fill:#ffebee,stroke:#c62828,stroke-width:2px,color:#b71c1c;\n\n    subgraph Router [Router & Authentication Guards]\n        BrowserRouter[BrowserRouter]\n        RequireAuth[RequireAuth Guard <br/><i>Route Guard HOC</i>]\n    end\n\n    subgraph Pages [UI Screen Controllers]\n        BP[BookingPage.tsx<br/><i>Home / Scheduler</i>]\n        RP[ReservationsPage.tsx<br/><i>Booking Manager</i>]\n        ERP[EditReservationPage.tsx<br/><i>Secure Editor</i>]\n        LP[LoginPage.tsx<br/><i>Login Gate</i>]\n    end\n\n    subgraph Reusable_UI [Visual Components]\n        NAV[Navbar.tsx<br/><i>Header Navigation</i>]\n    end\n\n    subgraph Cache_State [State & Cache Stores]\n        C_USER[currentUserCache.tsx<br/><i>sessionStorage</i>]\n        C_VER[appVersionCache.tsx<br/><i>localStorage: 1h Expiry</i>]\n        AUTH[auth.ts<br/><i>getAuthStatus, loginUser, logoutUser</i>]\n        UTIL[Utils.tsx<br/><i>getCSRFToken, getSlots</i>]\n    end\n\n    subgraph External_API [Data Feeds]\n        METEO[Open-Meteo Weather API]\n        BACKEND[Django API /api/*]\n    end\n\n    class BP,RP,ERP,LP page;\n    class NAV require_ui;\n    class C_USER,C_VER,AUTH,UTIL util;\n    class METEO,BACKEND api;\n\n    %% Routing Flow\n    BrowserRouter --> BP\n    BrowserRouter --> RP\n    BrowserRouter --> LP\n    BrowserRouter -->|Secured path| RequireAuth\n    RequireAuth --> ERP\n\n    %% Component Interlocks\n    Pages --> NAV\n    NAV --> C_USER\n    NAV --> C_VER\n    NAV --> AUTH\n\n    %% Data Interactions\n    BP -->|Async Fetch with AbortController| METEO\n    BP & ERP & RP -->|CSRF & Choice Arrays| UTIL\n    AUTH & UTIL & Pages -->|HTTP JSON requests| BACKEND\n```\n\n---\n\n## 🛠️ Features\n\n1. **Reactive Booking Interface (`BookingPage`)**:\n   - Selecting a date automatically initiates queries to view scheduled slots.\n   - Selects from dynamically compiled 30-minute intervals between **09:00 AM and 07:00 PM**.\n2. **Third-Party Weather Snippet**:\n   - Live Dublin weather (temperature, wind speeds, descriptions) fetched from **Open-Meteo API**.\n   - Employs React hook `AbortController` cancellation to eliminate memory leaks upon component unmounting.\n3. **Session-Level Local Caching**:\n   - **Current User Cache**: Stores active credentials in `sessionStorage` to prevent repeating user API reads.\n   - **System Version Cache**: Stores application semantic release strings inside `localStorage` with a **1-hour TTL (Time-To-Live)** expiry configuration.\n4. **Security Enforcement**:\n   - Transparent CSRF pipeline fetching and loading validation cookies on demand.\n   - Dynamic `RequireAuth` context checking to shield sensitive pages.\n\n---\n\n## 📋 Prerequisites\n\n- **Node.js**: `v24` (LTS) or later is recommended.\n- **npm**: `v11` or higher.\n\n---\n\n## 🚀 Installation & Setup\n\n1. **Navigate to the frontend folder**:\n    ```bash\n    cd frontend\n    ```\n\n2. **Install all packages**:\n    ```bash\n    npm install\n    ```\n\n3. **Launch the Hot-Reloading Development Server**:\n    ```bash\n    npm run dev\n    ```\n    This launches the SPA locally at [http://localhost:5173](http://localhost:5173). \n\n4. **API Proxy Configuration**:\n   During development, the SPA proxies modifying requests to the local backend dynamically. This is configured in `vite.config.ts`:\n   ```typescript\n   proxy: {\n     '/api': 'http://0.0.0.0:8000',\n     '/admin': 'http://0.0.0.0:8000',\n     '/static/admin': 'http://0.0.0.0:8000',\n   }\n   ```\n\n---\n\n## 📦 Production Bundling\n\nTo compile and optimize the client application assets for production deployments:\n\n```bash\nnpm run build\n```\nThe compressed, code-split bundles are output directly into the `dist/` workspace folder.\n\n### Previewing the Production Build Locally\nTo run a local web server displaying the pre-built static application assets:\n```bash\nnpm run preview\n```\n\n---\n\n## 🧪 Frontend Test Suites\n\nThe test suite is built on **Jest** combined with **JSDOM** (`@testing-library/react`) to simulate a high-fidelity web browser environment.\n\n### 1. Execute All Tests\n```bash\nnpm run test\n```\n*Expected Output Structure:*\n```text\n PASS  test.tsx\n PASS  src/components/__tests__/Utils.test.tsx\n PASS  src/components/__tests__/appVersionCache.test.tsx\n PASS  src/components/__tests__/Navbar.test.tsx\n\nTest Suites: 4 passed, 4 total\nTests:       12 passed, 12 total\nSnapshots:   0 total\nTime:        3.12 s\nRan all test suites.\n```\n\n### 2. Execute a Specific Test Suite (e.g., Utils)\n```bash\nnpm run test -- src/components/__tests__/Utils.test.tsx\n```\n\n### 3. Target Specific Tests by Title / Regular Expression\n```bash\nnpm run test -- -t=\"should fetch CSRF token from /api/csrf/\"\n```\n\n### 4. Run Tests and Generate Coverage Metrics\n```bash\nnpm run test -- --coverage\n```\nThis generates a detailed code-coverage chart under the local `coverage/` folder.\n","readmeFilename":"README.md"}