{"_id":"payload-reserve","_rev":"32-28984798a2b42aab1eb3f2a7e3e006ea","name":"payload-reserve","dist-tags":{"latest":"4.4.2"},"versions":{"1.0.0":{"name":"payload-reserve","version":"1.0.0","keywords":["payload","payloadcms","plugin","reservation","booking","appointment","scheduling","calendar"],"author":{"name":"elghaied"},"license":"MIT","_id":"payload-reserve@1.0.0","maintainers":[{"name":"elghaied","email":"elghaied.eslam@gmail.com"}],"homepage":"https://github.com/elghaied/payload-reserve#readme","bugs":{"url":"https://github.com/elghaied/payload-reserve/issues"},"dist":{"shasum":"bab8b509d9e2c4f84d5686250763048f68a6c441","tarball":"https://registry.npmjs.org/payload-reserve/-/payload-reserve-1.0.0.tgz","fileCount":70,"integrity":"sha512-YGMpILR2Mv4dgHkCr4S6H9p9s0YHMDTFBfzJFC9vR2ULXnGQbOotmMPuUWz+/3nuwxKTuiLECGgKPy8P3Ejr7Q==","signatures":[{"sig":"MEUCIQCGXYQfM8EVbOVzlR3Mz51Ec5ZDI+OxPryhMQbUbRSp+gIgI/DidEhiGaA1vu55vL1WKa0Qaj13v5+T+V0qm5Z0P4k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":245498},"main":"./dist/index.js","type":"module","_from":"file:payload-reserve-1.0.0.tgz","types":"./dist/index.d.ts","engines":{"node":"^18.20.2 || >=20.9.0","pnpm":"^9 || ^10"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./rsc":{"types":"./dist/exports/rsc.d.ts","import":"./dist/exports/rsc.js","default":"./dist/exports/rsc.js"},"./client":{"types":"./dist/exports/client.d.ts","import":"./dist/exports/client.js","default":"./dist/exports/client.js"}},"scripts":{"dev":"next dev dev --turbo","lint":"eslint","test":"pnpm test:int && pnpm test:e2e","build":"pnpm copyfiles && pnpm build:types && pnpm build:swc","clean":"rimraf {dist,*.tsbuildinfo}","lint:fix":"eslint ./src --fix","test:e2e":"playwright test","test:int":"vitest","build:swc":"swc ./src -d ./dist --config-file .swcrc --strip-leading-paths","copyfiles":"copyfiles -u 1 \"src/**/*.{html,css,scss,ttf,woff,woff2,eot,svg,jpg,png,json}\" dist/","build:types":"tsc --outDir dist --rootDir ./src","dev:payload":"cross-env PAYLOAD_CONFIG_PATH=./dev/payload.config.ts payload","generate:types":"pnpm dev:generate-types","dev:generate-types":"pnpm dev:payload generate:types","generate:importmap":"pnpm dev:generate-importmap","dev:generate-importmap":"pnpm dev:payload generate:importmap"},"_npmUser":{"name":"elghaied","email":"elghaied.eslam@gmail.com"},"_resolved":"/tmp/31f257555e225c7e664884673de951c8/payload-reserve-1.0.0.tgz","_integrity":"sha512-YGMpILR2Mv4dgHkCr4S6H9p9s0YHMDTFBfzJFC9vR2ULXnGQbOotmMPuUWz+/3nuwxKTuiLECGgKPy8P3Ejr7Q==","repository":{"url":"git+https://github.com/elghaied/payload-reserve.git","type":"git"},"_npmVersion":"10.8.2","description":"A Payload CMS 3.x plugin for reservation and booking management with conflict detection, status workflows, and calendar UI","directories":{},"_nodeVersion":"20.20.0","_hasShrinkwrap":false,"devDependencies":{"next":"15.4.11","open":"^10.1.0","react":"19.2.1","sharp":"0.34.2","eslint":"^9.23.0","qs-esm":"7.0.2","rimraf":"3.0.2","vitest":"4.0.18","graphql":"^16.8.1","payload":"3.76.1","@swc/cli":"0.6.0","prettier":"^3.4.2","copyfiles":"2.4.1","cross-env":"^7.0.3","react-dom":"19.2.1","typescript":"5.7.3","@types/node":"22.19.9","@types/react":"19.2.9","@payloadcms/ui":"3.76.1","@eslint/eslintrc":"^3.2.0","@payloadcms/next":"3.76.1","@playwright/test":"1.56.1","@types/react-dom":"19.2.3","sort-package-json":"^2.10.0","@swc-node/register":"1.10.9","eslint-config-next":"15.4.11","vite-tsconfig-paths":"6.0.5","@payloadcms/db-sqlite":"3.76.1","mongodb-memory-server":"10.1.4","@payloadcms/db-mongodb":"3.76.1","@payloadcms/db-postgres":"3.76.1","@payloadcms/eslint-config":"3.9.0","@payloadcms/richtext-lexical":"3.76.1"},"peerDependencies":{"payload":"^3.76.1"},"_npmOperationalInternal":{"tmp":"tmp/payload-reserve_1.0.0_1771028816420_0.10642014880937922","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"payload-reserve","version":"1.0.1","keywords":["payload","payloadcms","plugin","reservation","booking","appointment","scheduling","calendar"],"author":{"name":"elghaied"},"license":"MIT","_id":"payload-reserve@1.0.1","maintainers":[{"name":"elghaied","email":"elghaied.eslam@gmail.com"}],"homepage":"https://github.com/elghaied/payload-reserve#readme","bugs":{"url":"https://github.com/elghaied/payload-reserve/issues"},"dist":{"shasum":"770ac2631a2a598900eabb54550a0c7f95e64bc4","tarball":"https://registry.npmjs.org/payload-reserve/-/payload-reserve-1.0.1.tgz","fileCount":77,"integrity":"sha512-Hy7OXMmjxWgXs8g/vuaHyNQOVRflwi90eRLBuuEoq4IA7d//TiY5/ui1CTM+ygKySiXdLKPOJ78ASfyLY2oxug==","signatures":[{"sig":"MEUCIQCqrJaPxGUUGHihqRsUgQJeTjv+W3S6+lB4jjjGt96kEQIgC3+zsZKh3QakU2+QgQo9NYwx4kcTjpKQuvtw28BZwhA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/payload-reserve@1.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":284599},"main":"./dist/index.js","type":"module","_from":"file:payload-reserve-1.0.1.tgz","types":"./dist/index.d.ts","engines":{"node":"^18.20.2 || >=20.9.0","pnpm":"^9 || ^10"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./rsc":{"types":"./dist/exports/rsc.d.ts","import":"./dist/exports/rsc.js","default":"./dist/exports/rsc.js"},"./client":{"types":"./dist/exports/client.d.ts","import":"./dist/exports/client.js","default":"./dist/exports/client.js"}},"scripts":{"dev":"next dev dev --turbo","lint":"eslint","test":"pnpm test:int && pnpm test:e2e","build":"pnpm copyfiles && pnpm build:types && pnpm build:swc","clean":"rimraf {dist,*.tsbuildinfo}","lint:fix":"eslint ./src --fix","test:e2e":"playwright test","test:int":"vitest","build:swc":"swc ./src -d ./dist --config-file .swcrc --strip-leading-paths","copyfiles":"copyfiles -u 1 \"src/**/*.{html,css,scss,ttf,woff,woff2,eot,svg,jpg,png,json}\" dist/","build:types":"tsc --outDir dist --rootDir ./src","dev:payload":"cross-env PAYLOAD_CONFIG_PATH=./dev/payload.config.ts payload","generate:types":"pnpm dev:generate-types","dev:generate-types":"pnpm dev:payload generate:types","generate:importmap":"pnpm dev:generate-importmap","dev:generate-importmap":"pnpm dev:payload generate:importmap"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:19114f32-128e-473e-b3b7-a3c51459066e"}},"_resolved":"/tmp/e68a22161e1a6d50bd8a5aca478adb82/payload-reserve-1.0.1.tgz","_integrity":"sha512-Hy7OXMmjxWgXs8g/vuaHyNQOVRflwi90eRLBuuEoq4IA7d//TiY5/ui1CTM+ygKySiXdLKPOJ78ASfyLY2oxug==","repository":{"url":"git+https://github.com/elghaied/payload-reserve.git","type":"git"},"_npmVersion":"11.10.0","description":"A Payload CMS 3.x plugin for reservation and booking management with conflict detection, status workflows, and calendar UI","directories":{},"_nodeVersion":"20.20.0","_hasShrinkwrap":false,"devDependencies":{"next":"15.4.11","open":"^10.1.0","react":"19.2.1","sharp":"0.34.2","eslint":"^9.23.0","qs-esm":"7.0.2","rimraf":"3.0.2","vitest":"4.0.18","graphql":"^16.8.1","payload":"3.76.1","@swc/cli":"0.6.0","prettier":"^3.4.2","copyfiles":"2.4.1","cross-env":"^7.0.3","react-dom":"19.2.1","typescript":"5.7.3","@types/node":"22.19.9","@types/react":"19.2.9","@payloadcms/ui":"3.76.1","@eslint/eslintrc":"^3.2.0","@payloadcms/next":"3.76.1","@playwright/test":"1.56.1","@types/react-dom":"19.2.3","sort-package-json":"^2.10.0","@swc-node/register":"1.10.9","eslint-config-next":"15.4.11","vite-tsconfig-paths":"6.0.5","@payloadcms/db-sqlite":"3.76.1","mongodb-memory-server":"10.1.4","@payloadcms/db-mongodb":"3.76.1","@payloadcms/db-postgres":"3.76.1","@payloadcms/eslint-config":"3.9.0","@payloadcms/richtext-lexical":"3.76.1"},"peerDependencies":{"payload":"^3.76.1"},"_npmOperationalInternal":{"tmp":"tmp/payload-reserve_1.0.1_1771043032642_0.9850542426003153","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"payload-reserve","version":"1.0.2","keywords":["payload","payloadcms","plugin","reservation","booking","appointment","scheduling","calendar"],"author":{"name":"elghaied"},"license":"MIT","_id":"payload-reserve@1.0.2","maintainers":[{"name":"elghaied","email":"elghaied.eslam@gmail.com"}],"homepage":"https://github.com/elghaied/payload-reserve#readme","bugs":{"url":"https://github.com/elghaied/payload-reserve/issues"},"dist":{"shasum":"fac5cfc2a94dad080431b8673c8794d505a5e0d0","tarball":"https://registry.npmjs.org/payload-reserve/-/payload-reserve-1.0.2.tgz","fileCount":77,"integrity":"sha512-p1e+kfvitbvwTN3DtzhsMAN6bZxp/3XYLz/WDfbMB1QzEjtj4ytm+Xszu11Rjj/rRFgBueOmiuakL8JK5BoXcg==","signatures":[{"sig":"MEQCIBicTkJ/P5nWo9vda78m38DK0G6Pny8CNWNViifTEVp7AiBJMwuYp219GnNOEpyq0XH1ZqOgS0JnCnxrJ3dpH+htIw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/payload-reserve@1.0.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":284599},"main":"./dist/index.js","type":"module","_from":"file:payload-reserve-1.0.2.tgz","types":"./dist/index.d.ts","engines":{"node":"^18.20.2 || >=20.9.0","pnpm":"^9 || ^10"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./rsc":{"types":"./dist/exports/rsc.d.ts","import":"./dist/exports/rsc.js","default":"./dist/exports/rsc.js"},"./client":{"types":"./dist/exports/client.d.ts","import":"./dist/exports/client.js","default":"./dist/exports/client.js"}},"scripts":{"dev":"next dev dev --turbo","lint":"eslint","test":"pnpm test:int && pnpm test:e2e","build":"pnpm copyfiles && pnpm build:types && pnpm build:swc","clean":"rimraf {dist,*.tsbuildinfo}","lint:fix":"eslint ./src --fix","test:e2e":"playwright test","test:int":"vitest","build:swc":"swc ./src -d ./dist --config-file .swcrc --strip-leading-paths","copyfiles":"copyfiles -u 1 \"src/**/*.{html,css,scss,ttf,woff,woff2,eot,svg,jpg,png,json}\" dist/","build:types":"tsc --outDir dist --rootDir ./src","dev:payload":"cross-env PAYLOAD_CONFIG_PATH=./dev/payload.config.ts payload","generate:types":"pnpm dev:generate-types","dev:generate-types":"pnpm dev:payload generate:types","generate:importmap":"pnpm dev:generate-importmap","dev:generate-importmap":"pnpm dev:payload generate:importmap"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:19114f32-128e-473e-b3b7-a3c51459066e"}},"_resolved":"/tmp/a6221a5f3edf8ffa79c94fa289df7313/payload-reserve-1.0.2.tgz","_integrity":"sha512-p1e+kfvitbvwTN3DtzhsMAN6bZxp/3XYLz/WDfbMB1QzEjtj4ytm+Xszu11Rjj/rRFgBueOmiuakL8JK5BoXcg==","repository":{"url":"git+https://github.com/elghaied/payload-reserve.git","type":"git"},"_npmVersion":"11.10.0","description":"A Payload CMS 3.x plugin for reservation and booking management with conflict detection, status workflows, and calendar UI","directories":{},"_nodeVersion":"20.20.0","_hasShrinkwrap":false,"devDependencies":{"next":"15.4.11","open":"^10.1.0","react":"19.2.1","sharp":"0.34.2","eslint":"^9.23.0","qs-esm":"7.0.2","rimraf":"3.0.2","vitest":"4.0.18","graphql":"^16.8.1","payload":"3.76.1","@swc/cli":"0.6.0","prettier":"^3.4.2","copyfiles":"2.4.1","cross-env":"^7.0.3","react-dom":"19.2.1","typescript":"5.7.3","@types/node":"22.19.9","@types/react":"19.2.9","@payloadcms/ui":"3.76.1","@eslint/eslintrc":"^3.2.0","@payloadcms/next":"3.76.1","@playwright/test":"1.56.1","@types/react-dom":"19.2.3","sort-package-json":"^2.10.0","@swc-node/register":"1.10.9","eslint-config-next":"15.4.11","vite-tsconfig-paths":"6.0.5","@payloadcms/db-sqlite":"3.76.1","mongodb-memory-server":"10.1.4","@payloadcms/db-mongodb":"3.76.1","@payloadcms/db-postgres":"3.76.1","@payloadcms/eslint-config":"3.9.0","@payloadcms/richtext-lexical":"3.76.1"},"peerDependencies":{"payload":"^3.76.1"},"_npmOperationalInternal":{"tmp":"tmp/payload-reserve_1.0.2_1771043569524_0.9801772302649834","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"payload-reserve","version":"1.0.3","keywords":["payload","payloadcms","plugin","reservation","booking","appointment","scheduling","calendar"],"author":{"name":"elghaied"},"license":"MIT","_id":"payload-reserve@1.0.3","maintainers":[{"name":"elghaied","email":"elghaied.eslam@gmail.com"}],"homepage":"https://github.com/elghaied/payload-reserve#readme","bugs":{"url":"https://github.com/elghaied/payload-reserve/issues"},"dist":{"shasum":"abf82ee948cb84f09eaa47fc45bd80688eaafb6a","tarball":"https://registry.npmjs.org/payload-reserve/-/payload-reserve-1.0.3.tgz","fileCount":107,"integrity":"sha512-z9U0+48PDrzi/SsgZMLKlvW845GK3hyX6lmScOdN8m2HQnDE01T6n+w3eVp26ql2EBp+AyiYW0ttaVK1YdSIhw==","signatures":[{"sig":"MEQCIADP1ehZOMfFcsUvi6oFX+nEZIBSWAOgXMI35zdbj8r+AiB5wTlz9IYxdibVjMLUup8D0qhTG/iTRILxuo53DoknhQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/payload-reserve@1.0.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":406102},"main":"./dist/index.js","type":"module","_from":"file:payload-reserve-1.0.3.tgz","types":"./dist/index.d.ts","engines":{"node":"^18.20.2 || >=20.9.0","pnpm":"^9 || ^10"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./rsc":{"types":"./dist/exports/rsc.d.ts","import":"./dist/exports/rsc.js","default":"./dist/exports/rsc.js"},"./client":{"types":"./dist/exports/client.d.ts","import":"./dist/exports/client.js","default":"./dist/exports/client.js"}},"scripts":{"dev":"next dev dev --turbo","lint":"eslint","test":"pnpm test:int && pnpm test:e2e","build":"pnpm copyfiles && pnpm build:types && pnpm build:swc","clean":"rimraf {dist,*.tsbuildinfo}","lint:fix":"eslint ./src --fix","test:e2e":"playwright test","test:int":"vitest","build:swc":"swc ./src -d ./dist --config-file .swcrc --strip-leading-paths","copyfiles":"copyfiles -u 1 \"src/**/*.{html,css,scss,ttf,woff,woff2,eot,svg,jpg,png,json}\" dist/","build:types":"tsc --outDir dist --rootDir ./src","dev:payload":"cross-env PAYLOAD_CONFIG_PATH=./dev/payload.config.ts payload","generate:types":"pnpm dev:generate-types","dev:generate-types":"pnpm dev:payload generate:types","generate:importmap":"pnpm dev:generate-importmap","dev:generate-importmap":"pnpm dev:payload generate:importmap"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:19114f32-128e-473e-b3b7-a3c51459066e"}},"_resolved":"/tmp/37ac1fc60e88ea028d1a65b6792f6c7a/payload-reserve-1.0.3.tgz","_integrity":"sha512-z9U0+48PDrzi/SsgZMLKlvW845GK3hyX6lmScOdN8m2HQnDE01T6n+w3eVp26ql2EBp+AyiYW0ttaVK1YdSIhw==","repository":{"url":"git+https://github.com/elghaied/payload-reserve.git","type":"git"},"_npmVersion":"11.10.1","description":"A Payload CMS 3.x plugin for reservation and booking management with conflict detection, status workflows, and calendar UI","directories":{},"_nodeVersion":"20.20.0","_hasShrinkwrap":false,"devDependencies":{"next":"15.4.11","open":"^10.1.0","react":"19.2.1","sharp":"0.34.2","eslint":"^9.23.0","qs-esm":"7.0.2","rimraf":"3.0.2","vitest":"4.0.18","graphql":"^16.8.1","payload":"3.77.0","@swc/cli":"0.6.0","prettier":"^3.4.2","copyfiles":"2.4.1","cross-env":"^7.0.3","react-dom":"19.2.1","typescript":"5.7.3","@types/node":"22.19.9","@types/react":"19.2.9","@payloadcms/ui":"3.77.0","@eslint/eslintrc":"^3.2.0","@payloadcms/next":"3.77.0","@playwright/test":"1.56.1","@types/react-dom":"19.2.3","sort-package-json":"^2.10.0","@swc-node/register":"1.10.9","eslint-config-next":"15.4.11","vite-tsconfig-paths":"6.0.5","@payloadcms/db-sqlite":"3.77.0","mongodb-memory-server":"10.1.4","@payloadcms/db-mongodb":"3.77.0","@payloadcms/db-postgres":"3.77.0","@payloadcms/translations":"3.77.0","@payloadcms/eslint-config":"3.9.0","@payloadcms/richtext-lexical":"3.77.0"},"peerDependencies":{"payload":"^3.77.0","@payloadcms/ui":"^3.77.0","@payloadcms/translations":"^3.77.0"},"_npmOperationalInternal":{"tmp":"tmp/payload-reserve_1.0.3_1771643905562_0.49962675797816436","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"payload-reserve","version":"1.1.0","keywords":["payload","payloadcms","plugin","reservation","booking","appointment","scheduling","calendar"],"author":{"name":"elghaied"},"license":"MIT","_id":"payload-reserve@1.1.0","maintainers":[{"name":"elghaied","email":"elghaied.eslam@gmail.com"}],"homepage":"https://github.com/elghaied/payload-reserve#readme","bugs":{"url":"https://github.com/elghaied/payload-reserve/issues"},"dist":{"shasum":"52e0072a331f3b52d194bc30e317eb790f186451","tarball":"https://registry.npmjs.org/payload-reserve/-/payload-reserve-1.1.0.tgz","fileCount":110,"integrity":"sha512-gYoH5qh4ZvLjY+IKwMOCQkWXFj51kE6Pd3ri3v5xN2egMBqgJ+5rfu0CaWPDyYtReRt0TfmDbrZoHsIQfbCPkA==","signatures":[{"sig":"MEUCIG+PjmwzQRal1wOifsqPgj1E+MWTrtMXSCgpjW3BzNewAiEAt7RicspaqtEE+s15C5ElyTIZDxqhVjJgQE9/A5dqY3s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/payload-reserve@1.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":428852},"main":"./dist/index.js","type":"module","_from":"file:payload-reserve-1.1.0.tgz","types":"./dist/index.d.ts","engines":{"node":"^18.20.2 || >=20.9.0","pnpm":"^9 || ^10"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./rsc":{"types":"./dist/exports/rsc.d.ts","import":"./dist/exports/rsc.js","default":"./dist/exports/rsc.js"},"./client":{"types":"./dist/exports/client.d.ts","import":"./dist/exports/client.js","default":"./dist/exports/client.js"}},"scripts":{"dev":"next dev dev --turbo","lint":"eslint","test":"pnpm test:int && pnpm test:e2e","build":"pnpm copyfiles && pnpm build:types && pnpm build:swc","clean":"rimraf {dist,*.tsbuildinfo}","lint:fix":"eslint ./src --fix","test:e2e":"playwright test","test:int":"vitest","build:swc":"swc ./src -d ./dist --config-file .swcrc --strip-leading-paths","copyfiles":"copyfiles -u 1 \"src/**/*.{html,css,scss,ttf,woff,woff2,eot,svg,jpg,png,json}\" dist/","build:types":"tsc --outDir dist --rootDir ./src","dev:payload":"cross-env PAYLOAD_CONFIG_PATH=./dev/payload.config.ts payload","generate:types":"pnpm dev:generate-types","dev:generate-types":"pnpm dev:payload generate:types","generate:importmap":"pnpm dev:generate-importmap","dev:generate-importmap":"pnpm dev:payload generate:importmap"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:19114f32-128e-473e-b3b7-a3c51459066e"}},"_resolved":"/tmp/619a257b2284dcb4ad64251df1a1a813/payload-reserve-1.1.0.tgz","_integrity":"sha512-gYoH5qh4ZvLjY+IKwMOCQkWXFj51kE6Pd3ri3v5xN2egMBqgJ+5rfu0CaWPDyYtReRt0TfmDbrZoHsIQfbCPkA==","repository":{"url":"git+https://github.com/elghaied/payload-reserve.git","type":"git"},"_npmVersion":"11.10.1","description":"A Payload CMS 3.x plugin for reservation and booking management with conflict detection, status workflows, and calendar UI","directories":{},"_nodeVersion":"20.20.0","_hasShrinkwrap":false,"devDependencies":{"next":"15.4.11","open":"^10.1.0","react":"19.2.1","sharp":"0.34.2","eslint":"^9.23.0","qs-esm":"7.0.2","rimraf":"3.0.2","vitest":"4.0.18","graphql":"^16.8.1","payload":"3.77.0","@swc/cli":"0.6.0","prettier":"^3.4.2","copyfiles":"2.4.1","cross-env":"^7.0.3","react-dom":"19.2.1","typescript":"5.7.3","@types/node":"22.19.9","@types/react":"19.2.9","@payloadcms/ui":"3.77.0","@eslint/eslintrc":"^3.2.0","@payloadcms/next":"3.77.0","@playwright/test":"1.56.1","@types/react-dom":"19.2.3","sort-package-json":"^2.10.0","@swc-node/register":"1.10.9","eslint-config-next":"15.4.11","vite-tsconfig-paths":"6.0.5","@payloadcms/db-sqlite":"3.77.0","mongodb-memory-server":"10.1.4","@payloadcms/db-mongodb":"3.77.0","@payloadcms/db-postgres":"3.77.0","@payloadcms/translations":"3.77.0","@payloadcms/eslint-config":"3.9.0","@payloadcms/richtext-lexical":"3.77.0"},"peerDependencies":{"payload":"^3.77.0","@payloadcms/ui":"^3.77.0","@payloadcms/translations":"^3.77.0"},"_npmOperationalInternal":{"tmp":"tmp/payload-reserve_1.1.0_1771738425948_0.267719543722875","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"payload-reserve","version":"1.2.0","keywords":["payload","payloadcms","plugin","reservation","booking","appointment","scheduling","calendar"],"author":{"name":"elghaied"},"license":"MIT","_id":"payload-reserve@1.2.0","maintainers":[{"name":"elghaied","email":"elghaied.eslam@gmail.com"}],"homepage":"https://github.com/elghaied/payload-reserve#readme","bugs":{"url":"https://github.com/elghaied/payload-reserve/issues"},"dist":{"shasum":"1ef15940bb048ee471d3c800d89d8be04aedc385","tarball":"https://registry.npmjs.org/payload-reserve/-/payload-reserve-1.2.0.tgz","fileCount":110,"integrity":"sha512-KxDcp/GHgFsO3pjatbYGy9a8QJRPxJtqszjvNDYR6P/qF40kJe9VuxfGqNoDTmCQOIf+aSAljhpp75Nv2x/v9g==","signatures":[{"sig":"MEUCIQD3a2FcYixk8tcHmFTXl7udUZwhMBUmO0RgYKnDnkCqrQIgQvTe5dWLFDbvjaAYcVuU1z2lY9PuohZgE/1Xu8579vA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/payload-reserve@1.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":450856},"main":"./dist/index.js","type":"module","_from":"file:payload-reserve-1.2.0.tgz","types":"./dist/index.d.ts","engines":{"node":"^18.20.2 || >=20.9.0","pnpm":"^9 || ^10"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./rsc":{"types":"./dist/exports/rsc.d.ts","import":"./dist/exports/rsc.js","default":"./dist/exports/rsc.js"},"./client":{"types":"./dist/exports/client.d.ts","import":"./dist/exports/client.js","default":"./dist/exports/client.js"}},"scripts":{"dev":"next dev dev --turbo","lint":"eslint","test":"pnpm test:int && pnpm test:e2e","build":"pnpm copyfiles && pnpm build:types && pnpm build:swc","clean":"rimraf {dist,*.tsbuildinfo}","lint:fix":"eslint ./src --fix","test:e2e":"playwright test","test:int":"vitest","build:swc":"swc ./src -d ./dist --config-file .swcrc --strip-leading-paths","changeset":"changeset","copyfiles":"copyfiles -u 1 \"src/**/*.{html,css,scss,ttf,woff,woff2,eot,svg,jpg,png,json}\" dist/","build:types":"tsc --outDir dist --rootDir ./src","dev:payload":"cross-env PAYLOAD_CONFIG_PATH=./dev/payload.config.ts payload","generate:types":"pnpm dev:generate-types","changeset:version":"changeset version","dev:generate-types":"pnpm dev:payload generate:types","generate:importmap":"pnpm dev:generate-importmap","dev:generate-importmap":"pnpm dev:payload generate:importmap"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:19114f32-128e-473e-b3b7-a3c51459066e"}},"_resolved":"/tmp/d2a2fed8a571ce546d57243f5f76376f/payload-reserve-1.2.0.tgz","_integrity":"sha512-KxDcp/GHgFsO3pjatbYGy9a8QJRPxJtqszjvNDYR6P/qF40kJe9VuxfGqNoDTmCQOIf+aSAljhpp75Nv2x/v9g==","repository":{"url":"git+https://github.com/elghaied/payload-reserve.git","type":"git"},"_npmVersion":"11.11.0","description":"A Payload CMS 3.x plugin for reservation and booking management with conflict detection, status workflows, and calendar UI","directories":{},"_nodeVersion":"20.20.0","_hasShrinkwrap":false,"devDependencies":{"next":"15.4.11","open":"^10.1.0","react":"19.2.1","sharp":"0.34.2","eslint":"^9.23.0","qs-esm":"7.0.2","rimraf":"3.0.2","vitest":"4.0.18","graphql":"^16.8.1","payload":"3.77.0","@swc/cli":"0.6.0","prettier":"^3.4.2","copyfiles":"2.4.1","cross-env":"^7.0.3","react-dom":"19.2.1","typescript":"5.7.3","@types/node":"22.19.9","@types/react":"19.2.9","@payloadcms/ui":"3.77.0","@changesets/cli":"^2.30.0","@eslint/eslintrc":"^3.2.0","@payloadcms/next":"3.77.0","@playwright/test":"1.56.1","@types/react-dom":"19.2.3","sort-package-json":"^2.10.0","@swc-node/register":"1.10.9","eslint-config-next":"15.4.11","vite-tsconfig-paths":"6.0.5","@payloadcms/db-sqlite":"3.77.0","mongodb-memory-server":"10.1.4","@payloadcms/db-mongodb":"3.77.0","@payloadcms/db-postgres":"3.77.0","@payloadcms/translations":"3.77.0","@payloadcms/eslint-config":"3.9.0","@payloadcms/richtext-lexical":"3.77.0"},"peerDependencies":{"payload":"^3.77.0","@payloadcms/ui":"^3.77.0","@payloadcms/translations":"^3.77.0"},"_npmOperationalInternal":{"tmp":"tmp/payload-reserve_1.2.0_1773094070383_0.10749498094050103","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"payload-reserve","version":"1.3.0","keywords":["payload","payloadcms","plugin","reservation","booking","appointment","scheduling","calendar"],"author":{"name":"elghaied"},"license":"MIT","_id":"payload-reserve@1.3.0","maintainers":[{"name":"elghaied","email":"elghaied.eslam@gmail.com"}],"homepage":"https://github.com/elghaied/payload-reserve#readme","bugs":{"url":"https://github.com/elghaied/payload-reserve/issues"},"dist":{"shasum":"b39628a6a08e59037d0c56575d6a39870bcb7fee","tarball":"https://registry.npmjs.org/payload-reserve/-/payload-reserve-1.3.0.tgz","fileCount":110,"integrity":"sha512-7QzUbOYbxmQjNCGU0cnFITg7PgCcV0Zo/nUq+2BeVGmnQba842C6IBucqoyhWq1a6uknhsS8wC4IY/1/5kMArQ==","signatures":[{"sig":"MEUCIQCxNrpulEhvvzNkUvkxQrFJfzG0Q492r/XFy1X9jUHi4AIgB47lyM5VRgQ3txI1LRLN0LYxgAT/w2NwIGwvW1SUpMg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/payload-reserve@1.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":460417},"main":"./dist/index.js","type":"module","_from":"file:payload-reserve-1.3.0.tgz","types":"./dist/index.d.ts","engines":{"node":"^18.20.2 || >=20.9.0","pnpm":"^9 || ^10"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./rsc":{"types":"./dist/exports/rsc.d.ts","import":"./dist/exports/rsc.js","default":"./dist/exports/rsc.js"},"./client":{"types":"./dist/exports/client.d.ts","import":"./dist/exports/client.js","default":"./dist/exports/client.js"}},"scripts":{"dev":"next dev dev --turbo","lint":"eslint","test":"pnpm test:int && pnpm test:e2e","build":"pnpm copyfiles && pnpm build:types && pnpm build:swc","clean":"rimraf {dist,*.tsbuildinfo}","lint:fix":"eslint ./src --fix","test:e2e":"playwright test","test:int":"vitest","build:swc":"swc ./src -d ./dist --config-file .swcrc --strip-leading-paths","changeset":"changeset","copyfiles":"copyfiles -u 1 \"src/**/*.{html,css,scss,ttf,woff,woff2,eot,svg,jpg,png,json}\" dist/","build:types":"tsc --outDir dist --rootDir ./src","dev:payload":"cross-env PAYLOAD_CONFIG_PATH=./dev/payload.config.ts payload","generate:types":"pnpm dev:generate-types","changeset:version":"changeset version","dev:generate-types":"pnpm dev:payload generate:types","generate:importmap":"pnpm dev:generate-importmap","dev:generate-importmap":"pnpm dev:payload generate:importmap"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:19114f32-128e-473e-b3b7-a3c51459066e"}},"_resolved":"/tmp/6fd86ac1155c7fc8d844446a099fbc0b/payload-reserve-1.3.0.tgz","_integrity":"sha512-7QzUbOYbxmQjNCGU0cnFITg7PgCcV0Zo/nUq+2BeVGmnQba842C6IBucqoyhWq1a6uknhsS8wC4IY/1/5kMArQ==","repository":{"url":"git+https://github.com/elghaied/payload-reserve.git","type":"git"},"_npmVersion":"11.11.0","description":"A Payload CMS 3.x plugin for reservation and booking management with conflict detection, status workflows, and calendar UI","directories":{},"_nodeVersion":"20.20.0","_hasShrinkwrap":false,"devDependencies":{"next":"15.4.11","open":"^10.1.0","react":"19.2.1","sharp":"0.34.2","eslint":"^9.23.0","qs-esm":"7.0.2","rimraf":"3.0.2","vitest":"4.0.18","graphql":"^16.8.1","payload":"3.77.0","@swc/cli":"0.6.0","prettier":"^3.4.2","copyfiles":"2.4.1","cross-env":"^7.0.3","react-dom":"19.2.1","typescript":"5.7.3","@types/node":"22.19.9","@types/react":"19.2.9","@payloadcms/ui":"3.77.0","@changesets/cli":"^2.30.0","@eslint/eslintrc":"^3.2.0","@payloadcms/next":"3.77.0","@playwright/test":"1.56.1","@types/react-dom":"19.2.3","sort-package-json":"^2.10.0","@swc-node/register":"1.10.9","eslint-config-next":"15.4.11","vite-tsconfig-paths":"6.0.5","@payloadcms/db-sqlite":"3.77.0","mongodb-memory-server":"10.1.4","@payloadcms/db-mongodb":"3.77.0","@payloadcms/db-postgres":"3.77.0","@payloadcms/translations":"3.77.0","@payloadcms/eslint-config":"3.9.0","@payloadcms/richtext-lexical":"3.77.0"},"peerDependencies":{"payload":"^3.77.0","@payloadcms/ui":"^3.77.0","@payloadcms/translations":"^3.77.0"},"_npmOperationalInternal":{"tmp":"tmp/payload-reserve_1.3.0_1773097761444_0.7167910320333688","host":"s3://npm-registry-packages-npm-production"}},"1.3.2":{"name":"payload-reserve","version":"1.3.2","keywords":["payload","payloadcms","plugin","reservation","booking","appointment","scheduling","calendar"],"author":{"name":"elghaied"},"license":"MIT","_id":"payload-reserve@1.3.2","maintainers":[{"name":"elghaied","email":"elghaied.eslam@gmail.com"}],"homepage":"https://github.com/elghaied/payload-reserve#readme","bugs":{"url":"https://github.com/elghaied/payload-reserve/issues"},"dist":{"shasum":"908937ce785319a76570ac391730c222444d4db1","tarball":"https://registry.npmjs.org/payload-reserve/-/payload-reserve-1.3.2.tgz","fileCount":113,"integrity":"sha512-DZnFvlfKA5c/IPJeq1fJ5PjafzZOwftKyX4A0pBM6ic1iA4Ot4Xl2KyixY4uMA7/m7tEKHQ9JUjNOopl0eVgCg==","signatures":[{"sig":"MEYCIQCWbp/yGehHv83ZXDgTjikb8StOZQ52TON6QmXS+VtFQgIhAI1ST0jRG0KqYMD66rKtGRh1RagDcu2qh2WsDLcRTsxH","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/payload-reserve@1.3.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":461908},"main":"./dist/index.js","type":"module","_from":"file:payload-reserve-1.3.2.tgz","types":"./dist/index.d.ts","engines":{"node":"^18.20.2 || >=20.9.0","pnpm":"^9 || ^10"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./rsc":{"types":"./dist/exports/rsc.d.ts","import":"./dist/exports/rsc.js","default":"./dist/exports/rsc.js"},"./client":{"types":"./dist/exports/client.d.ts","import":"./dist/exports/client.js","default":"./dist/exports/client.js"}},"scripts":{"dev":"next dev dev --turbo","lint":"eslint","test":"pnpm test:int && pnpm test:e2e","build":"pnpm copyfiles && pnpm build:types && pnpm build:swc","clean":"rimraf {dist,*.tsbuildinfo}","lint:fix":"eslint ./src --fix","test:e2e":"playwright test","test:int":"vitest","build:swc":"swc ./src -d ./dist --config-file .swcrc --strip-leading-paths","changeset":"changeset","copyfiles":"copyfiles -u 1 \"src/**/*.{html,css,scss,ttf,woff,woff2,eot,svg,jpg,png,json}\" dist/","build:types":"tsc --outDir dist --rootDir ./src","dev:payload":"cross-env PAYLOAD_CONFIG_PATH=./dev/payload.config.ts payload","generate:types":"pnpm dev:generate-types","changeset:version":"changeset version","dev:generate-types":"pnpm dev:payload generate:types","generate:importmap":"pnpm dev:generate-importmap","dev:generate-importmap":"pnpm dev:payload generate:importmap"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:19114f32-128e-473e-b3b7-a3c51459066e"}},"_resolved":"/tmp/d9d24aef64ff37b5e832e9d25d7c7f41/payload-reserve-1.3.2.tgz","_integrity":"sha512-DZnFvlfKA5c/IPJeq1fJ5PjafzZOwftKyX4A0pBM6ic1iA4Ot4Xl2KyixY4uMA7/m7tEKHQ9JUjNOopl0eVgCg==","repository":{"url":"git+https://github.com/elghaied/payload-reserve.git","type":"git"},"_npmVersion":"11.11.1","description":"A Payload CMS 3.x plugin for reservation and booking management with conflict detection, status workflows, and calendar UI","directories":{},"_nodeVersion":"20.20.0","_hasShrinkwrap":false,"devDependencies":{"next":"15.4.11","open":"^10.1.0","react":"19.2.1","sharp":"0.34.2","eslint":"^9.23.0","qs-esm":"7.0.2","rimraf":"3.0.2","vitest":"4.0.18","graphql":"^16.8.1","payload":"3.79.0","@swc/cli":"0.6.0","prettier":"^3.4.2","copyfiles":"2.4.1","cross-env":"^7.0.3","react-dom":"19.2.1","typescript":"5.7.3","@types/node":"22.19.9","@types/react":"19.2.9","@payloadcms/ui":"3.79.0","@changesets/cli":"^2.30.0","@eslint/eslintrc":"^3.2.0","@payloadcms/next":"3.79.0","@playwright/test":"1.56.1","@types/react-dom":"19.2.3","sort-package-json":"^2.10.0","@swc-node/register":"1.10.9","eslint-config-next":"15.4.11","vite-tsconfig-paths":"6.0.5","@payloadcms/db-sqlite":"3.79.0","mongodb-memory-server":"10.1.4","@payloadcms/db-mongodb":"3.79.0","@payloadcms/db-postgres":"3.79.0","@payloadcms/translations":"3.79.0","@payloadcms/eslint-config":"3.9.0","@payloadcms/richtext-lexical":"3.79.0"},"peerDependencies":{"payload":"^3.79.0","@payloadcms/ui":"^3.79.0","@payloadcms/translations":"^3.79.0"},"_npmOperationalInternal":{"tmp":"tmp/payload-reserve_1.3.2_1773467639240_0.02919886588898346","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"payload-reserve","version":"1.4.0","keywords":["payload","payloadcms","plugin","reservation","booking","appointment","scheduling","calendar"],"author":{"name":"elghaied"},"license":"MIT","_id":"payload-reserve@1.4.0","maintainers":[{"name":"elghaied","email":"elghaied.eslam@gmail.com"}],"homepage":"https://github.com/elghaied/payload-reserve#readme","bugs":{"url":"https://github.com/elghaied/payload-reserve/issues"},"dist":{"shasum":"2a41fa74976d5e65782c34364c2409cbd4f1b538","tarball":"https://registry.npmjs.org/payload-reserve/-/payload-reserve-1.4.0.tgz","fileCount":113,"integrity":"sha512-qvCgtjdrD0mWOw3aerFEWQOdla6kvs/ijUgRyTU0vZ/d3F+OGS7pgVSxW9mVju3me/d7q/AtxNEj8SYfyV39lg==","signatures":[{"sig":"MEYCIQCVShU18Q6P4enzUZ6ijciJSbmi4DmkEKjW57RgI6RIXQIhAJjkamuaYXRRdRAe2JSWyydagFxK8GnUFm5yAx8ff5b9","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/payload-reserve@1.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":464139},"main":"./dist/index.js","type":"module","_from":"file:payload-reserve-1.4.0.tgz","types":"./dist/index.d.ts","engines":{"node":"^18.20.2 || >=20.9.0","pnpm":"^9 || ^10"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./rsc":{"types":"./dist/exports/rsc.d.ts","import":"./dist/exports/rsc.js","default":"./dist/exports/rsc.js"},"./client":{"types":"./dist/exports/client.d.ts","import":"./dist/exports/client.js","default":"./dist/exports/client.js"}},"scripts":{"dev":"next dev dev --turbo","lint":"eslint","test":"pnpm test:int && pnpm test:e2e","build":"pnpm copyfiles && pnpm build:types && pnpm build:swc","clean":"rimraf {dist,*.tsbuildinfo}","lint:fix":"eslint ./src --fix","test:e2e":"playwright test","test:int":"vitest","build:swc":"swc ./src -d ./dist --config-file .swcrc --strip-leading-paths","changeset":"changeset","copyfiles":"copyfiles -u 1 \"src/**/*.{html,css,scss,ttf,woff,woff2,eot,svg,jpg,png,json}\" dist/","build:types":"tsc --outDir dist --rootDir ./src","dev:payload":"cross-env PAYLOAD_CONFIG_PATH=./dev/payload.config.ts payload","generate:types":"pnpm dev:generate-types","changeset:version":"changeset version","dev:generate-types":"pnpm dev:payload generate:types","generate:importmap":"pnpm dev:generate-importmap","dev:generate-importmap":"pnpm dev:payload generate:importmap"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:19114f32-128e-473e-b3b7-a3c51459066e"}},"_resolved":"/tmp/9bb4ba4649d6c3e9a65bb21a7e4ef2e8/payload-reserve-1.4.0.tgz","_integrity":"sha512-qvCgtjdrD0mWOw3aerFEWQOdla6kvs/ijUgRyTU0vZ/d3F+OGS7pgVSxW9mVju3me/d7q/AtxNEj8SYfyV39lg==","repository":{"url":"git+https://github.com/elghaied/payload-reserve.git","type":"git"},"_npmVersion":"11.15.0","description":"A Payload CMS 3.x plugin for reservation and booking management with conflict detection, status workflows, and calendar UI","directories":{},"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"next":"15.4.11","open":"^10.1.0","react":"19.2.1","sharp":"0.34.2","eslint":"^9.23.0","qs-esm":"7.0.2","rimraf":"3.0.2","vitest":"4.0.18","graphql":"^16.8.1","payload":"3.79.0","@swc/cli":"0.6.0","prettier":"^3.4.2","copyfiles":"2.4.1","cross-env":"^7.0.3","react-dom":"19.2.1","typescript":"5.7.3","@types/node":"22.19.9","@types/react":"19.2.9","@payloadcms/ui":"3.79.0","@changesets/cli":"^2.30.0","@eslint/eslintrc":"^3.2.0","@payloadcms/next":"3.79.0","@playwright/test":"1.56.1","@types/react-dom":"19.2.3","sort-package-json":"^2.10.0","@swc-node/register":"1.10.9","eslint-config-next":"15.4.11","vite-tsconfig-paths":"6.0.5","@payloadcms/db-sqlite":"3.79.0","mongodb-memory-server":"10.1.4","@payloadcms/db-mongodb":"3.79.0","@payloadcms/db-postgres":"3.79.0","@payloadcms/translations":"3.79.0","@payloadcms/eslint-config":"3.9.0","@payloadcms/richtext-lexical":"3.79.0"},"peerDependencies":{"payload":"^3.79.0","@payloadcms/ui":"^3.79.0","@payloadcms/translations":"^3.79.0"},"_npmOperationalInternal":{"tmp":"tmp/payload-reserve_1.4.0_1779481736177_0.41532852025685707","host":"s3://npm-registry-packages-npm-production"}},"1.5.0":{"name":"payload-reserve","version":"1.5.0","keywords":["payload","payloadcms","plugin","reservation","booking","appointment","scheduling","calendar"],"author":{"name":"elghaied"},"license":"MIT","_id":"payload-reserve@1.5.0","maintainers":[{"name":"elghaied","email":"elghaied.eslam@gmail.com"}],"homepage":"https://github.com/elghaied/payload-reserve#readme","bugs":{"url":"https://github.com/elghaied/payload-reserve/issues"},"dist":{"shasum":"dffa9e076a62e693831a7d9d963327b98bd6f6f2","tarball":"https://registry.npmjs.org/payload-reserve/-/payload-reserve-1.5.0.tgz","fileCount":161,"integrity":"sha512-h8MBGVpGFgIckihIdiX8c2lyCf6dd8lV3EbmDeGrSeIqGVdcAyW+hvpfhYBy7bd0ysKlfRn0hmvpaB2avCaAmQ==","signatures":[{"sig":"MEYCIQDHcDXAsGNLkgmhdXzMlMEd/82PtoWI5cSjzLc9t1CP8gIhAKrfNOzDh6F+E5juJiOKUrkxLeASb20Z7rdBSWwPRHq1","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/payload-reserve@1.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":735671},"main":"./dist/index.js","type":"module","_from":"file:payload-reserve-1.5.0.tgz","types":"./dist/index.d.ts","engines":{"node":"^18.20.2 || >=20.9.0","pnpm":"^9 || ^10"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./rsc":{"types":"./dist/exports/rsc.d.ts","import":"./dist/exports/rsc.js","default":"./dist/exports/rsc.js"},"./client":{"types":"./dist/exports/client.d.ts","import":"./dist/exports/client.js","default":"./dist/exports/client.js"}},"scripts":{"dev":"next dev dev --turbo","lint":"eslint","test":"pnpm test:int && pnpm test:e2e","build":"pnpm copyfiles && pnpm build:types && pnpm build:swc","clean":"rimraf {dist,*.tsbuildinfo}","lint:fix":"eslint ./src --fix","test:e2e":"playwright test","test:int":"vitest","build:swc":"swc ./src -d ./dist --config-file .swcrc --strip-leading-paths","changeset":"changeset","copyfiles":"copyfiles -u 1 \"src/**/*.{html,css,scss,ttf,woff,woff2,eot,svg,jpg,png,json}\" dist/","build:types":"tsc --outDir dist --rootDir ./src","dev:payload":"cross-env PAYLOAD_CONFIG_PATH=./dev/payload.config.ts payload","generate:types":"pnpm dev:generate-types","changeset:version":"changeset version","dev:generate-types":"pnpm dev:payload generate:types","generate:importmap":"pnpm dev:generate-importmap","dev:generate-importmap":"pnpm dev:payload generate:importmap"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:19114f32-128e-473e-b3b7-a3c51459066e"}},"_resolved":"/tmp/16b8adb624d4c27e615766f44346dd6c/payload-reserve-1.5.0.tgz","_integrity":"sha512-h8MBGVpGFgIckihIdiX8c2lyCf6dd8lV3EbmDeGrSeIqGVdcAyW+hvpfhYBy7bd0ysKlfRn0hmvpaB2avCaAmQ==","repository":{"url":"git+https://github.com/elghaied/payload-reserve.git","type":"git"},"_npmVersion":"11.16.0","description":"A Payload CMS 3.x plugin for reservation and booking management with conflict detection, status workflows, and calendar UI","directories":{},"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"next":"15.4.11","open":"^10.1.0","react":"19.2.1","sharp":"0.34.2","eslint":"^9.23.0","qs-esm":"7.0.2","rimraf":"3.0.2","vitest":"4.0.18","graphql":"^16.8.1","payload":"3.79.0","@swc/cli":"0.6.0","prettier":"^3.4.2","copyfiles":"2.4.1","cross-env":"^7.0.3","react-dom":"19.2.1","typescript":"5.7.3","@types/node":"22.19.9","@types/react":"19.2.9","@payloadcms/ui":"3.79.0","@changesets/cli":"^2.30.0","@eslint/eslintrc":"^3.2.0","@payloadcms/next":"3.79.0","@playwright/test":"1.56.1","@types/react-dom":"19.2.3","sort-package-json":"^2.10.0","@swc-node/register":"1.10.9","eslint-config-next":"15.4.11","vite-tsconfig-paths":"6.0.5","@payloadcms/db-sqlite":"3.79.0","mongodb-memory-server":"10.1.4","@payloadcms/db-mongodb":"3.79.0","@payloadcms/db-postgres":"3.79.0","@payloadcms/translations":"3.79.0","@payloadcms/eslint-config":"3.9.0","@elghaied/payload-plugin-sms":"^0.3.0","@payloadcms/richtext-lexical":"3.79.0"},"peerDependencies":{"payload":"^3.79.0","@payloadcms/ui":"^3.79.0","@payloadcms/translations":"^3.79.0"},"_npmOperationalInternal":{"tmp":"tmp/payload-reserve_1.5.0_1780437489442_0.5243283786795288","host":"s3://npm-registry-packages-npm-production"}},"1.6.0":{"name":"payload-reserve","version":"1.6.0","keywords":["payload","payloadcms","plugin","reservation","booking","appointment","scheduling","calendar"],"author":{"name":"elghaied"},"license":"MIT","_id":"payload-reserve@1.6.0","maintainers":[{"name":"elghaied","email":"elghaied.eslam@gmail.com"}],"homepage":"https://github.com/elghaied/payload-reserve#readme","bugs":{"url":"https://github.com/elghaied/payload-reserve/issues"},"dist":{"shasum":"d7ced760e09c1419a8d868877692240db03ddddf","tarball":"https://registry.npmjs.org/payload-reserve/-/payload-reserve-1.6.0.tgz","fileCount":167,"integrity":"sha512-3YabIqL5QxbMTNSNqrxm5Jh5n8q5mywBGUAb8h6RKLD6EQyyZACt93XwjXXKiIwwJZd2Ls7dKsjBCvlvaGhQyA==","signatures":[{"sig":"MEUCIAVbgwWMuZKGvKp/sF3YAuBLxgweAXYTc1w6AfxTFmxDAiEA36Eh6fM+uNh3GhyxdCxeXFfLJLgpTd6+D/Jk/wAEdUY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/payload-reserve@1.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":753546},"main":"./dist/index.js","type":"module","_from":"file:payload-reserve-1.6.0.tgz","types":"./dist/index.d.ts","engines":{"node":"^18.20.2 || >=20.9.0","pnpm":"^9 || ^10"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./rsc":{"types":"./dist/exports/rsc.d.ts","import":"./dist/exports/rsc.js","default":"./dist/exports/rsc.js"},"./client":{"types":"./dist/exports/client.d.ts","import":"./dist/exports/client.js","default":"./dist/exports/client.js"}},"scripts":{"dev":"next dev dev --turbo","lint":"eslint","test":"pnpm test:int && pnpm test:e2e","build":"pnpm copyfiles && pnpm build:types && pnpm build:swc","clean":"rimraf {dist,*.tsbuildinfo}","lint:fix":"eslint ./src --fix","test:e2e":"playwright test","test:int":"vitest","build:swc":"swc ./src -d ./dist --config-file .swcrc --strip-leading-paths","changeset":"changeset","copyfiles":"copyfiles -u 1 \"src/**/*.{html,css,scss,ttf,woff,woff2,eot,svg,jpg,png,json}\" dist/","build:types":"tsc --outDir dist --rootDir ./src","dev:payload":"cross-env PAYLOAD_CONFIG_PATH=./dev/payload.config.ts payload","generate:types":"pnpm dev:generate-types","changeset:version":"changeset version","dev:generate-types":"pnpm dev:payload generate:types","generate:importmap":"pnpm dev:generate-importmap","dev:generate-importmap":"pnpm dev:payload generate:importmap"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:19114f32-128e-473e-b3b7-a3c51459066e"}},"_resolved":"/tmp/36b65a6b3e727df29ac5ea0f6a059a32/payload-reserve-1.6.0.tgz","_integrity":"sha512-3YabIqL5QxbMTNSNqrxm5Jh5n8q5mywBGUAb8h6RKLD6EQyyZACt93XwjXXKiIwwJZd2Ls7dKsjBCvlvaGhQyA==","repository":{"url":"git+https://github.com/elghaied/payload-reserve.git","type":"git"},"_npmVersion":"11.16.0","description":"A Payload CMS 3.x plugin for reservation and booking management with conflict detection, status workflows, and calendar UI","directories":{},"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"next":"15.4.11","open":"^10.1.0","react":"19.2.1","sharp":"0.34.2","eslint":"^9.23.0","qs-esm":"7.0.2","rimraf":"3.0.2","vitest":"4.0.18","graphql":"^16.8.1","payload":"3.79.0","@swc/cli":"0.6.0","prettier":"^3.4.2","copyfiles":"2.4.1","cross-env":"^7.0.3","react-dom":"19.2.1","typescript":"5.7.3","@types/node":"22.19.9","@types/react":"19.2.9","@payloadcms/ui":"3.79.0","@changesets/cli":"^2.30.0","@eslint/eslintrc":"^3.2.0","@payloadcms/next":"3.79.0","@playwright/test":"1.56.1","@types/react-dom":"19.2.3","sort-package-json":"^2.10.0","@swc-node/register":"1.10.9","eslint-config-next":"15.4.11","vite-tsconfig-paths":"6.0.5","@payloadcms/db-sqlite":"3.79.0","mongodb-memory-server":"10.1.4","@payloadcms/db-mongodb":"3.79.0","@payloadcms/db-postgres":"3.79.0","@payloadcms/translations":"3.79.0","@payloadcms/eslint-config":"3.9.0","@elghaied/payload-plugin-sms":"^0.3.0","@payloadcms/richtext-lexical":"3.79.0","@payloadcms/plugin-multi-tenant":"3.79.0"},"peerDependencies":{"payload":"^3.79.0","@payloadcms/ui":"^3.79.0","@payloadcms/translations":"^3.79.0"},"_npmOperationalInternal":{"tmp":"tmp/payload-reserve_1.6.0_1781031378036_0.3538272859878362","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"payload-reserve","version":"2.0.0","keywords":["payload","payloadcms","plugin","reservation","booking","appointment","scheduling","calendar"],"author":{"name":"elghaied"},"license":"MIT","_id":"payload-reserve@2.0.0","maintainers":[{"name":"elghaied","email":"elghaied.eslam@gmail.com"}],"homepage":"https://github.com/elghaied/payload-reserve#readme","bugs":{"url":"https://github.com/elghaied/payload-reserve/issues"},"dist":{"shasum":"fe821ebb74d923cd62ac710510b12f3ac6bf61b6","tarball":"https://registry.npmjs.org/payload-reserve/-/payload-reserve-2.0.0.tgz","fileCount":179,"integrity":"sha512-5ymh5YLfxghGM390F9dkSxQ9dpNqzq+uJpv4/XC5cUESngPpCTT8n4xhhuOe+CqigKgCKJDEkghTl/TRKM6Szw==","signatures":[{"sig":"MEQCIH4YMgTHXPEeEa4IZ98ALO2aojgQgt04y03RP7PEMglvAiBmKVL/pdrJOisL4nb2Les6Yt+F5WVfEdUSjCyhhbErAA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/payload-reserve@2.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":883263},"main":"./dist/index.js","type":"module","_from":"file:payload-reserve-2.0.0.tgz","types":"./dist/index.d.ts","engines":{"node":"^18.20.2 || >=20.9.0","pnpm":"^9 || ^10"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./rsc":{"types":"./dist/exports/rsc.d.ts","import":"./dist/exports/rsc.js","default":"./dist/exports/rsc.js"},"./client":{"types":"./dist/exports/client.d.ts","import":"./dist/exports/client.js","default":"./dist/exports/client.js"}},"scripts":{"dev":"next dev dev --turbo","lint":"eslint","test":"pnpm test:int && pnpm test:e2e","build":"pnpm copyfiles && pnpm build:types && pnpm build:swc","clean":"rimraf {dist,*.tsbuildinfo}","lint:fix":"eslint ./src --fix","test:e2e":"playwright test","test:int":"vitest","build:swc":"swc ./src -d ./dist --config-file .swcrc --strip-leading-paths","changeset":"changeset","copyfiles":"copyfiles -u 1 \"src/**/*.{html,css,scss,ttf,woff,woff2,eot,svg,jpg,png,json}\" dist/","build:types":"tsc --outDir dist --rootDir ./src","dev:payload":"cross-env PAYLOAD_CONFIG_PATH=./dev/payload.config.ts payload","generate:types":"pnpm dev:generate-types","changeset:version":"changeset version","dev:generate-types":"pnpm dev:payload generate:types","generate:importmap":"pnpm dev:generate-importmap","dev:generate-importmap":"pnpm dev:payload generate:importmap"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:19114f32-128e-473e-b3b7-a3c51459066e"}},"_resolved":"/tmp/b5804baf4955876f3afe97d9301f54eb/payload-reserve-2.0.0.tgz","_integrity":"sha512-5ymh5YLfxghGM390F9dkSxQ9dpNqzq+uJpv4/XC5cUESngPpCTT8n4xhhuOe+CqigKgCKJDEkghTl/TRKM6Szw==","repository":{"url":"git+https://github.com/elghaied/payload-reserve.git","type":"git"},"_npmVersion":"11.16.0","description":"A Payload CMS 3.x plugin for reservation and booking management with conflict detection, status workflows, and calendar UI","directories":{},"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"next":"15.4.11","open":"^10.1.0","react":"19.2.1","sharp":"0.34.2","eslint":"^9.23.0","qs-esm":"7.0.2","rimraf":"3.0.2","vitest":"4.0.18","graphql":"^16.8.1","payload":"3.79.0","@swc/cli":"0.6.0","prettier":"^3.4.2","copyfiles":"2.4.1","cross-env":"^7.0.3","react-dom":"19.2.1","typescript":"5.7.3","@types/node":"22.19.9","@types/react":"19.2.9","@payloadcms/ui":"3.79.0","@changesets/cli":"^2.30.0","@eslint/eslintrc":"^3.2.0","@payloadcms/next":"3.79.0","@playwright/test":"1.56.1","@types/react-dom":"19.2.3","sort-package-json":"^2.10.0","@swc-node/register":"1.10.9","eslint-config-next":"15.4.11","vite-tsconfig-paths":"6.0.5","@payloadcms/db-sqlite":"3.79.0","mongodb-memory-server":"10.1.4","@payloadcms/db-mongodb":"3.79.0","@payloadcms/db-postgres":"3.79.0","@payloadcms/translations":"3.79.0","@payloadcms/eslint-config":"3.9.0","@elghaied/payload-plugin-sms":"^0.3.0","@payloadcms/richtext-lexical":"3.79.0","@payloadcms/plugin-multi-tenant":"3.79.0"},"peerDependencies":{"payload":"^3.79.0","@payloadcms/ui":"^3.79.0","@payloadcms/translations":"^3.79.0"},"_npmOperationalInternal":{"tmp":"tmp/payload-reserve_2.0.0_1781109923365_0.4145083365191644","host":"s3://npm-registry-packages-npm-production"}},"2.1.0":{"name":"payload-reserve","version":"2.1.0","keywords":["payload","payloadcms","plugin","reservation","booking","appointment","scheduling","calendar"],"author":{"name":"elghaied"},"license":"MIT","_id":"payload-reserve@2.1.0","maintainers":[{"name":"elghaied","email":"elghaied.eslam@gmail.com"}],"homepage":"https://github.com/elghaied/payload-reserve#readme","bugs":{"url":"https://github.com/elghaied/payload-reserve/issues"},"dist":{"shasum":"ae0064769c2d0a085bcde42aa3ec8d6e12b1ffe7","tarball":"https://registry.npmjs.org/payload-reserve/-/payload-reserve-2.1.0.tgz","fileCount":185,"integrity":"sha512-8PeaklASsuYR4g+o+8XZm81v6kAn1jjEHweE2T0vlcqCxpyNje5FqMvb66eWV51WSRtbJ+ohZ4Q3TM/ZuaXmiw==","signatures":[{"sig":"MEYCIQDhOnrUtJUHqdAktL/f2VC4kJWy1uyrz3YQFWMYCu5mXgIhAK66WGcxuNoEDf12XNiCO1RoHaw5/tOurNUHhm6jiqYx","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/payload-reserve@2.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":911924},"main":"./dist/index.js","type":"module","_from":"file:payload-reserve-2.1.0.tgz","types":"./dist/index.d.ts","engines":{"node":"^18.20.2 || >=20.9.0","pnpm":"^9 || ^10"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./rsc":{"types":"./dist/exports/rsc.d.ts","import":"./dist/exports/rsc.js","default":"./dist/exports/rsc.js"},"./client":{"types":"./dist/exports/client.d.ts","import":"./dist/exports/client.js","default":"./dist/exports/client.js"}},"scripts":{"dev":"next dev dev --turbo","lint":"eslint","test":"pnpm test:int && pnpm test:e2e","build":"pnpm copyfiles && pnpm build:types && pnpm build:swc","clean":"rimraf {dist,*.tsbuildinfo}","lint:fix":"eslint ./src --fix","test:e2e":"playwright test","test:int":"vitest","build:swc":"swc ./src -d ./dist --config-file .swcrc --strip-leading-paths","changeset":"changeset","copyfiles":"copyfiles -u 1 \"src/**/*.{html,css,scss,ttf,woff,woff2,eot,svg,jpg,png,json}\" dist/","build:types":"tsc --outDir dist --rootDir ./src","dev:payload":"cross-env PAYLOAD_CONFIG_PATH=./dev/payload.config.ts payload","generate:types":"pnpm dev:generate-types","changeset:version":"changeset version","dev:generate-types":"pnpm dev:payload generate:types","generate:importmap":"pnpm dev:generate-importmap","dev:generate-importmap":"pnpm dev:payload generate:importmap"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:19114f32-128e-473e-b3b7-a3c51459066e"}},"_resolved":"/tmp/d985bb9aceb6332df18ae826da30a99e/payload-reserve-2.1.0.tgz","_integrity":"sha512-8PeaklASsuYR4g+o+8XZm81v6kAn1jjEHweE2T0vlcqCxpyNje5FqMvb66eWV51WSRtbJ+ohZ4Q3TM/ZuaXmiw==","repository":{"url":"git+https://github.com/elghaied/payload-reserve.git","type":"git"},"_npmVersion":"11.16.0","description":"A Payload CMS 3.x plugin for reservation and booking management with conflict detection, status workflows, and calendar UI","directories":{},"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"next":"15.4.11","open":"^10.1.0","react":"19.2.1","sharp":"0.34.2","eslint":"^9.23.0","qs-esm":"7.0.2","rimraf":"3.0.2","vitest":"4.0.18","graphql":"^16.8.1","payload":"3.79.0","@swc/cli":"0.6.0","prettier":"^3.4.2","copyfiles":"2.4.1","cross-env":"^7.0.3","react-dom":"19.2.1","typescript":"5.7.3","@types/node":"22.19.9","@types/react":"19.2.9","@payloadcms/ui":"3.79.0","@changesets/cli":"^2.30.0","@eslint/eslintrc":"^3.2.0","@payloadcms/next":"3.79.0","@playwright/test":"1.56.1","@types/react-dom":"19.2.3","sort-package-json":"^2.10.0","@swc-node/register":"1.10.9","eslint-config-next":"15.4.11","vite-tsconfig-paths":"6.0.5","@payloadcms/db-sqlite":"3.79.0","mongodb-memory-server":"10.1.4","@payloadcms/db-mongodb":"3.79.0","@payloadcms/db-postgres":"3.79.0","@payloadcms/translations":"3.79.0","@payloadcms/eslint-config":"3.9.0","@elghaied/payload-plugin-sms":"^0.3.0","@payloadcms/richtext-lexical":"3.79.0","@payloadcms/plugin-multi-tenant":"3.79.0"},"peerDependencies":{"payload":"^3.79.0","@payloadcms/ui":"^3.79.0","@payloadcms/translations":"^3.79.0"},"_npmOperationalInternal":{"tmp":"tmp/payload-reserve_2.1.0_1781144046617_0.5293354709117783","host":"s3://npm-registry-packages-npm-production"}},"2.1.1":{"name":"payload-reserve","version":"2.1.1","keywords":["payload","payloadcms","plugin","reservation","booking","appointment","scheduling","calendar"],"author":{"name":"elghaied"},"license":"MIT","_id":"payload-reserve@2.1.1","maintainers":[{"name":"elghaied","email":"elghaied.eslam@gmail.com"}],"homepage":"https://github.com/elghaied/payload-reserve#readme","bugs":{"url":"https://github.com/elghaied/payload-reserve/issues"},"dist":{"shasum":"a9e9977614d8658d3825fe7d3d837ff6f039c7e0","tarball":"https://registry.npmjs.org/payload-reserve/-/payload-reserve-2.1.1.tgz","fileCount":185,"integrity":"sha512-EaLBqpZg76yzwLHTYTnqBOCLuWpPcx1HrI72ZKmNp7+VDPm7ag12Dxdczfo1gW2v8ec7tcLQlPN2fHbb7ieYKg==","signatures":[{"sig":"MEUCIQD2qnrz2Hz8eWSMAaoCJGRs7PZ+TvaP91dQCS/U/jbovQIgKqB1e3UQsmfqTCo06FfVZ3R25EsYSUlAJh5Sa/aZI6E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/payload-reserve@2.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":915212},"main":"./dist/index.js","type":"module","_from":"file:payload-reserve-2.1.1.tgz","types":"./dist/index.d.ts","engines":{"node":"^18.20.2 || >=20.9.0","pnpm":"^9 || ^10"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./rsc":{"types":"./dist/exports/rsc.d.ts","import":"./dist/exports/rsc.js","default":"./dist/exports/rsc.js"},"./client":{"types":"./dist/exports/client.d.ts","import":"./dist/exports/client.js","default":"./dist/exports/client.js"}},"scripts":{"dev":"next dev dev --turbo","lint":"eslint","test":"pnpm test:int && pnpm test:e2e","build":"pnpm copyfiles && pnpm build:types && pnpm build:swc","clean":"rimraf {dist,*.tsbuildinfo}","lint:fix":"eslint ./src --fix","test:e2e":"playwright test","test:int":"vitest","build:swc":"swc ./src -d ./dist --config-file .swcrc --strip-leading-paths","changeset":"changeset","copyfiles":"copyfiles -u 1 \"src/**/*.{html,css,scss,ttf,woff,woff2,eot,svg,jpg,png,json}\" dist/","build:types":"tsc --outDir dist --rootDir ./src","dev:payload":"cross-env PAYLOAD_CONFIG_PATH=./dev/payload.config.ts payload","generate:types":"pnpm dev:generate-types","changeset:version":"changeset version","dev:generate-types":"pnpm dev:payload generate:types","generate:importmap":"pnpm dev:generate-importmap","dev:generate-importmap":"pnpm dev:payload generate:importmap"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:19114f32-128e-473e-b3b7-a3c51459066e"}},"_resolved":"/tmp/76c068512d91d17115c1bb9fa2d4d9f2/payload-reserve-2.1.1.tgz","_integrity":"sha512-EaLBqpZg76yzwLHTYTnqBOCLuWpPcx1HrI72ZKmNp7+VDPm7ag12Dxdczfo1gW2v8ec7tcLQlPN2fHbb7ieYKg==","repository":{"url":"git+https://github.com/elghaied/payload-reserve.git","type":"git"},"_npmVersion":"11.17.0","description":"A Payload CMS 3.x plugin for reservation and booking management with conflict detection, status workflows, and calendar UI","directories":{},"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"next":"15.4.11","open":"^10.1.0","react":"19.2.1","sharp":"0.34.2","eslint":"^9.23.0","qs-esm":"7.0.2","rimraf":"3.0.2","vitest":"4.0.18","graphql":"^16.8.1","payload":"3.79.0","@swc/cli":"0.6.0","prettier":"^3.4.2","copyfiles":"2.4.1","cross-env":"^7.0.3","react-dom":"19.2.1","typescript":"5.7.3","@types/node":"22.19.9","@types/react":"19.2.9","@payloadcms/ui":"3.79.0","@changesets/cli":"^2.30.0","@eslint/eslintrc":"^3.2.0","@payloadcms/next":"3.79.0","@playwright/test":"1.56.1","@types/react-dom":"19.2.3","sort-package-json":"^2.10.0","@swc-node/register":"1.10.9","eslint-config-next":"15.4.11","vite-tsconfig-paths":"6.0.5","@payloadcms/db-sqlite":"3.79.0","mongodb-memory-server":"10.1.4","@payloadcms/db-mongodb":"3.79.0","@payloadcms/db-postgres":"3.79.0","@payloadcms/translations":"3.79.0","@payloadcms/eslint-config":"3.9.0","@elghaied/payload-plugin-sms":"^0.3.0","@payloadcms/richtext-lexical":"3.79.0","@payloadcms/plugin-multi-tenant":"3.79.0"},"peerDependencies":{"payload":"^3.79.0","@payloadcms/ui":"^3.79.0","@payloadcms/translations":"^3.79.0"},"_npmOperationalInternal":{"tmp":"tmp/payload-reserve_2.1.1_1781889618697_0.8119605551617657","host":"s3://npm-registry-packages-npm-production"}},"2.2.0":{"name":"payload-reserve","version":"2.2.0","keywords":["payload","payloadcms","plugin","reservation","booking","appointment","scheduling","calendar"],"author":{"name":"elghaied"},"license":"MIT","_id":"payload-reserve@2.2.0","maintainers":[{"name":"elghaied","email":"elghaied.eslam@gmail.com"}],"homepage":"https://github.com/elghaied/payload-reserve#readme","bugs":{"url":"https://github.com/elghaied/payload-reserve/issues"},"dist":{"shasum":"563643fe146020dd5a35802bd58a922f5ed2f17d","tarball":"https://registry.npmjs.org/payload-reserve/-/payload-reserve-2.2.0.tgz","fileCount":185,"integrity":"sha512-wcYHmjOW9/wj3Hgf4lDXKJJsqcLtFnoRR6SFAZy2cwnYHvNW8Qp62GPDkA19PTTafh7ER8onATSKRpIVhScR8A==","signatures":[{"sig":"MEUCIQDGToQBVmkc4LXKp09tBWXXs+0JltgeLPS4yQLf1AEssAIgZ/OkCsaKZvSnr9QyPXrRDCIhN/UGxZVJyzs/OFde55g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/payload-reserve@2.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":930089},"main":"./dist/index.js","type":"module","_from":"file:payload-reserve-2.2.0.tgz","types":"./dist/index.d.ts","engines":{"node":"^18.20.2 || >=20.9.0","pnpm":"^9 || ^10"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./rsc":{"types":"./dist/exports/rsc.d.ts","import":"./dist/exports/rsc.js","default":"./dist/exports/rsc.js"},"./client":{"types":"./dist/exports/client.d.ts","import":"./dist/exports/client.js","default":"./dist/exports/client.js"}},"scripts":{"dev":"next dev dev --turbo","lint":"eslint","test":"pnpm test:int && pnpm test:e2e","build":"pnpm copyfiles && pnpm build:types && pnpm build:swc","clean":"rimraf {dist,*.tsbuildinfo}","lint:fix":"eslint ./src --fix","test:e2e":"playwright test","test:int":"vitest","build:swc":"swc ./src -d ./dist --config-file .swcrc --strip-leading-paths","changeset":"changeset","copyfiles":"copyfiles -u 1 \"src/**/*.{html,css,scss,ttf,woff,woff2,eot,svg,jpg,png,json}\" dist/","build:types":"tsc --outDir dist --rootDir ./src","dev:payload":"cross-env PAYLOAD_CONFIG_PATH=./dev/payload.config.ts payload","generate:types":"pnpm dev:generate-types","changeset:version":"changeset version","dev:generate-types":"pnpm dev:payload generate:types","generate:importmap":"pnpm dev:generate-importmap","dev:generate-importmap":"pnpm dev:payload generate:importmap"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:19114f32-128e-473e-b3b7-a3c51459066e"}},"_resolved":"/tmp/98656d27affa6e2e041dbc6011c37f19/payload-reserve-2.2.0.tgz","_integrity":"sha512-wcYHmjOW9/wj3Hgf4lDXKJJsqcLtFnoRR6SFAZy2cwnYHvNW8Qp62GPDkA19PTTafh7ER8onATSKRpIVhScR8A==","repository":{"url":"git+https://github.com/elghaied/payload-reserve.git","type":"git"},"_npmVersion":"11.18.0","description":"A Payload CMS 3.x plugin for reservation and booking management with conflict detection, status workflows, and calendar UI","directories":{},"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"next":"15.4.11","open":"^10.1.0","react":"19.2.1","sharp":"0.34.2","eslint":"^9.23.0","qs-esm":"7.0.2","rimraf":"3.0.2","vitest":"4.0.18","graphql":"^16.8.1","payload":"3.79.0","@swc/cli":"0.6.0","prettier":"^3.4.2","copyfiles":"2.4.1","cross-env":"^7.0.3","react-dom":"19.2.1","typescript":"5.7.3","@types/node":"22.19.9","@types/react":"19.2.9","@payloadcms/ui":"3.79.0","@changesets/cli":"^2.30.0","@eslint/eslintrc":"^3.2.0","@payloadcms/next":"3.79.0","@playwright/test":"1.56.1","@types/react-dom":"19.2.3","sort-package-json":"^2.10.0","@swc-node/register":"1.10.9","eslint-config-next":"15.4.11","vite-tsconfig-paths":"6.0.5","@payloadcms/db-sqlite":"3.79.0","mongodb-memory-server":"10.1.4","@payloadcms/db-mongodb":"3.79.0","@payloadcms/db-postgres":"3.79.0","@payloadcms/translations":"3.79.0","@payloadcms/eslint-config":"3.9.0","@elghaied/payload-plugin-sms":"^0.3.0","@payloadcms/richtext-lexical":"3.79.0","@payloadcms/plugin-multi-tenant":"3.79.0"},"peerDependencies":{"payload":"^3.79.0","@payloadcms/ui":"^3.79.0","@payloadcms/translations":"^3.79.0"},"_npmOperationalInternal":{"tmp":"tmp/payload-reserve_2.2.0_1783051127383_0.12556429049394513","host":"s3://npm-registry-packages-npm-production"}},"2.2.1":{"name":"payload-reserve","version":"2.2.1","keywords":["payload","payloadcms","plugin","reservation","booking","appointment","scheduling","calendar"],"author":{"name":"elghaied"},"license":"MIT","_id":"payload-reserve@2.2.1","maintainers":[{"name":"elghaied","email":"elghaied.eslam@gmail.com"}],"homepage":"https://github.com/elghaied/payload-reserve#readme","bugs":{"url":"https://github.com/elghaied/payload-reserve/issues"},"dist":{"shasum":"68b6b710db9dae2def292d1f13c1893720fa5ed3","tarball":"https://registry.npmjs.org/payload-reserve/-/payload-reserve-2.2.1.tgz","fileCount":185,"integrity":"sha512-uIsc3nPZIdLirAyoNd1d57WHER9PYLSbmtnM/Av4FKYBqSFQqmUFq316owV6XmbojzjzdbhC6F2edjp9SyxosA==","signatures":[{"sig":"MEYCIQCaGP8zk4YtlOkjGd7RkrbGTdDfVPVYgukTLu14om4PLwIhAOahM/DVEiulwOmT0oSMqOz9hZF/wsGqYBbT8rt9eq6u","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/payload-reserve@2.2.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":931227},"main":"./dist/index.js","type":"module","_from":"file:payload-reserve-2.2.1.tgz","types":"./dist/index.d.ts","engines":{"node":"^18.20.2 || >=20.9.0","pnpm":"^9 || ^10"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./rsc":{"types":"./dist/exports/rsc.d.ts","import":"./dist/exports/rsc.js","default":"./dist/exports/rsc.js"},"./client":{"types":"./dist/exports/client.d.ts","import":"./dist/exports/client.js","default":"./dist/exports/client.js"}},"scripts":{"dev":"next dev dev --turbo","lint":"eslint","test":"pnpm test:int && pnpm test:e2e","build":"pnpm copyfiles && pnpm build:types && pnpm build:swc","clean":"rimraf {dist,*.tsbuildinfo}","lint:fix":"eslint ./src --fix","test:e2e":"playwright test","test:int":"vitest","build:swc":"swc ./src -d ./dist --config-file .swcrc --strip-leading-paths","changeset":"changeset","copyfiles":"copyfiles -u 1 \"src/**/*.{html,css,scss,ttf,woff,woff2,eot,svg,jpg,png,json}\" dist/","build:types":"tsc --outDir dist --rootDir ./src","dev:payload":"cross-env PAYLOAD_CONFIG_PATH=./dev/payload.config.ts payload","generate:types":"pnpm dev:generate-types","changeset:version":"changeset version","dev:generate-types":"pnpm dev:payload generate:types","generate:importmap":"pnpm dev:generate-importmap","dev:generate-importmap":"pnpm dev:payload generate:importmap"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:19114f32-128e-473e-b3b7-a3c51459066e"}},"_resolved":"/tmp/152ec1cc98585b8d105f78c6a7c1a143/payload-reserve-2.2.1.tgz","_integrity":"sha512-uIsc3nPZIdLirAyoNd1d57WHER9PYLSbmtnM/Av4FKYBqSFQqmUFq316owV6XmbojzjzdbhC6F2edjp9SyxosA==","repository":{"url":"git+https://github.com/elghaied/payload-reserve.git","type":"git"},"_npmVersion":"11.18.0","description":"A Payload CMS 3.x plugin for reservation and booking management with conflict detection, status workflows, and calendar UI","directories":{},"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"next":"15.4.11","open":"^10.1.0","react":"19.2.1","sharp":"0.34.2","eslint":"^9.23.0","qs-esm":"7.0.2","rimraf":"3.0.2","vitest":"4.0.18","graphql":"^16.8.1","payload":"3.79.0","@swc/cli":"0.6.0","prettier":"^3.4.2","copyfiles":"2.4.1","cross-env":"^7.0.3","react-dom":"19.2.1","typescript":"5.7.3","@types/node":"22.19.9","@types/react":"19.2.9","@payloadcms/ui":"3.79.0","@changesets/cli":"^2.30.0","@eslint/eslintrc":"^3.2.0","@payloadcms/next":"3.79.0","@playwright/test":"1.56.1","@types/react-dom":"19.2.3","sort-package-json":"^2.10.0","@swc-node/register":"1.10.9","eslint-config-next":"15.4.11","vite-tsconfig-paths":"6.0.5","@payloadcms/db-sqlite":"3.79.0","mongodb-memory-server":"10.1.4","@payloadcms/db-mongodb":"3.79.0","@payloadcms/db-postgres":"3.79.0","@payloadcms/translations":"3.79.0","@payloadcms/eslint-config":"3.9.0","@elghaied/payload-plugin-sms":"^0.3.0","@payloadcms/richtext-lexical":"3.79.0","@payloadcms/plugin-multi-tenant":"3.79.0"},"peerDependencies":{"payload":"^3.79.0","@payloadcms/ui":"^3.79.0","@payloadcms/translations":"^3.79.0"},"_npmOperationalInternal":{"tmp":"tmp/payload-reserve_2.2.1_1783059267890_0.6934607345175017","host":"s3://npm-registry-packages-npm-production"}},"2.3.0":{"name":"payload-reserve","version":"2.3.0","keywords":["payload","payloadcms","plugin","reservation","booking","appointment","scheduling","calendar"],"author":{"name":"elghaied"},"license":"MIT","_id":"payload-reserve@2.3.0","maintainers":[{"name":"elghaied","email":"elghaied.eslam@gmail.com"}],"homepage":"https://github.com/elghaied/payload-reserve#readme","bugs":{"url":"https://github.com/elghaied/payload-reserve/issues"},"dist":{"shasum":"53a908ceff798d5c9de0c83638001f9db540cfeb","tarball":"https://registry.npmjs.org/payload-reserve/-/payload-reserve-2.3.0.tgz","fileCount":191,"integrity":"sha512-J4aO2BGr9SeqAzjrt01HnIQVtr/C9vjWkOLlQ1RSfG6LtUvrVtqijPj4vNhnBoK9QHnQjnNk8HWCcxxX9aji4A==","signatures":[{"sig":"MEYCIQC7KonDmPCpfam4rvrljZsl0axdq66GQbmGPSKHfpOaqwIhAO6yap9JLGnnGtbdryFU/Qc/LsqyjKz/GBV+fUt1oV2F","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/payload-reserve@2.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":941475},"main":"./dist/index.js","type":"module","_from":"file:payload-reserve-2.3.0.tgz","types":"./dist/index.d.ts","engines":{"node":"^18.20.2 || >=20.9.0","pnpm":"^9 || ^10"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./rsc":{"types":"./dist/exports/rsc.d.ts","import":"./dist/exports/rsc.js","default":"./dist/exports/rsc.js"},"./client":{"types":"./dist/exports/client.d.ts","import":"./dist/exports/client.js","default":"./dist/exports/client.js"}},"scripts":{"dev":"next dev dev --turbo","lint":"eslint","test":"pnpm test:int && pnpm test:e2e","build":"pnpm copyfiles && pnpm build:types && pnpm build:swc","clean":"rimraf {dist,*.tsbuildinfo}","lint:fix":"eslint ./src --fix","test:e2e":"playwright test","test:int":"vitest","build:swc":"swc ./src -d ./dist --config-file .swcrc --strip-leading-paths","changeset":"changeset","copyfiles":"copyfiles -u 1 \"src/**/*.{html,css,scss,ttf,woff,woff2,eot,svg,jpg,png,json}\" dist/","build:types":"tsc --outDir dist --rootDir ./src","dev:payload":"cross-env PAYLOAD_CONFIG_PATH=./dev/payload.config.ts payload","generate:types":"pnpm dev:generate-types","changeset:version":"changeset version","dev:generate-types":"pnpm dev:payload generate:types","generate:importmap":"pnpm dev:generate-importmap","dev:generate-importmap":"pnpm dev:payload generate:importmap"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:19114f32-128e-473e-b3b7-a3c51459066e"}},"_resolved":"/tmp/e08533d0a7343ad6fdc2a89c1db4df3b/payload-reserve-2.3.0.tgz","_integrity":"sha512-J4aO2BGr9SeqAzjrt01HnIQVtr/C9vjWkOLlQ1RSfG6LtUvrVtqijPj4vNhnBoK9QHnQjnNk8HWCcxxX9aji4A==","repository":{"url":"git+https://github.com/elghaied/payload-reserve.git","type":"git"},"_npmVersion":"11.18.0","description":"A Payload CMS 3.x plugin for reservation and booking management with conflict detection, status workflows, and calendar UI","directories":{},"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"next":"15.4.11","open":"^10.1.0","react":"19.2.1","sharp":"0.34.2","eslint":"^9.23.0","qs-esm":"7.0.2","rimraf":"3.0.2","vitest":"4.0.18","graphql":"^16.8.1","payload":"3.79.0","@swc/cli":"0.6.0","prettier":"^3.4.2","copyfiles":"2.4.1","cross-env":"^7.0.3","react-dom":"19.2.1","typescript":"5.7.3","@types/node":"22.19.9","@types/react":"19.2.9","@payloadcms/ui":"3.79.0","@changesets/cli":"^2.30.0","@eslint/eslintrc":"^3.2.0","@payloadcms/next":"3.79.0","@playwright/test":"1.56.1","@types/react-dom":"19.2.3","sort-package-json":"^2.10.0","@swc-node/register":"1.10.9","eslint-config-next":"15.4.11","vite-tsconfig-paths":"6.0.5","@payloadcms/db-sqlite":"3.79.0","mongodb-memory-server":"10.1.4","@payloadcms/db-mongodb":"3.79.0","@payloadcms/db-postgres":"3.79.0","@payloadcms/translations":"3.79.0","@payloadcms/eslint-config":"3.9.0","@elghaied/payload-plugin-sms":"^0.3.0","@payloadcms/richtext-lexical":"3.79.0","@payloadcms/plugin-multi-tenant":"3.79.0"},"peerDependencies":{"payload":"^3.79.0","@payloadcms/ui":"^3.79.0","@payloadcms/translations":"^3.79.0"},"_npmOperationalInternal":{"tmp":"tmp/payload-reserve_2.3.0_1783063786287_0.3355104885631295","host":"s3://npm-registry-packages-npm-production"}},"2.4.0":{"name":"payload-reserve","version":"2.4.0","keywords":["payload","payloadcms","plugin","reservation","booking","appointment","scheduling","calendar"],"author":{"name":"elghaied"},"license":"MIT","_id":"payload-reserve@2.4.0","maintainers":[{"name":"elghaied","email":"elghaied.eslam@gmail.com"}],"homepage":"https://github.com/elghaied/payload-reserve#readme","bugs":{"url":"https://github.com/elghaied/payload-reserve/issues"},"dist":{"shasum":"14b0fcca54ad93fdf4387d0c766a9c310f453a8c","tarball":"https://registry.npmjs.org/payload-reserve/-/payload-reserve-2.4.0.tgz","fileCount":194,"integrity":"sha512-Hb28vhuRibuk2NyDBBlf6LbFPt2PnV5oEYzMQjNPSG8/WiQV5FJo6uaoUJSIMsu5CalnKJ4fZr/ov98RGeORkw==","signatures":[{"sig":"MEUCIC90ykKz9enutmvaDMo5NT11muFhmemy9g8GRRErijpXAiEA6NwR8X4fRQX2ifCZGSs/nykJ9YJPNXlmAH3iB/J+fRQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/payload-reserve@2.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":964247},"main":"./dist/index.js","type":"module","_from":"file:payload-reserve-2.4.0.tgz","types":"./dist/index.d.ts","engines":{"node":"^18.20.2 || >=20.9.0","pnpm":"^9 || ^10"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./rsc":{"types":"./dist/exports/rsc.d.ts","import":"./dist/exports/rsc.js","default":"./dist/exports/rsc.js"},"./client":{"types":"./dist/exports/client.d.ts","import":"./dist/exports/client.js","default":"./dist/exports/client.js"}},"scripts":{"dev":"next dev dev --turbo","lint":"eslint","test":"pnpm test:int && pnpm test:e2e","build":"pnpm copyfiles && pnpm build:types && pnpm build:swc","clean":"rimraf {dist,*.tsbuildinfo}","lint:fix":"eslint ./src --fix","test:e2e":"playwright test","test:int":"vitest","build:swc":"swc ./src -d ./dist --config-file .swcrc --strip-leading-paths","changeset":"changeset","copyfiles":"copyfiles -u 1 \"src/**/*.{html,css,scss,ttf,woff,woff2,eot,svg,jpg,png,json}\" dist/","build:types":"tsc --outDir dist --rootDir ./src","dev:payload":"cross-env PAYLOAD_CONFIG_PATH=./dev/payload.config.ts payload","generate:types":"pnpm dev:generate-types","changeset:version":"changeset version","dev:generate-types":"pnpm dev:payload generate:types","generate:importmap":"pnpm dev:generate-importmap","dev:generate-importmap":"pnpm dev:payload generate:importmap"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:19114f32-128e-473e-b3b7-a3c51459066e"}},"_resolved":"/tmp/9d4563d20a568441e9f0457bd005db96/payload-reserve-2.4.0.tgz","_integrity":"sha512-Hb28vhuRibuk2NyDBBlf6LbFPt2PnV5oEYzMQjNPSG8/WiQV5FJo6uaoUJSIMsu5CalnKJ4fZr/ov98RGeORkw==","repository":{"url":"git+https://github.com/elghaied/payload-reserve.git","type":"git"},"_npmVersion":"11.18.0","description":"A Payload CMS 3.x plugin for reservation and booking management with conflict detection, status workflows, and calendar UI","directories":{},"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"next":"15.4.11","open":"^10.1.0","react":"19.2.1","sharp":"0.34.2","eslint":"^9.23.0","qs-esm":"7.0.2","rimraf":"3.0.2","vitest":"4.0.18","graphql":"^16.8.1","payload":"3.79.0","@swc/cli":"0.6.0","prettier":"^3.4.2","copyfiles":"2.4.1","cross-env":"^7.0.3","react-dom":"19.2.1","typescript":"5.7.3","@types/node":"22.19.9","@types/react":"19.2.9","@payloadcms/ui":"3.79.0","@changesets/cli":"^2.30.0","@eslint/eslintrc":"^3.2.0","@payloadcms/next":"3.79.0","@playwright/test":"1.56.1","@types/react-dom":"19.2.3","sort-package-json":"^2.10.0","@swc-node/register":"1.10.9","eslint-config-next":"15.4.11","vite-tsconfig-paths":"6.0.5","@payloadcms/db-sqlite":"3.79.0","mongodb-memory-server":"10.1.4","@payloadcms/db-mongodb":"3.79.0","@payloadcms/db-postgres":"3.79.0","@payloadcms/translations":"3.79.0","@payloadcms/eslint-config":"3.9.0","@elghaied/payload-plugin-sms":"^0.3.0","@payloadcms/richtext-lexical":"3.79.0","@payloadcms/plugin-multi-tenant":"3.79.0"},"peerDependencies":{"payload":"^3.79.0","@payloadcms/ui":"^3.79.0","@payloadcms/translations":"^3.79.0"},"_npmOperationalInternal":{"tmp":"tmp/payload-reserve_2.4.0_1784906929594_0.6259376864111892","host":"s3://npm-registry-packages-npm-production"}},"3.0.0":{"name":"payload-reserve","version":"3.0.0","keywords":["payload","payloadcms","plugin","reservation","booking","appointment","scheduling","calendar"],"author":{"name":"elghaied"},"license":"MIT","_id":"payload-reserve@3.0.0","maintainers":[{"name":"elghaied","email":"elghaied.eslam@gmail.com"}],"homepage":"https://github.com/elghaied/payload-reserve#readme","bugs":{"url":"https://github.com/elghaied/payload-reserve/issues"},"dist":{"shasum":"e4d82ac697bb8b83ff283ed98e56a494434539d2","tarball":"https://registry.npmjs.org/payload-reserve/-/payload-reserve-3.0.0.tgz","fileCount":230,"integrity":"sha512-FnhfgTzn/xTcnp18yPFTuHkAUBjz2TIwOfHgvJMfeajp6pCHwfgqjfQZW+2qruNnSHjlQyDN0c+FGjmZXSQZDw==","signatures":[{"sig":"MEQCIHlfpCC+B9MaJu4jnnCgvNEe2k7Q0plFVSzZNz79Y2fJAiAnJAxKUEZhpai5caiFL4LpinEjWWejMLEXeI6sTasdkw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/payload-reserve@3.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1270122},"main":"./dist/index.js","type":"module","_from":"file:payload-reserve-3.0.0.tgz","types":"./dist/index.d.ts","engines":{"node":"^18.20.2 || >=20.9.0","pnpm":"^9 || ^10"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./rsc":{"types":"./dist/exports/rsc.d.ts","import":"./dist/exports/rsc.js","default":"./dist/exports/rsc.js"},"./client":{"types":"./dist/exports/client.d.ts","import":"./dist/exports/client.js","default":"./dist/exports/client.js"}},"scripts":{"dev":"next dev dev --turbo","lint":"eslint","test":"pnpm test:int && pnpm test:e2e","build":"pnpm copyfiles && pnpm build:types && pnpm build:swc","clean":"rimraf {dist,*.tsbuildinfo}","lint:fix":"eslint ./src --fix","test:e2e":"playwright test","test:int":"vitest","build:swc":"swc ./src -d ./dist --config-file .swcrc --strip-leading-paths","changeset":"changeset","copyfiles":"copyfiles -u 1 \"src/**/*.{html,css,scss,ttf,woff,woff2,eot,svg,jpg,png,json}\" dist/","build:types":"tsc --outDir dist --rootDir ./src","dev:payload":"cross-env PAYLOAD_CONFIG_PATH=./dev/payload.config.ts payload","generate:types":"pnpm dev:generate-types","changeset:version":"changeset version","dev:generate-types":"pnpm dev:payload generate:types","generate:importmap":"pnpm dev:generate-importmap","dev:generate-importmap":"pnpm dev:payload generate:importmap"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:19114f32-128e-473e-b3b7-a3c51459066e"}},"_resolved":"/home/runner/work/payload-reserve/payload-reserve/payload-reserve-3.0.0.tgz","_integrity":"sha512-FnhfgTzn/xTcnp18yPFTuHkAUBjz2TIwOfHgvJMfeajp6pCHwfgqjfQZW+2qruNnSHjlQyDN0c+FGjmZXSQZDw==","repository":{"url":"git+https://github.com/elghaied/payload-reserve.git","type":"git"},"_npmVersion":"12.0.2","description":"A Payload CMS 3.x plugin for reservation and booking management with conflict detection, status workflows, and calendar UI","directories":{},"_nodeVersion":"22.23.1","_hasShrinkwrap":false,"devDependencies":{"next":"15.4.11","open":"^10.1.0","react":"19.2.1","sharp":"0.34.2","eslint":"^9.23.0","qs-esm":"7.0.2","rimraf":"3.0.2","vitest":"4.0.18","graphql":"^16.8.1","payload":"3.86.0","@swc/cli":"0.6.0","prettier":"^3.4.2","copyfiles":"2.4.1","cross-env":"^7.0.3","react-dom":"19.2.1","typescript":"5.7.3","@types/node":"22.19.9","@types/react":"19.2.9","@payloadcms/ui":"3.86.0","@changesets/cli":"^2.30.0","@eslint/eslintrc":"^3.2.0","@payloadcms/next":"3.86.0","@playwright/test":"1.56.1","@types/react-dom":"19.2.3","sort-package-json":"^2.10.0","@swc-node/register":"1.10.9","eslint-config-next":"15.4.11","vite-tsconfig-paths":"6.0.5","@payloadcms/db-sqlite":"3.86.0","mongodb-memory-server":"10.1.4","@payloadcms/db-mongodb":"3.86.0","@payloadcms/db-postgres":"3.86.0","@payloadcms/translations":"3.86.0","@payloadcms/eslint-config":"3.9.0","@elghaied/payload-plugin-sms":"^0.3.0","@payloadcms/richtext-lexical":"3.86.0","@payloadcms/plugin-multi-tenant":"3.86.0"},"peerDependencies":{"payload":"^3.86.0","@payloadcms/ui":"^3.86.0","@payloadcms/translations":"^3.86.0"},"_npmOperationalInternal":{"tmp":"tmp/payload-reserve_3.0.0_1785417604957_0.8167728014456981","host":"s3://npm-registry-packages-npm-production"}},"3.0.1":{"name":"payload-reserve","version":"3.0.1","keywords":["payload","payloadcms","plugin","reservation","booking","appointment","scheduling","calendar"],"author":{"name":"elghaied"},"license":"MIT","_id":"payload-reserve@3.0.1","maintainers":[{"name":"elghaied","email":"elghaied.eslam@gmail.com"}],"homepage":"https://github.com/elghaied/payload-reserve#readme","bugs":{"url":"https://github.com/elghaied/payload-reserve/issues"},"dist":{"shasum":"db461dda09f48f42fe71ccc0076a77a4566db1b6","tarball":"https://registry.npmjs.org/payload-reserve/-/payload-reserve-3.0.1.tgz","fileCount":230,"integrity":"sha512-HYONw2IbaAX9yRw6iJipiKsxbZuw79r69ssSMGjGphQXfqLwrOJKBAViCzz903uPt0Nix0qVAjZc+C0PTnKUIg==","signatures":[{"sig":"MEUCIElA9PirdDxtMFf9tfTVDNHwkx6vHb9RF6BolzRt+6dyAiEA4OLIj1sq3tKGclSYTlMEEp342dCQGh8t/V0HjbcFlGQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/payload-reserve@3.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1270705},"main":"./dist/index.js","type":"module","_from":"file:payload-reserve-3.0.1.tgz","types":"./dist/index.d.ts","engines":{"node":"^18.20.2 || >=20.9.0","pnpm":"^9 || ^10"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./rsc":{"types":"./dist/exports/rsc.d.ts","import":"./dist/exports/rsc.js","default":"./dist/exports/rsc.js"},"./client":{"types":"./dist/exports/client.d.ts","import":"./dist/exports/client.js","default":"./dist/exports/client.js"}},"scripts":{"dev":"next dev dev --turbo","lint":"eslint","test":"pnpm test:int && pnpm test:e2e","build":"pnpm copyfiles && pnpm build:types && pnpm build:swc","clean":"rimraf {dist,*.tsbuildinfo}","lint:fix":"eslint ./src --fix","test:e2e":"playwright test","test:int":"vitest","build:swc":"swc ./src -d ./dist --config-file .swcrc --strip-leading-paths","changeset":"changeset","copyfiles":"copyfiles -u 1 \"src/**/*.{html,css,scss,ttf,woff,woff2,eot,svg,jpg,png,json}\" dist/","build:types":"tsc --outDir dist --rootDir ./src","dev:payload":"cross-env PAYLOAD_CONFIG_PATH=./dev/payload.config.ts payload","generate:types":"pnpm dev:generate-types","changeset:version":"changeset version","dev:generate-types":"pnpm dev:payload generate:types","generate:importmap":"pnpm dev:generate-importmap","dev:generate-importmap":"pnpm dev:payload generate:importmap"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:19114f32-128e-473e-b3b7-a3c51459066e"}},"_resolved":"/home/runner/work/payload-reserve/payload-reserve/payload-reserve-3.0.1.tgz","_integrity":"sha512-HYONw2IbaAX9yRw6iJipiKsxbZuw79r69ssSMGjGphQXfqLwrOJKBAViCzz903uPt0Nix0qVAjZc+C0PTnKUIg==","repository":{"url":"git+https://github.com/elghaied/payload-reserve.git","type":"git"},"_npmVersion":"12.0.2","description":"A Payload CMS 3.x plugin for reservation and booking management with conflict detection, status workflows, and calendar UI","directories":{},"_nodeVersion":"22.23.1","_hasShrinkwrap":false,"devDependencies":{"next":"15.4.11","open":"^10.1.0","react":"19.2.1","sharp":"0.34.2","eslint":"^9.23.0","qs-esm":"7.0.2","rimraf":"3.0.2","vitest":"4.0.18","graphql":"^16.8.1","payload":"3.86.0","@swc/cli":"0.6.0","prettier":"^3.4.2","copyfiles":"2.4.1","cross-env":"^7.0.3","react-dom":"19.2.1","typescript":"5.7.3","@types/node":"22.19.9","@types/react":"19.2.9","@payloadcms/ui":"3.86.0","@changesets/cli":"^2.30.0","@eslint/eslintrc":"^3.2.0","@payloadcms/next":"3.86.0","@playwright/test":"1.56.1","@types/react-dom":"19.2.3","sort-package-json":"^2.10.0","@swc-node/register":"1.10.9","eslint-config-next":"15.4.11","vite-tsconfig-paths":"6.0.5","@payloadcms/db-sqlite":"3.86.0","mongodb-memory-server":"10.1.4","@payloadcms/db-mongodb":"3.86.0","@payloadcms/db-postgres":"3.86.0","@payloadcms/translations":"3.86.0","@payloadcms/eslint-config":"3.9.0","@elghaied/payload-plugin-sms":"^0.3.0","@payloadcms/richtext-lexical":"3.86.0","@payloadcms/plugin-multi-tenant":"3.86.0"},"peerDependencies":{"payload":"^3.86.0","@payloadcms/ui":"^3.86.0","@payloadcms/translations":"^3.86.0"},"_npmOperationalInternal":{"tmp":"tmp/payload-reserve_3.0.1_1785418769246_0.9460860221866862","host":"s3://npm-registry-packages-npm-production"}},"3.1.0":{"name":"payload-reserve","version":"3.1.0","keywords":["payload","payloadcms","plugin","reservation","booking","appointment","scheduling","calendar"],"author":{"name":"elghaied"},"license":"MIT","_id":"payload-reserve@3.1.0","maintainers":[{"name":"elghaied","email":"elghaied.eslam@gmail.com"}],"homepage":"https://github.com/elghaied/payload-reserve#readme","bugs":{"url":"https://github.com/elghaied/payload-reserve/issues"},"dist":{"shasum":"4d9c1ffa4a8b08acc66cdda2063924131b27263b","tarball":"https://registry.npmjs.org/payload-reserve/-/payload-reserve-3.1.0.tgz","fileCount":230,"integrity":"sha512-hfRUaHJur6EpRz7KM7k+iadHuSdLCDauujZ9YIWN/osG6+22pjfw+oG1+46J//VuVGYEXlvacAEbvdHPvC+Lvw==","signatures":[{"sig":"MEUCIHpsn4sLci7USI6aDNKM9+7Uzh/lvpfqX7YA0zMK86OOAiEAtqv/honca7lTPGims8kvTLyctSAqDfwbsu3C5jOmBvU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/payload-reserve@3.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1283410},"main":"./dist/index.js","type":"module","_from":"file:payload-reserve-3.1.0.tgz","types":"./dist/index.d.ts","engines":{"node":"^18.20.2 || >=20.9.0","pnpm":"^9 || ^10"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./rsc":{"types":"./dist/exports/rsc.d.ts","import":"./dist/exports/rsc.js","default":"./dist/exports/rsc.js"},"./client":{"types":"./dist/exports/client.d.ts","import":"./dist/exports/client.js","default":"./dist/exports/client.js"}},"scripts":{"dev":"next dev dev --turbo","lint":"eslint","test":"pnpm test:int && pnpm test:e2e","build":"pnpm copyfiles && pnpm build:types && pnpm build:swc","clean":"rimraf {dist,*.tsbuildinfo}","lint:fix":"eslint ./src --fix","test:e2e":"playwright test","test:int":"vitest","build:swc":"swc ./src -d ./dist --config-file .swcrc --strip-leading-paths","changeset":"changeset","copyfiles":"copyfiles -u 1 \"src/**/*.{html,css,scss,ttf,woff,woff2,eot,svg,jpg,png,json}\" dist/","build:types":"tsc --outDir dist --rootDir ./src","dev:payload":"cross-env PAYLOAD_CONFIG_PATH=./dev/payload.config.ts payload","generate:types":"pnpm dev:generate-types","changeset:version":"changeset version","dev:generate-types":"pnpm dev:payload generate:types","generate:importmap":"pnpm dev:generate-importmap","dev:generate-importmap":"pnpm dev:payload generate:importmap"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:19114f32-128e-473e-b3b7-a3c51459066e"}},"_resolved":"/home/runner/work/payload-reserve/payload-reserve/payload-reserve-3.1.0.tgz","_integrity":"sha512-hfRUaHJur6EpRz7KM7k+iadHuSdLCDauujZ9YIWN/osG6+22pjfw+oG1+46J//VuVGYEXlvacAEbvdHPvC+Lvw==","repository":{"url":"git+https://github.com/elghaied/payload-reserve.git","type":"git"},"_npmVersion":"12.0.2","description":"A Payload CMS 3.x plugin for reservation and booking management with conflict detection, status workflows, and calendar UI","directories":{},"_nodeVersion":"22.23.1","_hasShrinkwrap":false,"devDependencies":{"next":"15.4.11","open":"^10.1.0","react":"19.2.1","sharp":"0.34.2","eslint":"^9.23.0","qs-esm":"7.0.2","rimraf":"3.0.2","vitest":"4.0.18","graphql":"^16.8.1","payload":"3.86.0","@swc/cli":"0.6.0","prettier":"^3.4.2","copyfiles":"2.4.1","cross-env":"^7.0.3","react-dom":"19.2.1","typescript":"5.7.3","@types/node":"22.19.9","@types/react":"19.2.9","@payloadcms/ui":"3.86.0","@changesets/cli":"^2.30.0","@eslint/eslintrc":"^3.2.0","@payloadcms/next":"3.86.0","@playwright/test":"1.56.1","@types/react-dom":"19.2.3","sort-package-json":"^2.10.0","@swc-node/register":"1.10.9","eslint-config-next":"15.4.11","vite-tsconfig-paths":"6.0.5","@payloadcms/db-sqlite":"3.86.0","mongodb-memory-server":"10.1.4","@payloadcms/db-mongodb":"3.86.0","@payloadcms/db-postgres":"3.86.0","@payloadcms/translations":"3.86.0","@payloadcms/eslint-config":"3.9.0","@elghaied/payload-plugin-sms":"^0.3.0","@payloadcms/richtext-lexical":"3.86.0","@payloadcms/plugin-multi-tenant":"3.86.0"},"peerDependencies":{"payload":"^3.86.0","@payloadcms/ui":"^3.86.0","@payloadcms/translations":"^3.86.0"},"_npmOperationalInternal":{"tmp":"tmp/payload-reserve_3.1.0_1786515353497_0.3098214658018277","host":"s3://npm-registry-packages-npm-production"}},"3.1.1":{"name":"payload-reserve","version":"3.1.1","keywords":["payload","payloadcms","plugin","reservation","booking","appointment","scheduling","calendar"],"author":{"name":"elghaied"},"license":"MIT","_id":"payload-reserve@3.1.1","maintainers":[{"name":"elghaied","email":"elghaied.eslam@gmail.com"}],"homepage":"https://github.com/elghaied/payload-reserve#readme","bugs":{"url":"https://github.com/elghaied/payload-reserve/issues"},"dist":{"shasum":"9ce80f462e727a06f71306b2e525adf4184b28c4","tarball":"https://registry.npmjs.org/payload-reserve/-/payload-reserve-3.1.1.tgz","fileCount":230,"integrity":"sha512-TkTkndJGoBB13zljNz79A4Dw+xGlV6MRdz0yPseMmLOnkCSXPZHMGvPMFVzSvv0v5kAvR6F7/sXHOMgKOURqKw==","signatures":[{"sig":"MEYCIQCUlSLQs8edYOVV7LVLTqB/z/KMzDwRhpTIBONL03eumQIhAOBpfZJHc5uO/4dGyXPjL6sbdTzL3PLDpuEH5ufomvtc","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/payload-reserve@3.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1292019},"main":"./dist/index.js","type":"module","_from":"file:payload-reserve-3.1.1.tgz","types":"./dist/index.d.ts","engines":{"node":"^18.20.2 || >=20.9.0","pnpm":"^9 || ^10"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./rsc":{"types":"./dist/exports/rsc.d.ts","import":"./dist/exports/rsc.js","default":"./dist/exports/rsc.js"},"./client":{"types":"./dist/exports/client.d.ts","import":"./dist/exports/client.js","default":"./dist/exports/client.js"}},"scripts":{"dev":"next dev dev --turbo","lint":"eslint","test":"pnpm test:int && pnpm test:e2e","build":"pnpm copyfiles && pnpm build:types && pnpm build:swc","clean":"rimraf {dist,*.tsbuildinfo}","lint:fix":"eslint ./src --fix","test:e2e":"playwright test","test:int":"vitest","build:swc":"swc ./src -d ./dist --config-file .swcrc --strip-leading-paths","changeset":"changeset","copyfiles":"copyfiles -u 1 \"src/**/*.{html,css,scss,ttf,woff,woff2,eot,svg,jpg,png,json}\" dist/","build:types":"tsc --outDir dist --rootDir ./src","dev:payload":"cross-env PAYLOAD_CONFIG_PATH=./dev/payload.config.ts payload","generate:types":"pnpm dev:generate-types","changeset:version":"changeset version","dev:generate-types":"pnpm dev:payload generate:types","generate:importmap":"pnpm dev:generate-importmap","dev:generate-importmap":"pnpm dev:payload generate:importmap"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:19114f32-128e-473e-b3b7-a3c51459066e"}},"_resolved":"/home/runner/work/payload-reserve/payload-reserve/payload-reserve-3.1.1.tgz","_integrity":"sha512-TkTkndJGoBB13zljNz79A4Dw+xGlV6MRdz0yPseMmLOnkCSXPZHMGvPMFVzSvv0v5kAvR6F7/sXHOMgKOURqKw==","repository":{"url":"git+https://github.com/elghaied/payload-reserve.git","type":"git"},"_npmVersion":"12.0.2","description":"A Payload CMS 3.x plugin for reservation and booking management with conflict detection, status workflows, and calendar UI","directories":{},"_nodeVersion":"22.23.1","_hasShrinkwrap":false,"devDependencies":{"next":"15.4.11","open":"^10.1.0","react":"19.2.1","sharp":"0.34.2","eslint":"^9.23.0","qs-esm":"7.0.2","rimraf":"3.0.2","vitest":"4.0.18","graphql":"^16.8.1","payload":"3.86.0","@swc/cli":"0.6.0","prettier":"^3.4.2","copyfiles":"2.4.1","cross-env":"^7.0.3","react-dom":"19.2.1","typescript":"5.7.3","@types/node":"22.19.9","@types/react":"19.2.9","@payloadcms/ui":"3.86.0","@changesets/cli":"^2.30.0","@eslint/eslintrc":"^3.2.0","@payloadcms/next":"3.86.0","@playwright/test":"1.56.1","@types/react-dom":"19.2.3","sort-package-json":"^2.10.0","@swc-node/register":"1.10.9","eslint-config-next":"15.4.11","vite-tsconfig-paths":"6.0.5","@payloadcms/db-sqlite":"3.86.0","mongodb-memory-server":"10.1.4","@payloadcms/db-mongodb":"3.86.0","@payloadcms/db-postgres":"3.86.0","@payloadcms/translations":"3.86.0","@payloadcms/eslint-config":"3.9.0","@elghaied/payload-plugin-sms":"^0.3.0","@payloadcms/richtext-lexical":"3.86.0","@payloadcms/plugin-multi-tenant":"3.86.0"},"peerDependencies":{"payload":"^3.86.0","@payloadcms/ui":"^3.86.0","@payloadcms/translations":"^3.86.0"},"_npmOperationalInternal":{"tmp":"tmp/payload-reserve_3.1.1_1786630838017_0.9510992214856528","host":"s3://npm-registry-packages-npm-production"}},"4.0.0":{"name":"payload-reserve","version":"4.0.0","keywords":["payload","payloadcms","plugin","reservation","booking","appointment","scheduling","calendar"],"author":{"name":"elghaied"},"license":"MIT","_id":"payload-reserve@4.0.0","maintainers":[{"name":"elghaied","email":"elghaied.eslam@gmail.com"}],"homepage":"https://github.com/elghaied/payload-reserve#readme","bugs":{"url":"https://github.com/elghaied/payload-reserve/issues"},"dist":{"shasum":"95946e6d1286306b70207e0efeb10a5465459f2a","tarball":"https://registry.npmjs.org/payload-reserve/-/payload-reserve-4.0.0.tgz","fileCount":283,"integrity":"sha512-RRXwpCJfhzbvuNcDa+fJ7+wCtC0lqxDfs8+09FI8pL8yJPNZDhahMbGuMZQa4ZFJ9ibM+oUsdh7DmEogvrxYEQ==","signatures":[{"sig":"MEUCIGdCiN/wBiLTbQzXz0kgq1CWtmjDNPv79T1uYHVXDLnBAiEA/i/xdCzifKQRcU2JGmZ1YQN+5BmYahqBSV8LJ/7xllc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/payload-reserve@4.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1444834},"main":"./dist/index.js","type":"module","_from":"file:payload-reserve-4.0.0.tgz","types":"./dist/index.d.ts","engines":{"node":"^18.20.2 || >=20.9.0","pnpm":"^9 || ^10"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./rsc":{"types":"./dist/exports/rsc.d.ts","import":"./dist/exports/rsc.js","default":"./dist/exports/rsc.js"},"./client":{"types":"./dist/exports/client.d.ts","import":"./dist/exports/client.js","default":"./dist/exports/client.js"}},"scripts":{"dev":"next dev dev --turbo","lint":"eslint","test":"pnpm test:int && pnpm test:e2e","build":"pnpm copyfiles && pnpm build:types && pnpm build:swc","clean":"rimraf {dist,*.tsbuildinfo}","lint:fix":"eslint ./src --fix","test:e2e":"playwright test","test:int":"vitest","build:swc":"swc ./src -d ./dist --config-file .swcrc --strip-leading-paths","changeset":"changeset","copyfiles":"copyfiles -u 1 \"src/**/*.{html,css,scss,ttf,woff,woff2,eot,svg,jpg,png,json}\" dist/","build:types":"tsc --outDir dist --rootDir ./src","dev:payload":"cross-env PAYLOAD_CONFIG_PATH=./dev/payload.config.ts payload","generate:types":"pnpm dev:generate-types","changeset:version":"changeset version","dev:generate-types":"pnpm dev:payload generate:types","generate:importmap":"pnpm dev:generate-importmap","dev:generate-importmap":"pnpm dev:payload generate:importmap"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:19114f32-128e-473e-b3b7-a3c51459066e"}},"_resolved":"/home/runner/work/payload-reserve/payload-reserve/payload-reserve-4.0.0.tgz","_integrity":"sha512-RRXwpCJfhzbvuNcDa+fJ7+wCtC0lqxDfs8+09FI8pL8yJPNZDhahMbGuMZQa4ZFJ9ibM+oUsdh7DmEogvrxYEQ==","repository":{"url":"git+https://github.com/elghaied/payload-reserve.git","type":"git"},"_npmVersion":"12.0.2","description":"A Payload CMS 3.x plugin for reservation and booking management with conflict detection, status workflows, and calendar UI","directories":{},"_nodeVersion":"22.23.2","_hasShrinkwrap":false,"devDependencies":{"next":"15.4.11","open":"^10.1.0","jsdom":"^30.0.1","react":"19.2.1","sharp":"0.34.2","eslint":"^9.23.0","qs-esm":"7.0.2","rimraf":"3.0.2","vitest":"4.0.18","graphql":"^16.8.1","payload":"3.86.0","@swc/cli":"0.6.0","prettier":"^3.4.2","copyfiles":"2.4.1","cross-env":"^7.0.3","react-dom":"19.2.1","typescript":"5.7.3","@types/node":"22.19.9","@types/react":"19.2.9","@payloadcms/ui":"3.86.0","@changesets/cli":"^2.30.0","@eslint/eslintrc":"^3.2.0","@payloadcms/next":"3.86.0","@playwright/test":"1.56.1","@types/react-dom":"19.2.3","sort-package-json":"^2.10.0","@swc-node/register":"1.10.9","eslint-config-next":"15.4.11","vite-tsconfig-paths":"6.0.5","@payloadcms/db-sqlite":"3.86.0","mongodb-memory-server":"10.1.4","@payloadcms/db-mongodb":"3.86.0","@testing-library/react":"^16.3.2","@payloadcms/db-postgres":"3.86.0","@payloadcms/translations":"3.86.0","@payloadcms/eslint-config":"3.9.0","@testing-library/jest-dom":"^7.0.1","@elghaied/payload-plugin-sms":"^0.3.0","@payloadcms/richtext-lexical":"3.86.0","@payloadcms/plugin-multi-tenant":"3.86.0"},"peerDependencies":{"payload":"^3.86.0","@payloadcms/ui":"^3.86.0","@payloadcms/translations":"^3.86.0"},"_npmOperationalInternal":{"tmp":"tmp/payload-reserve_4.0.0_1787348766651_0.6108661228084138","host":"s3://npm-registry-packages-npm-production"}},"4.1.0":{"name":"payload-reserve","version":"4.1.0","keywords":["payload","payloadcms","plugin","reservation","booking","appointment","scheduling","calendar"],"author":{"name":"elghaied"},"license":"MIT","_id":"payload-reserve@4.1.0","maintainers":[{"name":"elghaied","email":"elghaied.eslam@gmail.com"}],"homepage":"https://github.com/elghaied/payload-reserve#readme","bugs":{"url":"https://github.com/elghaied/payload-reserve/issues"},"dist":{"shasum":"4f6a70bfb4259d7a21f4ef440c6d802768d4a179","tarball":"https://registry.npmjs.org/payload-reserve/-/payload-reserve-4.1.0.tgz","fileCount":286,"integrity":"sha512-53qYSICUr81lhW6HgbH1W3Muiu+vt2kJQB4HnM0YGMGC7wAJtXtmL3qNSkmN6I8nkHb8Go6oFucfCIX1gzOk0g==","signatures":[{"sig":"MEUCIQCBfB3OvV1kG3fA9mxg//7cwk/AqEenIey5hsY8pADMWQIgFzIy5PqEKq1OnOLZoio1LIVFV8CnDRtPKfS0DvNSJV4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/payload-reserve@4.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1456995},"main":"./dist/index.js","type":"module","_from":"file:payload-reserve-4.1.0.tgz","types":"./dist/index.d.ts","engines":{"node":"^18.20.2 || >=20.9.0","pnpm":"^9 || ^10"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./rsc":{"types":"./dist/exports/rsc.d.ts","import":"./dist/exports/rsc.js","default":"./dist/exports/rsc.js"},"./client":{"types":"./dist/exports/client.d.ts","import":"./dist/exports/client.js","default":"./dist/exports/client.js"}},"scripts":{"dev":"next dev dev --turbo","lint":"eslint","test":"pnpm test:int && pnpm test:e2e","build":"pnpm copyfiles && pnpm build:types && pnpm build:swc","clean":"rimraf {dist,*.tsbuildinfo}","lint:fix":"eslint ./src --fix","test:e2e":"playwright test","test:int":"vitest","build:swc":"swc ./src -d ./dist --config-file .swcrc --strip-leading-paths","changeset":"changeset","copyfiles":"copyfiles -u 1 \"src/**/*.{html,css,scss,ttf,woff,woff2,eot,svg,jpg,png,json}\" dist/","build:types":"tsc --outDir dist --rootDir ./src","dev:payload":"cross-env PAYLOAD_CONFIG_PATH=./dev/payload.config.ts payload","generate:types":"pnpm dev:generate-types","changeset:version":"changeset version","dev:generate-types":"pnpm dev:payload generate:types","generate:importmap":"pnpm dev:generate-importmap","dev:generate-importmap":"pnpm dev:payload generate:importmap"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:19114f32-128e-473e-b3b7-a3c51459066e"}},"_resolved":"/home/runner/work/payload-reserve/payload-reserve/payload-reserve-4.1.0.tgz","_integrity":"sha512-53qYSICUr81lhW6HgbH1W3Muiu+vt2kJQB4HnM0YGMGC7wAJtXtmL3qNSkmN6I8nkHb8Go6oFucfCIX1gzOk0g==","repository":{"url":"git+https://github.com/elghaied/payload-reserve.git","type":"git"},"_npmVersion":"12.0.2","description":"A Payload CMS 3.x plugin for reservation and booking management with conflict detection, status workflows, and calendar UI","directories":{},"_nodeVersion":"22.23.2","_hasShrinkwrap":false,"devDependencies":{"next":"15.4.11","open":"^10.1.0","jsdom":"^30.0.1","react":"19.2.1","sharp":"0.34.2","eslint":"^9.23.0","qs-esm":"7.0.2","rimraf":"3.0.2","vitest":"4.0.18","graphql":"^16.8.1","payload":"3.86.0","@swc/cli":"0.6.0","prettier":"^3.4.2","copyfiles":"2.4.1","cross-env":"^7.0.3","react-dom":"19.2.1","typescript":"5.7.3","@types/node":"22.19.9","@types/react":"19.2.9","@payloadcms/ui":"3.86.0","@changesets/cli":"^2.30.0","@eslint/eslintrc":"^3.2.0","@payloadcms/next":"3.86.0","@playwright/test":"1.56.1","@types/react-dom":"19.2.3","sort-package-json":"^2.10.0","@swc-node/register":"1.10.9","eslint-config-next":"15.4.11","vite-tsconfig-paths":"6.0.5","@payloadcms/db-sqlite":"3.86.0","mongodb-memory-server":"10.1.4","@payloadcms/db-mongodb":"3.86.0","@testing-library/react":"^16.3.2","@payloadcms/db-postgres":"3.86.0","@payloadcms/translations":"3.86.0","@payloadcms/eslint-config":"3.9.0","@testing-library/jest-dom":"^7.0.1","@elghaied/payload-plugin-sms":"^0.3.0","@payloadcms/richtext-lexical":"3.86.0","@payloadcms/plugin-multi-tenant":"3.86.0"},"peerDependencies":{"payload":"^3.86.0","@payloadcms/ui":"^3.86.0","@payloadcms/translations":"^3.86.0"},"_npmOperationalInternal":{"tmp":"tmp/payload-reserve_4.1.0_1787787942067_0.8214374027317293","host":"s3://npm-registry-packages-npm-production"}},"4.1.1":{"name":"payload-reserve","version":"4.1.1","keywords":["payload","payloadcms","plugin","reservation","booking","appointment","scheduling","calendar"],"author":{"name":"elghaied"},"license":"MIT","_id":"payload-reserve@4.1.1","maintainers":[{"name":"elghaied","email":"elghaied.eslam@gmail.com"}],"homepage":"https://github.com/elghaied/payload-reserve#readme","bugs":{"url":"https://github.com/elghaied/payload-reserve/issues"},"dist":{"shasum":"2e0337c476b945bfe64981e754f4fe5b66782f8e","tarball":"https://registry.npmjs.org/payload-reserve/-/payload-reserve-4.1.1.tgz","fileCount":286,"integrity":"sha512-MGBGB+1b1N7ONjKrWWQ2iTIKTAIXLwPSAF2pOdivhX8wMGvkZuzfpLdraiAXsX6XJCapPX99oB4U/izh3/HoQA==","signatures":[{"sig":"MEUCIF0jY3LxxVkNgO5ZvPYwoe3tcnOY+ckioM5uWcbMEanhAiEAlqESO/MYkx98eSzfGKsfIVKTBLCygLAGZJTTsoViIhE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/payload-reserve@4.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1481732},"main":"./dist/index.js","type":"module","_from":"file:payload-reserve-4.1.1.tgz","types":"./dist/index.d.ts","engines":{"node":"^18.20.2 || >=20.9.0","pnpm":"^9 || ^10"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./rsc":{"types":"./dist/exports/rsc.d.ts","import":"./dist/exports/rsc.js","default":"./dist/exports/rsc.js"},"./client":{"types":"./dist/exports/client.d.ts","import":"./dist/exports/client.js","default":"./dist/exports/client.js"}},"scripts":{"dev":"next dev dev --turbo","lint":"eslint","test":"pnpm test:int && pnpm test:e2e","build":"pnpm copyfiles && pnpm build:types && pnpm build:swc","clean":"rimraf {dist,*.tsbuildinfo}","lint:fix":"eslint ./src --fix","test:e2e":"playwright test","test:int":"vitest","build:swc":"swc ./src -d ./dist --config-file .swcrc --strip-leading-paths","changeset":"changeset","copyfiles":"copyfiles -u 1 \"src/**/*.{html,css,scss,ttf,woff,woff2,eot,svg,jpg,png,json}\" dist/","build:types":"tsc --outDir dist --rootDir ./src","dev:payload":"cross-env PAYLOAD_CONFIG_PATH=./dev/payload.config.ts payload","generate:types":"pnpm dev:generate-types","changeset:version":"changeset version","dev:generate-types":"pnpm dev:payload generate:types","generate:importmap":"pnpm dev:generate-importmap","dev:generate-importmap":"pnpm dev:payload generate:importmap"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:19114f32-128e-473e-b3b7-a3c51459066e"}},"_resolved":"/home/runner/work/payload-reserve/payload-reserve/payload-reserve-4.1.1.tgz","_integrity":"sha512-MGBGB+1b1N7ONjKrWWQ2iTIKTAIXLwPSAF2pOdivhX8wMGvkZuzfpLdraiAXsX6XJCapPX99oB4U/izh3/HoQA==","repository":{"url":"git+https://github.com/elghaied/payload-reserve.git","type":"git"},"_npmVersion":"12.0.2","description":"A Payload CMS 3.x plugin for reservation and booking management with conflict detection, status workflows, and calendar UI","directories":{},"_nodeVersion":"22.23.2","_hasShrinkwrap":false,"devDependencies":{"next":"15.4.11","open":"^10.1.0","jsdom":"^30.0.1","react":"19.2.1","sharp":"0.34.2","eslint":"^9.23.0","qs-esm":"7.0.2","rimraf":"3.0.2","vitest":"4.0.18","graphql":"^16.8.1","payload":"3.86.0","@swc/cli":"0.6.0","prettier":"^3.4.2","copyfiles":"2.4.1","cross-env":"^7.0.3","react-dom":"19.2.1","typescript":"5.7.3","@types/node":"22.19.9","@types/react":"19.2.9","@payloadcms/ui":"3.86.0","@changesets/cli":"^2.30.0","@eslint/eslintrc":"^3.2.0","@payloadcms/next":"3.86.0","@playwright/test":"1.56.1","@types/react-dom":"19.2.3","sort-package-json":"^2.10.0","@swc-node/register":"1.10.9","eslint-config-next":"15.4.11","vite-tsconfig-paths":"6.0.5","@payloadcms/db-sqlite":"3.86.0","mongodb-memory-server":"10.1.4","@payloadcms/db-mongodb":"3.86.0","@testing-library/react":"^16.3.2","@payloadcms/db-postgres":"3.86.0","@payloadcms/translations":"3.86.0","@payloadcms/eslint-config":"3.9.0","@testing-library/jest-dom":"^7.0.1","@elghaied/payload-plugin-sms":"^0.3.0","@payloadcms/richtext-lexical":"3.86.0","@payloadcms/plugin-multi-tenant":"3.86.0"},"peerDependencies":{"payload":"^3.86.0","@payloadcms/ui":"^3.86.0","@payloadcms/translations":"^3.86.0"},"_npmOperationalInternal":{"tmp":"tmp/payload-reserve_4.1.1_1788495155113_0.21849124309774992","host":"s3://npm-registry-packages-npm-production"}},"4.1.2":{"name":"payload-reserve","version":"4.1.2","keywords":["payload","payloadcms","plugin","reservation","booking","appointment","scheduling","calendar"],"author":{"name":"elghaied"},"license":"MIT","_id":"payload-reserve@4.1.2","maintainers":[{"name":"elghaied","email":"elghaied.eslam@gmail.com"}],"homepage":"https://github.com/elghaied/payload-reserve#readme","bugs":{"url":"https://github.com/elghaied/payload-reserve/issues"},"dist":{"shasum":"3c0fda4b24539f5dcb842b40786e53bb09438877","tarball":"https://registry.npmjs.org/payload-reserve/-/payload-reserve-4.1.2.tgz","fileCount":298,"integrity":"sha512-pWkM1BBnirrgyyRmj4nVkJ4PHdlg8FIKnWSH4EWchl9L6+2ZU2Z30RTnifU60RZastK8R3wZbMA+XodKSgNO5Q==","signatures":[{"sig":"MEUCIGBkUSZAYRkM9Csapou00tQn9/xtDIRfbCApmyCcnbgWAiEA/VeasDRQ8CBVqLDEMmbdfQpuDIu7P8IoiEotRHE0Odg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/payload-reserve@4.1.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1593357},"main":"./dist/index.js","type":"module","_from":"file:payload-reserve-4.1.2.tgz","types":"./dist/index.d.ts","engines":{"node":"^18.20.2 || >=20.9.0","pnpm":"^9 || ^10"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./rsc":{"types":"./dist/exports/rsc.d.ts","import":"./dist/exports/rsc.js","default":"./dist/exports/rsc.js"},"./client":{"types":"./dist/exports/client.d.ts","import":"./dist/exports/client.js","default":"./dist/exports/client.js"}},"scripts":{"dev":"next dev dev --turbo","lint":"eslint","test":"pnpm test:int && pnpm test:e2e","build":"pnpm copyfiles && pnpm build:types && pnpm build:swc","clean":"rimraf {dist,*.tsbuildinfo}","lint:fix":"eslint ./src --fix","test:e2e":"playwright test","test:int":"vitest","build:swc":"swc ./src -d ./dist --config-file .swcrc --strip-leading-paths","changeset":"changeset","copyfiles":"copyfiles -u 1 \"src/**/*.{html,css,scss,ttf,woff,woff2,eot,svg,jpg,png,json}\" dist/","build:types":"tsc --outDir dist --rootDir ./src","dev:payload":"cross-env PAYLOAD_CONFIG_PATH=./dev/payload.config.ts payload","generate:types":"pnpm dev:generate-types","changeset:version":"changeset version","dev:generate-types":"pnpm dev:payload generate:types","generate:importmap":"pnpm dev:generate-importmap","dev:generate-importmap":"pnpm dev:payload generate:importmap"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:19114f32-128e-473e-b3b7-a3c51459066e"}},"_resolved":"/home/runner/work/payload-reserve/payload-reserve/payload-reserve-4.1.2.tgz","_integrity":"sha512-pWkM1BBnirrgyyRmj4nVkJ4PHdlg8FIKnWSH4EWchl9L6+2ZU2Z30RTnifU60RZastK8R3wZbMA+XodKSgNO5Q==","repository":{"url":"git+https://github.com/elghaied/payload-reserve.git","type":"git"},"_npmVersion":"12.0.2","description":"A Payload CMS 3.x plugin for reservation and booking management with conflict detection, status workflows, and calendar UI","directories":{},"_nodeVersion":"22.23.2","_hasShrinkwrap":false,"devDependencies":{"next":"15.4.11","open":"^10.1.0","jsdom":"^30.0.1","react":"19.2.1","sharp":"0.34.2","eslint":"^9.23.0","qs-esm":"7.0.2","rimraf":"3.0.2","vitest":"4.0.18","graphql":"^16.8.1","payload":"3.86.0","@swc/cli":"0.6.0","prettier":"^3.4.2","copyfiles":"2.4.1","cross-env":"^7.0.3","react-dom":"19.2.1","typescript":"5.7.3","@types/node":"22.19.9","@types/react":"19.2.9","@payloadcms/ui":"3.86.0","@changesets/cli":"^2.30.0","@eslint/eslintrc":"^3.2.0","@payloadcms/next":"3.86.0","@playwright/test":"1.56.1","@types/react-dom":"19.2.3","sort-package-json":"^2.10.0","@swc-node/register":"1.10.9","eslint-config-next":"15.4.11","vite-tsconfig-paths":"6.0.5","@payloadcms/db-sqlite":"3.86.0","mongodb-memory-server":"10.1.4","@payloadcms/db-mongodb":"3.86.0","@testing-library/react":"^16.3.2","@payloadcms/db-postgres":"3.86.0","@payloadcms/translations":"3.86.0","@payloadcms/eslint-config":"3.9.0","@testing-library/jest-dom":"^7.0.1","@elghaied/payload-plugin-sms":"^0.3.0","@payloadcms/richtext-lexical":"3.86.0","@payloadcms/plugin-multi-tenant":"3.86.0"},"peerDependencies":{"payload":"^3.86.0","@payloadcms/ui":"^3.86.0","@payloadcms/translations":"^3.86.0"},"_npmOperationalInternal":{"tmp":"tmp/payload-reserve_4.1.2_1788498257907_0.789825533263474","host":"s3://npm-registry-packages-npm-production"}},"4.1.3":{"name":"payload-reserve","version":"4.1.3","keywords":["payload","payloadcms","plugin","reservation","booking","appointment","scheduling","calendar"],"author":{"name":"elghaied"},"license":"MIT","_id":"payload-reserve@4.1.3","maintainers":[{"name":"elghaied","email":"elghaied.eslam@gmail.com"}],"homepage":"https://github.com/elghaied/payload-reserve#readme","bugs":{"url":"https://github.com/elghaied/payload-reserve/issues"},"dist":{"shasum":"00cc23f3043089efc7cac9d60d4cd93145fba50e","tarball":"https://registry.npmjs.org/payload-reserve/-/payload-reserve-4.1.3.tgz","fileCount":298,"integrity":"sha512-iuejd7QIWEjpEuTrJ0kBUcb1K3RbNJe+30Uc1KZKljue5lbU+K6XFrdXKUDWUKAXCeFzIkjS/JkqpWwsFBwjCA==","signatures":[{"sig":"MEUCIQCo+hnuVNliAGT8S4nBfBK8fnN0PuRNZfgjf+wgrfhjPAIgYLp++rXc3drXQIqvXMAE0BLnld8iq/Do/jCydMroyBU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/payload-reserve@4.1.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1608371},"main":"./dist/index.js","type":"module","_from":"file:payload-reserve-4.1.3.tgz","types":"./dist/index.d.ts","engines":{"node":"^18.20.2 || >=20.9.0","pnpm":"^9 || ^10"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./rsc":{"types":"./dist/exports/rsc.d.ts","import":"./dist/exports/rsc.js","default":"./dist/exports/rsc.js"},"./client":{"types":"./dist/exports/client.d.ts","import":"./dist/exports/client.js","default":"./dist/exports/client.js"}},"scripts":{"dev":"next dev dev --turbo","lint":"eslint","test":"pnpm test:int && pnpm test:e2e","build":"pnpm copyfiles && pnpm build:types && pnpm build:swc","clean":"rimraf {dist,*.tsbuildinfo}","lint:fix":"eslint ./src --fix","test:e2e":"playwright test","test:int":"vitest","build:swc":"swc ./src -d ./dist --config-file .swcrc --strip-leading-paths","changeset":"changeset","copyfiles":"copyfiles -u 1 \"src/**/*.{html,css,scss,ttf,woff,woff2,eot,svg,jpg,png,json}\" dist/","build:types":"tsc --outDir dist --rootDir ./src","dev:payload":"cross-env PAYLOAD_CONFIG_PATH=./dev/payload.config.ts payload","generate:types":"pnpm dev:generate-types","changeset:version":"changeset version","dev:generate-types":"pnpm dev:payload generate:types","generate:importmap":"pnpm dev:generate-importmap","dev:generate-importmap":"pnpm dev:payload generate:importmap"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:19114f32-128e-473e-b3b7-a3c51459066e"}},"_resolved":"/home/runner/work/payload-reserve/payload-reserve/payload-reserve-4.1.3.tgz","_integrity":"sha512-iuejd7QIWEjpEuTrJ0kBUcb1K3RbNJe+30Uc1KZKljue5lbU+K6XFrdXKUDWUKAXCeFzIkjS/JkqpWwsFBwjCA==","repository":{"url":"git+https://github.com/elghaied/payload-reserve.git","type":"git"},"_npmVersion":"12.0.2","description":"A Payload CMS 3.x plugin for reservation and booking management with conflict detection, status workflows, and calendar UI","directories":{},"_nodeVersion":"22.23.2","_hasShrinkwrap":false,"devDependencies":{"next":"15.4.11","open":"^10.1.0","jsdom":"^30.0.1","react":"19.2.1","sharp":"0.34.2","eslint":"^9.23.0","qs-esm":"7.0.2","rimraf":"3.0.2","vitest":"4.0.18","graphql":"^16.8.1","payload":"3.86.0","@swc/cli":"0.6.0","prettier":"^3.4.2","copyfiles":"2.4.1","cross-env":"^7.0.3","react-dom":"19.2.1","typescript":"5.7.3","@types/node":"22.19.9","@types/react":"19.2.9","@payloadcms/ui":"3.86.0","@changesets/cli":"^2.30.0","@eslint/eslintrc":"^3.2.0","@payloadcms/next":"3.86.0","@playwright/test":"1.56.1","@types/react-dom":"19.2.3","sort-package-json":"^2.10.0","@swc-node/register":"1.10.9","eslint-config-next":"15.4.11","vite-tsconfig-paths":"6.0.5","@payloadcms/db-sqlite":"3.86.0","mongodb-memory-server":"10.1.4","@payloadcms/db-mongodb":"3.86.0","@testing-library/react":"^16.3.2","@payloadcms/db-postgres":"3.86.0","@payloadcms/translations":"3.86.0","@payloadcms/eslint-config":"3.9.0","@testing-library/jest-dom":"^7.0.1","@elghaied/payload-plugin-sms":"^0.3.0","@payloadcms/richtext-lexical":"3.86.0","@payloadcms/plugin-multi-tenant":"3.86.0"},"peerDependencies":{"payload":"^3.86.0","@payloadcms/ui":"^3.86.0","@payloadcms/translations":"^3.86.0"},"_npmOperationalInternal":{"tmp":"tmp/payload-reserve_4.1.3_1788978234922_0.16281324057628788","host":"s3://npm-registry-packages-npm-production"}},"4.2.0":{"name":"payload-reserve","version":"4.2.0","keywords":["payload","payloadcms","plugin","reservation","booking","appointment","scheduling","calendar"],"author":{"name":"elghaied"},"license":"MIT","_id":"payload-reserve@4.2.0","maintainers":[{"name":"elghaied","email":"elghaied.eslam@gmail.com"}],"homepage":"https://github.com/elghaied/payload-reserve#readme","bugs":{"url":"https://github.com/elghaied/payload-reserve/issues"},"dist":{"shasum":"b3150dfe9061fd3328f33acff39990d5d2f1c861","tarball":"https://registry.npmjs.org/payload-reserve/-/payload-reserve-4.2.0.tgz","fileCount":298,"integrity":"sha512-fGYXPG+morkZ6r4T1g1Trfwp8BOzvYjVFNa7r+M3NJ0OzAu0RD5r2aD5I/O+fDXU4nVgV5zt1ia7zYI5OIbsBQ==","signatures":[{"sig":"MEUCIByhL6jbukdzWzwXogfBAdALCj2LQmWEMlpv9Yt5opc5AiEAp9POXdFov0R4Mr6i8er2VGRA8tCx1bD2h2aRvXlyS8Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/payload-reserve@4.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1609253},"main":"./dist/index.js","type":"module","_from":"file:payload-reserve-4.2.0.tgz","types":"./dist/index.d.ts","engines":{"node":"^18.20.2 || >=20.9.0","pnpm":"^9 || ^10"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./rsc":{"types":"./dist/exports/rsc.d.ts","import":"./dist/exports/rsc.js","default":"./dist/exports/rsc.js"},"./client":{"types":"./dist/exports/client.d.ts","import":"./dist/exports/client.js","default":"./dist/exports/client.js"}},"scripts":{"dev":"next dev dev --turbo","lint":"eslint","test":"pnpm test:int && pnpm test:e2e","build":"pnpm copyfiles && pnpm build:types && pnpm build:swc","clean":"rimraf {dist,*.tsbuildinfo}","lint:fix":"eslint ./src --fix","test:e2e":"playwright test","test:int":"vitest","build:swc":"swc ./src -d ./dist --config-file .swcrc --strip-leading-paths","changeset":"changeset","copyfiles":"copyfiles -u 1 \"src/**/*.{html,css,scss,ttf,woff,woff2,eot,svg,jpg,png,json}\" dist/","build:types":"tsc --outDir dist --rootDir ./src","dev:payload":"cross-env PAYLOAD_CONFIG_PATH=./dev/payload.config.ts payload","generate:types":"pnpm dev:generate-types","changeset:version":"changeset version","dev:generate-types":"pnpm dev:payload generate:types","generate:importmap":"pnpm dev:generate-importmap","dev:generate-importmap":"pnpm dev:payload generate:importmap"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:19114f32-128e-473e-b3b7-a3c51459066e"}},"_resolved":"/home/runner/work/payload-reserve/payload-reserve/payload-reserve-4.2.0.tgz","_integrity":"sha512-fGYXPG+morkZ6r4T1g1Trfwp8BOzvYjVFNa7r+M3NJ0OzAu0RD5r2aD5I/O+fDXU4nVgV5zt1ia7zYI5OIbsBQ==","repository":{"url":"git+https://github.com/elghaied/payload-reserve.git","type":"git"},"_npmVersion":"12.0.2","description":"A Payload CMS 3.x plugin for reservation and booking management with conflict detection, status workflows, and calendar UI","directories":{},"_nodeVersion":"22.23.2","_hasShrinkwrap":false,"devDependencies":{"next":"15.4.11","open":"^10.1.0","jsdom":"^30.0.1","react":"19.2.1","sharp":"0.34.2","eslint":"^9.23.0","qs-esm":"7.0.2","rimraf":"3.0.2","vitest":"4.0.18","graphql":"^16.8.1","payload":"3.86.0","@swc/cli":"0.6.0","prettier":"^3.4.2","copyfiles":"2.4.1","cross-env":"^7.0.3","react-dom":"19.2.1","typescript":"5.7.3","@types/node":"22.19.9","@types/react":"19.2.9","@payloadcms/ui":"3.86.0","@changesets/cli":"^2.30.0","@eslint/eslintrc":"^3.2.0","@payloadcms/next":"3.86.0","@playwright/test":"1.56.1","@types/react-dom":"19.2.3","sort-package-json":"^2.10.0","@swc-node/register":"1.10.9","eslint-config-next":"15.4.11","vite-tsconfig-paths":"6.0.5","@payloadcms/db-sqlite":"3.86.0","mongodb-memory-server":"10.1.4","@payloadcms/db-mongodb":"3.86.0","@testing-library/react":"^16.3.2","@payloadcms/db-postgres":"3.86.0","@payloadcms/translations":"3.86.0","@payloadcms/eslint-config":"3.9.0","@testing-library/jest-dom":"^7.0.1","@elghaied/payload-plugin-sms":"^0.3.0","@payloadcms/richtext-lexical":"3.86.0","@payloadcms/plugin-multi-tenant":"3.86.0"},"peerDependencies":{"payload":"^3.86.0","@payloadcms/ui":"^3.86.0","@payloadcms/translations":"^3.86.0"},"_npmOperationalInternal":{"tmp":"tmp/payload-reserve_4.2.0_1789659078064_0.9303246671965382","host":"s3://npm-registry-packages-npm-production"}},"4.3.0":{"name":"payload-reserve","version":"4.3.0","keywords":["payload","payloadcms","plugin","reservation","booking","appointment","scheduling","calendar"],"author":{"name":"elghaied"},"license":"MIT","_id":"payload-reserve@4.3.0","maintainers":[{"name":"elghaied","email":"elghaied.eslam@gmail.com"}],"homepage":"https://github.com/elghaied/payload-reserve#readme","bugs":{"url":"https://github.com/elghaied/payload-reserve/issues"},"dist":{"shasum":"7f68a3a3e40d42bd8df3b256b9f37344ef33fdb9","tarball":"https://registry.npmjs.org/payload-reserve/-/payload-reserve-4.3.0.tgz","fileCount":301,"integrity":"sha512-s40ZA6HhpuXj4iBSKu9zVF/glLNIGKZ0XxgLTkGKUow4R9HZNMvKacFl416xKk3Q3Ghy8j4sjdj4IcP+ZxfW1g==","signatures":[{"sig":"MEQCIFSWpORqf3tegMyR2cUw5mzMy9SXN+HSt+klAyBkDrOkAiBljCz/yHNSgdlngDdaDvpEF/cB4emuFyti2xF2ciwCJw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIBaB1Of4Ih2SYF28vvCg0+b+p/VyLdb63pFFiHaSPBqoAiBj0/7plzgPn6sClQ7dusiQVvD/kX34NAxpfVt1cGJO1A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/payload-reserve@4.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1672369},"main":"./dist/index.js","type":"module","_from":"file:payload-reserve-4.3.0.tgz","types":"./dist/index.d.ts","engines":{"node":"^18.20.2 || >=20.9.0","pnpm":"^9 || ^10"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./rsc":{"types":"./dist/exports/rsc.d.ts","import":"./dist/exports/rsc.js","default":"./dist/exports/rsc.js"},"./client":{"types":"./dist/exports/client.d.ts","import":"./dist/exports/client.js","default":"./dist/exports/client.js"}},"scripts":{"dev":"next dev dev --turbo","lint":"eslint","test":"pnpm test:int && pnpm test:e2e","build":"pnpm copyfiles && pnpm build:types && pnpm build:swc","clean":"rimraf {dist,*.tsbuildinfo}","lint:fix":"eslint ./src --fix","test:e2e":"playwright test","test:int":"vitest","build:swc":"swc ./src -d ./dist --config-file .swcrc --strip-leading-paths","changeset":"changeset","copyfiles":"copyfiles -u 1 \"src/**/*.{html,css,scss,ttf,woff,woff2,eot,svg,jpg,png,json}\" dist/","build:types":"tsc --outDir dist --rootDir ./src","dev:payload":"cross-env PAYLOAD_CONFIG_PATH=./dev/payload.config.ts payload","generate:types":"pnpm dev:generate-types","changeset:version":"changeset version","dev:generate-types":"pnpm dev:payload generate:types","generate:importmap":"pnpm dev:generate-importmap","dev:generate-importmap":"pnpm dev:payload generate:importmap"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:19114f32-128e-473e-b3b7-a3c51459066e"}},"_resolved":"/home/runner/work/payload-reserve/payload-reserve/payload-reserve-4.3.0.tgz","_integrity":"sha512-s40ZA6HhpuXj4iBSKu9zVF/glLNIGKZ0XxgLTkGKUow4R9HZNMvKacFl416xKk3Q3Ghy8j4sjdj4IcP+ZxfW1g==","repository":{"url":"git+https://github.com/elghaied/payload-reserve.git","type":"git"},"_npmVersion":"12.0.2","description":"A Payload CMS 3.x plugin for reservation and booking management with conflict detection, status workflows, and calendar UI","directories":{},"_nodeVersion":"22.23.2","_hasShrinkwrap":false,"devDependencies":{"next":"15.4.11","open":"^10.1.0","jsdom":"^30.0.1","react":"19.2.1","sharp":"0.34.2","eslint":"^9.23.0","qs-esm":"7.0.2","rimraf":"3.0.2","vitest":"4.0.18","graphql":"^16.8.1","payload":"3.86.0","@swc/cli":"0.6.0","prettier":"^3.4.2","copyfiles":"2.4.1","cross-env":"^7.0.3","react-dom":"19.2.1","typescript":"5.7.3","@types/node":"22.19.9","@types/react":"19.2.9","@payloadcms/ui":"3.86.0","@changesets/cli":"^2.30.0","@eslint/eslintrc":"^3.2.0","@payloadcms/next":"3.86.0","@playwright/test":"1.56.1","@types/react-dom":"19.2.3","sort-package-json":"^2.10.0","@swc-node/register":"1.10.9","eslint-config-next":"15.4.11","vite-tsconfig-paths":"6.0.5","@payloadcms/db-sqlite":"3.86.0","mongodb-memory-server":"10.1.4","@payloadcms/db-mongodb":"3.86.0","@testing-library/react":"^16.3.2","@payloadcms/db-postgres":"3.86.0","@payloadcms/translations":"3.86.0","@payloadcms/eslint-config":"3.9.0","@testing-library/jest-dom":"^7.0.1","@elghaied/payload-plugin-sms":"^0.3.0","@payloadcms/richtext-lexical":"3.86.0","@payloadcms/plugin-multi-tenant":"3.86.0"},"peerDependencies":{"payload":"^3.86.0","@payloadcms/ui":"^3.86.0","@payloadcms/translations":"^3.86.0"},"_npmOperationalInternal":{"tmp":"tmp/payload-reserve_4.3.0_1789802020233_0.6426109042753458","host":"s3://npm-registry-packages-npm-production"}},"4.4.0":{"name":"payload-reserve","version":"4.4.0","keywords":["payload","payloadcms","plugin","reservation","booking","appointment","scheduling","calendar"],"author":{"name":"elghaied"},"license":"MIT","_id":"payload-reserve@4.4.0","maintainers":[{"name":"elghaied","email":"elghaied.eslam@gmail.com"}],"homepage":"https://github.com/elghaied/payload-reserve#readme","bugs":{"url":"https://github.com/elghaied/payload-reserve/issues"},"dist":{"shasum":"a1024b54f281f56ad2b79ba7981234a399e3da93","tarball":"https://registry.npmjs.org/payload-reserve/-/payload-reserve-4.4.0.tgz","fileCount":304,"integrity":"sha512-zYtDImuEiQyDBQX2PqHjrFvt5JKDmjJs4aAEeuWIRxhf5oOk95uSfZ70VifO0h32RVJQQqzpaXRSxh455Btp3Q==","signatures":[{"sig":"MEQCIBMcupgdaRDv8yvRZprk4H+QwVVTvNwHj2kpVH+BUI4ZAiAMY1T+jcxmQ+YNFtSOXwtWGqm6nDiiewu9BzAIgGOCdQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIGGzchfuuD8nT/dp8A/kbFJoZt8/xkJvbW7TiGg3psjhAiB4zX9G2JYQA5yLxYYQXkZLov956xUl8JSaIyos/1dcGw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/payload-reserve@4.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1689222},"main":"./dist/index.js","type":"module","_from":"file:payload-reserve-4.4.0.tgz","types":"./dist/index.d.ts","engines":{"node":"^18.20.2 || >=20.9.0","pnpm":"^9 || ^10"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./rsc":{"types":"./dist/exports/rsc.d.ts","import":"./dist/exports/rsc.js","default":"./dist/exports/rsc.js"},"./client":{"types":"./dist/exports/client.d.ts","import":"./dist/exports/client.js","default":"./dist/exports/client.js"}},"scripts":{"dev":"next dev dev --turbo","lint":"eslint","test":"pnpm test:int && pnpm test:e2e","build":"pnpm copyfiles && pnpm build:types && pnpm build:swc","clean":"rimraf {dist,*.tsbuildinfo}","lint:fix":"eslint ./src --fix","test:e2e":"playwright test","test:int":"vitest","build:swc":"swc ./src -d ./dist --config-file .swcrc --strip-leading-paths","changeset":"changeset","copyfiles":"copyfiles -u 1 \"src/**/*.{html,css,scss,ttf,woff,woff2,eot,svg,jpg,png,json}\" dist/","build:types":"tsc --outDir dist --rootDir ./src","dev:payload":"cross-env PAYLOAD_CONFIG_PATH=./dev/payload.config.ts payload","generate:types":"pnpm dev:generate-types","changeset:version":"changeset version","dev:generate-types":"pnpm dev:payload generate:types","generate:importmap":"pnpm dev:generate-importmap","dev:generate-importmap":"pnpm dev:payload generate:importmap"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:19114f32-128e-473e-b3b7-a3c51459066e"}},"_resolved":"/home/runner/work/payload-reserve/payload-reserve/payload-reserve-4.4.0.tgz","_integrity":"sha512-zYtDImuEiQyDBQX2PqHjrFvt5JKDmjJs4aAEeuWIRxhf5oOk95uSfZ70VifO0h32RVJQQqzpaXRSxh455Btp3Q==","repository":{"url":"git+https://github.com/elghaied/payload-reserve.git","type":"git"},"_npmVersion":"12.0.2","description":"A Payload CMS 3.x plugin for reservation and booking management with conflict detection, status workflows, and calendar UI","directories":{},"_nodeVersion":"22.23.2","_hasShrinkwrap":false,"devDependencies":{"next":"15.4.11","open":"^10.1.0","jsdom":"^30.0.1","react":"19.2.1","sharp":"0.34.2","eslint":"^9.23.0","qs-esm":"7.0.2","rimraf":"3.0.2","vitest":"4.0.18","graphql":"^16.8.1","payload":"3.86.0","@swc/cli":"0.6.0","prettier":"^3.4.2","copyfiles":"2.4.1","cross-env":"^7.0.3","react-dom":"19.2.1","typescript":"5.7.3","@types/node":"22.19.9","@types/react":"19.2.9","@payloadcms/ui":"3.86.0","@changesets/cli":"^2.30.0","@eslint/eslintrc":"^3.2.0","@payloadcms/next":"3.86.0","@playwright/test":"1.56.1","@types/react-dom":"19.2.3","sort-package-json":"^2.10.0","@swc-node/register":"1.10.9","eslint-config-next":"15.4.11","vite-tsconfig-paths":"6.0.5","@payloadcms/db-sqlite":"3.86.0","mongodb-memory-server":"10.1.4","@payloadcms/db-mongodb":"3.86.0","@testing-library/react":"^16.3.2","@payloadcms/db-postgres":"3.86.0","@payloadcms/translations":"3.86.0","@payloadcms/eslint-config":"3.9.0","@testing-library/jest-dom":"^7.0.1","@elghaied/payload-plugin-sms":"^0.3.0","@payloadcms/richtext-lexical":"3.86.0","@payloadcms/plugin-multi-tenant":"3.86.0"},"peerDependencies":{"payload":"^3.86.0","@payloadcms/ui":"^3.86.0","@payloadcms/translations":"^3.86.0"},"_npmOperationalInternal":{"tmp":"tmp/payload-reserve_4.4.0_1789806553179_0.4664234372997651","host":"s3://npm-registry-packages-npm-production"}},"4.4.1":{"name":"payload-reserve","version":"4.4.1","keywords":["payload","payloadcms","plugin","reservation","booking","appointment","scheduling","calendar"],"author":{"name":"elghaied"},"license":"MIT","_id":"payload-reserve@4.4.1","maintainers":[{"name":"elghaied","email":"elghaied.eslam@gmail.com"}],"homepage":"https://github.com/elghaied/payload-reserve#readme","bugs":{"url":"https://github.com/elghaied/payload-reserve/issues"},"dist":{"shasum":"8a0e2fc6338810e988f086fd814c8f0a07bc46df","tarball":"https://registry.npmjs.org/payload-reserve/-/payload-reserve-4.4.1.tgz","fileCount":304,"integrity":"sha512-vOn4sTBHnOtYhLOfXwlefK8Vc2nueBkDP/IfOTzOtG3Y1U/thl1cZrRTwEcfwDu7Vm97mxcbHg3Nx+WzB1FLyA==","signatures":[{"sig":"MEYCIQDGOcaFS3O0I4hSZTG0RH7HMiKO+FE37DMlt5tvYdoWvAIhAKGTHftdwb9+amlM8IK5Srr5qOZwFMKhtPBgXQGycfFI","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCOd0JcZqIkY4MMceMmmJFfw75gWvwN95/3Fa+MOxf3DQIhANuH6dY7uhVb71s0K1M2ofsWwzXNscuAx2kiIwGLud81","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/payload-reserve@4.4.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1689366},"main":"./dist/index.js","type":"module","_from":"file:payload-reserve-4.4.1.tgz","types":"./dist/index.d.ts","engines":{"node":"^18.20.2 || >=20.9.0","pnpm":"^9 || ^10"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./rsc":{"types":"./dist/exports/rsc.d.ts","import":"./dist/exports/rsc.js","default":"./dist/exports/rsc.js"},"./client":{"types":"./dist/exports/client.d.ts","import":"./dist/exports/client.js","default":"./dist/exports/client.js"}},"scripts":{"dev":"next dev dev --turbo","lint":"eslint","test":"pnpm test:int && pnpm test:e2e","build":"pnpm copyfiles && pnpm build:types && pnpm build:swc","clean":"rimraf {dist,*.tsbuildinfo}","lint:fix":"eslint ./src --fix","test:e2e":"playwright test","test:int":"vitest","build:swc":"swc ./src -d ./dist --config-file .swcrc --strip-leading-paths","changeset":"changeset","copyfiles":"copyfiles -u 1 \"src/**/*.{html,css,scss,ttf,woff,woff2,eot,svg,jpg,png,json}\" dist/","build:types":"tsc --outDir dist --rootDir ./src","dev:payload":"cross-env PAYLOAD_CONFIG_PATH=./dev/payload.config.ts payload","generate:types":"pnpm dev:generate-types","changeset:version":"changeset version","dev:generate-types":"pnpm dev:payload generate:types","generate:importmap":"pnpm dev:generate-importmap","dev:generate-importmap":"pnpm dev:payload generate:importmap"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:19114f32-128e-473e-b3b7-a3c51459066e"}},"_resolved":"/home/runner/work/payload-reserve/payload-reserve/payload-reserve-4.4.1.tgz","_integrity":"sha512-vOn4sTBHnOtYhLOfXwlefK8Vc2nueBkDP/IfOTzOtG3Y1U/thl1cZrRTwEcfwDu7Vm97mxcbHg3Nx+WzB1FLyA==","repository":{"url":"git+https://github.com/elghaied/payload-reserve.git","type":"git"},"_npmVersion":"12.0.2","description":"A Payload CMS 3.x plugin for reservation and booking management with conflict detection, status workflows, and calendar UI","directories":{},"_nodeVersion":"22.23.2","_hasShrinkwrap":false,"devDependencies":{"next":"15.4.11","open":"^10.1.0","jsdom":"^30.0.1","react":"19.2.1","sharp":"0.34.2","eslint":"^9.23.0","qs-esm":"7.0.2","rimraf":"3.0.2","vitest":"4.0.18","graphql":"^16.8.1","payload":"3.86.0","@swc/cli":"0.6.0","prettier":"^3.4.2","copyfiles":"2.4.1","cross-env":"^7.0.3","react-dom":"19.2.1","typescript":"5.7.3","@types/node":"22.19.9","@types/react":"19.2.9","@payloadcms/ui":"3.86.0","@changesets/cli":"^2.30.0","@eslint/eslintrc":"^3.2.0","@payloadcms/next":"3.86.0","@playwright/test":"1.56.1","@types/react-dom":"19.2.3","sort-package-json":"^2.10.0","@swc-node/register":"1.10.9","eslint-config-next":"15.4.11","vite-tsconfig-paths":"6.0.5","@payloadcms/db-sqlite":"3.86.0","mongodb-memory-server":"10.1.4","@payloadcms/db-mongodb":"3.86.0","@testing-library/react":"^16.3.2","@payloadcms/db-postgres":"3.86.0","@payloadcms/translations":"3.86.0","@payloadcms/eslint-config":"3.9.0","@testing-library/jest-dom":"^7.0.1","@elghaied/payload-plugin-sms":"^0.3.0","@payloadcms/richtext-lexical":"3.86.0","@payloadcms/plugin-multi-tenant":"3.86.0"},"peerDependencies":{"payload":"^3.86.0","@payloadcms/ui":"^3.86.0","@payloadcms/translations":"^3.86.0"},"_npmOperationalInternal":{"tmp":"tmp/payload-reserve_4.4.1_1789868084382_0.16151482555207397","host":"s3://npm-registry-packages-npm-production"}},"4.4.2":{"_id":"payload-reserve@4.4.2","bugs":{"url":"https://github.com/elghaied/payload-reserve/issues"},"dist":{"shasum":"42d60a65c1605fda58a0a36592a33a2e868cc8c9","tarball":"https://registry.npmjs.org/payload-reserve/-/payload-reserve-4.4.2.tgz","fileCount":304,"integrity":"sha512-PhRbfV7Mg2NL3WVVr9odjLjCZveEdDOTuW9fbjQGrWZtOStm8Z8yd0z5/pNsI/DoRZgdr870kwTzh0HKEzv2Hg==","signatures":[{"sig":"MEUCIQCU3vyUH6hz8/4J1I4nj+z6hKbCWbYTu5ASzkT9GCoISQIgfTPYJz03oUdCEh3r1aZXwmXwOHwVt7aYp1iX2DlGeyM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQD4U1huZtBom9aGIAIzPLbkjNZJd+z94sdmxQLJsU7beQIhAMFcNxZH9z2DTJQhhI7FguvhrKYD3/5AbOOgwgeXvfTs"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/payload-reserve@4.4.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1690767},"main":"./dist/index.js","name":"payload-reserve","type":"module","_from":"file:payload-reserve-4.4.2.tgz","types":"./dist/index.d.ts","author":{"name":"elghaied"},"engines":{"node":"^18.20.2 || >=20.9.0","pnpm":"^9 || ^10"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./rsc":{"types":"./dist/exports/rsc.d.ts","import":"./dist/exports/rsc.js","default":"./dist/exports/rsc.js"},"./client":{"types":"./dist/exports/client.d.ts","import":"./dist/exports/client.js","default":"./dist/exports/client.js"}},"license":"MIT","scripts":{"dev":"next dev dev --turbo","lint":"eslint","test":"pnpm test:int && pnpm test:e2e","build":"pnpm copyfiles && pnpm build:types && pnpm build:swc","clean":"rimraf {dist,*.tsbuildinfo}","lint:fix":"eslint ./src --fix","test:e2e":"playwright test","test:int":"vitest","build:swc":"swc ./src -d ./dist --config-file .swcrc --strip-leading-paths","changeset":"changeset","copyfiles":"copyfiles -u 1 \"src/**/*.{html,css,scss,ttf,woff,woff2,eot,svg,jpg,png,json}\" dist/","build:types":"tsc --outDir dist --rootDir ./src","dev:payload":"cross-env PAYLOAD_CONFIG_PATH=./dev/payload.config.ts payload","generate:types":"pnpm dev:generate-types","changeset:version":"changeset version","dev:generate-types":"pnpm dev:payload generate:types","generate:importmap":"pnpm dev:generate-importmap","dev:generate-importmap":"pnpm dev:payload generate:importmap"},"version":"4.4.2","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:19114f32-128e-473e-b3b7-a3c51459066e"}},"homepage":"https://github.com/elghaied/payload-reserve#readme","keywords":["payload","payloadcms","plugin","reservation","booking","appointment","scheduling","calendar"],"_resolved":"/home/runner/work/payload-reserve/payload-reserve/payload-reserve-4.4.2.tgz","_integrity":"sha512-PhRbfV7Mg2NL3WVVr9odjLjCZveEdDOTuW9fbjQGrWZtOStm8Z8yd0z5/pNsI/DoRZgdr870kwTzh0HKEzv2Hg==","repository":{"url":"git+https://github.com/elghaied/payload-reserve.git","type":"git"},"_npmVersion":"12.0.2","description":"A Payload CMS 3.x plugin for reservation and booking management with conflict detection, status workflows, and calendar UI","directories":{},"maintainers":[{"name":"elghaied","email":"elghaied.eslam@gmail.com"}],"_nodeVersion":"22.23.2","_hasShrinkwrap":false,"devDependencies":{"next":"15.4.11","open":"^10.1.0","jsdom":"^30.0.1","react":"19.2.1","sharp":"0.34.2","eslint":"^9.23.0","qs-esm":"7.0.2","rimraf":"3.0.2","vitest":"4.0.18","graphql":"^16.8.1","payload":"3.86.0","@swc/cli":"0.6.0","prettier":"^3.4.2","copyfiles":"2.4.1","cross-env":"^7.0.3","react-dom":"19.2.1","typescript":"5.7.3","@types/node":"22.19.9","@types/react":"19.2.9","@payloadcms/ui":"3.86.0","@changesets/cli":"^2.30.0","@eslint/eslintrc":"^3.2.0","@payloadcms/next":"3.86.0","@playwright/test":"1.56.1","@types/react-dom":"19.2.3","sort-package-json":"^2.10.0","@swc-node/register":"1.10.9","eslint-config-next":"15.4.11","vite-tsconfig-paths":"6.0.5","@payloadcms/db-sqlite":"3.86.0","mongodb-memory-server":"10.1.4","@payloadcms/db-mongodb":"3.86.0","@testing-library/react":"^16.3.2","@payloadcms/db-postgres":"3.86.0","@payloadcms/translations":"3.86.0","@payloadcms/eslint-config":"3.9.0","@testing-library/jest-dom":"^7.0.1","@elghaied/payload-plugin-sms":"^0.3.0","@payloadcms/richtext-lexical":"3.86.0","@payloadcms/plugin-multi-tenant":"3.86.0"},"peerDependencies":{"payload":"^3.86.0","@payloadcms/ui":"^3.86.0","@payloadcms/translations":"^3.86.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/payload-reserve_4.4.2_1789905835205_0.2891918366367674"}}},"time":{"created":"2026-02-14T00:26:56.351Z","modified":"2026-09-20T12:03:55.685Z","1.0.0":"2026-02-14T00:26:56.561Z","1.0.1":"2026-02-14T04:23:52.826Z","1.0.2":"2026-02-14T04:32:49.697Z","1.0.3":"2026-02-21T03:18:25.736Z","1.1.0":"2026-02-22T05:33:46.087Z","1.2.0":"2026-03-09T22:07:50.536Z","1.3.0":"2026-03-09T23:09:21.641Z","1.3.2":"2026-03-14T05:53:59.412Z","1.4.0":"2026-05-22T20:28:56.324Z","1.5.0":"2026-06-02T21:58:09.657Z","1.6.0":"2026-06-09T18:56:18.227Z","2.0.0":"2026-06-10T16:45:23.603Z","2.1.0":"2026-06-11T02:14:06.897Z","2.1.1":"2026-06-19T17:20:18.892Z","2.2.0":"2026-07-03T03:58:47.605Z","2.2.1":"2026-07-03T06:14:28.114Z","2.3.0":"2026-07-03T07:29:46.427Z","2.4.0":"2026-07-24T15:28:49.776Z","3.0.0":"2026-07-30T13:20:05.130Z","3.0.1":"2026-07-30T13:39:29.392Z","3.1.0":"2026-08-12T06:15:53.658Z","3.1.1":"2026-08-13T14:20:38.216Z","4.0.0":"2026-08-21T21:46:06.802Z","4.1.0":"2026-08-26T23:45:42.219Z","4.1.1":"2026-09-04T04:12:35.305Z","4.1.2":"2026-09-04T05:04:18.072Z","4.1.3":"2026-09-09T18:23:55.100Z","4.2.0":"2026-09-17T15:31:18.285Z","4.3.0":"2026-09-19T07:13:40.356Z","4.4.0":"2026-09-19T08:29:13.262Z","4.4.1":"2026-09-20T01:34:44.505Z","4.4.2":"2026-09-20T12:03:55.299Z"},"bugs":{"url":"https://github.com/elghaied/payload-reserve/issues"},"author":{"name":"elghaied"},"license":"MIT","homepage":"https://github.com/elghaied/payload-reserve#readme","keywords":["payload","payloadcms","plugin","reservation","booking","appointment","scheduling","calendar"],"repository":{"url":"git+https://github.com/elghaied/payload-reserve.git","type":"git"},"description":"A Payload CMS 3.x plugin for reservation and booking management with conflict detection, status workflows, and calendar UI","maintainers":[{"name":"elghaied","email":"elghaied.eslam@gmail.com"}],"readme":"# payload-reserve\n\n[![npm version](https://img.shields.io/npm/v/payload-reserve.svg)](https://www.npmjs.com/package/payload-reserve)\n[![npm downloads](https://img.shields.io/npm/dm/payload-reserve.svg)](https://www.npmjs.com/package/payload-reserve)\n[![license](https://img.shields.io/npm/l/payload-reserve.svg)](./LICENSE)\n\nA full-featured reservation and booking plugin for Payload CMS 3.x. Adds a scheduling system with conflict detection, a configurable status machine, multi-resource bookings, capacity and inventory tracking, a public REST API, and admin UI components.\n\nDesigned for salons, clinics, hotels, restaurants, event venues, and any business that needs appointment scheduling managed through Payload's admin panel.\n\n📦 **npm:** https://www.npmjs.com/package/payload-reserve\n\n**[Website](https://payloadreserve.com)** · **[Documentation](https://docs.payloadreserve.com)** · **[Live demos](#live-demos)** · **[Demo source code](https://github.com/elghaied/payloadreserve-demos)**\n\n---\n\n## Features\n\n- **5 Domain Collections** — Services, Resources, Schedules, Reservations, and Customers (standalone or user-collection extension)\n- **User Collection Extension** — Optionally extend your existing auth collection with booking fields; set `userCollection: undefined` (default) to use a standalone Customers collection\n- **Resource Owner Multi-Tenancy** — Opt-in `resourceOwnerMode` wires ownership access control so each resource owner (host) sees only their own listings and reservations\n- **Configurable Status Machine** — Define your own statuses, transitions, blocking states, terminal states, and the `confirmStatus`/`cancelStatus` that drive the confirm/cancel hooks and cancellation policy\n- **Double-Booking Prevention** — Server-side conflict detection that enforces both bookings' buffer times and checks each resource only for its own item window; respects capacity modes\n- **Business Timezone** — Set a plugin-level `timezone` (IANA, default `'UTC'`) so schedules, day boundaries, and the admin calendar resolve in your business's timezone regardless of server location — with optional **per-tenant** zones in `multiTenant` mode\n- **Auto End Time** — Calculates `endTime` from `startTime + service.duration` automatically for `fixed`/`full-day` services; the `endTime` field stays editable so `flexible`-duration bookings can supply their own end time\n- **Three Duration Types** — `fixed` (service duration), `flexible` (customer-specified end), and `full-day` bookings\n- **Multi-Resource Bookings** — Single reservation that spans multiple resources simultaneously via the `items` array\n- **Capacity and Inventory** — `quantity > 1` allows multiple concurrent bookings per resource; `capacityMode` (`per-reservation` | `per-guest`) controls how capacity is counted\n- **Guest Bookings** — Account-less reservations with inline contact details (name + email/phone); `allowGuestBooking` plugin option and per-service `inherit`/`enabled`/`disabled` override; guests receive a `cancellationToken` via the `afterBookingCreate` hook for cancel-link delivery\n- **Idempotency** — Optional `idempotencyKey` prevents duplicate submissions\n- **Collection Overrides** — Customize any generated collection (add fields like a `join`, tweak admin options, attach your own hooks) via `collectionOverrides` without forking — the plugin's hooks and access are merged, not clobbered (supersedes the deprecated `extraReservationFields`)\n- **Admin Component Overrides** — Replace any of six admin components (calendar, customer field, availability-aware time field, dashboard widget, availability overview, reservation detail) with your own via `components`, string-path-by-string-path, without forking — see [Customising the admin components](#customising-the-admin-components)\n- **Services ↔ Resources Join** — Services show a read-only `resources` field (a `join` over `Resources.services`) listing which resources currently perform them; assignment still happens on the Resource\n- **Active Enforcement** — `active: false` on a Service or Resource — including one referenced by a multi-resource `items[]` entry — blocks new bookings against it, blocks rescheduling or re-pointing an existing booking onto it, and excludes it from availability; non-scheduling edits such as confirm and cancel always remain allowed, and `enforceActive: false` opts out entirely\n- **Concurrency-Safe Booking** — A transactional `bookingLock` on Resources serializes simultaneous bookers for the same slot; automatic retry recovers lost capacity on MongoDB, and a surviving conflict maps to a clean HTTP 409 rather than a raw 500 — see [Concurrent booking: database adapter support](#concurrent-booking-database-adapter-support)\n- **Slot Holds** — Opt-in short-lived claims on a slot while a customer completes checkout, so it can't be booked out from under them; convert to a real booking or release, both idempotent-safe\n- **Delete Guard** — Deleting a Service or Resource still referenced by a reservation (or, for a Resource, a schedule) fails with an actionable message instead of an inconsistent database or a silent dangling reference; `active: false` is the supported way to retire one\n- **Cancellation Policy** — Configurable minimum notice period enforcement\n- **Plugin Hooks API** — Seven lifecycle hooks (`beforeBookingCreate`, `afterBookingCreate`, `beforeBookingConfirm`, `afterBookingConfirm`, `beforeBookingCancel`, `afterBookingCancel`, `afterStatusChange`) for integrating email, Stripe, and external systems — all fire inside the write's own database transaction, never after\n- **Availability Service** — Pure functions and DB helpers for slot generation (15-min step) and conflict checking with guest-count-aware filtering\n- **Public REST API** — Seven pre-built endpoints for availability, slot listing, resource availability, booking (incl. guest bookings), cancellation, and customer search, plus two more for slot holds when enabled — with ownership enforcement and input validation\n- **Calendar View** — Month/week/day/lanes/pending calendar replacing the default reservations list view, with per-resource availability shading and click-a-free-slot-to-book; plus an availability-aware slot picker on the reservation form. Clicking a reservation opens a detail drawer (status, key fields, and status actions) before the full edit form — opt out with `components.reservationDetail: false` to restore the old click-straight-to-edit behaviour\n- **Dashboard Widget** — Server component showing today's booking stats\n- **Availability Overview** — Weekly grid of resource availability vs. booked slots\n- **Recurring and Manual Schedules** — Weekly patterns with exception dates, or specific one-off dates\n- **12 Bundled Languages** — Every admin string is translatable; ships with English, French, German, Spanish, Russian, Polish, Turkish, Arabic, Simplified Chinese, Indonesian, Persian/Farsi, and Hindi. Override any string or add your own language\n- **Localization Support** — Collection field *content* can be localized when Payload localization is enabled (separate from the admin-UI language above)\n- **External Busy** — Optional `getExternalBusy` resolver folds busy time from calendar sync, legacy booking systems, or ops tooling into availability, with distinct calendar display and fail-open error handling\n- **Debug Tracing** — Opt-in `debug` (`boolean`, default `false`) emits info-level `reserve_debug` traces for slot generation and conflict detection. Each line has a `stage` field and a per-call `traceId`; grep one `traceId` to see the whole story of one availability call. Off by default, no overhead when disabled\n- **Type-Safe** — Full TypeScript support with exported types\n\n---\n\n## Install\n\n```bash\npnpm add payload-reserve\n# or\nnpm install payload-reserve\n```\n\n**Peer dependencies:** `payload ^3.86.0`, `@payloadcms/ui ^3.86.0`, `@payloadcms/translations ^3.86.0`\n\n### ⚠️ Upgrading from an earlier version\n\n**Run `payload generate:importmap`, then restart your app, after upgrading to v4.0.0 or\nlater — even if you never touch the `components` option.** The Reservations list view's\ndefault component changed from `payload-reserve/client#CalendarView` to\n`payload-reserve/rsc#CalendarViewServer`. Payload resolves admin component paths through an\nimport map generated **into your own app**, not this package, so restarting on the new\nversion without regenerating it leaves the old key in place and the new one missing. That\nfailure is silent from the admin's point of view: a missing import-map key logs a\n`console.error` on the server and Payload's List view falls back to its own default table —\nyour users just see a plain reservations table where the calendar used to be, with nothing\ntelling them why.\n\n---\n\n## Quick Start\n\n```typescript\nimport { buildConfig } from 'payload'\nimport { payloadReserve } from 'payload-reserve'\n\nexport default buildConfig({\n  collections: [/* your collections */],\n  plugins: [\n    payloadReserve(),\n  ],\n})\n```\n\n> **Using SQLite?** It requires one extra adapter setting to avoid silent double-booking under concurrent load — see [Concurrent booking: database adapter support](#concurrent-booking-database-adapter-support).\n\n---\n\n## Live Demos\n\nFour standalone booking apps, each fully themed and running the **same plugin** with completely different business logic — the fastest way to see whether payload-reserve fits your use case before wiring anything up.\n\n| Demo | What it books | Plugin features it exercises |\n|------|---------------|------------------------------|\n| **[Salon](https://salon.payloadreserve.com)** — Lumiere Salon | Appointments with a specific stylist | 1:1 resource booking, per-resource schedules, 5 min buffer, abandoned-payment jobs |\n| **[Hotel](https://hotel.payloadreserve.com)** — Grand Hotel | Multi-night stays across 5 room types | Date-range booking, `flexible` duration, quantity pools (2–40 units), 4–6 h turnover buffer |\n| **[Restaurant](https://restaurant.payloadreserve.com)** — Le Jardin Doré | Tables by party size across 5 dining spaces | Custom reservation fields (`partySize`), per-guest capacity, 15 min turnover, 4 h cancellation notice |\n| **[Events](https://events.payloadreserve.com)** — Éclat Festival | Tickets for events across 5 venues (50–500 seats) | Ticket quantities, per-reservation capacity mode, resource–event restrictions |\n\nAll four ship Stripe payments and EN/FR internationalization.\n\n**Source code:** [`elghaied/payloadreserve-demos`](https://github.com/elghaied/payloadreserve-demos) — a Turborepo containing all four apps plus shared seed, email-template, and types packages. This is the reference implementation for taking the plugin from Payload config to a shipped Next.js 15 / React 19 frontend.\n\n**Want your own instance?** [payloadreserve.com/demo](https://payloadreserve.com/demo) provisions a private, fully seeded copy of any demo — its own database, storage, and admin credentials, emailed to you. It self-destructs after 24 hours, so you can change anything without consequence.\n\n---\n\n## Resource Owner Multi-Tenancy\n\nEnable `resourceOwnerMode` to support Airbnb-style platforms where each user manages their own listings (Resources) and sees only the reservations made against them. This is opt-in — single-tenant installs are unaffected.\n\n```typescript\npayloadReserve({\n  userCollection: 'users',       // required: which auth collection holds owners\n  resourceOwnerMode: {\n    adminRoles: ['admin'],        // roles that bypass all filters (see all records)\n    ownerField: 'owner',          // field name added to Resources (default: 'owner')\n    ownedServices: false,         // set true if Services should also be owner-scoped\n  },\n})\n```\n\n**What this does automatically:**\n\n| Collection | Behaviour |\n|------------|-----------|\n| Resources | Adds an `owner` relationship field (auto-populated on create, re-assignable by admins only); owners read/update/delete only their own records |\n| Schedules | Owners read/update/delete only schedules whose resource they own (join through `resource.owner`); a schedule may only be created on, or moved to, a resource the caller owns (4.1.2) |\n| Reservations | Owners can read reservations for their resources; mutations are admin-only |\n| Services | Unchanged by default; set `ownedServices: true` to apply the same owner pattern |\n\nThe `access` override in plugin config always takes precedence over the auto-wired functions, so you can fine-tune any collection without losing the rest.\n\n---\n\n## Guest Bookings\n\nEnable `allowGuestBooking` to accept reservations from users who don't have a customer account. Guests provide inline contact details (name + email or phone) instead of linking to a customer record.\n\n```typescript\npayloadReserve({\n  allowGuestBooking: true,   // enable guest bookings globally (default: false)\n})\n```\n\n### Per-service override\n\nEach Service has its own `allowGuestBooking` select field that overrides the plugin-level default:\n\n| Value | Behaviour |\n|-------|-----------|\n| `inherit` | Use the plugin-level `allowGuestBooking` value *(default)* |\n| `enabled` | Allow guest bookings for this service regardless of the global setting |\n| `disabled` | Require a customer account for this service regardless of the global setting |\n\n> **Note:** For multi-resource bookings (the `items` array), the guest-booking gate is evaluated against the reservation's top-level `service`. Per-item service overrides are not individually enforced.\n\n### Customer vs. guest\n\nThe `customer` relationship field on Reservations is now **optional**. A reservation must have **either** a `customer` **or** a `guest` block — not both, not neither.\n\nThe `guest` block requires `name` and at least one of `email` or `phone`:\n\n```typescript\n// POST /api/reserve/book\n{\n  \"service\": \"...\",\n  \"resource\": \"...\",\n  \"startTime\": \"2026-06-01T10:00:00.000Z\",\n  \"guest\": {\n    \"name\": \"Jane Smith\",\n    \"email\": \"jane@example.com\"   // or \"phone\": \"+1-555-0100\"\n  }\n}\n```\n\n### Cancellation token\n\nWhen a guest booking is created the plugin generates a `cancellationToken` (random UUID). It is **not** returned in the `/api/reserve/book` HTTP response. It is exposed server-side via the `afterBookingCreate` plugin hook so the host project can deliver a cancel link by email or an SMS code:\n\n```typescript\npayloadReserve({\n  allowGuestBooking: true,\n  hooks: {\n    afterBookingCreate: [\n      async ({ doc, req }) => {\n        if (doc.guest && doc.cancellationToken) {\n          // Send the token however you like — the plugin sends nothing itself\n          await sendEmail({\n            to: doc.guest.email,\n            cancelUrl: `https://example.com/cancel?reservationId=${doc.id}&token=${doc.cancellationToken}`,\n          })\n        }\n      },\n    ],\n  },\n})\n```\n\nTo cancel with the token, POST to `/api/reserve/cancel` without authentication:\n\n```typescript\n// POST /api/reserve/cancel\n{\n  \"reservationId\": \"...\",\n  \"token\": \"<cancellationToken>\"\n}\n```\n\nAuthenticated owner/admin cancellation (without a token) is unchanged.\n\n## Staff Scheduling\n\n### Staff Auto-Provisioning\n\nEnable `staffProvisioning` to automatically create an owner-scoped Resource whenever a user gains a staff role. Requires `resourceOwnerMode`.\n\n```typescript\npayloadReserve({\n  userCollection: 'users',\n  resourceOwnerMode: {\n    adminRoles: ['admin'],\n  },\n  staffProvisioning: {\n    staffRoles: ['staff', 'therapist'],  // roles that trigger auto-provisioning\n    roleField: 'role',                   // field on the user doc (default: 'role')\n    resourceType: 'staff',               // resourceType stamped on the new Resource (default: 'staff')\n    nameFrom: 'name',                    // user field to use as Resource name (default: 'name', falls back to email)\n  },\n})\n```\n\n**Use `beforeCreate` to stamp tenant IDs or custom fields** before the Resource is saved:\n\n```typescript\nstaffProvisioning: {\n  staffRoles: ['staff'],\n  beforeCreate: ({ data, user }) => ({\n    ...data,\n    tenant: user.tenant,   // forward the user's tenant to the new Resource\n  }),\n},\n```\n\n**Key behaviours:**\n\n- **Idempotent** — deduplicates by owner; creating or re-saving a staff user never creates a second Resource.\n- **Non-blocking** — provisioning failures are logged and do not prevent user creation or update.\n- **Impersonation-based ownership** — the Resource is created as the new staff user, so `resource.owner` is always the user themselves (no ownership-bypass flag).\n- **No auto-delete on demotion** — removing a staff role from a user does not delete their Resource.\n\n### Full-Day-Range Time-Off\n\nSchedule exceptions now support a date range and a leave type:\n\n```typescript\n// Schedule.exceptions[] — each entry can have:\n{\n  date: '2025-12-25',   // start date (always required)\n  endDate: '2025-12-26', // optional range end, inclusive\n  type: 'vacation',      // optional leave category\n}\n```\n\nAny date falling within the range (inclusive) makes the resource fully unavailable for that day. This powers multi-day leave entries for staff schedules.\n\n### Configurable Vocabularies\n\nCustomize the option lists for resource types and leave types:\n\n```typescript\npayloadReserve({\n  resourceTypes: ['staff', 'room', 'equipment', 'vehicle'],  // default: ['staff','equipment','room']\n  leaveTypes: ['vacation', 'sick', 'training', 'closure'],   // default: ['vacation','sick','personal','closure','other']\n})\n```\n\nThe first entry of `resourceTypes` becomes the default value for the `Resource.resourceType` field.\n\n### Business Timezone\n\nSet a plugin-level `timezone` (IANA name, default `'UTC'`) to govern all schedule resolution — what `HH:mm` schedule times mean, which calendar day a `date=YYYY-MM-DD` query maps to, and full-day booking boundaries:\n\n```typescript\npayloadReserve({\n  timezone: 'America/New_York',  // default: 'UTC'\n})\n```\n\nWithout this, day resolution mixes server-local and UTC semantics — on non-UTC servers the slots API can resolve the wrong calendar day. With `timezone` set, all server-side day math runs via the built-in `Intl` API (no extra dependency). `'UTC'` on a UTC server is identical to the previous behaviour. The configured timezone is exposed to admin components via `config.admin.custom.reservationTimezone`.\n\n**Date-only schedule fields are not re-keyed in this zone.** `exceptions[].date`/`endDate` and `manualSlots[].date` name a calendar day; the day is the UTC calendar date of the stored value, which is what both the admin day picker (noon UTC) and a bare `'2025-12-25'` written through the API encode. Before 4.1.1 they were re-keyed in the business zone, so `'2025-12-25'` closed December 24 and left the 25th bookable for any zone west of UTC — see [Booking Features → Exceptions and Time Off](./docs/booking-features.md#exceptions-and-time-off).\n\n#### Per-tenant timezones (`multiTenant`)\n\nWhen tenant scoping is active, the admin Calendar, Availability grid, and Dashboard widget resolve day-boundaries in the **selected tenant's** zone instead of one global zone — so a tenant in `America/New_York` and a tenant in `Europe/Paris` each see their own local days. Point `multiTenant.timezoneField` at the IANA timezone field on your tenant document:\n\n```typescript\npayloadReserve({\n  timezone: 'UTC',                          // global default / fallback\n  multiTenant: {\n    timezoneField: 'timezone',              // field on the tenant doc (default: 'timezone')\n  },\n})\n```\n\nResolution precedence is `tenant.<timezoneField> → global timezone → 'UTC'`; a tenant with no (or an invalid) timezone value transparently falls back to the global default. The zone is resolved server-side from the tenant cookie — the client calendar reads it from `GET /api/reserve/effective-timezone`. This is purely additive: plain single-tenant installs (no tenant relationship / no tenant cookie) keep the global zone with no extra DB read.\n\n#### Tenant-scoped customer search\n\nThe reservation form's customer picker (and its backing `/api/reservation-customer-search` endpoint) restricts results to the **selected tenant** — read from the tenant cookie — whenever the customers collection carries the multi-tenant `tenant` field. This prevents picking a customer from another tenant (which would otherwise fail on save with a tenant mismatch). Like the per-tenant timezone behaviour, it is purely additive: plain single-tenant installs (customers collection without a tenant field, or no tenant cookie) are unaffected and the search spans all customers as before.\n\n```typescript\npayloadReserve({\n  multiTenant: {\n    tenantField: 'tenant',        // tenant relationship field on collections (default: 'tenant')\n    cookieName: 'payload-tenant',  // selected-tenant cookie (default: 'payload-tenant')\n  },\n})\n```\n\n### Collection Overrides\n\nCustomize any generated collection without forking the plugin via `collectionOverrides`. Each entry is a `Partial<CollectionConfig>` (minus `fields`/`slug`) plus a `fields` function that receives the plugin's default fields:\n\n```typescript\npayloadReserve({\n  collectionOverrides: {\n    services: {\n      // Generic illustration of appending a field via collectionOverrides — not\n      // the way to get a services↔resources view: Services already ships that\n      // built in as a read-only `resources` join (see below). Don't name your\n      // own appended field `resources` on `services`, or it collides with it.\n      fields: ({ defaultFields }) => [\n        ...defaultFields,\n        { name: 'referencedResources', type: 'join', collection: 'resources', on: 'services' },\n      ],\n    },\n    reservations: {\n      admin: { group: 'Bookings' },               // shallow-merged\n      hooks: { afterChange: [sendConfirmationEmail] }, // MERGED with the plugin's hooks\n    },\n  },\n})\n```\n\nThe plugin's load-bearing behavior is protected: supplied `hooks` are **merged** (the plugin's conflict-detection/status hooks always run, and run first — an override can add hooks but not remove them), `access` **composes** per operation (rules you omit keep the plugin's owner-mode/default behavior), and `slug` is ignored (use the `slugs` option). The `customers` override applies only when the standalone Customers collection is generated (ignored when `userCollection` is set — your auth collection is yours to edit directly). `collectionOverrides` supersedes the deprecated `extraReservationFields`.\n\n> **Note:** a `collectionOverrides.resources` override that removes, renames, or nests the `services` field inside a *named* group or tab causes the Services `resources` join (below) to be silently skipped rather than erroring — the app still boots, the field simply doesn't appear.\n\n### Optional `Resource.services`\n\nThe `services` relationship on Resources is now optional. This lets a freshly provisioned staff Resource exist before services are assigned, avoiding validation errors during auto-provisioning.\n\n### Services `resources` Join\n\nServices expose a read-only `resources` field — a Payload `join` over `Resources.services` — listing which resources currently perform that service. `Resources.services` remains the single source of truth and the only editable side: assign or remove services from the **Resource**, and the reverse list on the Service updates automatically. There is no way to add or remove a link from the Service side.\n\nReading (or viewing in the admin) a Service returns the join in Payload's standard join-field shape:\n\n```json\n{\n  \"resources\": {\n    \"docs\": [{ \"id\": \"...\", \"name\": \"...\", \"resourceType\": \"staff\", \"active\": true }],\n    \"hasNextPage\": false,\n    \"totalDocs\": 3\n  }\n}\n```\n\n- **`defaultLimit: 100`** — raised from Payload's default of 10, so a service performed by more than 10 resources doesn't silently show a truncated list.\n- **`allowCreate: false`** — the join can only ever create a *brand-new* Resource from the drawer, never link an existing one, and the Resource's `services` field is `hasMany` while the join's create-drawer pre-fill is scalar — so the affordance is disabled. Assign resources on the Resource itself.\n- **`defaultColumns: ['name', 'resourceType', 'active']`** — the `active` column lets an admin see at a glance that a linked resource is disabled.\n\nIf a `collectionOverrides.resources` override removes, renames, or nests `services` inside a *named* group/tab, the join is gated off entirely (see the note above) rather than crashing the app at init.\n\n#### `joins: false` on hot paths\n\nPayload join fields resolve via a DB-level aggregation (`$lookup`) and ignore `depth`, so every internal `findByID` the plugin makes on Services now passes `joins: false` to avoid that extra query cost. If your own code reads Services on a hot path, consider doing the same — `payload.findByID({ collection: 'services', id, joins: false })`.\n\nOne path still pays for the join: when a Reservation is read at `depth >= 1`, Payload populates its `service` relationship through the internal dataloader, which offers no `joins: false` seam from plugin code. If that shows up in your profiles, read Reservations with `depth: 0` and fetch the service yourself.\n\n### Customising the admin components\n\n`components` replaces any of the plugin's six admin components with your own, without forking the plugin:\n\n```typescript\npayloadReserve({\n  components: {\n    dashboardWidget: false,\n    reservationDetail: '/components/MyReservationDetail.tsx#MyReservationDetail',\n  },\n})\n```\n\n| Slot | Plugin default | `false` falls back to |\n|------|-----------------|------------------------|\n| `calendarView` | the calendar (month/week/day/pending) | Payload's default list view |\n| `customerField` | the customer picker (search-or-create) | a plain relationship field |\n| `availabilityTimeField` | the availability-aware slot picker | a plain date field |\n| `dashboardWidget` | today's stats widget | not registering the widget |\n| `availabilityOverview` | the weekly availability grid | not registering the view |\n| `reservationDetail` | the reservation detail drawer body | see below — **not** a Payload default |\n\nEach slot accepts a **string** (your own Payload component path, e.g. `'/components/MyCalendar.tsx#MyCalendar'`), **`false`** (opt out), or **unset** (use the plugin's own component — the default).\n\n**`false` is asymmetric.** For five of the six slots, `false` falls back to a Payload default — the collection's ordinary list view, a plain relationship or date field, or simply not registering a widget/view. `reservationDetail` has no Payload default to fall back to: setting it `false` instead restores v3.1.1 **click** behaviour — clicking a calendar event opens the document edit drawer directly, with no detail step in between. This is click behaviour specifically, not v3.1.1 behaviour byte-for-byte: the pending list's quick-action (✓/✗) failures now render the server's own error message instead of the old generic strings, and that change applies regardless of this flag — see the disclosures in the changelog for v4.0.0.\n\n**Whenever you set any slot to a string, run `payload generate:importmap` afterward.** Payload resolves every component path through a generated import map; a stale one means your component silently fails to render, and the server logs `PayloadComponent not found in importMap`.\n\n#### `reservationDetail`\n\nClicking a calendar event (or a row in the Pending view) opens a drawer. Its body is, by default, the plugin's own `ReservationDetail` — a status badge, key fields, and a status action bar wired to the real transition rules. Point `components.reservationDetail` at your own component to replace that body.\n\nTwo constraints are load-bearing, not stylistic:\n\n- **Your component must be a Client Component** (`'use client'` at the top of the file). The drawer body is resolved on the server by `CalendarViewServer` (a React Server Component) via Payload's own `RenderServerComponent`, and rendered into the client calendar as a pre-built element — the same mechanism Payload uses for every other admin component slot.\n- **It reads its data from `useReservationDetail()`, not props.** The document it receives (`doc`) is the SAME `depth: 1` fetch the calendar already made to draw the grid — `service`, `resource`, `customer`, and `items` are populated; nothing deeper is. There is deliberately no second fetch when the drawer opens — that would add a second cache and a loading state the design specifically avoids. If your component needs a field or relationship the calendar doesn't fetch, fetch it yourself (keyed off `doc.id`) rather than expecting the drawer to provide it.\n\nIf you also replace `calendarView` with your own component, nothing renders your `reservationDetail` slot automatically — `CalendarViewServer` is what wires it up. The plugin logs a boot warning when both are set together, as a reminder that your replacement calendar needs to render `ReservationDetailProvider`/`useReservationDetail` itself if it wants the same drawer behaviour.\n\nA worked example, using the primitives and hooks the built-in component is built from:\n\n```tsx\n'use client'\nimport {\n  DetailRow,\n  StatusActionBar,\n  StatusBadge,\n  useReservationDetail,\n  useReservationMutations,\n  useReservationStatusMachine,\n} from 'payload-reserve/client'\n\nexport const MyReservationDetail = () => {\n  const { doc, refresh } = useReservationDetail()\n  const { labels, presentation } = useReservationStatusMachine()\n  const { transition } = useReservationMutations()\n  if (!doc) return null\n\n  const handleSelect = async (next: string) => {\n    // `onSelect` receives the TARGET status — it's the caller's job to perform\n    // the mutation, `StatusActionBar` only renders the candidate buttons.\n    const result = await transition(doc.id, next)\n    // The server is the sole authority on whether a transition is legal\n    // (`validateStatusTransition`, `validateCancellation`); only re-fetch on\n    // success, and surface `result.message` yourself on failure — the built-in\n    // `ReservationDetail` (`src/components/ReservationDetail/index.tsx`) shows\n    // one pattern for that if you want a fuller reference.\n    if (result.ok) refresh()\n  }\n\n  return (\n    <div>\n      <StatusBadge label={labels[doc.status] ?? doc.status} presentation={presentation[doc.status]} />\n      <DetailRow label=\"Booking ref\" value={doc.id} />\n      <StatusActionBar onSelect={(next) => void handleSelect(next)} status={doc.status} />\n    </div>\n  )\n}\n```\n\n`StatusActionBar` only ever shows candidate transitions from the configured status machine — it never decides whether one succeeds, and it never performs the mutation itself: `onSelect` receives the target status string and the caller is responsible for calling `useReservationMutations()` and refreshing. The server (`validateStatusTransition`, `validateCancellation`) is the sole authority; a rejected transition surfaces the server's own error rather than being pre-judged on the client. `useReservationMutations()` also exposes `cancel(id, status, reason?)` for the cancel transition specifically, if you want to collect a cancellation reason — the built-in component uses it for exactly that.\n\n#### Newly exported (v3.2)\n\n`payload-reserve/client` additionally exports the primitives and hooks the built-in `ReservationDetail` is composed from, so a replacement component doesn't have to reinvent them: `DetailRow`, `EventPill`, `ReservationDetail`, `ReservationDetailProvider`, `StatusActionBar`, `StatusBadge`, `useReservationDetail`, `useReservationMutations`, and `useReservationStatusMachine`. It also now re-exports the supporting types and helpers that were previously only on the package root — `CalendarReservation`, `ReservationItem`, `ResourceOption`, `buildStatusLabels`, `buildStatusPresentation`, `BUILTIN_STATUSES`, and `StatusPresentation` — so a `'use client'` detail component doesn't need to import the server plugin barrel just to name a type. `payload-reserve/rsc` additionally exports `CalendarViewServer` — the server wrapper that resolves `components.reservationDetail` out of the import map and hands the client calendar a pre-rendered element.\n\n**Renamed:** the package root's `Reservation` type is now `CalendarReservation` (type-only change, no runtime effect) — it is a deliberately loose, UI-shaped structural type, and exporting it as plain `Reservation` from the root was too easy to mistake for your app's own generated `payload-types` `Reservation`. `ReservationItem` keeps its name; it doesn't collide the same way, since Payload does not generate a type by that name.\n\n#### Other small disclosures (v3.2)\n\n- The fetch behind the detail drawer's status mutations (`useReservationMutations`, via `performReservationPatch`) now sends `credentials: 'include'`. It previously sent none, which defaults to `same-origin`. This is better behaviour for a cross-origin `serverURL`, but is a behaviour change worth knowing about.\n- `CalendarView`'s exported prop type changed from `React.FC<AdminViewServerProps>` to `React.FC<CalendarViewProps>`. Runtime-compatible if you just render the component; a type-level break if you imported and typed against it directly.\n\n---\n\n## External Busy (Calendar Sync & Other Sources)\n\n`getExternalBusy` lets your app fold busy time that payload-reserve doesn't manage — an external calendar, a legacy booking system, ops tooling — into a resource's availability. The plugin never talks to any calendar API itself; it calls a resolver you provide once per candidate window and treats whatever it returns as busy time for that resource.\n\nUse it to:\n\n- Import busy time from two-way calendar sync (Google Calendar, Outlook, iCal feeds)\n- Respect bookings made in another/legacy booking system during a migration\n- Block maintenance/cleaning windows tracked in an ops system\n- Reflect staff leave recorded in an HR system that isn't modeled as plugin time-off\n\nA realistic setup keeps a local collection in sync (via webhooks or a cron job) and has the resolver run a single indexed query against it — the resolver itself never calls a remote API:\n\n```ts\nimport type { ExternalBusyInterval, GetExternalBusy } from 'payload-reserve'\n\n// A sync job (webhook handler or scheduled cron task) keeps this collection's\n// rows current from whatever external source you're integrating — a\n// Google/Outlook calendar sync, a legacy system export, an ops tool, etc.\n// The resolver below never calls out itself; it only reads what the sync\n// job already wrote, so it stays a single cheap, indexed query.\nconst getExternalBusy: GetExternalBusy = async ({ end, req, resourceId, start }) => {\n  const result = await req.payload.find({\n    collection: 'external-busy', // your locally-synced collection\n    where: {\n      and: [\n        { resource: { equals: resourceId } },\n        { start: { less_than: end.toISOString() } },\n        { end: { greater_than: start.toISOString() } },\n      ],\n    },\n    depth: 0,\n    limit: 0,\n  })\n\n  return result.docs.map(\n    (doc): ExternalBusyInterval => ({\n      start: doc.start,\n      end: doc.end,\n      label: doc.label,\n    }),\n  )\n}\n\npayloadReserve({\n  getExternalBusy,\n})\n```\n\n- **Enforcement:** any booking (hooks, endpoints, slot listings) overlapping an interval is unavailable. An interval blocks the WHOLE resource (all `quantity` units) — external calendars aren't unit-aware.\n- **Display:** the `resource-availability` endpoint returns the intervals as a separate `external[]` array (not mixed into `busy`), and the calendar renders them as a distinct, non-clickable hatched \"External event\" slot.\n- **Fail-open:** if the resolver throws, the plugin treats it as no external busy for that call — a sync failure never blocks a real booking or breaks the grid.\n- **Performance:** the resolver is called once per candidate window during slot computation, so keep it cheap — a local table lookup or a per-request cache, never a remote API call per invocation.\n\n---\n\n## Access Control & Booking Correctness\n\n### 4.1.3: the second batch\n\nTwo more from the same researcher, confirmed against 4.1.1 and fixed here:\n\n- **`/reserve/hold` was unauthenticated and uncapped.** New `slotHolds.maxActivePerCustomer` (default 5) and `slotHolds.requireAuth` (default off); anonymous callers still need an edge rate limit, which the README's slot-holds section now says plainly.\n- **A failed service lookup inside the conflict check fell back to zero buffers, silently.** It now fails closed: the check rejects (the booking gets a 500 rather than a slip-through) and logs at error level regardless of `debug`. A service that no longer exists still resolves to zero buffer, with a warning.\n\n### 4.1.2: the rest of the audit\n\nThe 4.1.1 disclosure prompted a full audit; 4.1.2 closes everything it found. Reachable by a customer or anonymous caller on the default config, so upgrade:\n\n- **Services, Resources and Schedules** writes are staff-only in standalone mode (they sat on Payload's default, so a customer could deactivate a resource or delete a schedule).\n- A customer may no longer **self-confirm** their booking (`status` can only move to the cancel status), **back-date `startTime`** to dodge the cancellation notice period, reschedule or cancel inside it, cancel after the start, clear `customer`, or attach `guest` data. Staff are exempt from the notice period.\n- **Flexible windows are bounded** (`duration` ≤ window ≤ `maxFlexibleDuration`, default 24h) for bookings and holds. One request could otherwise occupy a resource until 2099.\n- **Public actors book inside the schedule and not in the past** (`enforceSchedule`, default on; staff and userless Local API calls exempt).\n- `/reserve/book` and `/reserve/cancel` respond at **depth 0** — the populated document leaked field-protected data. Malformed bodies are `400`, an unknown reservation id is `404`, `resources=` on the availability endpoints is capped at 20 validated ids.\n- Guest gating covers every service in `items[]`; required-resource pools cannot be dodged by listing them at another time and are added when a booking's service changes; a single `items[]` entry keeps its own service's duration.\n- `resourceOwnerMode`: a schedule may only name a resource the caller owns; only admins may re-assign `owner`.\n- `disabled: true` locks non-staff writes (the hooks it strips were the validation); a host collection named `reserve` is refused at boot instead of silently shadowing the endpoints; expired holds no longer block deleting a resource.\n\n### Standalone mode scopes customers to their own records (4.1.1)\n\n**Before 4.1.1, the Quick Start config was exploitable by any customer with a login.** Reservations and the generated `customers` auth collection sat on Payload's built-in default access — `Boolean(user)` for read, update and delete — so through the stock `/api/reservations` and `/api/customers` REST API a customer could read, rewrite and delete every other customer's reservation, list every customer's email/phone/notes, and `PATCH` another customer's `password` and log in as them. Only `create` was guarded. Reported privately by an external researcher; fixed and covered by `dev/standaloneAccess.int.spec.ts`.\n\nStandalone mode (no `userCollection`) now ships these defaults, with nothing to configure:\n\n| Collection | Customer | Staff/admin (any other auth collection) |\n|------------|----------|------------------------------------------|\n| Reservations | read/update **own rows only** (`customer equals req.user.id`; guest bookings are unreachable); no delete; cannot re-assign `customer` | everything |\n| Customers | read/update **own document only**; `notes` is staff-only at field level; no delete | everything |\n\n`create` is unchanged on both (Payload's default, with `enforceCustomerOwnership` pinning `customer` to the caller), so `access.customers.create: () => true` still opens self-registration without reopening reads. Any rule you pass in `access.reservations`/`access.customers` replaces the default for that operation only.\n\n**`userCollection` mode is not changed** — staff and customers share one collection there and the plugin cannot tell them apart without a role, so Reservations stays on Payload's default and the plugin warns at boot when nothing narrows `read`. If customers log in to that collection, supply `access.reservations` yourself; the pattern is in [Configuration → Access control for customers](./docs/configuration.md#access-control-for-customers). `resourceOwnerMode` already brings its own rules and is unaffected.\n\n### Endpoints enforce collection access control\n\nFour endpoints now gate the request through Payload's normal access-control pipeline (`overrideAccess: false` + `req`) instead of reading privileged. The governing rule is **gate the request with one explicit access-checked call, then keep the derived reads privileged** — an endpoint authorizes *what you asked for*, and once you are past that gate it still assembles a complete answer. So this is deliberately a per-path change, not a blanket flip:\n\n| Endpoint | What delegates to access control | What stays privileged | Why |\n|---|---|---|---|\n| `/api/reservation-customer-search` | the customer query itself | — | The whole endpoint is the read; nothing is derived from it. |\n| `/api/reserve/resource-availability` | a `findByID` probe of the requested resource (404 on denial) | every read that builds the grid: the resource itself, its schedules, its busy reservations, and — only when `slotHolds` is enabled — its unexpired slot holds. So **four** reads for a plain resource with `slotHolds` on, three with it off. Each `requiredResources` pool its services name adds three more (the pool's own resource read, its busy reservations, its holds), or two with `slotHolds` off. Two are Resources reads, and there is no separate services read | The probe decides *whether you may see this resource*. The grid must then show every conflicting booking, including other tenants' and other owners' — a busy slot you can't see is a double-booking. |\n| `/api/reserve/cancel` | the update, **only** on the privileged-non-owner path | the reservation read, and the update on the owner and guest-token paths | For a guest the cancellation token *is* the authorization. For an owner, `resourceOwnerMode`'s `update: adminOnly` would otherwise block a customer cancelling their own booking. Ownership and token matching are checked in the endpoint before either path is taken. |\n| `/api/reserve/effective-timezone` | the tenant-document read (falls back to the global zone on denial) | — | Prevents a forged tenant cookie resolving a zone you have no membership in. |\n\n- **Plain installs** (no `resourceOwnerMode`, no `multiTenant`, and no custom `access` overrides) are unaffected: Payload's own built-in default is `read: ({ req: { user } }) => Boolean(user)`, so any authenticated user still passes.\n- **A `userCollection` with a restrictive `read` rule now narrows customer search accordingly.** If the existing auth collection you pointed `userCollection` at defines its own `access.read` — for example, one that scopes a user to their own record or to a department — `/api/reservation-customer-search` now respects it, because the endpoint no longer out-permissions the collection it reads from. If staff stop seeing customers they used to see, the fix is in that collection's own `access.read`, not in the plugin.\n\n#### `/api/reserve/book`: the tenant probe is the gate, not `overrideAccess`\n\n`POST /api/reserve/book` does **not** follow the single \"gate with one access-checked call\" pattern the table above uses. Its write stays **privileged for every caller** (`overrideAccess: true` — the Local API default this endpoint has always used), and a separate access-checked probe is what authorizes the tenant. Both halves of that are deliberate:\n\n1. **`overrideAccess: false` cannot gate this write, so it is not used to pretend otherwise.** Payload's `create` access check (`executeAccess`) only tests the *truthiness* of what an access function returns and — unlike read/update/delete — never applies a returned `Where`, because there is no existing document to filter. Multi-tenant scopes access precisely by returning a `Where`, so its tenant-scoped `create` access passes for *any* authenticated member of *any* tenant no matter how this flag is set. Delegating would therefore add no isolation while actively breaking real callers: `resourceOwnerMode` makes reservation `create` **admin-only** (`makeReservationOwnerAccess`), so both an ordinary customer booking for themselves *and* a non-admin staff or resource-owner account booking a walk-in would get a flat `403` from an endpoint that served them in every earlier release.\n2. **`callerMayUseTenant` (which tenant they may write into) is the gate.** For every authenticated caller, an access-checked (`overrideAccess: false`) probe read (`src/utilities/tenantTimezone.ts`) checks any explicit `tenant` in the request body against the tenants collection, and a denial returns a clean `403` before `payload.create` is ever called. This is what **closes** the formerly-open hole where an authenticated tenant-A caller could `POST` an explicit `tenant: <tenant-B-id>` and land the reservation there. A `hasMany` tenant field is supported: every id in the array is probed.\n\nWho may book for whom is enforced separately and independently of either of the above: an authenticated non-privileged caller is forced onto their own customer id, and an anonymous caller may not name an existing customer at all (the guest flow covers them).\n\n**Precondition worth knowing:** the probe is a genuine membership check only when the caller authenticates against the *same* collection multi-tenant wraps as its admin/tenant-owning collection — true whenever `userCollection` points at that collection. In **standalone mode** (no `userCollection`), customers authenticate against the plugin's own `slugs.customers`, a collection multi-tenant never wraps, so the probe passes for any tenant id supplied by a logged-in customer. The plugin warns about this at boot whenever standalone mode + multi-tenant is detected; the fix is `userCollection` pointing at multi-tenant's admin auth collection, or your own tenant check in front of the endpoint.\n\n**Consequence to know about, by design, not an oversight:** because the write is privileged, a consumer's own `access.reservations.create` — and any field-level `create` access added via `collectionOverrides.reservations` — is **not** applied to bookings made through this endpoint. That is unchanged from every release before tenant scoping existed, and nothing about it is exploitable (who may book for whom is enforced in the endpoint itself, and the tenant is probed). But if you add create access via `collectionOverrides` expecting it to run for every booking, it will not run for this one — put the rule in a `beforeChange` hook (which does run) or in the `hooks.beforeBookingCreate` plugin hook instead.\n\nThe reservations collection's own REST API (`POST /api/reservations`) is unaffected — it goes through Payload's access control as normal.\n\n### `resourceOwnerMode`: the availability grid now matches the Resources collection\n\nUnder `resourceOwnerMode`, a staff user (a role listed in `staffRoles` but **not** in `adminRoles`) can now only pull `/api/reserve/resource-availability` for their **own** resource — the same restriction the Resources collection already applies to ordinary reads. Add the role to `adminRoles` to restore the wider (all-resources) view for that user.\n\n### Multi-resource conflict detection now covers the top-level `resource`\n\nA booking's top-level `resource` field is now conflict-checked even when the request also supplies an explicit `items[]` that never names it. Previously, a caller could put resource A in the top-level fields and only *other* resources in `items[]`, and A itself was never checked for overlaps — even though every other booking's conflict check already treats A as occupied by this one. Overlaps against the top-level resource that were previously accepted are now rejected.\n\nIf you call `resolveReservationItems` directly (it's exported from the package root), note that its returned array can now contain one more entry than before — one synthesized from the top-level `resource`/`startTime`/`endTime` and flagged `fromParent: true` — unless an `items[]` entry for that same resource already, demonstrably, covers the same window.\n\n### Calendar clicks and slot windows resolve in the business timezone\n\nThe admin Calendar's grid instants, click targets, day-key sequences, and month/week header labels are now computed in the plugin's business timezone (`timezone`, or the selected tenant's zone under `multiTenant`) rather than the browser's local timezone. Previously, viewing the calendar from a timezone different than the business's could make clicking a displayed time slot book a different wall-clock hour than the one shown.\n\n### Plugin order matters under `multiTenant`\n\n`payloadReserve()` must be listed **before** `multiTenantPlugin()` in the `plugins` array, and this plugin's collection slugs must appear in the multi-tenant plugin's own `collections` option:\n\n```typescript\nplugins: [\n  payloadReserve({ /* ... */ }),\n  multiTenantPlugin({\n    collections: {\n      // `customers` only exists in standalone mode (no `userCollection`).\n      // Leaving it out means /api/reservation-customer-search keeps\n      // returning every tenant's customers — there is no tenant field for\n      // it to filter on.\n      customers: {},\n      reservations: {},\n      resources: {},\n      schedules: {},\n      services: {},\n    },\n    // ...\n  }),\n]\n```\n\nAt `payloadReserve`'s own plugin-time no tenant field exists on any collection yet (multi-tenant hasn't run), and multi-tenant only ever scopes the collections named in its own `collections` option — it never discovers them. So if you enable multi-tenant elsewhere in your config but forget to list payload-reserve's collections there, those documents silently stay readable across every tenant. The plugin now detects this at boot and logs a warning naming the unscoped slugs:\n\n```\npayload-reserve: these collections are NOT tenant-scoped: reservations, resources, schedules, services, customers. This config looks like it enables multi-tenancy (another collection carries a \"tenant\" field, or an auth collection carries a \"tenants\" membership array) — detection is a heuristic, so disregard this if you are not using multi-tenancy. Otherwise add these slugs to the multi-tenant plugin's \"collections\" option, or their documents stay readable across tenants.\n```\n\nDetection is a **heuristic** — the multi-tenant plugin exposes nothing at init to check directly — so the warning arms on either of two independent signals: some collection in your config carries a top-level tenant field, or an auth collection carries multi-tenant's `tenants` membership array. Each covers the other's blind spot (scoping *only* these collections and forgetting them all leaves nothing else carrying the field; `tenantsArrayField.includeDefaultField: false` removes the array). Neither is exact, so the warning can fire on a config that merely looks tenant-shaped — it is only ever a warning and never blocks boot.\n\nTwo more diagnostics fire under the same \"multi-tenant detected\" condition. In **standalone mode**, `/api/reserve/book`'s tenant-membership probe (above) is a real membership check only when the caller authenticates against the same collection multi-tenant wraps — standalone customers never do, so the plugin warns that the probe cannot actually verify a logged-in customer's membership there; point `userCollection` at multi-tenant's own admin auth collection to close it. In **`userCollection` mode**, if your auth collection carries *neither* a flat tenant field *nor* multi-tenant's `tenants` membership array, it is genuinely unscoped and the plugin warns naming it — the remedy depends on which collection multi-tenant treats as its own admin/tenant-owning collection: if it's this one, it needs the `tenants` array (which multi-tenant adds automatically unless disabled), not a listing in `collections`, which multi-tenant itself rejects for that collection; only a genuinely separate auth collection belongs in `collections`.\n\n### Hook timing: every plugin hook fires before commit, never after\n\n`afterBookingCreate`, `afterBookingConfirm`, `afterBookingCancel`, and `afterStatusChange` all fire **inside** the write's database transaction, not after it commits. Payload runs collection `afterChange` hooks and then commits in the same operation: verified directly against the installed package, `node_modules/payload/dist/collections/operations/create.js` invokes the collection's `afterChange` hooks at line 291 and calls `commitTransaction(req)` at line 324 — the only things that run in between are Payload's own `afterOperation` hook (which this plugin does not use) and `unlinkTempFiles`. The update path (where a status-change hook typically fires) is structurally identical.\n\nPayload exposes **no** post-commit hook point — `afterOperation` is pre-commit too — so this is a documented constraint, not something a future version can quietly fix. In practice the failure window is narrow: the only way a plugin hook fires for a write that never actually lands is the commit itself failing *after* every hook already ran successfully — a database partition, not a routine validation failure (those throw earlier, from a `beforeChange` hook, before any `afterChange` hook or the commit is ever reached). **If your integration must not act on an uncommitted booking** (e.g. charging a card from `afterBookingConfirm`), make the side effect idempotent and reconcile afterward — upsert by reservation id, or verify the booking still exists before treating a webhook as authoritative — rather than relying on hook-vs-commit ordering to protect you.\n\n### Concurrent booking: database adapter support\n\nTwo simultaneous bookers for the same slot are only kept from double-booking each other because a `beforeChange` hook (`acquireBookingLock`) writes each claimed resource's hidden `bookingLock` field inside the booking's own transaction — the database, not the plugin, is what forces the losers to wait or abort. **Before this existed, nothing prevented a double-booking at all:** measured on MongoDB, 10 simultaneous creates for one `quantity: 1` slot produced 10 confirmed reservations, and 8 simultaneous creates against a `quantity: 3` resource produced 8.\n\nBecause the lock only works *inside* a transaction, **a database that gives Payload no transaction gives no protection, silently.** A standalone (non-replica-set) MongoDB skips transactions entirely; SQLite needs `transactionOptions` set on the adapter (see below) or it never gets one either. The plugin's boot diagnostic (`supportsTransactions`) probes this at startup and warns if it fails:\n\n```\npayload-reserve: this database does not support transactions, so concurrent bookings for the same slot can double-book. MongoDB needs a replica set (even single-node) for transaction support. Postgres supports transactions by default. SQLite requires transactionOptions to be set on the adapter, or it silently runs without them.\n```\n\n**Retry is required on MongoDB and does nothing on Postgres.** `retryOnWriteConflict` re-runs the whole write on a fresh transaction when the failure is a recognized transient conflict (structured signals only — MongoDB's `errorLabels`/code, Postgres's SQLSTATE, SQLite's `code` prefix — never message text). MongoDB's loser aborts immediately rather than waiting, so without retry a `quantity: 3` resource recovers only 1 of 3 under a burst. Postgres's loser *blocks* until the winner commits and then proceeds through the normal conflict check on the merits, so retry never fires there at all — measured 3 of 3 recovered with no retry needed. `/api/reserve/book`, `/api/reserve/cancel`, and `/api/reserve/hold` all wrap their write in `retryOnWriteConflict`; a conflict that survives every attempt maps to a clean HTTP **409**, not a raw 500. Measured directly (burst of 8 concurrent creates against a `quantity: 3` resource; `dev/concurrency.int.spec.ts`, `dev/holds.int.spec.ts`):\n\n| Adapter | Serializes? | Loser behavior | Capacity with no retry (of 3) | Retry recovers full capacity? |\n|---|---|---|---|---|\n| MongoDB (replica set) | Yes | Aborts (`WriteConflict`, code 112, `errorLabels: ['TransientTransactionError']`) | 1 of 3 | Yes at moderate contention — recovers the other 2 (3 of 3 for a burst of 8). **Not a guarantee under extreme contention:** the retry budget is finite (5 attempts), and a measured 40-way burst against a `quantity: 5` resource granted only 3, with the other 37 receiving clean `409`s. Capacity is never *exceeded*; it can still be *under-filled* when the burst is large relative to the budget. |\n| Postgres 18.4 | Yes | Blocks, then proceeds; rejected bookings surface as a clean `ValidationError` (400) | 3 of 3 | Not needed — retry never fires |\n| SQLite (`@payloadcms/db-sqlite`, `transactionOptions` set — **required**) | Yes, single-winner correctness | Aborts immediately at `beginTransaction`, before the transaction body ever runs (`LibsqlError`, `code: 'SQLITE_LOCKED_SHAREDCACHE'`, `rawCode: 262`) | 1 of 3 | **No** — capped at 1 of 3, even with retry attempted and a large retry budget |\n\n**`transactionOptions` must be set on `sqliteAdapter(...)`, or SQLite silently double-books.** `@payloadcms/db-sqlite` wires up a real `beginTransaction` only when the adapter is given a truthy `transactionOptions`; without it, `beginTransaction` is a hard-coded no-op that always resolves `null`, so the plugin's booking lock never runs inside a transaction and serializes nothing. Measured with the adapter's bare default config (`sqliteAdapter({ client, push: true })`, no `transactionOptions`): every concurrency-sensitive assertion failed with complete, silent over-booking — 10 of 10 concurrent bookings for one slot persisted (expected 1), a `quantity: 3` resource accepted all 8 of a burst of 8, and 8 of 8 concurrent slot-hold attempts were all granted the same slot (expected 1) — no error, no rejected request, just extra rows. Postgres enables transactions by default and only needs `transactionOptions: false` to turn them *off*; SQLite has the inverse default. The plugin's boot diagnostic (`supportsTransactions`) detects a misconfigured adapter either way and warns at startup.\n\n**With `transactionOptions` set** (the dev harness now ships `transactionOptions: {}` in its `SQLITE=1` branch, and this is required for production use too), SQLite correctly serializes for **single-winner** scenarios: exactly one of 10 concurrent bookings for one slot survives, a `quantity: 3` resource never exceeds capacity under a burst, overlapping-time bursts still yield exactly one booking, and — critically for holds — exactly one of 8 concurrent slot-hold attempts is granted. Every single-winner assertion in `dev/holds.int.spec.ts` passes under this configuration; only its `quantity: 3` capacity-recovery case does not, for the reason immediately below, which is the same reason the booking equivalent does not.\n\n**Retry-based capacity recovery does not work for SQLite, and this is a limitation the plugin cannot fix.** `src/utilities/retryOnWriteConflict.ts` now recognizes the `SQLITE_BUSY`/`SQLITE_LOCKED*` code family (structured `code`-prefix match, same as the brief's constraint requires) — but in practice this detection never fires for SQLite's actual failure shape. Confirmed by direct inspection: the original `LibsqlError` (with `code: 'SQLITE_LOCKED_SHAREDCACHE'`) is caught **inside** `@payloadcms/drizzle`'s own `beginTransaction.js` (a Payload-core dependency, not this plugin) and re-thrown as a bare `new Error('Error: cannot begin transaction: ...')` — a plain object with a message string and nothing else (`Object.keys(error)` is empty; no `code`, no `cause`, `name` is the generic `'Error'`). By the time the error reaches this plugin's retry logic, the structured signal is already gone. Raising the retry budget from the default (5 attempts) to 30 makes no difference — confirmed each of the losing attempts fails exactly once, meaning retry is never even entered, since `isTransientWriteConflict` correctly returns `false` for an error with no matchable field. The only way to detect this failure would be matching on the error's message text, which this project's structured-signal-only constraint explicitly forbids. **Net effect: on SQLite, a `quantity: 1` resource is fully safe under concurrency (no double-booking, ever); a `quantity: N > 1` resource under a simultaneous burst will safely reject the excess rather than over-book, but will not recover to its full legitimate capacity the way Mongo and Postgres do** — some legitimately bookable slots may be lost under contention. This is a `@payloadcms/db-sqlite`/`@payloadcms/drizzle` limitation external to this plugin, not something addressed here.\n\n**The same gap means `POST /api/reserve/book` returns a raw HTTP 500 under SQLite contention, not the clean `409` this plugin's retry/409 mapping (above) gives Mongo and Postgres.** `createBooking.ts` maps a surviving conflict to `409 { retryable: true }` by checking `isTransientWriteConflict` on whatever `retryOnWriteConflict` ultimately throws — the same check that cannot recognize SQLite's stripped `beginTransaction` error above. Measured directly: 6 simultaneous `POST /api/reserve/book` calls for the same slot correctly booked exactly one (no over-booking), but 5 of the 6 losers came back as `500`, not `409`. **Practically, this means a public booking widget backed by SQLite will show its generic error-handling UI, not a \"someone just booked this, try again\" message, whenever two customers click \"Book\" for the same slot at close to the same time** — the request still fails safely (nothing is double-booked), but the caller gets an opaque server error instead of an actionable one. This is the same external, unfixable-without-message-matching limitation described above, reaching a second call site.\n\n#### Running the test suite against every adapter\n\nThe integration suite defaults to an in-memory MongoDB replica set. Run it against Postgres or SQLite with an env var — no code changes needed:\n\n```bash\n# Postgres — point PG_URL at a real, empty database\nPG_URL=\"postgres://user:password@localhost:5432/reserve_test\" CI=true pnpm test:int\n\n# SQLite — in-memory by default\nSQLITE=1 CI=true pnpm test:int\n```\n\nBoth are opt-in dev/CI conveniences, not something a consumer's app needs to configure — they exist so this plugin's own suite can be verified against every adapter it claims to support. **Neither run is expected to be fully green by construction, and this is known, not a regression to chase.** Last measured (38 files, 539 tests):\n\n| Run | Result | The gaps |\n|---|---|---|\n| MongoDB (default) | 38 files, 539 passed, 0 skipped | none |\n| `PG_URL=…` | 38 files, 538 passed, 1 skipped | the `bufferFor error trace` skip below |\n| `SQLITE=1` | 35 of 38 files, 535 passed, 3 failed, 1 skipped | the same `bufferFor` skip, plus **3 failures that are all one accepted upstream limitation**: `dev/concurrency.int.spec.ts`'s `quantity: 3` capacity recovery, `dev/holds.int.spec.ts`'s `quantity: 3` capacity recovery, and `dev/bookingRetry.int.spec.ts`'s no-500 assertion. All three trace to `@payloadcms/drizzle` discarding the driver's structured error code at `beginTransaction` (see the section above) — never \"fix\" any of them by matching on message text. |\n\nThe `bufferFor error trace` skip manufactures a dangling reference via `context.skipReservationHooks` to exercise a code path that the delete guard below makes structurally unreachable on a schema-enforced SQL database, so the scenario is MongoDB-only by construction.\n\n### Slot holds (opt-in)\n\nShort-lived claims on a slot, taken while a customer completes an external step (typically payment) before the booking itself exists. Enable with the `slotHolds` plugin option:\n\n```typescript\npayloadReserve({\n  slotHolds: {\n    enabled: true,\n    ttlMinutes: 10, // default; how long an unconverted hold blocks its slot\n    requireAuth: false, // default; true refuses anonymous callers with 401\n    maxActivePerCustomer: 5, // default; unexpired holds one signed-in customer may hold (false = no cap)\n  },\n})\n```\n\nDisabled by default — when absent, no `reservation-holds` collection is created, neither endpoint below is registered, and availability behaviour is byte-identical to a plugin build without this feature at all. A hold occupies its resource exactly like a blocking reservation (folded into the same availability/conflict calculations); it carries no status, buffer, or `items[]` — one resource, one window, one clock. Expired holds are never trusted and are swept opportunistically, so no background job is required.\n\n| Method | Path | Body | Response |\n|---|---|---|---|\n| POST | `/api/reserve/hold` | `{ resource, service, startTime, endTime?, guestCount? }` | `201 { token, expiresAt }`; `409 { error: 'slot_taken' \\| 'service_inactive' \\| 'outside_schedule' }` when the slot genuinely isn't available; `409 { error, retryable: true }` when lock contention outlived the retry budget; `404 { error: 'service_not_found' \\| 'resource_not_found' }`; `400 { error: 'invalid_window', detail }` for a start in the past or a `flexible` window outside `[duration, maxFlexibleDuration]`; `400` for a missing or unparseable field; `401 { error: 'authentication_required' }` for an anonymous caller when `slotHolds.require","readmeFilename":"README.md"}