{"_id":"chrona-react","_rev":"11-73461b4ff6d8f5a761faeb316b3e87ae","name":"chrona-react","dist-tags":{"latest":"0.3.6"},"versions":{"0.1.0":{"name":"chrona-react","version":"0.1.0","keywords":["temporal","date","time","headless","react","calendar","datepicker","daterangepicker","timepicker","i18n","accessibility","aria"],"author":{"name":"Devlin Duldulao"},"license":"MIT","_id":"chrona-react@0.1.0","maintainers":[{"name":"devlinduldulao","email":"devlinduldulao@gmail.com"}],"homepage":"https://github.com/devlinduldulao/chrona#readme","bugs":{"url":"https://github.com/devlinduldulao/chrona/issues"},"dist":{"shasum":"9f8ca14e12669bba34a00b7ae6bf8cec4dad4ffb","tarball":"https://registry.npmjs.org/chrona-react/-/chrona-react-0.1.0.tgz","fileCount":37,"integrity":"sha512-hSy9sEaCrM+DAvl7rxeFG+jE/8Vgr9UPfCoz0j9+JrxyHkMrTeppk+PTpXts6fpV0f4mJOZ51oYtHtr10WZcLg==","signatures":[{"sig":"MEQCIDglQqfAlrvwHxKIMA5u2CAd5OrMlFJBAtXjKtVrB+lDAiBc3Nscn504yVQmnV7sy9To0xcmXibAM2GJw8eO1x9kfw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":145276},"type":"module","_from":"file:/tmp/packs/chrona-react-0.1.0.tgz","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./calendar":{"types":"./dist/calendar.d.ts","import":"./dist/calendar.js"},"./date-field":{"types":"./dist/date-field.d.ts","import":"./dist/date-field.js"},"./time-field":{"types":"./dist/time-field.d.ts","import":"./dist/time-field.js"},"./date-picker":{"types":"./dist/date-picker.d.ts","import":"./dist/date-picker.js"},"./range-calendar":{"types":"./dist/range-calendar.d.ts","import":"./dist/range-calendar.js"}},"scripts":{"build":"tsup src/index.ts src/calendar.tsx src/date-field.tsx src/time-field.tsx src/date-picker.tsx src/range-calendar.tsx --format esm --dts --sourcemap --clean --target es2022 --external react --external react-dom"},"_npmUser":{"name":"devlinduldulao","email":"devlinduldulao@gmail.com"},"_resolved":"/tmp/packs/chrona-react-0.1.0.tgz","_integrity":"sha512-hSy9sEaCrM+DAvl7rxeFG+jE/8Vgr9UPfCoz0j9+JrxyHkMrTeppk+PTpXts6fpV0f4mJOZ51oYtHtr10WZcLg==","repository":{"url":"git+https://github.com/devlinduldulao/chrona.git","type":"git","directory":"packages/react"},"_npmVersion":"12.0.2","description":"Headless Temporal-native React date and time primitives","directories":{},"sideEffects":false,"_nodeVersion":"26.4.0","dependencies":{"chrona-core":"^0.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/chrona-react_0.1.0_1789675834446_0.639628083434846","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"chrona-react","version":"0.2.0","keywords":["temporal","date","time","headless","react","calendar","datepicker","daterangepicker","timepicker","i18n","accessibility","aria"],"author":{"name":"Devlin Duldulao"},"license":"MIT","_id":"chrona-react@0.2.0","maintainers":[{"name":"devlinduldulao","email":"devlinduldulao@gmail.com"}],"homepage":"https://github.com/devlinduldulao/chrona#readme","bugs":{"url":"https://github.com/devlinduldulao/chrona/issues"},"dist":{"shasum":"f6c09c9c7e0cb19068bbf13c0d9afb84b4da2b94","tarball":"https://registry.npmjs.org/chrona-react/-/chrona-react-0.2.0.tgz","fileCount":38,"integrity":"sha512-tJbzzO+67oafbWd7PalA/Xly6pXkcHYQIwr9jjbEbdOMJxtIJu+ECASAQYQN45859AHwE7CiUbd0/cJe8gaX9A==","signatures":[{"sig":"MEYCIQDcW8H65n53HmilFfUiOi2mvp3znFdqpMFHkWIFO0ks7QIhAKvFlXSlVl4edNHPFpw3E0VrHKN/ekQ6TrPF7D0Pj1ai","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIC3syAQTNc3FmmS4WqgO1LlU1Nq0MgFYiWwVQcVC9JL4AiBa4bYHMfv2sxPR0qhqUYjfDvpDpDm8cC0iCeVwfDB3XQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":159480},"type":"module","_from":"file:/tmp/chrona-packs/chrona-react-0.2.0.tgz","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./calendar":{"types":"./dist/calendar.d.ts","import":"./dist/calendar.js"},"./date-field":{"types":"./dist/date-field.d.ts","import":"./dist/date-field.js"},"./time-field":{"types":"./dist/time-field.d.ts","import":"./dist/time-field.js"},"./date-picker":{"types":"./dist/date-picker.d.ts","import":"./dist/date-picker.js"},"./range-calendar":{"types":"./dist/range-calendar.d.ts","import":"./dist/range-calendar.js"}},"scripts":{"build":"tsup src/index.ts src/calendar.tsx src/date-field.tsx src/time-field.tsx src/date-picker.tsx src/range-calendar.tsx --format esm --dts --sourcemap --clean --target es2022 --external react --external react-dom"},"_npmUser":{"name":"devlinduldulao","email":"devlinduldulao@gmail.com"},"_resolved":"/tmp/chrona-packs/chrona-react-0.2.0.tgz","_integrity":"sha512-tJbzzO+67oafbWd7PalA/Xly6pXkcHYQIwr9jjbEbdOMJxtIJu+ECASAQYQN45859AHwE7CiUbd0/cJe8gaX9A==","repository":{"url":"git+https://github.com/devlinduldulao/chrona.git","type":"git","directory":"packages/react"},"_npmVersion":"12.0.2","description":"Headless Temporal-native React date and time primitives","directories":{},"sideEffects":false,"_nodeVersion":"26.4.0","dependencies":{"chrona-core":"^0.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/chrona-react_0.2.0_1789725751290_0.027732807389620584","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"chrona-react","version":"0.2.1","keywords":["temporal","date","time","headless","react","calendar","datepicker","daterangepicker","timepicker","i18n","accessibility","aria"],"author":{"name":"Devlin Duldulao"},"license":"MIT","_id":"chrona-react@0.2.1","maintainers":[{"name":"devlinduldulao","email":"devlinduldulao@gmail.com"}],"homepage":"https://github.com/devlinduldulao/chrona#readme","bugs":{"url":"https://github.com/devlinduldulao/chrona/issues"},"dist":{"shasum":"a2db28a70890662be2fb4003d19a0c501fa443c8","tarball":"https://registry.npmjs.org/chrona-react/-/chrona-react-0.2.1.tgz","fileCount":38,"integrity":"sha512-5/7WskMDGg7yRjefjEAxokkxNyyf82BIbLEJzuTCRECQcnTb9Ajq/vgFa6ZaGRVxe0hn5E8a+SmYFrB9Es4qsQ==","signatures":[{"sig":"MEUCIBG7afIrV3TEFZuLoB//KwjkhfpoRXJc59HVc93R9Y7JAiEAq55AH4H7x3mzYha6fuHsQ8pAnZpXanAQnRMlJvW3ZTg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCzpmQ9OSwG7fwTmXjJMUc7bK1u4n4mAuxRsuW9GwAbygIhAJG6xWVnYxfR5hQrfanJR+DPT6frkYXAcPq83ten3jJU","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":160597},"type":"module","_from":"file:/tmp/chrona-packs/chrona-react-0.2.1.tgz","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./calendar":{"types":"./dist/calendar.d.ts","import":"./dist/calendar.js"},"./date-field":{"types":"./dist/date-field.d.ts","import":"./dist/date-field.js"},"./time-field":{"types":"./dist/time-field.d.ts","import":"./dist/time-field.js"},"./date-picker":{"types":"./dist/date-picker.d.ts","import":"./dist/date-picker.js"},"./range-calendar":{"types":"./dist/range-calendar.d.ts","import":"./dist/range-calendar.js"}},"scripts":{"build":"tsup src/index.ts src/calendar.tsx src/date-field.tsx src/time-field.tsx src/date-picker.tsx src/range-calendar.tsx --format esm --dts --sourcemap --clean --target es2022 --external react --external react-dom"},"_npmUser":{"name":"devlinduldulao","email":"devlinduldulao@gmail.com"},"_resolved":"/tmp/chrona-packs/chrona-react-0.2.1.tgz","_integrity":"sha512-5/7WskMDGg7yRjefjEAxokkxNyyf82BIbLEJzuTCRECQcnTb9Ajq/vgFa6ZaGRVxe0hn5E8a+SmYFrB9Es4qsQ==","repository":{"url":"git+https://github.com/devlinduldulao/chrona.git","type":"git","directory":"packages/react"},"_npmVersion":"12.0.2","description":"Headless Temporal-native React date and time primitives","directories":{},"sideEffects":false,"_nodeVersion":"26.4.0","dependencies":{"chrona-core":"^0.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/chrona-react_0.2.1_1789734800822_0.6172642007099947","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"chrona-react","version":"0.3.0","keywords":["temporal","date","time","headless","react","calendar","datepicker","daterangepicker","timepicker","i18n","accessibility","aria"],"author":{"name":"Devlin Duldulao"},"license":"MIT","_id":"chrona-react@0.3.0","maintainers":[{"name":"devlinduldulao","email":"devlinduldulao@gmail.com"},{"name":"aurorascharff_npm","email":"aurora.sofie@gmail.com"}],"homepage":"https://github.com/devlinduldulao/chrona#readme","bugs":{"url":"https://github.com/devlinduldulao/chrona/issues"},"dist":{"shasum":"4abc0b5e8771bb7deb8db50c6aea4785b927cda8","tarball":"https://registry.npmjs.org/chrona-react/-/chrona-react-0.3.0.tgz","fileCount":30,"integrity":"sha512-226N2DUXGEz0BlMPd21ry4T4D6/7toOrik4Eozd/BjcCgc1oPlhPumeG7gGEnWpaYfd4KVPIkm0DzB3SGKW5gw==","signatures":[{"sig":"MEYCIQDHtGllGr9KlW94CTMefUKgi99i6NjS7uAjRlFf9ZXLOAIhALPOGOkpgkryrk4i219/jVJ18098ufdFhgyjttIm3ilS","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQC2EnCuoHdtdarO8QtZRe970cp1s6rSHc8me0xBXYqnQAIgOQxIw5uwt+lorFJFaiqkSFe1Kqa4JcVf0k6kCpEeXO8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":145806},"type":"module","_from":"file:/home/runner/work/_temp/packs/chrona-react-0.3.0.tgz","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./calendar":{"types":"./dist/calendar.d.ts","import":"./dist/calendar.js"},"./date-field":{"types":"./dist/date-field.d.ts","import":"./dist/date-field.js"},"./time-field":{"types":"./dist/time-field.d.ts","import":"./dist/time-field.js"},"./date-picker":{"types":"./dist/date-picker.d.ts","import":"./dist/date-picker.js"},"./range-calendar":{"types":"./dist/range-calendar.d.ts","import":"./dist/range-calendar.js"}},"scripts":{"build":"tsup"},"_npmUser":{"name":"devlinduldulao","email":"devlinduldulao@gmail.com"},"_resolved":"/home/runner/work/_temp/packs/chrona-react-0.3.0.tgz","_integrity":"sha512-226N2DUXGEz0BlMPd21ry4T4D6/7toOrik4Eozd/BjcCgc1oPlhPumeG7gGEnWpaYfd4KVPIkm0DzB3SGKW5gw==","repository":{"url":"git+https://github.com/devlinduldulao/chrona.git","type":"git","directory":"packages/react"},"_npmVersion":"11.19.0","description":"Headless Temporal-native React date and time primitives","directories":{},"sideEffects":false,"_nodeVersion":"24.20.0","dependencies":{"chrona-core":"^0.3.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/chrona-react_0.3.0_1789814278205_0.7271117776896496","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"chrona-react","version":"0.3.1","keywords":["temporal","date","time","headless","react","calendar","datepicker","daterangepicker","timepicker","i18n","accessibility","aria"],"author":{"name":"Devlin Duldulao"},"license":"MIT","_id":"chrona-react@0.3.1","maintainers":[{"name":"devlinduldulao","email":"devlinduldulao@gmail.com"},{"name":"aurorascharff_npm","email":"aurora.sofie@gmail.com"}],"homepage":"https://github.com/devlinduldulao/chrona#readme","bugs":{"url":"https://github.com/devlinduldulao/chrona/issues"},"dist":{"shasum":"b4ab6e9f597e07ea59213267a5e1fecc01131522","tarball":"https://registry.npmjs.org/chrona-react/-/chrona-react-0.3.1.tgz","fileCount":30,"integrity":"sha512-Kh89FeVASFW/CGGMWIHX5Pnir5BByKdJt+1MWigx4XDk23fA8nl6DvPTeWAUrNf4CFf91ifm8p8SeAeSwnTv5A==","signatures":[{"sig":"MEUCIQD4wb/g40XnnlEdyTNgBjdE1gJJIL/x+z4L/0yVmPKN8QIgTveDLvkwbvYb43rIl3UOUwRrMe2DBglcmhus22B1EkE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIHvemBY+kngPTl1gGVfKyY2Qvu437YqSD+lBq2x9ttAJAiB/ai3DlP67CqYAdkDqzl5mIaCtIKvr8NgE8R+InzqeTw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/chrona-react@0.3.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":145806},"type":"module","_from":"file:/home/runner/work/_temp/packs/chrona-react-0.3.1.tgz","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./calendar":{"types":"./dist/calendar.d.ts","import":"./dist/calendar.js"},"./date-field":{"types":"./dist/date-field.d.ts","import":"./dist/date-field.js"},"./time-field":{"types":"./dist/time-field.d.ts","import":"./dist/time-field.js"},"./date-picker":{"types":"./dist/date-picker.d.ts","import":"./dist/date-picker.js"},"./range-calendar":{"types":"./dist/range-calendar.d.ts","import":"./dist/range-calendar.js"}},"scripts":{"build":"tsup"},"_npmUser":{"name":"devlinduldulao","email":"devlinduldulao@gmail.com"},"_resolved":"/home/runner/work/_temp/packs/chrona-react-0.3.1.tgz","_integrity":"sha512-Kh89FeVASFW/CGGMWIHX5Pnir5BByKdJt+1MWigx4XDk23fA8nl6DvPTeWAUrNf4CFf91ifm8p8SeAeSwnTv5A==","repository":{"url":"git+https://github.com/devlinduldulao/chrona.git","type":"git","directory":"packages/react"},"_npmVersion":"11.19.0","description":"Headless Temporal-native React date and time primitives","directories":{},"sideEffects":false,"_nodeVersion":"24.20.0","dependencies":{"chrona-core":"^0.3.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/chrona-react_0.3.1_1789815649081_0.29832167340170956","host":"s3://npm-registry-packages-npm-production"}},"0.3.2":{"name":"chrona-react","version":"0.3.2","keywords":["temporal","date","time","headless","react","calendar","datepicker","daterangepicker","timepicker","i18n","accessibility","aria"],"author":{"name":"Devlin Duldulao"},"license":"MIT","_id":"chrona-react@0.3.2","maintainers":[{"name":"devlinduldulao","email":"devlinduldulao@gmail.com"},{"name":"aurorascharff_npm","email":"aurora.sofie@gmail.com"}],"homepage":"https://github.com/devlinduldulao/chrona#readme","bugs":{"url":"https://github.com/devlinduldulao/chrona/issues"},"dist":{"shasum":"db95004d6bfbbcbf493a7459d16712a972d732cc","tarball":"https://registry.npmjs.org/chrona-react/-/chrona-react-0.3.2.tgz","fileCount":38,"integrity":"sha512-SsMRANnxeiINXLoQjTmZtdOIFL9mTQoXWxbbCf0WYLcSwg62Yu9Tzb6h58kBSVmeldd28Qu7xQkWFFqIQtFPsw==","signatures":[{"sig":"MEYCIQCYTd3x0Hrt6Ipgt1ZZhSpRDvKTMhpknQTGh/UiHy06wgIhAIhSOcWQVGA63j9Os5JoBYITMjydelUwevg/i3x9cO2s","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDR+eyskaACTWaDvuI40wiXT1UOdaI55+aDZJY2QypxngIhAO8BR+N1GmOHOTJ32hx2eYeXlHlu8lxgBfG3qB+M8L+h","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/chrona-react@0.3.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":174945},"type":"module","_from":"file:/home/runner/work/_temp/packs/chrona-react-0.3.2.tgz","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./calendar":{"types":"./dist/calendar.d.ts","import":"./dist/calendar.js"},"./date-field":{"types":"./dist/date-field.d.ts","import":"./dist/date-field.js"},"./time-field":{"types":"./dist/time-field.d.ts","import":"./dist/time-field.js"},"./date-picker":{"types":"./dist/date-picker.d.ts","import":"./dist/date-picker.js"},"./range-calendar":{"types":"./dist/range-calendar.d.ts","import":"./dist/range-calendar.js"}},"scripts":{"build":"tsup"},"_npmUser":{"name":"devlinduldulao","email":"devlinduldulao@gmail.com"},"_resolved":"/home/runner/work/_temp/packs/chrona-react-0.3.2.tgz","_integrity":"sha512-SsMRANnxeiINXLoQjTmZtdOIFL9mTQoXWxbbCf0WYLcSwg62Yu9Tzb6h58kBSVmeldd28Qu7xQkWFFqIQtFPsw==","repository":{"url":"git+https://github.com/devlinduldulao/chrona.git","type":"git","directory":"packages/react"},"_npmVersion":"11.19.0","description":"Headless Temporal-native React date and time primitives","directories":{},"sideEffects":false,"_nodeVersion":"24.20.0","dependencies":{"chrona-core":"^0.3.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/chrona-react_0.3.2_1789816319403_0.8091521803846644","host":"s3://npm-registry-packages-npm-production"}},"0.3.3":{"name":"chrona-react","version":"0.3.3","keywords":["temporal","date","time","headless","react","calendar","datepicker","daterangepicker","timepicker","i18n","accessibility","aria"],"author":{"name":"Devlin Duldulao"},"license":"MIT","_id":"chrona-react@0.3.3","maintainers":[{"name":"devlinduldulao","email":"devlinduldulao@gmail.com"},{"name":"aurorascharff_npm","email":"aurora.sofie@gmail.com"}],"homepage":"https://github.com/devlinduldulao/chrona#readme","bugs":{"url":"https://github.com/devlinduldulao/chrona/issues"},"dist":{"shasum":"6b4c22b0540317d0a6212c6d35cd50de6b83d36d","tarball":"https://registry.npmjs.org/chrona-react/-/chrona-react-0.3.3.tgz","fileCount":38,"integrity":"sha512-cjeDK/2Vz/uBgFQuEsib9psTPDq3HlXSV52fMxtFYNmhZmK6rRQ0C9lfTLSL0TuLZTGniaAZc77WEXrCKz97jg==","signatures":[{"sig":"MEUCIHiAOkYRObeqrdlKG31P1GLGflYoHNGFY9qTRhHMRLHZAiEAxaBFLjGiqINcFdRebOVFOxJ8YNGa4KEKWoPRUCtxgK0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDXBC5FFIq3+Ql5ssuX1HP2NmJgM59+xsQt/dyscuzDywIgOAKMJj/agZ0RFwV3Y1i/ME5CeKfhpxLyb3AFnyjeJKw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/chrona-react@0.3.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":175265},"type":"module","_from":"file:/home/runner/work/_temp/packs/chrona-react-0.3.3.tgz","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./calendar":{"types":"./dist/calendar.d.ts","import":"./dist/calendar.js"},"./date-field":{"types":"./dist/date-field.d.ts","import":"./dist/date-field.js"},"./time-field":{"types":"./dist/time-field.d.ts","import":"./dist/time-field.js"},"./date-picker":{"types":"./dist/date-picker.d.ts","import":"./dist/date-picker.js"},"./range-calendar":{"types":"./dist/range-calendar.d.ts","import":"./dist/range-calendar.js"}},"scripts":{"build":"tsup"},"_npmUser":{"name":"devlinduldulao","email":"devlinduldulao@gmail.com"},"_resolved":"/home/runner/work/_temp/packs/chrona-react-0.3.3.tgz","_integrity":"sha512-cjeDK/2Vz/uBgFQuEsib9psTPDq3HlXSV52fMxtFYNmhZmK6rRQ0C9lfTLSL0TuLZTGniaAZc77WEXrCKz97jg==","repository":{"url":"git+https://github.com/devlinduldulao/chrona.git","type":"git","directory":"packages/react"},"_npmVersion":"11.19.0","description":"Headless Temporal-native React date and time primitives","directories":{},"sideEffects":false,"_nodeVersion":"24.20.0","dependencies":{"chrona-core":"^0.3.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/chrona-react_0.3.3_1789825492494_0.8603419838592976","host":"s3://npm-registry-packages-npm-production"}},"0.3.4":{"name":"chrona-react","version":"0.3.4","keywords":["temporal","date","time","headless","react","calendar","datepicker","daterangepicker","timepicker","i18n","accessibility","aria"],"author":{"name":"Devlin Duldulao"},"license":"MIT","_id":"chrona-react@0.3.4","maintainers":[{"name":"devlinduldulao","email":"devlinduldulao@gmail.com"},{"name":"aurorascharff_npm","email":"aurora.sofie@gmail.com"}],"homepage":"https://github.com/devlinduldulao/chrona#readme","bugs":{"url":"https://github.com/devlinduldulao/chrona/issues"},"dist":{"shasum":"e0f04f40a2cc2fccd6a014f623b9cc9392487531","tarball":"https://registry.npmjs.org/chrona-react/-/chrona-react-0.3.4.tgz","fileCount":38,"integrity":"sha512-U9L0EOc+lC414aKSHDPoym/XJH7NxhMIu5U9FrhcoCHyq4phiB+/4TCJsWuZogN89JWXCOOuZsMbhBOLcyBFfQ==","signatures":[{"sig":"MEUCIQCN3CnbE35VpVVAnoTY7umjIPBqSmd/6R1mcPDGd03l7QIgH48WF3dDI+FQLvCBGEQ+VoWqt4hv7offBSd+Xc+PsoY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDx5YsvrZOZafgRVrnOUKOTtW3v9VfsOZRtTvlwrfK+sQIgDB9JBBlpn1oNDSPu+GO857cx2/rEPd0xNT1tpjSTuIM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/chrona-react@0.3.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":175425},"type":"module","_from":"file:/home/runner/work/_temp/packs/chrona-react-0.3.4.tgz","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./calendar":{"types":"./dist/calendar.d.ts","import":"./dist/calendar.js"},"./date-field":{"types":"./dist/date-field.d.ts","import":"./dist/date-field.js"},"./time-field":{"types":"./dist/time-field.d.ts","import":"./dist/time-field.js"},"./date-picker":{"types":"./dist/date-picker.d.ts","import":"./dist/date-picker.js"},"./range-calendar":{"types":"./dist/range-calendar.d.ts","import":"./dist/range-calendar.js"}},"scripts":{"build":"tsup"},"_npmUser":{"name":"devlinduldulao","email":"devlinduldulao@gmail.com"},"_resolved":"/home/runner/work/_temp/packs/chrona-react-0.3.4.tgz","_integrity":"sha512-U9L0EOc+lC414aKSHDPoym/XJH7NxhMIu5U9FrhcoCHyq4phiB+/4TCJsWuZogN89JWXCOOuZsMbhBOLcyBFfQ==","repository":{"url":"git+https://github.com/devlinduldulao/chrona.git","type":"git","directory":"packages/react"},"_npmVersion":"11.19.0","description":"Headless Temporal-native React date and time primitives","directories":{},"sideEffects":false,"_nodeVersion":"24.20.0","dependencies":{"chrona-core":"^0.3.4"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/chrona-react_0.3.4_1789825963711_0.913121981188721","host":"s3://npm-registry-packages-npm-production"}},"0.3.5":{"name":"chrona-react","version":"0.3.5","keywords":["temporal","date","time","headless","react","calendar","datepicker","daterangepicker","timepicker","i18n","accessibility","aria"],"author":{"name":"Devlin Duldulao"},"license":"MIT","_id":"chrona-react@0.3.5","maintainers":[{"name":"devlinduldulao","email":"devlinduldulao@gmail.com"},{"name":"aurorascharff_npm","email":"aurora.sofie@gmail.com"}],"homepage":"https://github.com/devlinduldulao/chrona#readme","bugs":{"url":"https://github.com/devlinduldulao/chrona/issues"},"dist":{"shasum":"c41ef5c1d87422b843435a039bd4812f72d86e11","tarball":"https://registry.npmjs.org/chrona-react/-/chrona-react-0.3.5.tgz","fileCount":38,"integrity":"sha512-kQ5cXpoRVDpsONLr+XN75PsLf0Dl7ZzIeTzOim97vLwM1ZoAuyTX7Q8cD+g2hoUv9SgvToQBHtV1OuMPnrgOXw==","signatures":[{"sig":"MEQCIGyCVGSk8jcE0xi4sFi07aJjWCwsNa5Wy6RIsRIsq9uOAiBfcex7Goex+UxBH0vnlt8z67VgZkw+9imvTFvW027uNQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDqscoIScPVJJvtEt3qDpcoMEzULzI5rMTVVhlQPNroSwIgHBqu2LgbvGpf7cYVYX79h50f4fcu5vewrxXVeLm9v4g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/chrona-react@0.3.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":177877},"type":"module","_from":"file:/home/runner/work/_temp/packs/chrona-react-0.3.5.tgz","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./calendar":{"types":"./dist/calendar.d.ts","import":"./dist/calendar.js"},"./date-field":{"types":"./dist/date-field.d.ts","import":"./dist/date-field.js"},"./time-field":{"types":"./dist/time-field.d.ts","import":"./dist/time-field.js"},"./date-picker":{"types":"./dist/date-picker.d.ts","import":"./dist/date-picker.js"},"./range-calendar":{"types":"./dist/range-calendar.d.ts","import":"./dist/range-calendar.js"}},"scripts":{"build":"tsup"},"_npmUser":{"name":"devlinduldulao","email":"devlinduldulao@gmail.com"},"_resolved":"/home/runner/work/_temp/packs/chrona-react-0.3.5.tgz","_integrity":"sha512-kQ5cXpoRVDpsONLr+XN75PsLf0Dl7ZzIeTzOim97vLwM1ZoAuyTX7Q8cD+g2hoUv9SgvToQBHtV1OuMPnrgOXw==","repository":{"url":"git+https://github.com/devlinduldulao/chrona.git","type":"git","directory":"packages/react"},"_npmVersion":"11.19.0","description":"Headless Temporal-native React date and time primitives","directories":{},"sideEffects":false,"_nodeVersion":"24.20.0","dependencies":{"chrona-core":"^0.3.5"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/chrona-react_0.3.5_1789826496859_0.8217118803693277","host":"s3://npm-registry-packages-npm-production"}},"0.3.6":{"_id":"chrona-react@0.3.6","bugs":{"url":"https://github.com/devlinduldulao/chrona/issues"},"dist":{"shasum":"58ae3912a14e6ad95b6c474f346b75d3d95afa94","tarball":"https://registry.npmjs.org/chrona-react/-/chrona-react-0.3.6.tgz","fileCount":38,"integrity":"sha512-kiP1ITmTt2nfTuSkP5WA4DtwIvnCGldanvMWj8UIkQrpdpY+Bib+6r96Epi8+SjYAMDo9s+gLjSzfoGcBSyPvQ==","signatures":[{"sig":"MEQCIC76+rNFU6H8pnJHrAdJr7UjY/mdQfmPig9uziKPIFHsAiA8uP8wNp2kbwUkZG7RdEGVpb9V0lZG9i1funrZLyQWRA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIC4CjhxRflgQUjb04jGWLLBOyhibHtFJAxD4HzfASXaVAiEApJxzT2/53lSGDiTsQZqyaxqTKbd3nSBfS3K0QI49M7w="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/chrona-react@0.3.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":180398},"name":"chrona-react","type":"module","_from":"file:/home/runner/work/_temp/packs/chrona-react-0.3.6.tgz","author":{"name":"Devlin Duldulao"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./calendar":{"types":"./dist/calendar.d.ts","import":"./dist/calendar.js"},"./date-field":{"types":"./dist/date-field.d.ts","import":"./dist/date-field.js"},"./time-field":{"types":"./dist/time-field.d.ts","import":"./dist/time-field.js"},"./date-picker":{"types":"./dist/date-picker.d.ts","import":"./dist/date-picker.js"},"./range-calendar":{"types":"./dist/range-calendar.d.ts","import":"./dist/range-calendar.js"}},"license":"MIT","scripts":{"build":"tsup"},"version":"0.3.6","_npmUser":{"name":"devlinduldulao","email":"devlinduldulao@gmail.com"},"homepage":"https://github.com/devlinduldulao/chrona#readme","keywords":["temporal","date","time","headless","react","calendar","datepicker","daterangepicker","timepicker","i18n","accessibility","aria"],"_resolved":"/home/runner/work/_temp/packs/chrona-react-0.3.6.tgz","_integrity":"sha512-kiP1ITmTt2nfTuSkP5WA4DtwIvnCGldanvMWj8UIkQrpdpY+Bib+6r96Epi8+SjYAMDo9s+gLjSzfoGcBSyPvQ==","repository":{"url":"git+https://github.com/devlinduldulao/chrona.git","type":"git","directory":"packages/react"},"_npmVersion":"11.19.0","description":"Headless Temporal-native React date and time primitives","directories":{},"maintainers":[{"name":"devlinduldulao","email":"devlinduldulao@gmail.com"},{"name":"aurorascharff_npm","email":"aurora.sofie@gmail.com"}],"sideEffects":false,"_nodeVersion":"24.20.0","dependencies":{"chrona-core":"^0.3.6"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/chrona-react_0.3.6_1789827313845_0.3825601574358739"}}},"time":{"created":"2026-09-17T20:10:34.220Z","modified":"2026-09-19T14:15:14.208Z","0.1.0":"2026-09-17T20:10:34.569Z","0.2.0":"2026-09-18T10:02:31.385Z","0.2.1":"2026-09-18T12:33:20.910Z","0.3.0":"2026-09-19T10:37:58.301Z","0.3.1":"2026-09-19T11:00:49.177Z","0.3.2":"2026-09-19T11:11:59.505Z","0.3.3":"2026-09-19T13:44:52.584Z","0.3.4":"2026-09-19T13:52:43.894Z","0.3.5":"2026-09-19T14:01:36.954Z","0.3.6":"2026-09-19T14:15:13.927Z"},"bugs":{"url":"https://github.com/devlinduldulao/chrona/issues"},"author":{"name":"Devlin Duldulao"},"license":"MIT","homepage":"https://github.com/devlinduldulao/chrona#readme","keywords":["temporal","date","time","headless","react","calendar","datepicker","daterangepicker","timepicker","i18n","accessibility","aria"],"repository":{"url":"git+https://github.com/devlinduldulao/chrona.git","type":"git","directory":"packages/react"},"description":"Headless Temporal-native React date and time primitives","maintainers":[{"name":"devlinduldulao","email":"devlinduldulao@gmail.com"},{"name":"aurorascharff_npm","email":"aurora.sofie@gmail.com"}],"readme":"# chrona-react\n\nHeadless, Temporal-native React date and time primitives. No legacy `Date`\nvalues, no free-form date parsing, and no CSS — you own every pixel.\n\nPart of [Chrona](https://github.com/devlinduldulao/chrona). Built on\n[`chrona-core`](https://www.npmjs.com/package/chrona-core).\n\n> **Status: experimental 0.3.6.** Public APIs and styling attributes are not\n> frozen for v1. 0.3.0 changes when a field reports a value and leaves `today`\n> to the client; 0.2.0 changed the Calendar cell anatomy. See the\n> [changelog](./CHANGELOG.md). Automated axe checks pass, but no screen-reader\n> compatibility certification is claimed.\n\n## Install\n\n```sh\nnpm install chrona-react\n```\n\nReact 18 or 19. Both are gated in CI.\n\n## Temporal Is Application-Owned\n\nChrona reads `globalThis.Temporal` and never installs a runtime for you. Where\nit is not native, load a polyfill before rendering:\n\n```ts\nimport \"temporal-polyfill/global\";\n```\n\n`temporal-polyfill` 1.x installs itself only where Temporal is missing, and its\ndefault entry carries the ISO calendar alone. Node 24+ and current Chrome have\nnative Temporal, so on those the import does nothing — and native Temporal in\nNode cannot yet do arithmetic on non-ISO calendars, `gregory` among them. A\nCalendar given `calendar=\"gregory\"` or a Gregorian value renders in the browser\nand throws `RangeError: Temporal error: Not yet implemented.` during SSR. Keep\nvalues in `iso8601` unless you have verified the server runtime, and reach for\n`temporal-polyfill/full/global` when you need other calendar systems.\n\nThe TypeScript types come along for free: `chrona-core`'s declarations reference\n`temporal-spec/global`, so importing anything from this package puts the ambient\n`Temporal` namespace in scope, exactly as the examples below assume.\n\n## Calendar\n\n```tsx\n\"use client\";\n\nimport { useState } from \"react\";\nimport { Calendar, ChronaProvider } from \"chrona-react\";\n\nexport function BookingCalendar() {\n  const [value, setValue] = useState<Temporal.PlainDate | null>(null);\n  const reference = Temporal.PlainDate.from({ year: 2026, month: 9, day: 16 });\n\n  return (\n    <ChronaProvider locale=\"en-US\" timeZone=\"Europe/Copenhagen\">\n      <Calendar.Root value={value} onChange={setValue} placeholderValue={reference} fixedWeeks>\n        <Calendar.Header>\n          <Calendar.PrevButton>Previous</Calendar.PrevButton>\n          <Calendar.Heading />\n          <Calendar.NextButton>Next</Calendar.NextButton>\n        </Calendar.Header>\n        <Calendar.Grid>\n          <Calendar.GridHeader />\n          <Calendar.GridBody />\n        </Calendar.Grid>\n        <Calendar.LiveRegion className=\"visually-hidden\" />\n        <Calendar.HiddenInput name=\"bookingDate\" />\n      </Calendar.Root>\n    </ChronaProvider>\n  );\n}\n```\n\nSupply your own CSS, including the visually-hidden utility. Keyboard support\ncovers arrows, Home/End, PageUp/PageDown, Shift+PageUp/PageDown, and\nEnter/Space, with RTL and locale week starts. Unavailable dates stay focusable\nbut unselectable; hard-disabled dates are not interactive.\n\n`Calendar.Cell` renders the `role=\"gridcell\"` wrapper and `Calendar.CellTrigger`\nthe button inside it, so the control keeps its button role in the accessibility\ntree; a cell given no children renders its trigger for you. Style the\ninteractive element as `[data-part=\"cell-trigger\"]`. `PrevButton` and\n`NextButton` render a default chevron, pointing the way they page in the\nresolved reading direction, when you give them no children; `DatePicker.Trigger`\ndoes the same with a calendar glyph.\n\n## DatePicker\n\n```tsx\n<DatePicker.Root value={value} onChange={setValue} placeholderValue={reference}>\n  <DatePicker.Label>Appointment</DatePicker.Label>\n  <DatePicker.Field />\n  <DatePicker.Trigger>Choose date</DatePicker.Trigger>\n  <DatePicker.Popover>\n    <DatePicker.Calendar />\n  </DatePicker.Popover>\n  <DatePicker.HiddenInput name=\"appointment\" />\n</DatePicker.Root>\n```\n\n`DatePicker` accepts every `DateField` prop. `placeholderValue` is one of them,\nand it decides the reference date the segments and the calendar open on before a\nvalue exists — supply it (or `value`/`defaultValue`) rather than falling back to\ntoday.\n\nThe popover is a native `<dialog>`, modal by default. It anchors to its trigger,\nflips above when that fits, shifts to stay in the viewport, and scrolls\ninternally when oversized. Escape, outside pointer dismissal, and selection all\nreturn focus to the trigger.\n\n## Components\n\n| Export | Subpath | Notes |\n| --- | --- | --- |\n| `Calendar` | `chrona-react/calendar` | Single or multi-month grid |\n| `RangeCalendar` | `chrona-react/range-calendar` | Inclusive `{ start, end }`; draft first endpoint |\n| `DateField` | `chrona-react/date-field` | Locale-ordered segments; ISO/Gregorian years 1–9999 |\n| `TimeField` | `chrona-react/time-field` | `hourCycle` h11/h12/h23/h24, minute or second granularity |\n| `DatePicker` | `chrona-react/date-picker` | Field plus calendar in a native dialog |\n| `ChronaProvider` | — | Ambient `locale`, `timeZone`, `dir` and `translations` |\n\nA barrel export is also available. Matching hooks — `useCalendar`,\n`useRangeCalendar`, `useDateField`, `useTimeField`, `useDatePicker` — expose\n`state`, resolved `options`, and `send` for custom shells.\n\n## Styling And Forms\n\nThere is a starter stylesheet at\n[`docs/starter.css`](https://github.com/devlinduldulao/chrona/blob/main/docs/starter.css)\n— copy it in and edit it. It styles every part these packages emit, takes its\ncolours from eight custom properties, and exists so that the first two hundred\nlines of CSS are not yours to write.\n\nStyle via `data-scope`, `data-part`, and state attributes: `data-selected`,\n`data-focused`, `data-today`, `data-disabled`, `data-unavailable`,\n`data-outside-month`, `data-in-range`, `data-range-start`, `data-range-end`,\n`data-preview`, `data-invalid`, `data-placeholder`.\n\nDate cells are two parts: `cell` is the `role=\"gridcell\"` wrapper, `cell-trigger`\nis the button that takes focus, hover, and the click. Both carry the state\nattributes. The default icons are `data-part=\"chevron\"` on the paging buttons\nand `data-part=\"trigger-icon\"` on the picker trigger.\n\nLayout and button parts accept `asChild` with event and ref composition. Input\nsegments, hidden inputs, and the dialog keep their HTML elements.\n\nHidden inputs serialize with `.toString()` and are never read back.\n`RangeCalendar`'s `HiddenInput name=\"stay\"` emits `stay.start` and `stay.end`.\n\n**`required` is accessibility metadata, not native submit blocking.** Hidden\ninputs do not take part in browser constraint validation — validate required,\nincomplete, or invalid values in your form layer before submission.\n\nEvery failure is a `ChronaError` carrying a stable `code`, listed in\n[`chrona-core`'s README](https://www.npmjs.com/package/chrona-core#errors).\n`TEMPORAL_MISSING`, `TEMPORAL_MISMATCH` and `CALENDAR_UNSUPPORTED` are the three\nworth handling: each means the page's Temporal runtime is not what the component\nneeds, and each usually shows up only on the server.\n\n## With shadcn/ui\n\nChrona does not replace shadcn. Keep `Button`, `Popover`, `Label`, and `cn`.\nReplace the `react-day-picker` calendar and the native `<input type=\"time\">`.\nValues stay `Temporal.PlainDate` / `Temporal.PlainTime` — do not convert through\n`Date`. Style days as `[data-part=\"cell-trigger\"]`.\n\n```tsx\n\"use client\";\n\nimport { useState } from \"react\";\nimport { ChevronLeftIcon, ChevronRightIcon } from \"lucide-react\";\nimport { Calendar as ChronaCalendar, TimeField } from \"chrona-react\";\nimport { Button } from \"@/components/ui/button\";\nimport { Label } from \"@/components/ui/label\";\nimport {\n  Popover,\n  PopoverContent,\n  PopoverTrigger,\n} from \"@/components/ui/popover\";\nimport { cn } from \"@/lib/utils\";\n\nconst calendarClassName = cn(\n  \"bg-background p-3\",\n  \"[&_[data-part=header]]:mb-2 [&_[data-part=header]]:flex [&_[data-part=header]]:items-center [&_[data-part=header]]:justify-between\",\n  \"[&_[data-part=heading]]:text-sm [&_[data-part=heading]]:font-medium\",\n  \"[&_[data-part=grid-header]]:grid [&_[data-part=grid-header]]:grid-cols-7\",\n  \"[&_[data-part=header-cell]]:text-muted-foreground [&_[data-part=header-cell]]:text-center [&_[data-part=header-cell]]:text-[0.8rem]\",\n  \"[&_[data-part=row]]:grid [&_[data-part=row]]:grid-cols-7\",\n  \"[&_[data-part=cell-trigger]]:size-8 [&_[data-part=cell-trigger]]:w-full [&_[data-part=cell-trigger]]:rounded-md [&_[data-part=cell-trigger]]:text-sm\",\n  \"[&_[data-part=cell-trigger][data-selected]]:bg-primary [&_[data-part=cell-trigger][data-selected]]:text-primary-foreground\",\n  \"[&_[data-part=cell-trigger][data-today]]:bg-accent\",\n  \"[&_[data-part=cell-trigger][data-outside-month]]:text-muted-foreground [&_[data-part=cell-trigger][data-outside-month]]:opacity-50\",\n);\n\nexport function ShadcnCalendar({\n  value,\n  onChange,\n  placeholderValue,\n  className,\n}: {\n  value: Temporal.PlainDate | null;\n  onChange: (value: Temporal.PlainDate | null) => void;\n  placeholderValue: Temporal.PlainDate;\n  className?: string;\n}) {\n  return (\n    <ChronaCalendar.Root\n      value={value}\n      onChange={onChange}\n      placeholderValue={placeholderValue}\n      fixedWeeks\n      className={cn(calendarClassName, className)}\n    >\n      <ChronaCalendar.Header>\n        <ChronaCalendar.PrevButton asChild>\n          <Button variant=\"ghost\" size=\"icon\" className=\"size-8 p-0\">\n            <ChevronLeftIcon className=\"size-4\" />\n          </Button>\n        </ChronaCalendar.PrevButton>\n        <ChronaCalendar.Heading />\n        <ChronaCalendar.NextButton asChild>\n          <Button variant=\"ghost\" size=\"icon\" className=\"size-8 p-0\">\n            <ChevronRightIcon className=\"size-4\" />\n          </Button>\n        </ChronaCalendar.NextButton>\n      </ChronaCalendar.Header>\n      <ChronaCalendar.Grid>\n        <ChronaCalendar.GridHeader />\n        <ChronaCalendar.GridBody />\n      </ChronaCalendar.Grid>\n      <ChronaCalendar.LiveRegion className=\"sr-only\" />\n    </ChronaCalendar.Root>\n  );\n}\n\nexport function ShadcnDateTimePicker() {\n  const reference = Temporal.PlainDate.from({ year: 2026, month: 9, day: 16 });\n  const [open, setOpen] = useState(false);\n  const [date, setDate] = useState<Temporal.PlainDate | null>(null);\n  const [time, setTime] = useState<Temporal.PlainTime | null>(\n    Temporal.PlainTime.from(\"09:30:00\"),\n  );\n\n  return (\n    <div className=\"flex gap-4\">\n      <div className=\"flex flex-col gap-3\">\n        <Label className=\"px-1\">Date</Label>\n        <Popover open={open} onOpenChange={setOpen}>\n          <PopoverTrigger asChild>\n            <Button variant=\"outline\" className=\"w-40 justify-start font-normal\">\n              {date\n                ? date.toLocaleString(\"en-US\", { dateStyle: \"medium\" })\n                : \"Pick a date\"}\n            </Button>\n          </PopoverTrigger>\n          <PopoverContent className=\"w-auto p-0\" align=\"start\">\n            <ShadcnCalendar\n              value={date}\n              placeholderValue={reference}\n              onChange={(next) => {\n                setDate(next);\n                setOpen(false);\n              }}\n            />\n          </PopoverContent>\n        </Popover>\n      </div>\n      <TimeField.Root value={time} onChange={setTime} hourCycle=\"h23\" granularity=\"second\">\n        <TimeField.Label className=\"px-1\">Time</TimeField.Label>\n        <TimeField.Field className=\"border-input bg-background inline-flex h-9 items-center rounded-md border px-3 text-sm shadow-xs [&_[data-part=segment]]:w-6 [&_[data-part=segment]]:bg-transparent [&_[data-part=segment]]:text-center\" />\n      </TimeField.Root>\n    </div>\n  );\n}\n```\n\nChrona's `DatePicker` already owns a native `<dialog>` — do not wrap it in\nshadcn `Popover`. Use `DatePicker.Trigger asChild` with `Button` instead:\n\n```tsx\nimport { CalendarIcon } from \"lucide-react\";\nimport { DatePicker } from \"chrona-react\";\n\n<DatePicker.Root value={date} onChange={setDate} placeholderValue={reference}>\n  <DatePicker.Label asChild>\n    <Label>Appointment</Label>\n  </DatePicker.Label>\n  <DatePicker.Field className=\"border-input inline-flex h-9 items-center rounded-md border px-3 text-sm\" />\n  <DatePicker.Trigger asChild>\n    <Button variant=\"outline\" size=\"icon\">\n      <CalendarIcon className=\"size-4\" />\n    </Button>\n  </DatePicker.Trigger>\n  <DatePicker.Popover className=\"bg-popover text-popover-foreground rounded-md border p-3 shadow-md\">\n    <DatePicker.Calendar />\n  </DatePicker.Popover>\n</DatePicker.Root>\n```\n\n`asChild` uses the child's children, so pass an icon (or omit `asChild` and keep Chrona's default glyph).\n\n## Notes\n\n- ESM with declarations and source maps, targeting ES2022.\n- Size budgets, minified + gzip, excluding React: Calendar 7 kB, DatePicker 13 kB.\n  Raised from 6/12 in 0.3.4; the additions were hydration-safe `today`, soft-keyboard\n  input, cross-implementation diagnostics and accurate spinbutton ranges.\n- Blank segments read `mm/dd/yyyy` and `hh:mm`; filled numeric segments except\n  the year are zero-padded, so a field keeps one width as it fills.\n- Typed digits are literal and stepping clamps: 29 February is reachable before\n  the year is typed, and a finished date the calendar cannot hold reports\n  `onInvalid(\"nonexistent\")` instead of sliding to the 28th. A segment is a draft\n  until its last digit lands: a half-typed year neither reports a value nor\n  raises `onInvalid`, and blur settles whatever is there.\n- Use `value`/`onChange` or `defaultValue`/`onChange` — do not switch modes\n  during a component's lifetime.\n- Field segments take digits from the keyboard and from soft keyboards that only\n  report an input event. The AM/PM segment also accepts its locale's own label,\n  so it can be set from a touch keyboard; it has no pointer affordance of its\n  own, so give readers a keyboard path to it.\n\n## Next.js App Router\n\nTwo files. Both need `\"use client\"`, and both need the polyfill import — that\nsecond one is the part people lose an afternoon to, so it is explained under\nthe code.\n\n```tsx\n// app/providers.tsx\n\"use client\";\n\nimport \"temporal-polyfill/global\";\nimport { ChronaProvider } from \"chrona-react\";\n\nexport function Providers({ children }: { children: React.ReactNode }) {\n  return (\n    <ChronaProvider locale=\"en-US\" timeZone=\"Europe/Copenhagen\">\n      {children}\n    </ChronaProvider>\n  );\n}\n```\n\nRender that from `app/layout.tsx` — which stays a Server Component — wrapping\n`{children}`.\n\n```tsx\n// app/booking-form.tsx\n\"use client\";\n\n// Needed here as well as in providers.tsx: this module reads Temporal at module\n// scope, and Next.js does not promise providers.tsx has been evaluated first.\nimport \"temporal-polyfill/global\";\n\nimport { useState } from \"react\";\nimport { Calendar } from \"chrona-react\";\n\nconst REFERENCE = Temporal.PlainDate.from({ year: 2026, month: 9, day: 16 });\n\nexport function BookingForm() {\n  const [value, setValue] = useState<Temporal.PlainDate | null>(null);\n\n  return (\n    <Calendar.Root value={value} onChange={setValue} placeholderValue={REFERENCE} fixedWeeks>\n      <Calendar.Header>\n        <Calendar.PrevButton />\n        <Calendar.Heading />\n        <Calendar.NextButton />\n      </Calendar.Header>\n      <Calendar.Grid>\n        <Calendar.GridHeader />\n        <Calendar.GridBody />\n      </Calendar.Grid>\n      <Calendar.HiddenInput name=\"bookingDate\" />\n    </Calendar.Root>\n  );\n}\n```\n\nWhy the polyfill appears twice: importing it is a side effect, so it has to\nreach the *client* bundle — importing it from a Server Component installs\nTemporal on the server only. `providers.tsx` covers the client before\nhydration, but it does not order Node's module evaluation during SSR. A\n`\"use client\"` file that reads `Temporal` at module scope can be evaluated\nbefore `providers.tsx` and throw `ReferenceError: Temporal is not defined`.\nImport it at the top of that file too, or move the call inside the component.\n\n`placeholderValue` is not decoration: it is what a server-rendered calendar\nopens on. See [Give every calendar a reference date](#give-every-calendar-a-reference-date).\n\n`chrona-react` also ships an `AGENTS.md`, written for coding agents and short\nenough to be worth reading yourself — it lists the SSR pitfalls, the part\nanatomy, field draft behaviour, and what is deliberately not implemented.\n\n## Server Rendering\n\nThese components use state and context, so they carry a `\"use client\"`\ndirective. Importing them from a Server Component is safe — the framework moves\nthe import across the boundary — but the module that *renders* them still has to\nbe a client module.\n\nPass the same reference date, value, locale, and time zone on server and client.\n\n### Today\n\nA server cannot know the reader's today: it may be in another time zone, and a\nstatically prerendered page can be served days after it was built. `Calendar`\ntherefore leaves `data-today` and `aria-current=\"date\"` out of the server HTML\nand resolves them on the client, right after hydration. The marker is correct\nfor the reader and the markup hydrates cleanly; the cost is that it appears one\nframe late. Pass `today` yourself when you want it in the server HTML:\n\n```tsx\n<Calendar.Root today={Temporal.PlainDate.from(\"2026-09-16\")} />\n```\n\n### Give every calendar a reference date\n\nWith no `value`, `defaultValue`, `focusedValue`, `defaultFocusedValue` or\n`placeholderValue`, a calendar opens on the month of *its own* today — the\nserver's on the server, the reader's in the browser. When those differ the\nfocused cell, and at a month boundary the whole grid, will not match, and React\nreports a hydration mismatch it cannot patch up. Supply `placeholderValue` (or\na value) on any calendar that is server-rendered.\n\nA development build says so once, from the server render, rather than letting\nthe mismatch ship quietly. A client-rendered app never sees it.\n\n### Segments report once\n\nA `DateField` segment is a draft until its last digit lands. Typing `2026` calls\n`onChange` once with that year, not four times on the way through 2, 20 and 202,\nso a handler that writes to a route, a server action or a store is not handed\ndates nobody typed. Leaving the field early settles the draft literally: `20`\nbecomes the year 20.\n\nSegment literals are normalized before they reach the DOM: `Intl` emits U+202F\nbefore AM/PM on newer ICU data and a plain space on older data, and Node and the\nbrowser rarely ship the same ICU. Chrona collapses both to a plain space, so a\n12-hour `TimeField` hydrates cleanly without forcing `hourCycle=\"h23\"`.\n\nTwo things it does not cover:\n\n- Dates before the Gregorian reform of 1582. Labels go through the `gregory`\n  calendar, which ICU treats as Julian before the cutover, and runtimes disagree\n  about the shift — Node labels ISO `0001-01-01` \"January 3, 1\" where Chrome\n  says \"January 1, 1\". Historical ranges that reach back past 1582 will both\n  mislabel cells and mismatch on hydration.\n- Cell labels in `ja-JP` and `zh-CN` when the server and the browser run\n  *different* Temporal implementations. V8 renders a date-only `dateStyle` as\n  `2026/9/16水曜日`; `temporal-polyfill` renders `2026年9月16日水曜日`. Node 24+\n  and current Chrome are both native, so they agree — but a Node 22 server is\n  polyfilled while its Chrome client is not, and every cell's accessible name\n  then differs. Run the same implementation on both sides.\n\nLoad exactly one Temporal implementation, too. Two copies of a polyfill, or a\nmix of its default and `full` entry points, each install their own\n`globalThis.Temporal`; values built by the loser are refused with a\n`TEMPORAL_MISMATCH` `ChronaError` naming that cause.\n\nFull documentation lives in the [repository README](https://github.com/devlinduldulao/chrona#readme).\n\n## License\n\n[MIT](./LICENSE) © Devlin Duldulao\n","readmeFilename":"README.md"}