{"_id":"@adatechnology/scheduling-ui","_rev":"9-8a1ba7468ebd0c2597a5a177e0b34f71","name":"@adatechnology/scheduling-ui","dist-tags":{"latest":"0.1.0","rc":"0.1.0-rc.7"},"versions":{"0.1.0-rc.1":{"name":"@adatechnology/scheduling-ui","version":"0.1.0-rc.1","license":"MIT","_id":"@adatechnology/scheduling-ui@0.1.0-rc.1","maintainers":[{"name":"miyazaki","email":"andersonfrfilho@gmail.com"}],"dist":{"shasum":"6a5be08aecb29315e472607ed6deb51c223c50e3","tarball":"https://registry.npmjs.org/@adatechnology/scheduling-ui/-/scheduling-ui-0.1.0-rc.1.tgz","fileCount":4,"integrity":"sha512-3U8DahcPO5juPII8fGnw+x84XmCbUcqNU02lKtmr6TVWq9ZARXOPW0BEBWE8wMxWmz+OHN9eoaNPu/FgIX2pJQ==","signatures":[{"sig":"MEYCIQDGzudfjc+x2DdtLkhQeVPFxNmktLzjTlh4ea5m7E7MagIhAMBLU6FsZDKJRq/glhKAVsbmDvqzTZPJUanouMdl3sM/","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":116018},"main":"dist/index.js","type":"module","_from":"file:adatechnology-scheduling-ui-0.1.0-rc.1.tgz","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"test":"bun test","build":"tsup src/index.ts --dts --format esm --external react --external react-dom --external @tanstack/react-query","check":"tsc -p tsconfig.json --noEmit","build:watch":"tsup src/index.ts --watch --dts --format esm --external react --external react-dom --external @tanstack/react-query"},"_npmUser":{"name":"miyazaki","email":"andersonfrfilho@gmail.com"},"_resolved":"/tmp/fc05c4a57459a3c42b10ac769e08f433/adatechnology-scheduling-ui-0.1.0-rc.1.tgz","_integrity":"sha512-3U8DahcPO5juPII8fGnw+x84XmCbUcqNU02lKtmr6TVWq9ZARXOPW0BEBWE8wMxWmz+OHN9eoaNPu/FgIX2pJQ==","_npmVersion":"10.9.8","description":"Scheduling UI — headless hooks + agenda, reservas, recursos, serviços e disponibilidade","directories":{},"_nodeVersion":"22.23.2","dependencies":{"clsx":"^2.1.1","lucide-react":"^1.21.0","@adatechnology/scheduling-contracts":"0.1.0-rc.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","react":"^19","react-dom":"^19","@types/bun":"1.3.14","typescript":"^5.9.3","@types/react":"^19","@types/react-dom":"^19","@tanstack/react-query":"^5.62.8"},"peerDependencies":{"react":"^18 || ^19","react-dom":"^18 || ^19","@tanstack/react-query":"^5"},"_npmOperationalInternal":{"tmp":"tmp/scheduling-ui_0.1.0-rc.1_1787008173677_0.47784250425088115","host":"s3://npm-registry-packages-npm-production"}},"0.1.0-rc.2":{"name":"@adatechnology/scheduling-ui","version":"0.1.0-rc.2","license":"MIT","_id":"@adatechnology/scheduling-ui@0.1.0-rc.2","maintainers":[{"name":"miyazaki","email":"andersonfrfilho@gmail.com"}],"dist":{"shasum":"a2adcedbbad5b2561bee1c97a9d671362067bea1","tarball":"https://registry.npmjs.org/@adatechnology/scheduling-ui/-/scheduling-ui-0.1.0-rc.2.tgz","fileCount":4,"integrity":"sha512-awl8AGKKYaX2C8C/o6KQc3J0JeUgzPBSeh6debOW8xtElPpxlopy4LGVlkZYX2df6RsC0/Iq0EGpOF9ghP0HGA==","signatures":[{"sig":"MEQCIAMkIYjBlJHEFx74Hwdil6f91He3NN2rjlLxiU0uQfmVAiBkIweMF5zB+PWSwsE12KpgwHshgE7X7lue/atrkhnjqw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":125234},"main":"dist/index.js","type":"module","_from":"file:adatechnology-scheduling-ui-0.1.0-rc.2.tgz","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"test":"bun test","build":"tsup src/index.ts --dts --format esm --external react --external react-dom --external @tanstack/react-query","check":"tsc -p tsconfig.json --noEmit","build:watch":"tsup src/index.ts --watch --dts --format esm --external react --external react-dom --external @tanstack/react-query"},"_npmUser":{"name":"miyazaki","email":"andersonfrfilho@gmail.com"},"_resolved":"/tmp/cd76e6d4db9885aabb19ac84ae467514/adatechnology-scheduling-ui-0.1.0-rc.2.tgz","_integrity":"sha512-awl8AGKKYaX2C8C/o6KQc3J0JeUgzPBSeh6debOW8xtElPpxlopy4LGVlkZYX2df6RsC0/Iq0EGpOF9ghP0HGA==","_npmVersion":"10.9.8","description":"Scheduling UI — headless hooks + agenda, reservas, recursos, serviços e disponibilidade","directories":{},"_nodeVersion":"22.23.2","dependencies":{"clsx":"^2.1.1","lucide-react":"^1.21.0","@adatechnology/scheduling-contracts":"0.1.0-rc.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","react":"^19","react-dom":"^19","@types/bun":"1.3.14","typescript":"^5.9.3","@types/react":"^19","@types/react-dom":"^19","@tanstack/react-query":"^5.62.8"},"peerDependencies":{"react":"^18 || ^19","react-dom":"^18 || ^19","@tanstack/react-query":"^5"},"_npmOperationalInternal":{"tmp":"tmp/scheduling-ui_0.1.0-rc.2_1787361079537_0.3514359320882263","host":"s3://npm-registry-packages-npm-production"}},"0.1.0-rc.3":{"name":"@adatechnology/scheduling-ui","version":"0.1.0-rc.3","license":"MIT","_id":"@adatechnology/scheduling-ui@0.1.0-rc.3","maintainers":[{"name":"miyazaki","email":"andersonfrfilho@gmail.com"}],"dist":{"shasum":"db95bb8d388f69b71df6b48acf1f4270a42896ba","tarball":"https://registry.npmjs.org/@adatechnology/scheduling-ui/-/scheduling-ui-0.1.0-rc.3.tgz","fileCount":4,"integrity":"sha512-sdcrCdHKqjet+yKJGo50gTIp3RcaC6PewhBg+LV2z4s6mNvRqRWwjzxBLtxD3tvOrVFg6aokmcWjiECSe5SM8w==","signatures":[{"sig":"MEYCIQCEYig8MwK4uedgrayNognI37Lroyf3Je4q0tG7qy8UWAIhANN75yKi0v/XT07XAYNUQ69bMbKG5jL0uIXfe3EVNoYv","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":125224},"main":"dist/index.js","type":"module","_from":"file:adatechnology-scheduling-ui-0.1.0-rc.3.tgz","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"test":"bun test","build":"tsup src/index.ts --dts --format esm --external react --external react-dom --external @tanstack/react-query","check":"tsc -p tsconfig.json --noEmit","build:watch":"tsup src/index.ts --watch --dts --format esm --external react --external react-dom --external @tanstack/react-query"},"_npmUser":{"name":"miyazaki","email":"andersonfrfilho@gmail.com"},"_resolved":"/tmp/98c6e07ab0c5164a18270d6eece66074/adatechnology-scheduling-ui-0.1.0-rc.3.tgz","_integrity":"sha512-sdcrCdHKqjet+yKJGo50gTIp3RcaC6PewhBg+LV2z4s6mNvRqRWwjzxBLtxD3tvOrVFg6aokmcWjiECSe5SM8w==","_npmVersion":"10.9.8","description":"Scheduling UI — headless hooks + agenda, reservas, recursos, serviços e disponibilidade","directories":{},"_nodeVersion":"22.23.2","dependencies":{"clsx":"^2.1.1","lucide-react":"^1.21.0","@adatechnology/scheduling-contracts":"0.1.0-rc.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","react":"^19","react-dom":"^19","@types/bun":"1.3.14","typescript":"^5.9.3","@types/react":"^19","@types/react-dom":"^19","@tanstack/react-query":"^5.62.8"},"peerDependencies":{"react":"^18 || ^19","react-dom":"^18 || ^19","@tanstack/react-query":"^5"},"_npmOperationalInternal":{"tmp":"tmp/scheduling-ui_0.1.0-rc.3_1787439406134_0.47635431042051457","host":"s3://npm-registry-packages-npm-production"}},"0.1.0-rc.4":{"name":"@adatechnology/scheduling-ui","version":"0.1.0-rc.4","license":"MIT","_id":"@adatechnology/scheduling-ui@0.1.0-rc.4","maintainers":[{"name":"miyazaki","email":"andersonfrfilho@gmail.com"}],"dist":{"shasum":"f6ce836c643e0f06c02bf895be19bcc5c7d69e27","tarball":"https://registry.npmjs.org/@adatechnology/scheduling-ui/-/scheduling-ui-0.1.0-rc.4.tgz","fileCount":4,"integrity":"sha512-0r2vVwdSL/g8lx22mu5D6owf94WSkhExrg3Ws0ujEo7bnDzxGwzIqYGPqjXJl+566yAXwkT8W1Lo+ASHlKMz8A==","signatures":[{"sig":"MEUCIQDj2SN26Z8/ekE1/7XebCaYzrHHJMS6K6KQ6Al7ju9XnwIgSpCns4HaRiCtmU+oVMlAZIeQ/TaFA/gudf47R5pXKac=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":125224},"main":"dist/index.js","type":"module","_from":"file:adatechnology-scheduling-ui-0.1.0-rc.4.tgz","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"test":"bun test","build":"tsup src/index.ts --dts --format esm --external react --external react-dom --external @tanstack/react-query","check":"tsc -p tsconfig.json --noEmit","build:watch":"tsup src/index.ts --watch --dts --format esm --external react --external react-dom --external @tanstack/react-query"},"_npmUser":{"name":"miyazaki","email":"andersonfrfilho@gmail.com"},"_resolved":"/tmp/55c1c6c69378fd256e7598073970acb9/adatechnology-scheduling-ui-0.1.0-rc.4.tgz","_integrity":"sha512-0r2vVwdSL/g8lx22mu5D6owf94WSkhExrg3Ws0ujEo7bnDzxGwzIqYGPqjXJl+566yAXwkT8W1Lo+ASHlKMz8A==","_npmVersion":"10.9.8","description":"Scheduling UI — headless hooks + agenda, reservas, recursos, serviços e disponibilidade","directories":{},"_nodeVersion":"22.23.2","dependencies":{"clsx":"^2.1.1","lucide-react":"^1.21.0","@adatechnology/scheduling-contracts":"0.1.0-rc.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","react":"^19","react-dom":"^19","@types/bun":"1.3.14","typescript":"^5.9.3","@types/react":"^19","@types/react-dom":"^19","@tanstack/react-query":"^5.62.8"},"peerDependencies":{"react":"^18 || ^19","react-dom":"^18 || ^19","@tanstack/react-query":"^5"},"_npmOperationalInternal":{"tmp":"tmp/scheduling-ui_0.1.0-rc.4_1787460518072_0.37628284013211344","host":"s3://npm-registry-packages-npm-production"}},"0.1.0-rc.5":{"name":"@adatechnology/scheduling-ui","version":"0.1.0-rc.5","license":"MIT","_id":"@adatechnology/scheduling-ui@0.1.0-rc.5","maintainers":[{"name":"miyazaki","email":"andersonfrfilho@gmail.com"}],"dist":{"shasum":"be46e9a9cef7aad0bd5f530fed7c94f1a7644d88","tarball":"https://registry.npmjs.org/@adatechnology/scheduling-ui/-/scheduling-ui-0.1.0-rc.5.tgz","fileCount":4,"integrity":"sha512-SenNt/tRJDroWr3sjcQC4UTjgpAqjSpzsvjEpBdtIM1+Z0Vj0lRrIrq6maJA8PErqOTtDnP/6fpSB1nQCdvE7Q==","signatures":[{"sig":"MEYCIQDKhTR8K+233yz0aBxAEsbhwkgNb70YwtVnA47oJC/aSAIhAMT3Z8jzmpS8Kq7vbG5mxI9OsagrMx33a4+S+M4iXaUz","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":139516},"main":"dist/index.js","type":"module","_from":"file:adatechnology-scheduling-ui-0.1.0-rc.5.tgz","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"test":"bun test","build":"tsup src/index.ts --dts --format esm --external react --external react-dom --external @tanstack/react-query","check":"tsc -p tsconfig.json --noEmit","build:watch":"tsup src/index.ts --watch --dts --format esm --external react --external react-dom --external @tanstack/react-query"},"_npmUser":{"name":"miyazaki","email":"andersonfrfilho@gmail.com"},"_resolved":"/tmp/45059e2df5ef17e57b22ca5fbf252dde/adatechnology-scheduling-ui-0.1.0-rc.5.tgz","_integrity":"sha512-SenNt/tRJDroWr3sjcQC4UTjgpAqjSpzsvjEpBdtIM1+Z0Vj0lRrIrq6maJA8PErqOTtDnP/6fpSB1nQCdvE7Q==","_npmVersion":"10.9.8","description":"Scheduling UI — headless hooks + agenda, reservas, recursos, serviços e disponibilidade","directories":{},"_nodeVersion":"22.23.2","dependencies":{"clsx":"^2.1.1","lucide-react":"^1.21.0","@adatechnology/scheduling-contracts":"0.1.0-rc.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","react":"^19","react-dom":"^19","@types/bun":"1.3.14","typescript":"^5.9.3","@types/react":"^19","@types/react-dom":"^19","@tanstack/react-query":"^5.62.8"},"peerDependencies":{"react":"^18 || ^19","react-dom":"^18 || ^19","@tanstack/react-query":"^5"},"_npmOperationalInternal":{"tmp":"tmp/scheduling-ui_0.1.0-rc.5_1787856814523_0.025988735293205556","host":"s3://npm-registry-packages-npm-production"}},"0.1.0-rc.6":{"name":"@adatechnology/scheduling-ui","version":"0.1.0-rc.6","license":"MIT","_id":"@adatechnology/scheduling-ui@0.1.0-rc.6","maintainers":[{"name":"miyazaki","email":"andersonfrfilho@gmail.com"}],"dist":{"shasum":"167d67baf0f49d6aa307582677e5ada4e9e08354","tarball":"https://registry.npmjs.org/@adatechnology/scheduling-ui/-/scheduling-ui-0.1.0-rc.6.tgz","fileCount":4,"integrity":"sha512-diYqZN9LPH0KnCtT2lHO13I0CAQI/TaNmN1+M3Bq25z69OnAg+RcD7jmcrqrCsjFJVqFoanMnGUCtyfIu/O6ZA==","signatures":[{"sig":"MEQCIBq4Q+JXdZV9w11ANT0xmaaXzPGoi8Q/EVOA6B/n9OAGAiA6hmfgWaU0i3TaPbrvxORk2CjW5f4hmXcVt30ZHEGSeA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":148648},"main":"dist/index.js","type":"module","_from":"file:adatechnology-scheduling-ui-0.1.0-rc.6.tgz","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"test":"bun test","build":"tsup src/index.ts --dts --format esm --external react --external react-dom --external @tanstack/react-query","check":"tsc -p tsconfig.json --noEmit","build:watch":"tsup src/index.ts --watch --dts --format esm --external react --external react-dom --external @tanstack/react-query"},"_npmUser":{"name":"miyazaki","email":"andersonfrfilho@gmail.com"},"_resolved":"/tmp/2e0ca23bd446627505fd471da6340517/adatechnology-scheduling-ui-0.1.0-rc.6.tgz","_integrity":"sha512-diYqZN9LPH0KnCtT2lHO13I0CAQI/TaNmN1+M3Bq25z69OnAg+RcD7jmcrqrCsjFJVqFoanMnGUCtyfIu/O6ZA==","_npmVersion":"10.9.8","description":"Scheduling UI — headless hooks + agenda, reservas, recursos, serviços e disponibilidade","directories":{},"_nodeVersion":"22.23.2","dependencies":{"clsx":"^2.1.1","lucide-react":"^1.21.0","@adatechnology/scheduling-contracts":"0.1.0-rc.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","react":"^19","react-dom":"^19","@types/bun":"1.3.14","typescript":"^5.9.3","@types/react":"^19","@types/react-dom":"^19","@tanstack/react-query":"^5.62.8"},"peerDependencies":{"react":"^18 || ^19","react-dom":"^18 || ^19","@tanstack/react-query":"^5"},"_npmOperationalInternal":{"tmp":"tmp/scheduling-ui_0.1.0-rc.6_1787888112735_0.9542075955264306","host":"s3://npm-registry-packages-npm-production"}},"0.1.0-rc.7":{"name":"@adatechnology/scheduling-ui","version":"0.1.0-rc.7","license":"MIT","_id":"@adatechnology/scheduling-ui@0.1.0-rc.7","maintainers":[{"name":"miyazaki","email":"andersonfrfilho@gmail.com"}],"dist":{"shasum":"f3f5ce245186ab3d2980fa0692064a49720aa914","tarball":"https://registry.npmjs.org/@adatechnology/scheduling-ui/-/scheduling-ui-0.1.0-rc.7.tgz","fileCount":4,"integrity":"sha512-wJrMWPi+lnFpyykhe5m4ssAf4Ji7OEX0YEXwXEnPh/iwQxXRgGeUNl2MbCrF8AsGU71tucLNYkiXuzxyttksFA==","signatures":[{"sig":"MEQCIG7RumVVLQU9liiQs6pr2KD0pRE92agQkAgG6OqVYZUWAiBL+rSXdrpUyVIHYszBs+mObpS2kL210X0pWvGMqexBTw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":148648},"main":"dist/index.js","type":"module","_from":"file:adatechnology-scheduling-ui-0.1.0-rc.7.tgz","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"test":"bun test","build":"tsup src/index.ts --dts --format esm --external react --external react-dom --external @tanstack/react-query","check":"tsc -p tsconfig.json --noEmit","build:watch":"tsup src/index.ts --watch --dts --format esm --external react --external react-dom --external @tanstack/react-query"},"_npmUser":{"name":"miyazaki","email":"andersonfrfilho@gmail.com"},"_resolved":"/tmp/882f4f101494851117d2e0aa272cac90/adatechnology-scheduling-ui-0.1.0-rc.7.tgz","_integrity":"sha512-wJrMWPi+lnFpyykhe5m4ssAf4Ji7OEX0YEXwXEnPh/iwQxXRgGeUNl2MbCrF8AsGU71tucLNYkiXuzxyttksFA==","_npmVersion":"10.9.8","description":"Scheduling UI — headless hooks + agenda, reservas, recursos, serviços e disponibilidade","directories":{},"_nodeVersion":"22.23.2","dependencies":{"clsx":"^2.1.1","lucide-react":"^1.21.0","@adatechnology/scheduling-contracts":"0.1.0-rc.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","react":"^19","react-dom":"^19","@types/bun":"1.3.14","typescript":"^5.9.3","@types/react":"^19","@types/react-dom":"^19","@tanstack/react-query":"^5.62.8"},"peerDependencies":{"react":"^18 || ^19","react-dom":"^18 || ^19","@tanstack/react-query":"^5"},"_npmOperationalInternal":{"tmp":"tmp/scheduling-ui_0.1.0-rc.7_1788014885713_0.19388390604382244","host":"s3://npm-registry-packages-npm-production"}},"0.1.0":{"name":"@adatechnology/scheduling-ui","version":"0.1.0","license":"MIT","description":"Scheduling UI — headless hooks + agenda, reservas, recursos, serviços e disponibilidade","publishConfig":{"access":"public"},"type":"module","main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"dependencies":{"clsx":"^2.1.1","lucide-react":"^1.21.0","@adatechnology/scheduling-contracts":"0.1.0"},"peerDependencies":{"@tanstack/react-query":"^5","react":"^18 || ^19","react-dom":"^18 || ^19"},"devDependencies":{"@tanstack/react-query":"^5.62.8","@types/bun":"1.3.14","@types/react":"^19","@types/react-dom":"^19","react":"^19","react-dom":"^19","tsup":"^8.5.1","typescript":"^5.9.3"},"scripts":{"build":"tsup src/index.ts --dts --format esm --external react --external react-dom --external @tanstack/react-query","build:watch":"tsup src/index.ts --watch --dts --format esm --external react --external react-dom --external @tanstack/react-query","check":"tsc -p tsconfig.json --noEmit","test":"bun test"},"_id":"@adatechnology/scheduling-ui@0.1.0","_integrity":"sha512-sPirAlvIl3NI9Lgfvl9hfn8xxs9OA5QWdwEsRoy08gfQqjDusirm1hSF0PRmPRnVWe7tfBD6u6iMEjC9PNpnWg==","_resolved":"/tmp/067416dda3e4d38f9ddbc057c2541716/adatechnology-scheduling-ui-0.1.0.tgz","_from":"file:adatechnology-scheduling-ui-0.1.0.tgz","_nodeVersion":"22.23.2","_npmVersion":"10.9.8","dist":{"integrity":"sha512-sPirAlvIl3NI9Lgfvl9hfn8xxs9OA5QWdwEsRoy08gfQqjDusirm1hSF0PRmPRnVWe7tfBD6u6iMEjC9PNpnWg==","shasum":"d5d59b6bbf0e7de2bcb22bad801fba5957aa46c1","tarball":"https://registry.npmjs.org/@adatechnology/scheduling-ui/-/scheduling-ui-0.1.0.tgz","fileCount":4,"unpackedSize":148638,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIAwM0fJxSbqkeljLsx/d71XAhzq209e+zOG697TYgreRAiEA3kG519zSmHOyLkQednIf4OdhZHtLN86wQgTP8pGAPOY="}]},"_npmUser":{"name":"miyazaki","email":"andersonfrfilho@gmail.com"},"directories":{},"maintainers":[{"name":"miyazaki","email":"andersonfrfilho@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/scheduling-ui_0.1.0_1788318110581_0.053346031630584934"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-17T23:09:33.571Z","modified":"2026-09-02T03:01:50.930Z","0.1.0-rc.1":"2026-08-17T23:09:33.816Z","0.1.0-rc.2":"2026-08-22T01:11:19.915Z","0.1.0-rc.3":"2026-08-22T22:56:46.289Z","0.1.0-rc.4":"2026-08-23T04:48:38.212Z","0.1.0-rc.5":"2026-08-27T18:53:34.671Z","0.1.0-rc.6":"2026-08-28T03:35:12.883Z","0.1.0-rc.7":"2026-08-29T14:48:05.859Z","0.1.0":"2026-09-02T03:01:50.739Z"},"license":"MIT","description":"Scheduling UI — headless hooks + agenda, reservas, recursos, serviços e disponibilidade","maintainers":[{"name":"miyazaki","email":"andersonfrfilho@gmail.com"}],"readme":"# @adatechnology/scheduling-ui\n\n**Interface de agendamento modular** — tela com navegação por abas, dois hooks reutilizáveis e uma fábrica de componentes. Agenda, reservas, recursos, serviços e regras de disponibilidade em cinco áreas, cada uma com sua grade, filtros e ações.\n\n- **Provider + hooks** para consumir a agenda em qualquer página do host\n- **SchedulingWorkspace** — composição pronta de cinco áreas de trabalho\n- **Sem fetch direto** — o host implementa `SchedulingApi`, separando a UI da lógica HTTP\n- **Área controlada ou interna** — sincroniza com query string (sobrevive a refresh) ou gerencia estado localmente\n- **TypeScript completo, React 18+**, com i18n português-brasileiro\n\n---\n\n## Instalação\n\n```bash\nbun add @adatechnology/scheduling-ui\n# ou: npm install / pnpm add\n```\n\nDependências de pares obrigatórias:\n\n```bash\nbun add react react-dom @tanstack/react-query\n```\n\nO pacote importa tipos de `@adatechnology/scheduling-contracts` automaticamente (workspace dependency).\n\n---\n\n## Uso básico\n\n```tsx\nimport { SchedulingProvider, SchedulingWorkspace, type SchedulingApi } from '@adatechnology/scheduling-ui'\n\n// 1. Implementar SchedulingApi no seu cliente HTTP ou module\nconst schedulingApi: SchedulingApi = {\n  // Recursos\n  async listResources(params) {\n    const res = await fetch('/api/v1/scheduling/resources', { /* params */ })\n    return res.json()\n  },\n  async createResource(input) {\n    const res = await fetch('/api/v1/scheduling/resources', {\n      method: 'POST',\n      body: JSON.stringify(input),\n    })\n    return res.json()\n  },\n  async updateResource(id, input) {\n    const res = await fetch(`/api/v1/scheduling/resources/${id}`, {\n      method: 'PUT',\n      body: JSON.stringify(input),\n    })\n    return res.json()\n  },\n  async deleteResource(id) {\n    await fetch(`/api/v1/scheduling/resources/${id}`, { method: 'DELETE' })\n  },\n\n  // Serviços\n  async listServices(params) {\n    const res = await fetch('/api/v1/scheduling/services', { /* params */ })\n    return res.json()\n  },\n  async createService(input) {\n    const res = await fetch('/api/v1/scheduling/services', {\n      method: 'POST',\n      body: JSON.stringify(input),\n    })\n    return res.json()\n  },\n  async updateService(id, input) {\n    const res = await fetch(`/api/v1/scheduling/services/${id}`, {\n      method: 'PUT',\n      body: JSON.stringify(input),\n    })\n    return res.json()\n  },\n  async deleteService(id) {\n    await fetch(`/api/v1/scheduling/services/${id}`, { method: 'DELETE' })\n  },\n\n  // Regras de disponibilidade\n  async listAvailabilityRules(resourceId) {\n    const res = await fetch(`/api/v1/scheduling/resources/${resourceId}/availability-rules`)\n    return res.json()\n  },\n  async setAvailabilityRules(resourceId, rules) {\n    const res = await fetch(`/api/v1/scheduling/resources/${resourceId}/availability-rules`, {\n      method: 'PUT',\n      body: JSON.stringify(rules),\n    })\n    return res.json()\n  },\n\n  // Exceções de disponibilidade\n  async listAvailabilityExceptions(resourceId) {\n    const res = await fetch(`/api/v1/scheduling/resources/${resourceId}/availability-exceptions`)\n    return res.json()\n  },\n  async addAvailabilityException(input) {\n    const res = await fetch('/api/v1/scheduling/availability-exceptions', {\n      method: 'POST',\n      body: JSON.stringify(input),\n    })\n    return res.json()\n  },\n  async removeAvailabilityException(id) {\n    await fetch(`/api/v1/scheduling/availability-exceptions/${id}`, { method: 'DELETE' })\n  },\n\n  // Disponibilidade de horários\n  async getAvailableSlots(params) {\n    const res = await fetch('/api/v1/scheduling/available-slots', { /* params */ })\n    return res.json()\n  },\n\n  // Reservas\n  async listBookings(params) {\n    const res = await fetch('/api/v1/scheduling/bookings', { /* params */ })\n    return res.json()\n  },\n  async getBooking(id) {\n    const res = await fetch(`/api/v1/scheduling/bookings/${id}`)\n    return res.json()\n  },\n  async requestBooking(input, idempotencyKey) {\n    const res = await fetch('/api/v1/scheduling/bookings', {\n      method: 'POST',\n      headers: { 'Idempotency-Key': idempotencyKey },\n      body: JSON.stringify(input),\n    })\n    return res.json()\n  },\n  async confirmBooking(id) {\n    const res = await fetch(`/api/v1/scheduling/bookings/${id}/confirm`, { method: 'POST' })\n    return res.json()\n  },\n  async rescheduleBooking(id, input) {\n    const res = await fetch(`/api/v1/scheduling/bookings/${id}/reschedule`, {\n      method: 'POST',\n      body: JSON.stringify(input),\n    })\n    return res.json()\n  },\n  async cancelBooking(id, input) {\n    const res = await fetch(`/api/v1/scheduling/bookings/${id}/cancel`, {\n      method: 'POST',\n      body: JSON.stringify(input),\n    })\n    return res.json()\n  },\n  async completeBooking(id) {\n    const res = await fetch(`/api/v1/scheduling/bookings/${id}/complete`, { method: 'POST' })\n    return res.json()\n  },\n  async markNoShow(id) {\n    const res = await fetch(`/api/v1/scheduling/bookings/${id}/no-show`, { method: 'POST' })\n    return res.json()\n  },\n}\n\n// 2. Envolver o SchedulingWorkspace com o provider\nexport function SchedulingPage() {\n  return (\n    <SchedulingProvider api={schedulingApi}>\n      <SchedulingWorkspace />\n    </SchedulingProvider>\n  )\n}\n```\n\n---\n\n## O provider e os hooks\n\n`SchedulingProvider` injeta a API e a configuração no contexto. Componentes internos consomem via dois hooks:\n\n```tsx\nimport { useScheduling, useSchedulingConfig } from '@adatechnology/scheduling-ui'\n\n// Dentro de <SchedulingProvider>\nexport function MyComponent() {\n  const api = useScheduling()  // SchedulingApi\n  const config = useSchedulingConfig()  // { locale, weekStartsOn }\n\n  // Chamar métodos da API\n  const bookings = await api.listBookings()\n\n  return <div>Locale: {config.locale}</div>\n}\n```\n\nOs hooks lançam erro se usados fora do provider:\n\n```\nError: useScheduling() must be used within a <SchedulingProvider>\n```\n\n---\n\n## SchedulingApi\n\nContrato que **o host implementa**. O pacote nunca faz `fetch` direto — chama os métodos que você forneceu via `SchedulingProvider`.\n\n**Nenhum método recebe `companyId`** — o host resolve o tenant do contexto autenticado antes de implementar a API\n(veja `security.md` §2, BOLA). Isso deixa o componente agnóstico sobre isolamento multi-empresa.\n\n> **Atenção — cache do `QueryClient` na troca de tenant.** As chaves de query do pacote\n> (`src/hooks/queryKeys.ts`) não carregam `companyId` — elas não têm como, já que a API não o\n> recebe. Se o host reusa a mesma instância de `QueryClient` para mais de uma empresa (ex.: um\n> operador trocando de tenant sem recarregar a página), dados da empresa anterior podem\n> aparecer em cache até a próxima invalidação. O host deve chamar `queryClient.clear()` (ou\n> `resetQueries()`) na troca de tenant, ou criar uma nova instância de `QueryClient` por sessão\n> de tenant.\n\n### Recursos\n\n```ts\ntype SchedulingApi = {\n  // Listar com paginação e filtros opcionais\n  listResources(params?: Omit<ListResourcesParams, 'companyId'>)\n    : Promise<PaginatedResponse<Resource>>\n\n  // Criar novo recurso\n  createResource(input: CreateResourceInput): Promise<Resource>\n\n  // Atualizar\n  updateResource(id: ResourceId, input: UpdateResourceInput): Promise<Resource>\n\n  // Excluir\n  deleteResource(id: ResourceId): Promise<void>\n}\n```\n\n### Serviços\n\n```ts\ntype SchedulingApi = {\n  listServices(params?: Omit<ListServicesParams, 'companyId'>)\n    : Promise<PaginatedResponse<Service>>\n\n  createService(input: CreateServiceInput): Promise<Service>\n\n  updateService(id: ServiceId, input: UpdateServiceInput): Promise<Service>\n\n  deleteService(id: ServiceId): Promise<void>\n}\n```\n\n### Disponibilidade (Regras e Exceções)\n\n```ts\ntype SchedulingApi = {\n  // Regras de horário de funcionamento por recurso\n  listAvailabilityRules(resourceId: ResourceId): Promise<readonly AvailabilityRule[]>\n\n  setAvailabilityRules(\n    resourceId: ResourceId,\n    rules: readonly CreateAvailabilityRuleInput[],\n  ): Promise<readonly AvailabilityRule[]>\n\n  // Exceções (feriados, bloqueios, etc)\n  listAvailabilityExceptions(resourceId: ResourceId)\n    : Promise<readonly AvailabilityException[]>\n\n  addAvailabilityException(input: CreateAvailabilityExceptionInput)\n    : Promise<AvailabilityException>\n\n  removeAvailabilityException(id: AvailabilityExceptionId): Promise<void>\n}\n```\n\n### Horários Disponíveis\n\n```ts\ntype SchedulingApi = {\n  // Buscar slots livres para um serviço/recurso/período\n  getAvailableSlots(params: Omit<GetAvailabilityParams, 'companyId'>)\n    : Promise<readonly AvailableSlot[]>\n}\n```\n\n### Reservas\n\n```ts\ntype SchedulingApi = {\n  // Listar reservas do negócio\n  listBookings(params?: Omit<ListBookingsParams, 'companyId'>)\n    : Promise<PaginatedResponse<Booking>>\n\n  // Buscar uma reserva\n  getBooking(id: BookingId): Promise<Booking>\n\n  // Criar reserva. ÚNICO método com idempotencyKey como segundo parâmetro\n  requestBooking(input: RequestBookingInput, idempotencyKey: string): Promise<Booking>\n\n  // Confirmar após validação\n  confirmBooking(id: BookingId): Promise<Booking>\n\n  // Remarcar\n  rescheduleBooking(id: BookingId, input: RescheduleBookingInput): Promise<Booking>\n\n  // Cancelar\n  cancelBooking(id: BookingId, input: CancelBookingInput): Promise<Booking>\n\n  // Marcar como completa\n  completeBooking(id: BookingId): Promise<Booking>\n\n  // Marcar como não-comparecimento\n  markNoShow(id: BookingId): Promise<Booking>\n}\n```\n\nTodos os tipos (`Resource`, `Service`, `Booking`, etc) vêm de `@adatechnology/scheduling-contracts`.\n\n---\n\n## SchedulingWorkspace\n\nComponente com navegação em cinco abas e a composição pronta. Cada aba é uma área:\n\n- **Agenda** — visualizar e buscar reservas em grade\n- **Reservas** — gerenciar reservas (confirmar, remarcar, cancelar)\n- **Recursos** — criar, editar e excluir recursos\n- **Serviços** — criar, editar e excluir serviços\n- **Disponibilidade** — definir regras e exceções por recurso\n\n### Uso não-controlado (estado interno)\n\n```tsx\n<SchedulingProvider api={schedulingApi}>\n  <SchedulingWorkspace />\n</SchedulingProvider>\n```\n\nA aba ativa é guardada no estado interno do componente. Refresh ou link colado volta para a aba padrão (Agenda).\n\n### Uso controlado (query string)\n\nPara sincronizar a aba aberta com a URL (e sobreviver a refresh/link):\n\n```tsx\n'use client'\n\nimport { useSearchParams, useRouter } from 'next/navigation'\nimport { SchedulingProvider, SchedulingWorkspace, isSchedulingWorkspaceArea, SCHEDULING_WORKSPACE_AREA } from '@adatechnology/scheduling-ui'\n\nexport function SchedulingPage() {\n  const router = useRouter()\n  const searchParams = useSearchParams()\n\n  const areaFromUrl = searchParams.get('area')\n  const area = areaFromUrl && isSchedulingWorkspaceArea(areaFromUrl) \n    ? areaFromUrl\n    : SCHEDULING_WORKSPACE_AREA.AGENDA\n\n  function handleAreaChange(nextArea: string) {\n    const params = new URLSearchParams(searchParams)\n    params.set('area', nextArea)\n    router.push(`?${params.toString()}`)\n  }\n\n  return (\n    <SchedulingProvider api={schedulingApi}>\n      <SchedulingWorkspace area={area} onAreaChange={handleAreaChange} />\n    </SchedulingProvider>\n  )\n}\n```\n\n### Props\n\n```ts\ntype SchedulingWorkspaceProps = {\n  // Sobrescrever rótulos de abas e títulos\n  readonly labels?: Partial<SchedulingWorkspaceLabels>\n\n  // Renderizar botões/ações no cabeçalho (ex: exportar agenda)\n  readonly renderHeaderActions?: () => ReactNode\n\n  // Aba aberta — torna o componente controlado\n  readonly area?: SchedulingWorkspaceArea\n\n  // Chamado quando o usuário clica em uma aba\n  readonly onAreaChange?: (area: SchedulingWorkspaceArea) => void\n}\n```\n\nValores válidos para `area` (constante, não `enum` — projeto usa `as const` por convenção):\n\n```ts\nimport { SCHEDULING_WORKSPACE_AREA } from '@adatechnology/scheduling-ui'\n\nconst SCHEDULING_WORKSPACE_AREA = {\n  AGENDA: 'agenda',\n  BOOKINGS: 'bookings',\n  RESOURCES: 'resources',\n  SERVICES: 'services',\n  AVAILABILITY: 'availability',\n} as const\n```\n\nUse `isSchedulingWorkspaceArea(value)` para validar strings da URL:\n\n```ts\nconst area = searchParams.get('area')\nif (isSchedulingWorkspaceArea(area)) {\n  // TypeScript agora sabe que `area` é válido\n}\n```\n\n---\n\n## Configuração\n\n`SchedulingProvider` aceita uma configuração parcial (`config`), que mescla com os padrões:\n\n```tsx\n<SchedulingProvider\n  api={schedulingApi}\n  config={{\n    locale: 'pt-BR',      // padrão\n    weekStartsOn: 1,      // 0 = domingo, 1 = segunda-feira (padrão)\n  }}\n>\n  <SchedulingWorkspace />\n</SchedulingProvider>\n```\n\n- **`locale`** — identifica o idioma; usado em i18n dentro do componente. Padrão: `'pt-BR'`.\n- **`weekStartsOn`** — primeiro dia da semana na grade de agenda (0 = domingo, 1 = segunda). Padrão: `1`.\n\n---\n\n## Licença\n\nMIT © Ada Technology\n","readmeFilename":"README.md"}