{"_id":"@aiquants/period-slider","_rev":"26-08c961800a42e9356aa33c0e7783572e","name":"@aiquants/period-slider","dist-tags":{"latest":"0.20.1"},"versions":{"0.2.0":{"name":"@aiquants/period-slider","version":"0.2.0","keywords":["react","slider","period-slider","range-slider","date-picker","year-selector","month-selector","date-selector","tailwindcss","typescript"],"author":{"url":"https://x.com/fehdek","name":"fehde-k"},"license":"MIT","_id":"@aiquants/period-slider@0.2.0","maintainers":[{"name":"fehde-k","email":"owner@aiquants.co.jp"},{"name":"fehde","email":"genbu0498@gmail.com"}],"dist":{"shasum":"c7edcde5d197219eaa1012f0f82a011e11824d32","tarball":"https://registry.npmjs.org/@aiquants/period-slider/-/period-slider-0.2.0.tgz","fileCount":29,"integrity":"sha512-08hi9pSKcFAZWJr+MP/C9mBceQC6LXtdWvav3RwnHl299L9T3Z125vesLLd10AOISs/RFdNFitMQNyzV2VbTNQ==","signatures":[{"sig":"MEQCIHxVzRVLgwSiFZe787N8Phxcxbd9HDg65Bwb7GxP3I03AiBU42AsCyD4a3fIRH8bhHI6ZcFHBQsfWv7nmH+mtREuIA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":555794},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.cjs"},"./styles/period-slider.css":"./dist/styles/period-slider.css","./styles/period-slider.standalone.css":"./dist/styles/period-slider.standalone.css"},"scripts":{"dev":"vite build --watch","lint":"biome check src","test":"vitest run","build":"vite build && pnpm build:css","clean":"rimraf dist","watch":"vite build --watch","format":"biome format --write src","demo:dev":"cd demo && pnpm run dev","lint:fix":"biome check --write src","test:e2e":"playwright test","test:run":"vitest run","build:css":"tailwindcss -i src/styles/components.entry.css -o dist/styles/period-slider.css --minify && tailwindcss -i src/styles/standalone.entry.css -o dist/styles/period-slider.standalone.css --minify","typecheck":"tsc --noEmit","demo:build":"cd demo && pnpm run build","demo:start":"cd demo && pnpm run preview --port 5178","test:watch":"vitest --watch","test:e2e:ui":"playwright test --ui","format:check":"biome format src","publish:major":"pnpm run typecheck && pnpm run --if-present test && pnpm version major --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:minor":"pnpm run typecheck && pnpm run --if-present test && pnpm version minor --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:patch":"pnpm run typecheck && pnpm run --if-present test && pnpm version patch --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","test:coverage":"vitest --coverage"},"_npmUser":{"name":"fehde","email":"genbu0498@gmail.com"},"description":"Customizable period slider and year/month/date selectors for React","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"26.0.0","dependencies":{"date-fns":"^4.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.3.0","jsdom":"^26.1.0","rimraf":"^6.1.2","vitest":"^3.2.4","typescript":"^5.9.3","@types/node":"^24.10.3","tailwindcss":"^4.1.18","@types/react":"^19.2.7","vite-plugin-dts":"^4.5.4","@playwright/test":"^1.59.1","@tailwindcss/cli":"^4.1.18","@types/react-dom":"^19.2.3","@tailwindcss/vite":"^4.1.18","@vitejs/plugin-react":"^5.1.2","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.9.1","@testing-library/user-event":"^14.6.1"},"peerDependencies":{"react":"^19.2.7","react-dom":"^19.2.7"},"_npmOperationalInternal":{"tmp":"tmp/period-slider_0.2.0_1789107586593_0.07510933497886296","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@aiquants/period-slider","version":"0.3.0","keywords":["react","slider","period-slider","range-slider","date-picker","year-selector","month-selector","date-selector","tailwindcss","typescript"],"author":{"url":"https://x.com/fehdek","name":"fehde-k"},"license":"MIT","_id":"@aiquants/period-slider@0.3.0","maintainers":[{"name":"fehde-k","email":"owner@aiquants.co.jp"},{"name":"fehde","email":"genbu0498@gmail.com"}],"dist":{"shasum":"b629202b86ca04217033fa823723c37ccfbe9e4e","tarball":"https://registry.npmjs.org/@aiquants/period-slider/-/period-slider-0.3.0.tgz","fileCount":29,"integrity":"sha512-icrGKxjoS5s0HHTfcXLxhncJnIQA239hftPDCYZtLqc1bANOOp87FmAD/u2BhRdsDwtW+j/v/mz+H/g0IWksgg==","signatures":[{"sig":"MEYCIQDtHtPh8YlqKe3i+mVyTW4btg5DzlbaKNQj97x8cAAiJgIhAO12YMJWBcPOKIb/tSp3uPGh3ci8xAB1PqYUAe47ahwm","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDq03/zUjBSCzKir+YoQxmHNORb7vTYtr7goRW8uQkiNwIhAIIDjZenF3XQtxe50GC7MM0TX5otLVpiFIpn9XvWBWc3","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":716378},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"default":"./dist/index.js","require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json","./styles/period-slider.css":"./dist/styles/period-slider.css","./styles/period-slider.standalone.css":"./dist/styles/period-slider.standalone.css"},"scripts":{"dev":"pnpm run build:css && vite build --watch --no-emptyOutDir","lint":"biome check src","test":"vitest run","build":"vite build && pnpm build:types-cjs && pnpm build:css","clean":"rimraf dist","watch":"pnpm run dev","format":"biome format --write src","demo:dev":"cd demo && pnpm run dev","lint:fix":"biome check --write src","test:e2e":"playwright test","test:run":"vitest run","build:css":"tailwindcss -i src/styles/components.entry.css -o dist/styles/period-slider.css --minify && tailwindcss -i src/styles/standalone.entry.css -o dist/styles/period-slider.standalone.css --minify","typecheck":"tsc --noEmit && tsc --noEmit -p demo/tsconfig.json","demo:build":"cd demo && pnpm run build","demo:start":"cd demo && pnpm run preview --port 5178","test:watch":"vitest --watch","test:e2e:ui":"playwright test --ui","format:check":"biome format src","publish:major":"pnpm run typecheck && pnpm run --if-present test && pnpm version major --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:minor":"pnpm run typecheck && pnpm run --if-present test && pnpm version minor --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:patch":"pnpm run typecheck && pnpm run --if-present test && pnpm version patch --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","test:coverage":"vitest --coverage","build:types-cjs":"node -e \"require('fs').copyFileSync('dist/index.d.ts','dist/index.d.cts')\""},"_npmUser":{"name":"fehde","email":"genbu0498@gmail.com"},"description":"Customizable period slider and year/month/date selectors for React","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"26.0.0","dependencies":{"date-fns":"^4.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.3.0","jsdom":"^26.1.0","rimraf":"^6.1.2","vitest":"^3.2.4","typescript":"^5.9.3","@types/node":"^24.10.3","tailwindcss":"^4.1.18","@types/react":"^19.2.7","vite-plugin-dts":"^4.5.4","@playwright/test":"^1.59.1","@tailwindcss/cli":"^4.1.18","@types/react-dom":"^19.2.3","@tailwindcss/vite":"^4.1.18","@vitejs/plugin-react":"^5.1.2","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.9.1","@testing-library/user-event":"^14.6.1"},"peerDependencies":{"react":"^19.2.7","react-dom":"^19.2.7"},"_npmOperationalInternal":{"tmp":"tmp/period-slider_0.3.0_1789264438045_0.9449317417876046","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@aiquants/period-slider","version":"0.4.0","keywords":["react","slider","period-slider","range-slider","date-picker","year-selector","month-selector","date-selector","tailwindcss","typescript"],"author":{"url":"https://x.com/fehdek","name":"fehde-k"},"license":"MIT","_id":"@aiquants/period-slider@0.4.0","maintainers":[{"name":"fehde-k","email":"owner@aiquants.co.jp"},{"name":"fehde","email":"genbu0498@gmail.com"}],"dist":{"shasum":"6f48a20698d94c7f6b653a84aff844ae1562cbd2","tarball":"https://registry.npmjs.org/@aiquants/period-slider/-/period-slider-0.4.0.tgz","fileCount":29,"integrity":"sha512-r+qc5NGN6ad1anQxG5T4ywuztlfBtEy34qfCyriFnFnQdipi1Eq61JeG/d+eXIXR6kcd/vzDIN3JbN7z6lPIgA==","signatures":[{"sig":"MEYCIQCSiOsQ9EferdR7kVhhmrUhiWGJHb+Ec6T8uT0cMHihQAIhALPjJdysEVICbRNqr2Sv+rOgiAwaCn0HQKbNXA+QVvK/","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIB1D5585nkfYnqvRZOYrwH792+grjiYAwom/Z4dqSvGsAiEAoenLzfhmzqr4gfynXAUahDQOl4qb70Tw9vhxZhH1D6Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":716378},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"default":"./dist/index.js","require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json","./styles/period-slider.css":"./dist/styles/period-slider.css","./styles/period-slider.standalone.css":"./dist/styles/period-slider.standalone.css"},"scripts":{"dev":"pnpm run build:css && vite build --watch --no-emptyOutDir","lint":"biome check src","test":"vitest run","build":"vite build && pnpm build:types-cjs && pnpm build:css","clean":"rimraf dist","watch":"pnpm run dev","format":"biome format --write src","demo:dev":"cd demo && pnpm run dev","lint:fix":"biome check --write src","test:e2e":"playwright test","test:run":"vitest run","build:css":"tailwindcss -i src/styles/components.entry.css -o dist/styles/period-slider.css --minify && tailwindcss -i src/styles/standalone.entry.css -o dist/styles/period-slider.standalone.css --minify","typecheck":"tsc --noEmit && tsc --noEmit -p demo/tsconfig.json","demo:build":"cd demo && pnpm run build","demo:start":"cd demo && pnpm run preview --port 5178","test:watch":"vitest --watch","test:e2e:ui":"playwright test --ui","format:check":"biome format src","publish:major":"pnpm run typecheck && pnpm run --if-present test && pnpm version major --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:minor":"pnpm run typecheck && pnpm run --if-present test && pnpm version minor --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:patch":"pnpm run typecheck && pnpm run --if-present test && pnpm version patch --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","test:coverage":"vitest --coverage","build:types-cjs":"node -e \"require('fs').copyFileSync('dist/index.d.ts','dist/index.d.cts')\""},"_npmUser":{"name":"fehde","email":"genbu0498@gmail.com"},"description":"Customizable period slider and year/month/date selectors for React","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"26.0.0","dependencies":{"date-fns":"^4.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.3.0","jsdom":"^26.1.0","rimraf":"^6.1.2","vitest":"^3.2.4","typescript":"^5.9.3","@types/node":"^24.10.3","tailwindcss":"^4.1.18","@types/react":"^19.2.7","vite-plugin-dts":"^4.5.4","@playwright/test":"^1.59.1","@tailwindcss/cli":"^4.1.18","@types/react-dom":"^19.2.3","@tailwindcss/vite":"^4.1.18","@vitejs/plugin-react":"^5.1.2","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.9.1","@testing-library/user-event":"^14.6.1"},"peerDependencies":{"react":"^19.2.7","react-dom":"^19.2.7"},"_npmOperationalInternal":{"tmp":"tmp/period-slider_0.4.0_1789264486016_0.8692660845769073","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"@aiquants/period-slider","version":"0.4.1","keywords":["react","slider","period-slider","range-slider","date-picker","year-selector","month-selector","date-selector","tailwindcss","typescript"],"author":{"url":"https://x.com/fehdek","name":"fehde-k"},"license":"MIT","_id":"@aiquants/period-slider@0.4.1","maintainers":[{"name":"fehde-k","email":"owner@aiquants.co.jp"},{"name":"fehde","email":"genbu0498@gmail.com"}],"dist":{"shasum":"1b962d2d6fb16941ea538216e1c925dc644bcc8f","tarball":"https://registry.npmjs.org/@aiquants/period-slider/-/period-slider-0.4.1.tgz","fileCount":29,"integrity":"sha512-JEn09OgUahbpydDRJIROtuXo3GRgDMunv1TV2mDWLx96MDLQNNmBxV7U8BmGbQmdWnI/17lt5iXNc1t/Ck7x1A==","signatures":[{"sig":"MEUCIGO9Exr4gRaSZ3vbZYsE2yodXa99DAmCuZOG2J1UJDZkAiEAr422qrUpGWNxa7HhquiF3/kyf8MM3OEDTvbSH/YhpJU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCOTUqxii+1t+Ps3YBdsGqXbKXmT1bv2s0ld/hvkYu0EwIgWkV/nptlhoKszvz4QKsOTXlFJRwQUViRGOlOS6oebXo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":717134},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"default":"./dist/index.js","require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json","./styles/period-slider.css":"./dist/styles/period-slider.css","./styles/period-slider.standalone.css":"./dist/styles/period-slider.standalone.css"},"scripts":{"dev":"pnpm run build:css && vite build --watch --no-emptyOutDir","lint":"biome check src","test":"vitest run","build":"vite build && pnpm build:types-cjs && pnpm build:css","clean":"rimraf dist","watch":"pnpm run dev","format":"biome format --write src","demo:dev":"cd demo && pnpm run dev","lint:fix":"biome check --write src","test:e2e":"playwright test","test:run":"vitest run","build:css":"tailwindcss -i src/styles/components.entry.css -o dist/styles/period-slider.css --minify && tailwindcss -i src/styles/standalone.entry.css -o dist/styles/period-slider.standalone.css --minify","typecheck":"tsc --noEmit && tsc --noEmit -p demo/tsconfig.json","demo:build":"cd demo && pnpm run build","demo:start":"cd demo && pnpm run preview --port 5178","test:watch":"vitest --watch","test:e2e:ui":"playwright test --ui","format:check":"biome format src","publish:major":"pnpm run typecheck && pnpm run --if-present test && pnpm version major --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:minor":"pnpm run typecheck && pnpm run --if-present test && pnpm version minor --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:patch":"pnpm run typecheck && pnpm run --if-present test && pnpm version patch --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","test:coverage":"vitest --coverage","build:types-cjs":"node -e \"require('fs').copyFileSync('dist/index.d.ts','dist/index.d.cts')\""},"_npmUser":{"name":"fehde","email":"genbu0498@gmail.com"},"description":"Customizable period slider and year/month/date selectors for React","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"26.0.0","dependencies":{"date-fns":"^4.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.3.0","jsdom":"^26.1.0","rimraf":"^6.1.2","vitest":"^3.2.4","typescript":"^5.9.3","@types/node":"^24.10.3","tailwindcss":"^4.1.18","@types/react":"^19.2.7","vite-plugin-dts":"^4.5.4","@playwright/test":"^1.59.1","@tailwindcss/cli":"^4.1.18","@types/react-dom":"^19.2.3","@tailwindcss/vite":"^4.1.18","@vitejs/plugin-react":"^5.1.2","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.9.1","@testing-library/user-event":"^14.6.1"},"peerDependencies":{"react":"^19.2.7","react-dom":"^19.2.7"},"_npmOperationalInternal":{"tmp":"tmp/period-slider_0.4.1_1789266808706_0.41925057150357925","host":"s3://npm-registry-packages-npm-production"}},"0.4.2":{"name":"@aiquants/period-slider","version":"0.4.2","keywords":["react","slider","period-slider","range-slider","date-picker","year-selector","month-selector","date-selector","tailwindcss","typescript"],"author":{"url":"https://x.com/fehdek","name":"fehde-k"},"license":"MIT","_id":"@aiquants/period-slider@0.4.2","maintainers":[{"name":"fehde-k","email":"owner@aiquants.co.jp"},{"name":"fehde","email":"genbu0498@gmail.com"}],"dist":{"shasum":"51ad22160d9dea6ecc6a0a2285ccf5eee2686dec","tarball":"https://registry.npmjs.org/@aiquants/period-slider/-/period-slider-0.4.2.tgz","fileCount":29,"integrity":"sha512-9fIsfpOHLC+J9DxJzaSE3H2RFzAX2w8eRfuxf53xWLKegjTXJuxxtuy1+P8wxenaD13T/gio9XS6nbxpnjFx1A==","signatures":[{"sig":"MEUCIQCZQrizLMx5/bgv8vuftSRFe/igQOdnDMPySD+E09pgDAIgFWwEvNqxMTEmdc1sf2mrRRaNgE4uF85tj2JFZAv9SD8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCMoSOO+ZE/92vPh2zKLWZXeM6Tu8molnNJKf8vg0LGbwIgL1fFVh9moM+hM6vmlxUGJXtuC8sJbZWqihuqH0Loulk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":749517},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"default":"./dist/index.js","require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json","./styles/period-slider.css":"./dist/styles/period-slider.css","./styles/period-slider.standalone.css":"./dist/styles/period-slider.standalone.css"},"scripts":{"dev":"pnpm run build:css && vite build --watch --no-emptyOutDir","lint":"biome check src tests","test":"vitest run","build":"vite build && pnpm build:types-cjs && pnpm build:css","clean":"rimraf dist","watch":"pnpm run dev","format":"biome format --write src tests","demo:dev":"cd demo && pnpm run dev","lint:fix":"biome check --write src tests","test:e2e":"playwright test","test:run":"vitest run","build:css":"tailwindcss -i src/styles/components.entry.css -o dist/styles/period-slider.css --minify && tailwindcss -i src/styles/standalone.entry.css -o dist/styles/period-slider.standalone.css --minify","typecheck":"tsc --noEmit && tsc --noEmit -p demo/tsconfig.json","demo:build":"cd demo && pnpm run build","demo:start":"cd demo && pnpm run preview --port 5178","test:watch":"vitest --watch","test:e2e:ui":"playwright test --ui","format:check":"biome format src tests","publish:major":"pnpm run typecheck && pnpm run build && pnpm run --if-present test && pnpm version major --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:minor":"pnpm run typecheck && pnpm run build && pnpm run --if-present test && pnpm version minor --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:patch":"pnpm run typecheck && pnpm run build && pnpm run --if-present test && pnpm version patch --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","test:coverage":"vitest --coverage","build:types-cjs":"node -e \"require('fs').copyFileSync('dist/index.d.ts','dist/index.d.cts')\""},"_npmUser":{"name":"fehde","email":"genbu0498@gmail.com"},"description":"Customizable period slider and year/month/date selectors for React","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"26.0.0","dependencies":{"date-fns":"^4.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.3.0","jsdom":"^26.1.0","rimraf":"^6.1.2","vitest":"^3.2.4","typescript":"^5.9.3","@types/node":"^24.10.3","tailwindcss":"^4.1.18","@types/react":"^19.2.7","vite-plugin-dts":"^4.5.4","@playwright/test":"^1.59.1","@tailwindcss/cli":"^4.1.18","@types/react-dom":"^19.2.3","@tailwindcss/vite":"^4.1.18","@vitejs/plugin-react":"^5.1.2","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.9.1","@testing-library/user-event":"^14.6.1"},"peerDependencies":{"react":"^19.2.7","react-dom":"^19.2.7"},"_npmOperationalInternal":{"tmp":"tmp/period-slider_0.4.2_1789271386164_0.7530354612010108","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@aiquants/period-slider","version":"0.5.0","keywords":["react","slider","period-slider","range-slider","date-picker","year-selector","month-selector","date-selector","tailwindcss","typescript"],"author":{"url":"https://x.com/fehdek","name":"fehde-k"},"license":"MIT","_id":"@aiquants/period-slider@0.5.0","maintainers":[{"name":"fehde-k","email":"owner@aiquants.co.jp"},{"name":"fehde","email":"genbu0498@gmail.com"}],"dist":{"shasum":"049d98a05d3fc3463b340ecc740677b4c41dc5e8","tarball":"https://registry.npmjs.org/@aiquants/period-slider/-/period-slider-0.5.0.tgz","fileCount":29,"integrity":"sha512-tgku34uDtUu3sC4e+EydmCmlXuJqs/ab57+yH00x/D91q6qu45s8hFIdfXcqkzI2xMMLD6fAriYyKawOP0KlWQ==","signatures":[{"sig":"MEUCIETOmF+hg1kXJJ4OyggMZg6ftLcuSjNn7jua8/Jp3CC6AiEA4Js+17L/diC5CJ8qTeNNbsWqn7EdR2s+HdY//Ma4PrA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIFkIgoe7lKGu2BKSFcp29fSFtrMZ6FBoPlKwuXZo8zfWAiEA9VArHUGc1xLsbHSe8+TmMSvTYBBGw/NmfjxzWfWZktU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":777234},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"default":"./dist/index.js","require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json","./styles/period-slider.css":"./dist/styles/period-slider.css","./styles/period-slider.standalone.css":"./dist/styles/period-slider.standalone.css"},"scripts":{"dev":"pnpm run build:css && vite build --watch --no-emptyOutDir","lint":"biome check src tests","test":"vitest run","build":"vite build && pnpm build:types-cjs && pnpm build:css","clean":"rimraf dist","watch":"pnpm run dev","format":"biome format --write src tests","demo:dev":"cd demo && pnpm run dev","lint:fix":"biome check --write src tests","test:e2e":"playwright test","test:run":"vitest run","build:css":"tailwindcss -i src/styles/components.entry.css -o dist/styles/period-slider.css --minify && tailwindcss -i src/styles/standalone.entry.css -o dist/styles/period-slider.standalone.css --minify","typecheck":"tsc --noEmit && tsc --noEmit -p demo/tsconfig.json","demo:build":"cd demo && pnpm run build","demo:start":"cd demo && pnpm run preview --port 5178","test:watch":"vitest --watch","test:e2e:ui":"playwright test --ui","format:check":"biome format src tests","publish:major":"pnpm run typecheck && pnpm run build && pnpm run --if-present test && pnpm version major --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:minor":"pnpm run typecheck && pnpm run build && pnpm run --if-present test && pnpm version minor --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:patch":"pnpm run typecheck && pnpm run build && pnpm run --if-present test && pnpm version patch --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","test:coverage":"vitest --coverage","build:types-cjs":"node -e \"require('fs').copyFileSync('dist/index.d.ts','dist/index.d.cts')\""},"_npmUser":{"name":"fehde","email":"genbu0498@gmail.com"},"description":"Customizable period slider and year/month/date selectors for React","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"26.0.0","dependencies":{"date-fns":"^4.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.3.0","jsdom":"^26.1.0","rimraf":"^6.1.2","vitest":"^3.2.4","typescript":"^5.9.3","@types/node":"^24.10.3","tailwindcss":"^4.1.18","@types/react":"^19.2.7","vite-plugin-dts":"^4.5.4","@playwright/test":"^1.59.1","@tailwindcss/cli":"^4.1.18","@types/react-dom":"^19.2.3","@tailwindcss/vite":"^4.1.18","@vitejs/plugin-react":"^5.1.2","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.9.1","@testing-library/user-event":"^14.6.1"},"peerDependencies":{"react":"^19.2.7","react-dom":"^19.2.7"},"_npmOperationalInternal":{"tmp":"tmp/period-slider_0.5.0_1789299614293_0.8230422908502235","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@aiquants/period-slider","version":"0.6.0","keywords":["react","slider","period-slider","range-slider","date-picker","year-selector","month-selector","date-selector","tailwindcss","typescript"],"author":{"url":"https://x.com/fehdek","name":"fehde-k"},"license":"MIT","_id":"@aiquants/period-slider@0.6.0","maintainers":[{"name":"fehde-k","email":"owner@aiquants.co.jp"},{"name":"fehde","email":"genbu0498@gmail.com"}],"dist":{"shasum":"7fbff0228e36a453579c837e26b39d467add7eb0","tarball":"https://registry.npmjs.org/@aiquants/period-slider/-/period-slider-0.6.0.tgz","fileCount":29,"integrity":"sha512-rVMsCXHf1Vu+TNR8FN7aUusKNuwUmdt8MzYvspI4NQA5VnemZtKhzja3tTgQZ69tYqUlgQ64dnOlGk+hHwZBuQ==","signatures":[{"sig":"MEYCIQDLgeRgyu7z9fOFEouec99MVg571FOHWQitc010nYYT4wIhAL3hMLBmq14HVyZiLojd3DoM2Kr42XgqlXBUNjOfV4uR","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDIq1zpDJWl4EatuW4sch/1vzRaWhlfPYOZgu9aeP4etgIhAOdtTsCJjQxy8tC6eBC1EampjeHQ0Rkpvm9iKj5prm0G","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":794135},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"default":"./dist/index.js","require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json","./styles/period-slider.css":"./dist/styles/period-slider.css","./styles/period-slider.standalone.css":"./dist/styles/period-slider.standalone.css"},"scripts":{"dev":"pnpm run build:css && vite build --watch --no-emptyOutDir","lint":"biome check src tests","test":"vitest run","build":"vite build && pnpm build:types-cjs && pnpm build:css","clean":"rimraf dist","watch":"pnpm run dev","format":"biome format --write src tests","demo:dev":"cd demo && pnpm run dev","lint:fix":"biome check --write src tests","test:e2e":"playwright test","test:run":"vitest run","build:css":"tailwindcss -i src/styles/components.entry.css -o dist/styles/period-slider.css --minify && tailwindcss -i src/styles/standalone.entry.css -o dist/styles/period-slider.standalone.css --minify","typecheck":"tsc --noEmit && tsc --noEmit -p demo/tsconfig.json","demo:build":"cd demo && pnpm run build","demo:start":"cd demo && pnpm run preview --port 5178","test:watch":"vitest --watch","test:e2e:ui":"playwright test --ui","format:check":"biome format src tests","publish:major":"pnpm run typecheck && pnpm run build && pnpm run --if-present test && pnpm version major --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:minor":"pnpm run typecheck && pnpm run build && pnpm run --if-present test && pnpm version minor --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:patch":"pnpm run typecheck && pnpm run build && pnpm run --if-present test && pnpm version patch --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","test:coverage":"vitest --coverage","build:types-cjs":"node -e \"require('fs').copyFileSync('dist/index.d.ts','dist/index.d.cts')\""},"_npmUser":{"name":"fehde","email":"genbu0498@gmail.com"},"description":"Customizable period slider and year/month/date selectors for React","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"26.0.0","dependencies":{"date-fns":"^4.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.3.0","jsdom":"^26.1.0","rimraf":"^6.1.2","vitest":"^3.2.4","typescript":"^5.9.3","@types/node":"^24.10.3","tailwindcss":"^4.1.18","@types/react":"^19.2.7","vite-plugin-dts":"^4.5.4","@playwright/test":"^1.59.1","@tailwindcss/cli":"^4.1.18","@types/react-dom":"^19.2.3","@tailwindcss/vite":"^4.1.18","@vitejs/plugin-react":"^5.1.2","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.9.1","@testing-library/user-event":"^14.6.1"},"peerDependencies":{"react":"^19.2.7","react-dom":"^19.2.7"},"_npmOperationalInternal":{"tmp":"tmp/period-slider_0.6.0_1789342132402_0.8786890502649747","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"@aiquants/period-slider","version":"0.7.0","keywords":["react","slider","period-slider","range-slider","date-picker","year-selector","month-selector","date-selector","tailwindcss","typescript"],"author":{"url":"https://x.com/fehdek","name":"fehde-k"},"license":"MIT","_id":"@aiquants/period-slider@0.7.0","maintainers":[{"name":"fehde-k","email":"owner@aiquants.co.jp"},{"name":"fehde","email":"genbu0498@gmail.com"}],"dist":{"shasum":"27f5fad6990cc13a5646756ee6791d6bf22eba0a","tarball":"https://registry.npmjs.org/@aiquants/period-slider/-/period-slider-0.7.0.tgz","fileCount":29,"integrity":"sha512-tkPZsjf8uvPrS/kV/FokhkeJu3z5cT5RtLWXy//c01bqkLlqAw60WG5p6KJ4t9iQLk5y91cKqXxepziV1zfhNQ==","signatures":[{"sig":"MEYCIQCOkzulfwJH+KcIUyD3dept2EjWuvtft9vG29AxVhMKcAIhAMA6wXmBUiegUbCtgyy2dkneeV3rJtITuBKSPeOM+gjb","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCwqHHbbxpz/nS/XBT15jC9HysJr5QYi0lbNQ/cW320JwIgIotaXNXhs4P35pt9Trlg4wOiERpZLjWVcQuyOSA2aXk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":804165},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"default":"./dist/index.js","require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json","./styles/period-slider.css":"./dist/styles/period-slider.css","./styles/period-slider.standalone.css":"./dist/styles/period-slider.standalone.css"},"scripts":{"dev":"pnpm run build:css && vite build --watch --no-emptyOutDir","lint":"biome check src tests","test":"vitest run","build":"vite build && pnpm build:types-cjs && pnpm build:css","clean":"rimraf dist","watch":"pnpm run dev","format":"biome format --write src tests","demo:dev":"cd demo && pnpm run dev","lint:fix":"biome check --write src tests","test:e2e":"playwright test","test:run":"vitest run","build:css":"tailwindcss -i src/styles/components.entry.css -o dist/styles/period-slider.css --minify && tailwindcss -i src/styles/standalone.entry.css -o dist/styles/period-slider.standalone.css --minify","typecheck":"tsc --noEmit && tsc --noEmit -p demo/tsconfig.json","demo:build":"cd demo && pnpm run build","demo:start":"cd demo && pnpm run preview --port 5178","test:watch":"vitest --watch","test:e2e:ui":"playwright test --ui","format:check":"biome format src tests","publish:major":"pnpm run typecheck && pnpm run build && pnpm run --if-present test && pnpm version major --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:minor":"pnpm run typecheck && pnpm run build && pnpm run --if-present test && pnpm version minor --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:patch":"pnpm run typecheck && pnpm run build && pnpm run --if-present test && pnpm version patch --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","test:coverage":"vitest --coverage","build:types-cjs":"node -e \"require('fs').copyFileSync('dist/index.d.ts','dist/index.d.cts')\""},"_npmUser":{"name":"fehde","email":"genbu0498@gmail.com"},"description":"Customizable period slider and year/month/date selectors for React","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"26.0.0","dependencies":{"date-fns":"^4.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.3.0","jsdom":"^26.1.0","rimraf":"^6.1.2","vitest":"^3.2.4","typescript":"^5.9.3","@types/node":"^24.10.3","tailwindcss":"^4.1.18","@types/react":"^19.2.7","vite-plugin-dts":"^4.5.4","@playwright/test":"^1.59.1","@tailwindcss/cli":"^4.1.18","@types/react-dom":"^19.2.3","@tailwindcss/vite":"^4.1.18","@vitejs/plugin-react":"^5.1.2","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.9.1","@testing-library/user-event":"^14.6.1"},"peerDependencies":{"react":"^19.2.7","react-dom":"^19.2.7"},"_npmOperationalInternal":{"tmp":"tmp/period-slider_0.7.0_1789377575037_0.2834228201658424","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"@aiquants/period-slider","version":"0.8.0","keywords":["react","slider","period-slider","range-slider","date-picker","year-selector","month-selector","date-selector","tailwindcss","typescript"],"author":{"url":"https://x.com/fehdek","name":"fehde-k"},"license":"MIT","_id":"@aiquants/period-slider@0.8.0","maintainers":[{"name":"fehde-k","email":"owner@aiquants.co.jp"},{"name":"fehde","email":"genbu0498@gmail.com"}],"dist":{"shasum":"dca01bc4b87055b897fe8944a160394c50ecefad","tarball":"https://registry.npmjs.org/@aiquants/period-slider/-/period-slider-0.8.0.tgz","fileCount":29,"integrity":"sha512-QEp3gSgUAc+vcG9yIoySnUC7IsqsaxJ629N4I1MnfQ48s1bzbVNxnhcNLGXfYAhbbMD2aavum/GAIVwPRLvY/w==","signatures":[{"sig":"MEQCICtjAkgg7CtmiwOng75VlEzrU50UIn4JOX687V0/0XE/AiBIuFz1xHHQKm2BdetKFXVHZKsFoq4sVwGVQLHmzKFYOg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIDp1xF8UUbXK4KxrnfY/9CC+HBVN+bsoFtLyUqj9fdCHAiA6wXKCbp/YJVEPvhLO8qgPLc9nluQ7vhK7XkVek5odpw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":876431},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"default":"./dist/index.js","require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json","./styles/period-slider.css":"./dist/styles/period-slider.css","./styles/period-slider.standalone.css":"./dist/styles/period-slider.standalone.css"},"scripts":{"dev":"pnpm run build:css && vite build --watch --no-emptyOutDir","lint":"biome check src tests demo/src","test":"vitest run","build":"vite build && pnpm build:types-cjs && pnpm build:css","clean":"rimraf dist","watch":"pnpm run dev","format":"biome format --write src tests demo/src","demo:dev":"cd demo && pnpm run dev","lint:fix":"biome check --write src tests demo/src","test:e2e":"playwright test","test:run":"vitest run","build:css":"tailwindcss -i src/styles/components.entry.css -o dist/styles/period-slider.css --minify && tailwindcss -i src/styles/standalone.entry.css -o dist/styles/period-slider.standalone.css --minify","typecheck":"tsc --noEmit && tsc --noEmit -p demo/tsconfig.json","demo:build":"cd demo && pnpm run build","demo:start":"cd demo && pnpm run preview --port 5178","test:watch":"vitest --watch","test:e2e:ui":"playwright test --ui","format:check":"biome format src tests demo/src","publish:major":"pnpm run typecheck && pnpm run build && pnpm run --if-present test && pnpm version major --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:minor":"pnpm run typecheck && pnpm run build && pnpm run --if-present test && pnpm version minor --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:patch":"pnpm run typecheck && pnpm run build && pnpm run --if-present test && pnpm version patch --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","test:coverage":"vitest --coverage","build:types-cjs":"node -e \"require('fs').copyFileSync('dist/index.d.ts','dist/index.d.cts')\""},"_npmUser":{"name":"fehde","email":"genbu0498@gmail.com"},"description":"Customizable period slider and year/month/date selectors for React","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"26.0.0","dependencies":{"date-fns":"^4.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.3.0","jsdom":"^26.1.0","rimraf":"^6.1.2","vitest":"^3.2.4","typescript":"^5.9.3","@types/node":"^24.10.3","tailwindcss":"^4.1.18","@types/react":"^19.2.7","vite-plugin-dts":"^4.5.4","@playwright/test":"^1.59.1","@tailwindcss/cli":"^4.1.18","@types/react-dom":"^19.2.3","@tailwindcss/vite":"^4.1.18","@vitejs/plugin-react":"^5.1.2","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.9.1","@testing-library/user-event":"^14.6.1"},"peerDependencies":{"react":"^19.2.7","react-dom":"^19.2.7"},"_npmOperationalInternal":{"tmp":"tmp/period-slider_0.8.0_1789547132761_0.7579606848876255","host":"s3://npm-registry-packages-npm-production"}},"0.9.0":{"name":"@aiquants/period-slider","version":"0.9.0","keywords":["react","slider","period-slider","range-slider","date-picker","year-selector","month-selector","date-selector","tailwindcss","typescript"],"author":{"url":"https://x.com/fehdek","name":"fehde-k"},"license":"MIT","_id":"@aiquants/period-slider@0.9.0","maintainers":[{"name":"fehde-k","email":"owner@aiquants.co.jp"},{"name":"fehde","email":"genbu0498@gmail.com"}],"dist":{"shasum":"de5654a7e95f4faca8fafbfbc1a33da548e84e14","tarball":"https://registry.npmjs.org/@aiquants/period-slider/-/period-slider-0.9.0.tgz","fileCount":29,"integrity":"sha512-Ui2Wr1URPN8/9EyM1u6NSGcHWMD83ld9zO5SSWb8MQqmXzgGNMzWNypPH3wbJmaYTEqT7DTquSTb1URC4LppcQ==","signatures":[{"sig":"MEUCIE3o6WqcXt8hkrLEg6t7LzmrpCYJiH8LnVxVbfLrIUArAiEAh+qeRuqvk1MaAEL5zEOhPpoB7nDP5AUSNvKOlHREeSA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIBSpEIowvVNF9Kx+6aNi/hlJTtDDwEjWAWjXyEzEyGYIAiEAi1p5IYXrAyY7gfMSIqFUEenNx2hImf61PuAz67pgikQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":938119},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"default":"./dist/index.js","require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json","./styles/period-slider.css":"./dist/styles/period-slider.css","./styles/period-slider.standalone.css":"./dist/styles/period-slider.standalone.css"},"scripts":{"dev":"pnpm run build:css && vite build --watch --no-emptyOutDir","lint":"biome check src tests demo/src","test":"vitest run","build":"vite build && pnpm build:types-cjs && pnpm build:css","clean":"rimraf dist","watch":"pnpm run dev","format":"biome format --write src tests demo/src","demo:dev":"cd demo && pnpm run dev","lint:fix":"biome check --write src tests demo/src","test:e2e":"playwright test","test:run":"vitest run","build:css":"tailwindcss -i src/styles/components.entry.css -o dist/styles/period-slider.css --minify && tailwindcss -i src/styles/standalone.entry.css -o dist/styles/period-slider.standalone.css --minify","typecheck":"tsc --noEmit && tsc --noEmit -p demo/tsconfig.json","demo:build":"cd demo && pnpm run build","demo:start":"cd demo && pnpm run preview --port 5178","test:watch":"vitest --watch","test:e2e:ui":"playwright test --ui","format:check":"biome format src tests demo/src","publish:major":"pnpm run typecheck && pnpm run build && pnpm run --if-present test && pnpm version major --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:minor":"pnpm run typecheck && pnpm run build && pnpm run --if-present test && pnpm version minor --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:patch":"pnpm run typecheck && pnpm run build && pnpm run --if-present test && pnpm version patch --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","test:coverage":"vitest --coverage","build:types-cjs":"node -e \"require('fs').copyFileSync('dist/index.d.ts','dist/index.d.cts')\""},"_npmUser":{"name":"fehde","email":"genbu0498@gmail.com"},"description":"Customizable period slider and year/month/date selectors for React","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"26.0.0","dependencies":{"date-fns":"^4.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.3.0","jsdom":"^26.1.0","rimraf":"^6.1.2","vitest":"^3.2.4","typescript":"^5.9.3","@types/node":"^24.10.3","tailwindcss":"^4.1.18","@types/react":"^19.2.7","vite-plugin-dts":"^4.5.4","@playwright/test":"^1.59.1","@tailwindcss/cli":"^4.1.18","@types/react-dom":"^19.2.3","@tailwindcss/vite":"^4.1.18","@vitejs/plugin-react":"^5.1.2","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.9.1","@testing-library/user-event":"^14.6.1"},"peerDependencies":{"react":"^19.2.7","react-dom":"^19.2.7"},"_npmOperationalInternal":{"tmp":"tmp/period-slider_0.9.0_1789598639892_0.4963100948784176","host":"s3://npm-registry-packages-npm-production"}},"0.10.0":{"name":"@aiquants/period-slider","version":"0.10.0","keywords":["react","slider","period-slider","range-slider","date-picker","year-selector","month-selector","date-selector","tailwindcss","typescript"],"author":{"url":"https://x.com/fehdek","name":"fehde-k"},"license":"MIT","_id":"@aiquants/period-slider@0.10.0","maintainers":[{"name":"fehde-k","email":"owner@aiquants.co.jp"},{"name":"fehde","email":"genbu0498@gmail.com"}],"dist":{"shasum":"6696bb7dab6994bfbe518a6c88f99c0f77a74006","tarball":"https://registry.npmjs.org/@aiquants/period-slider/-/period-slider-0.10.0.tgz","fileCount":39,"integrity":"sha512-o5zB5G8GgCg3A/nhPzFYlLTxw/fOVCEKXAqoPh4x5/Bt8WcTeTSJrA9VDUglCYlDxGi4TUC1sxeJSd75ezCTaw==","signatures":[{"sig":"MEUCIAYcpEtlDCS4ARiG/PRX/ZqhJRbRbLNRAq6Y7VlbJ4BLAiEApJDpNxJ6vO7AzqsbYLQAfJleKWP9hgTeauOV4t3M2Sc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIHHgBv7Fkx47QkfpH3TqSAPzVW8rM96W2VKab0wlOQv/AiBLzsVv7DY/uMgKibvA/DSWFad6XgO9Diz1Xio1NCjwmw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1173692},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"default":"./dist/index.js","require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json","./styles/period-slider.css":"./dist/styles/period-slider.css","./styles/period-slider.standalone.css":"./dist/styles/period-slider.standalone.css"},"scripts":{"dev":"pnpm run build:css && vite build --watch --no-emptyOutDir","lint":"biome check src tests demo/src","test":"vitest run","build":"vite build && pnpm build:types-cjs && pnpm build:css","clean":"rimraf dist","watch":"pnpm run dev","format":"biome format --write src tests demo/src","demo:dev":"cd demo && pnpm run dev","lint:fix":"biome check --write src tests demo/src","test:e2e":"playwright test","test:run":"vitest run","build:css":"tailwindcss -i src/styles/components.entry.css -o dist/styles/period-slider.css --minify && tailwindcss -i src/styles/standalone.entry.css -o dist/styles/period-slider.standalone.css --minify","typecheck":"tsc --noEmit && tsc --noEmit -p demo/tsconfig.json","demo:build":"cd demo && pnpm run build","demo:start":"cd demo && pnpm run preview --port 5178","test:watch":"vitest --watch","test:e2e:ui":"playwright test --ui","format:check":"biome format src tests demo/src","publish:major":"pnpm run typecheck && pnpm run build && pnpm run --if-present test && pnpm version major --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:minor":"pnpm run typecheck && pnpm run build && pnpm run --if-present test && pnpm version minor --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:patch":"pnpm run typecheck && pnpm run build && pnpm run --if-present test && pnpm version patch --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","test:coverage":"vitest --coverage","build:types-cjs":"node -e \"require('fs').copyFileSync('dist/index.d.ts','dist/index.d.cts')\""},"_npmUser":{"name":"fehde","email":"genbu0498@gmail.com"},"description":"Customizable period slider and year/month/date selectors for React","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"26.0.0","dependencies":{"date-fns":"^4.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.3.0","jsdom":"^26.1.0","rimraf":"^6.1.2","vitest":"^3.2.4","typescript":"^5.9.3","@types/node":"^24.10.3","tailwindcss":"^4.1.18","@types/react":"^19.2.7","vite-plugin-dts":"^4.5.4","@playwright/test":"^1.59.1","@tailwindcss/cli":"^4.1.18","@types/react-dom":"^19.2.3","@tailwindcss/vite":"^4.1.18","@vitejs/plugin-react":"^5.1.2","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.9.1","@testing-library/user-event":"^14.6.1"},"peerDependencies":{"react":"^19.2.7","react-dom":"^19.2.7"},"_npmOperationalInternal":{"tmp":"tmp/period-slider_0.10.0_1789765834541_0.8455444757630044","host":"s3://npm-registry-packages-npm-production"}},"0.10.1":{"name":"@aiquants/period-slider","version":"0.10.1","keywords":["react","slider","period-slider","range-slider","date-picker","year-selector","month-selector","date-selector","tailwindcss","typescript"],"author":{"url":"https://x.com/fehdek","name":"fehde-k"},"license":"MIT","_id":"@aiquants/period-slider@0.10.1","maintainers":[{"name":"fehde-k","email":"owner@aiquants.co.jp"},{"name":"fehde","email":"genbu0498@gmail.com"}],"dist":{"shasum":"450aca9666c17006126289b1da6b0a50cdb6b361","tarball":"https://registry.npmjs.org/@aiquants/period-slider/-/period-slider-0.10.1.tgz","fileCount":39,"integrity":"sha512-wx9/orcJZ+10+MC6zSqpB5fu34WfgZSn6ZncVAWWDxMEYDX/3aM8l6PeKrDuWhxt12U6Jk+W83mI1kC2s+HMzA==","signatures":[{"sig":"MEYCIQDx9wrOw6t5Mm5VouNMwrk/1RTkA+BTCwV0SAoFEokBFQIhANJnftV35j9zG73CdioQZkrlojaMGlYFinmS1+pHb6m0","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIFT4hEDv6TTOErKkHJMHjXhXMg5HH5dKoyi+CdN8zMpUAiBtjAPotKGJbQAghPq55zoMUzlYv5s9XiaT5B/wd1udNQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1190449},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"default":"./dist/index.js","require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json","./styles/period-slider.css":"./dist/styles/period-slider.css","./styles/period-slider.standalone.css":"./dist/styles/period-slider.standalone.css"},"scripts":{"dev":"pnpm run build:css && vite build --watch --no-emptyOutDir","lint":"biome check src tests demo/src","test":"vitest run","build":"vite build && pnpm build:types-cjs && pnpm build:css","clean":"rimraf dist","watch":"pnpm run dev","format":"biome format --write src tests demo/src","demo:dev":"cd demo && pnpm run dev","lint:fix":"biome check --write src tests demo/src","test:e2e":"playwright test","test:run":"vitest run","build:css":"tailwindcss -i src/styles/components.entry.css -o dist/styles/period-slider.css --minify && tailwindcss -i src/styles/standalone.entry.css -o dist/styles/period-slider.standalone.css --minify","typecheck":"tsc --noEmit && tsc --noEmit -p demo/tsconfig.json","demo:build":"cd demo && pnpm run build","demo:start":"cd demo && pnpm run preview --port 5178","test:watch":"vitest --watch","test:e2e:ui":"playwright test --ui","format:check":"biome format src tests demo/src","publish:major":"pnpm run typecheck && pnpm run build && pnpm run --if-present test && pnpm version major --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:minor":"pnpm run typecheck && pnpm run build && pnpm run --if-present test && pnpm version minor --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:patch":"pnpm run typecheck && pnpm run build && pnpm run --if-present test && pnpm version patch --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","test:coverage":"vitest --coverage","build:types-cjs":"node -e \"require('fs').copyFileSync('dist/index.d.ts','dist/index.d.cts')\""},"_npmUser":{"name":"fehde","email":"genbu0498@gmail.com"},"description":"Customizable period slider and year/month/date selectors for React","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"26.0.0","dependencies":{"date-fns":"^4.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.3.0","jsdom":"^26.1.0","rimraf":"^6.1.2","vitest":"^3.2.4","typescript":"^5.9.3","@types/node":"^24.10.3","tailwindcss":"^4.1.18","@types/react":"^19.2.7","vite-plugin-dts":"^4.5.4","@playwright/test":"^1.59.1","@tailwindcss/cli":"^4.1.18","@types/react-dom":"^19.2.3","@tailwindcss/vite":"^4.1.18","@vitejs/plugin-react":"^5.1.2","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.9.1","@testing-library/user-event":"^14.6.1"},"peerDependencies":{"react":"^19.2.7","react-dom":"^19.2.7"},"_npmOperationalInternal":{"tmp":"tmp/period-slider_0.10.1_1789769353845_0.6023970565065646","host":"s3://npm-registry-packages-npm-production"}},"0.10.2":{"name":"@aiquants/period-slider","version":"0.10.2","keywords":["react","slider","period-slider","range-slider","date-picker","year-selector","month-selector","date-selector","tailwindcss","typescript"],"author":{"url":"https://x.com/fehdek","name":"fehde-k"},"license":"MIT","_id":"@aiquants/period-slider@0.10.2","maintainers":[{"name":"fehde-k","email":"owner@aiquants.co.jp"},{"name":"fehde","email":"genbu0498@gmail.com"}],"dist":{"shasum":"27742698de8601ab6b59519e2ecc74ed307fcee3","tarball":"https://registry.npmjs.org/@aiquants/period-slider/-/period-slider-0.10.2.tgz","fileCount":39,"integrity":"sha512-slhtCSwGQ+qtPsy30jA6kC0UWxjCNWnxM0a1+Z/UzgB6JWjEzLTZGNC9g2EM1C8YhMHdKqVAAaCvehAy3p2e3A==","signatures":[{"sig":"MEYCIQDyD7Nlsz9UA7wOHAMTX7zPzAEv6D+XsTle8Qnl4wBmxQIhAKaNJKFDZXy1Slu4/hPBATnCbGcXGYG+tcTPlgzBRY5i","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQC/CiBpMsfLVMTsHQEhtKeEAx8tiyJ7Q7pbPYdsZf2IBQIhAJSNVzCalwkBrpYrjBAY+fHDGazGdmK64V5tINl3XbV8","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1199092},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"default":"./dist/index.js","require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json","./styles/period-slider.css":"./dist/styles/period-slider.css","./styles/period-slider.standalone.css":"./dist/styles/period-slider.standalone.css"},"scripts":{"dev":"pnpm run build:css && vite build --watch --no-emptyOutDir","lint":"biome check src tests demo/src","test":"vitest run","build":"vite build && pnpm build:types-cjs && pnpm build:css","clean":"rimraf dist","watch":"pnpm run dev","format":"biome format --write src tests demo/src","demo:dev":"cd demo && pnpm run dev","lint:fix":"biome check --write src tests demo/src","test:e2e":"playwright test","test:run":"vitest run","build:css":"tailwindcss -i src/styles/components.entry.css -o dist/styles/period-slider.css --minify && tailwindcss -i src/styles/standalone.entry.css -o dist/styles/period-slider.standalone.css --minify","typecheck":"tsc --noEmit && tsc --noEmit -p demo/tsconfig.json","demo:build":"cd demo && pnpm run build","demo:start":"cd demo && pnpm run preview --port 5178","test:watch":"vitest --watch","test:e2e:ui":"playwright test --ui","format:check":"biome format src tests demo/src","publish:major":"pnpm run typecheck && pnpm run build && pnpm run --if-present test && pnpm version major --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:minor":"pnpm run typecheck && pnpm run build && pnpm run --if-present test && pnpm version minor --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:patch":"pnpm run typecheck && pnpm run build && pnpm run --if-present test && pnpm version patch --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","test:coverage":"vitest --coverage","build:types-cjs":"node -e \"require('fs').copyFileSync('dist/index.d.ts','dist/index.d.cts')\""},"_npmUser":{"name":"fehde","email":"genbu0498@gmail.com"},"description":"Customizable period slider and year/month/date selectors for React","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"26.0.0","dependencies":{"date-fns":"^4.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.3.0","jsdom":"^26.1.0","rimraf":"^6.1.2","vitest":"^3.2.4","typescript":"^5.9.3","@types/node":"^24.10.3","tailwindcss":"^4.1.18","@types/react":"^19.2.7","vite-plugin-dts":"^4.5.4","@playwright/test":"^1.59.1","@tailwindcss/cli":"^4.1.18","@types/react-dom":"^19.2.3","@tailwindcss/vite":"^4.1.18","@vitejs/plugin-react":"^5.1.2","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.9.1","@testing-library/user-event":"^14.6.1"},"peerDependencies":{"react":"^19.2.7","react-dom":"^19.2.7"},"_npmOperationalInternal":{"tmp":"tmp/period-slider_0.10.2_1789785882205_0.01703433969878576","host":"s3://npm-registry-packages-npm-production"}},"0.11.0":{"name":"@aiquants/period-slider","version":"0.11.0","keywords":["react","slider","period-slider","range-slider","date-picker","year-selector","month-selector","date-selector","tailwindcss","typescript"],"author":{"url":"https://x.com/fehdek","name":"fehde-k"},"license":"MIT","_id":"@aiquants/period-slider@0.11.0","maintainers":[{"name":"fehde-k","email":"owner@aiquants.co.jp"},{"name":"fehde","email":"genbu0498@gmail.com"}],"dist":{"shasum":"ae1e5f5daca4727ca5675cb69e83d00d0874e20c","tarball":"https://registry.npmjs.org/@aiquants/period-slider/-/period-slider-0.11.0.tgz","fileCount":45,"integrity":"sha512-9RWR6Wwv6c/v73tHUIZZWLZ9yUFb+7r6jeOvceab8TSLcbVr6/+DDp/BwnLO6QsqvVYe9+nZUnCrNhgDjlDXPg==","signatures":[{"sig":"MEQCICKSfezRGyHDR1vOdEs5YG5paWpcFY9hi8rsq1r/a/cXAiBLMVB0F+d9oiqyWBW3WuzHaJrFVW2k/DQeCq3n0AsxGw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIANXJ1M/b9fsBmbFIGWkSgSzmPCoSoqkeS0+iOh5Bk0cAiEA/bMD9eGW+xYT2z9LEOEvxsmTvENu8l+sEBCHkEHkmQ4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1308091},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"default":"./dist/index.js","require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json","./styles/period-slider.css":"./dist/styles/period-slider.css","./styles/period-slider.standalone.css":"./dist/styles/period-slider.standalone.css"},"scripts":{"dev":"pnpm run build:css && vite build --watch --no-emptyOutDir","lint":"biome check src tests demo/src","test":"vitest run","build":"vite build && pnpm build:types-cjs && pnpm build:css","clean":"rimraf dist","watch":"pnpm run dev","format":"biome format --write src tests demo/src","demo:dev":"cd demo && pnpm run dev","lint:fix":"biome check --write src tests demo/src","test:e2e":"playwright test","test:run":"vitest run","build:css":"tailwindcss -i src/styles/components.entry.css -o dist/styles/period-slider.css --minify && tailwindcss -i src/styles/standalone.entry.css -o dist/styles/period-slider.standalone.css --minify","typecheck":"tsc --noEmit && tsc --noEmit -p demo/tsconfig.json","demo:build":"cd demo && pnpm run build","demo:start":"cd demo && pnpm run preview --port 5178","test:watch":"vitest --watch","test:e2e:ui":"playwright test --ui","format:check":"biome format src tests demo/src","publish:major":"pnpm run typecheck && pnpm run build && pnpm run --if-present test && pnpm version major --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:minor":"pnpm run typecheck && pnpm run build && pnpm run --if-present test && pnpm version minor --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:patch":"pnpm run typecheck && pnpm run build && pnpm run --if-present test && pnpm version patch --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","test:coverage":"vitest --coverage","build:types-cjs":"node -e \"require('fs').copyFileSync('dist/index.d.ts','dist/index.d.cts')\""},"_npmUser":{"name":"fehde","email":"genbu0498@gmail.com"},"description":"Customizable period slider and year/month/date selectors for React","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"26.0.0","dependencies":{"date-fns":"^4.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.3.0","jsdom":"^26.1.0","rimraf":"^6.1.2","vitest":"^3.2.4","typescript":"^5.9.3","@types/node":"^24.10.3","tailwindcss":"^4.1.18","@types/react":"^19.2.7","vite-plugin-dts":"^4.5.4","@playwright/test":"^1.59.1","@tailwindcss/cli":"^4.1.18","@types/react-dom":"^19.2.3","@tailwindcss/vite":"^4.1.18","@vitejs/plugin-react":"^5.1.2","@testing-library/react":"^16.3.0","@aiquants/virtualscroll":"^3.5.0","@testing-library/jest-dom":"^6.9.1","@testing-library/user-event":"^14.6.1"},"peerDependencies":{"react":"^19.2.7","react-dom":"^19.2.7","@aiquants/virtualscroll":"^3.5.0"},"_npmOperationalInternal":{"tmp":"tmp/period-slider_0.11.0_1790078906621_0.7729112403894527","host":"s3://npm-registry-packages-npm-production"}},"0.11.1":{"name":"@aiquants/period-slider","version":"0.11.1","keywords":["react","slider","period-slider","range-slider","date-picker","year-selector","month-selector","date-selector","tailwindcss","typescript"],"author":{"url":"https://x.com/fehdek","name":"fehde-k"},"license":"MIT","_id":"@aiquants/period-slider@0.11.1","maintainers":[{"name":"fehde-k","email":"owner@aiquants.co.jp"},{"name":"fehde","email":"genbu0498@gmail.com"}],"dist":{"shasum":"58ca6ab842380bfda65da88e6007ac9ebe4e0043","tarball":"https://registry.npmjs.org/@aiquants/period-slider/-/period-slider-0.11.1.tgz","fileCount":45,"integrity":"sha512-av4kUzoU2XPXEj/lahSJhrKg9XfP1Zd8K+ntjs9DVQZPz3zqQ/uKAoWIj0wzAaK4JlVlcSJjAsjbFN5dr7W/Fw==","signatures":[{"sig":"MEUCIHR1+bmrFPXaZxZsZfi0Eac/j2f5c/q21/F9gakIORw7AiEA8AGUwRCa+e5y/NJIGPHrab7HcKOkfSjHrZ/CooaIa6Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIDqbUX0I776tu2S5a5JGpuSlrwRmCQWq8z7xRERfyxsPAiEA3DqOTKJqAequD0ZwVATcXFxg+0O7RotE5bOfiB6hjYY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1309381},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"default":"./dist/index.js","require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json","./styles/period-slider.css":"./dist/styles/period-slider.css","./styles/period-slider.standalone.css":"./dist/styles/period-slider.standalone.css"},"scripts":{"dev":"pnpm run build:css && vite build --watch --no-emptyOutDir","lint":"biome check src tests demo/src","test":"vitest run","build":"vite build && pnpm build:types-cjs && pnpm build:css","clean":"rimraf dist","watch":"pnpm run dev","format":"biome format --write src tests demo/src","demo:dev":"cd demo && pnpm run dev","lint:fix":"biome check --write src tests demo/src","test:e2e":"playwright test","test:run":"vitest run","build:css":"tailwindcss -i src/styles/components.entry.css -o dist/styles/period-slider.css --minify && tailwindcss -i src/styles/standalone.entry.css -o dist/styles/period-slider.standalone.css --minify","typecheck":"tsc --noEmit && tsc --noEmit -p demo/tsconfig.json","demo:build":"cd demo && pnpm run build","demo:start":"cd demo && pnpm run preview --port 5178","test:watch":"vitest --watch","test:e2e:ui":"playwright test --ui","format:check":"biome format src tests demo/src","publish:major":"pnpm run typecheck && pnpm run build && pnpm run --if-present test && pnpm version major --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:minor":"pnpm run typecheck && pnpm run build && pnpm run --if-present test && pnpm version minor --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:patch":"pnpm run typecheck && pnpm run build && pnpm run --if-present test && pnpm version patch --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","test:coverage":"vitest --coverage","build:types-cjs":"node -e \"require('fs').copyFileSync('dist/index.d.ts','dist/index.d.cts')\""},"_npmUser":{"name":"fehde","email":"genbu0498@gmail.com"},"description":"Customizable period slider and year/month/date selectors for React","directories":{},"sideEffects":["**/*.css"],"dependencies":{"date-fns":"^4.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.3.0","jsdom":"^26.1.0","rimraf":"^6.1.2","vitest":"^3.2.4","typescript":"^5.9.3","@types/node":"^24.10.3","tailwindcss":"^4.1.18","@types/react":"^19.2.7","vite-plugin-dts":"^4.5.4","@playwright/test":"^1.59.1","@tailwindcss/cli":"^4.1.18","@types/react-dom":"^19.2.3","@tailwindcss/vite":"^4.1.18","@vitejs/plugin-react":"^5.1.2","@testing-library/react":"^16.3.0","@aiquants/virtualscroll":"^3.6.1","@testing-library/jest-dom":"^6.9.1","@testing-library/user-event":"^14.6.1"},"peerDependencies":{"react":"^19.2.7","react-dom":"^19.2.7","@aiquants/virtualscroll":"^3.6.1"},"_npmOperationalInternal":{"tmp":"tmp/period-slider_0.11.1_1790086238363_0.2671731024052324","host":"s3://npm-registry-packages-npm-production"}},"0.12.0":{"name":"@aiquants/period-slider","version":"0.12.0","keywords":["react","slider","period-slider","range-slider","date-picker","year-selector","month-selector","date-selector","tailwindcss","typescript"],"author":{"url":"https://x.com/fehdek","name":"fehde-k"},"license":"MIT","_id":"@aiquants/period-slider@0.12.0","maintainers":[{"name":"fehde-k","email":"owner@aiquants.co.jp"},{"name":"fehde","email":"genbu0498@gmail.com"}],"dist":{"shasum":"149068def2032833f0edd6bac9c049738b59ecc9","tarball":"https://registry.npmjs.org/@aiquants/period-slider/-/period-slider-0.12.0.tgz","fileCount":45,"integrity":"sha512-D6OqaKZNOMDYhjxjl51tCWt5pRyZie15ONw7gl4MSnIF/lgxszPCq2XmvDB9bPaFfJf004kU9IOO3R/VwcUxfw==","signatures":[{"sig":"MEYCIQCYOCcZJCjIQNaOgXBg6z+VJkx5vYnoVIt3w3tzLIXxNwIhALUqJXnE+s8yqCSm4qKRDZlsvhAU28EeD56/ThGGmmVW","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIFJJvf3dQjw3qy47uJE+bTU9GIgJ3rS1AG3FU0rcfbh/AiAqX/rPaEbMoR2VoUEm0WiGzmsl6ma/Pvc5eaEDEnfJnA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1388364},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"default":"./dist/index.js","require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json","./styles/period-slider.css":"./dist/styles/period-slider.css","./styles/period-slider.standalone.css":"./dist/styles/period-slider.standalone.css"},"scripts":{"dev":"pnpm run build:css && vite build --watch --no-emptyOutDir","lint":"biome check src tests demo/src","test":"vitest run","build":"vite build && pnpm build:types-cjs && pnpm build:css","clean":"rimraf dist","watch":"pnpm run dev","format":"biome format --write src tests demo/src","demo:dev":"cd demo && pnpm run dev","lint:fix":"biome check --write src tests demo/src","test:e2e":"playwright test","test:run":"vitest run","build:css":"tailwindcss -i src/styles/components.entry.css -o dist/styles/period-slider.css --minify && tailwindcss -i src/styles/standalone.entry.css -o dist/styles/period-slider.standalone.css --minify","typecheck":"tsc --noEmit && tsc --noEmit -p demo/tsconfig.json","demo:build":"cd demo && pnpm run build","demo:start":"cd demo && pnpm run preview --port 5178","test:watch":"vitest --watch","test:e2e:ui":"playwright test --ui","format:check":"biome format src tests demo/src","publish:major":"pnpm run typecheck && pnpm run build && pnpm run --if-present test && pnpm version major --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:minor":"pnpm run typecheck && pnpm run build && pnpm run --if-present test && pnpm version minor --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:patch":"pnpm run typecheck && pnpm run build && pnpm run --if-present test && pnpm version patch --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","test:coverage":"vitest --coverage","build:types-cjs":"node -e \"require('fs').copyFileSync('dist/index.d.ts','dist/index.d.cts')\""},"_npmUser":{"name":"fehde","email":"genbu0498@gmail.com"},"description":"Customizable period slider and year/month/date selectors for React","directories":{},"sideEffects":["**/*.css"],"dependencies":{"date-fns":"^4.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.3.0","jsdom":"^26.1.0","rimraf":"^6.1.2","vitest":"^3.2.4","typescript":"^5.9.3","@types/node":"^24.10.3","tailwindcss":"^4.1.18","@types/react":"^19.2.7","vite-plugin-dts":"^4.5.4","@playwright/test":"^1.59.1","@tailwindcss/cli":"^4.1.18","@types/react-dom":"^19.2.3","@tailwindcss/vite":"^4.1.18","@vitejs/plugin-react":"^5.1.2","@testing-library/react":"^16.3.0","@aiquants/virtualscroll":"^3.6.1","@testing-library/jest-dom":"^6.9.1","@testing-library/user-event":"^14.6.1"},"peerDependencies":{"react":"^19.2.7","react-dom":"^19.2.7","@aiquants/virtualscroll":"^3.6.1"},"_npmOperationalInternal":{"tmp":"tmp/period-slider_0.12.0_1790133674487_0.8850595173408731","host":"s3://npm-registry-packages-npm-production"}},"0.13.0":{"name":"@aiquants/period-slider","version":"0.13.0","keywords":["react","slider","period-slider","range-slider","date-picker","year-selector","month-selector","date-selector","tailwindcss","typescript"],"author":{"url":"https://x.com/fehdek","name":"fehde-k"},"license":"MIT","_id":"@aiquants/period-slider@0.13.0","maintainers":[{"name":"fehde-k","email":"owner@aiquants.co.jp"},{"name":"fehde","email":"genbu0498@gmail.com"}],"dist":{"shasum":"ed5c7ca1901aa2ad26479c63c798bc68d1e91ab5","tarball":"https://registry.npmjs.org/@aiquants/period-slider/-/period-slider-0.13.0.tgz","fileCount":48,"integrity":"sha512-ZSPsBHXweA2jI/QjW9B/vSG2d9MhC2ggWSnNRWw9ipYgMHYo+6yccGnaZwkBy9abio4gNWACnwIGwDtb6EfUNw==","signatures":[{"sig":"MEYCIQDpMmH+mRxjfGIANjsOkcQxXQRMWWNJRLDxRYLLEAY+MQIhAL+UzM4nW+Xq9r0rv/i6uZzbapbrcV0tIUwbkIJ5Np6A","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDLO2ViWNWn2bInQmCj8Kr+y+Qjs+QiRUcXkPnJuvaBlgIhAPV/ier9K4iLtklPgj0uSakwFL+VZtnaLnwZU8SXoD2u","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1475180},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"default":"./dist/index.js","require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json","./styles/period-slider.css":"./dist/styles/period-slider.css","./styles/period-slider.standalone.css":"./dist/styles/period-slider.standalone.css"},"scripts":{"dev":"pnpm run build:css && vite build --watch --no-emptyOutDir","lint":"biome check src tests demo/src","test":"vitest run","build":"vite build && pnpm build:types-cjs && pnpm build:css","clean":"rimraf dist","watch":"pnpm run dev","format":"biome format --write src tests demo/src","demo:dev":"cd demo && pnpm run dev","lint:fix":"biome check --write src tests demo/src","test:e2e":"playwright test","test:run":"vitest run","build:css":"tailwindcss -i src/styles/components.entry.css -o dist/styles/period-slider.css --minify && tailwindcss -i src/styles/standalone.entry.css -o dist/styles/period-slider.standalone.css --minify","typecheck":"tsc --noEmit && tsc --noEmit -p demo/tsconfig.json","demo:build":"cd demo && pnpm run build","demo:start":"cd demo && pnpm run preview --port 5178","test:watch":"vitest --watch","test:e2e:ui":"playwright test --ui","format:check":"biome format src tests demo/src","publish:major":"pnpm run typecheck && pnpm run build && pnpm run --if-present test && pnpm version major --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:minor":"pnpm run typecheck && pnpm run build && pnpm run --if-present test && pnpm version minor --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:patch":"pnpm run typecheck && pnpm run build && pnpm run --if-present test && pnpm version patch --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","test:coverage":"vitest --coverage","build:types-cjs":"node -e \"require('fs').copyFileSync('dist/index.d.ts','dist/index.d.cts')\""},"_npmUser":{"name":"fehde","email":"genbu0498@gmail.com"},"description":"Customizable period slider and year/month/date selectors for React","directories":{},"sideEffects":["**/*.css"],"dependencies":{"date-fns":"^4.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.3.0","jsdom":"^26.1.0","rimraf":"^6.1.2","vitest":"^3.2.4","typescript":"^5.9.3","@types/node":"^24.10.3","tailwindcss":"^4.1.18","@types/react":"^19.2.7","vite-plugin-dts":"^4.5.4","@playwright/test":"^1.59.1","@tailwindcss/cli":"^4.1.18","@types/react-dom":"^19.2.3","@tailwindcss/vite":"^4.1.18","@vitejs/plugin-react":"^5.1.2","@testing-library/react":"^16.3.0","@aiquants/virtualscroll":"^3.6.1","@testing-library/jest-dom":"^6.9.1","@testing-library/user-event":"^14.6.1"},"peerDependencies":{"react":"^19.2.7","react-dom":"^19.2.7","@aiquants/virtualscroll":"^3.6.1"},"_npmOperationalInternal":{"tmp":"tmp/period-slider_0.13.0_1790159006906_0.5751262012935492","host":"s3://npm-registry-packages-npm-production"}},"0.14.0":{"name":"@aiquants/period-slider","version":"0.14.0","keywords":["react","slider","period-slider","range-slider","date-picker","year-selector","month-selector","date-selector","tailwindcss","typescript"],"author":{"url":"https://x.com/fehdek","name":"fehde-k"},"license":"MIT","_id":"@aiquants/period-slider@0.14.0","maintainers":[{"name":"fehde-k","email":"owner@aiquants.co.jp"},{"name":"fehde","email":"genbu0498@gmail.com"}],"dist":{"shasum":"7509ed2abd4e6d78af772d9ffc77a6f6f1862951","tarball":"https://registry.npmjs.org/@aiquants/period-slider/-/period-slider-0.14.0.tgz","fileCount":54,"integrity":"sha512-/g4WrZkiagogOfc/VSvtvd8PEKtR9rWIdAq+i5Nmwpkul9F4GgaXER01aAVDAEzel3wLi8ypKv7l6SpIZLJBbg==","signatures":[{"sig":"MEYCIQCxkFZ9bIcdFoSkZk8awFfK38UeIvIR+kgLfcRjomHlngIhAJL0tTXP5lWp2Y0bti38Ck3KAijWaVW3Ul+0mGpE8eb9","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIENGsPl4jZ3iJWrbmAEzdB8NQZTxKWQlV6McljStMFMPAiBc5CDMYI5ss6wgwX9O628efM+qDy+/lJm9R+hPUps0gA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1561447},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"default":"./dist/index.js","require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json","./styles/period-slider.css":"./dist/styles/period-slider.css","./styles/period-slider.standalone.css":"./dist/styles/period-slider.standalone.css"},"scripts":{"dev":"pnpm run build:css && vite build --watch --no-emptyOutDir","lint":"biome check src tests demo/src","test":"vitest run","build":"vite build && pnpm build:types-cjs && pnpm build:css","clean":"rimraf dist","watch":"pnpm run dev","format":"biome format --write src tests demo/src","demo:dev":"cd demo && pnpm run dev","lint:fix":"biome check --write src tests demo/src","test:e2e":"playwright test","test:run":"vitest run","build:css":"tailwindcss -i src/styles/components.entry.css -o dist/styles/period-slider.css --minify && tailwindcss -i src/styles/standalone.entry.css -o dist/styles/period-slider.standalone.css --minify","typecheck":"tsc --noEmit && tsc --noEmit -p demo/tsconfig.json","demo:build":"cd demo && pnpm run build","demo:start":"cd demo && pnpm run preview --port 5178","test:watch":"vitest --watch","test:e2e:ui":"playwright test --ui","format:check":"biome format src tests demo/src","publish:major":"pnpm run typecheck && pnpm run build && pnpm run --if-present test && pnpm version major --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:minor":"pnpm run typecheck && pnpm run build && pnpm run --if-present test && pnpm version minor --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:patch":"pnpm run typecheck && pnpm run build && pnpm run --if-present test && pnpm version patch --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","test:coverage":"vitest --coverage","build:types-cjs":"node -e \"require('fs').copyFileSync('dist/index.d.ts','dist/index.d.cts')\""},"_npmUser":{"name":"fehde","email":"genbu0498@gmail.com"},"description":"Customizable period slider and year/month/date selectors for React","directories":{},"sideEffects":["**/*.css"],"dependencies":{"date-fns":"^4.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.3.0","jsdom":"^26.1.0","rimraf":"^6.1.2","vitest":"^3.2.4","typescript":"^5.9.3","@types/node":"^24.10.3","tailwindcss":"^4.1.18","@types/react":"^19.2.7","vite-plugin-dts":"^4.5.4","@playwright/test":"^1.59.1","@tailwindcss/cli":"^4.1.18","@types/react-dom":"^19.2.3","@tailwindcss/vite":"^4.1.18","@vitejs/plugin-react":"^5.1.2","@testing-library/react":"^16.3.0","@aiquants/virtualscroll":"^3.7.0","@testing-library/jest-dom":"^6.9.1","@testing-library/user-event":"^14.6.1"},"peerDependencies":{"react":"^19.2.7","react-dom":"^19.2.7","@aiquants/virtualscroll":"^3.7.0"},"_npmOperationalInternal":{"tmp":"tmp/period-slider_0.14.0_1790203265026_0.30386199134210523","host":"s3://npm-registry-packages-npm-production"}},"0.15.0":{"name":"@aiquants/period-slider","version":"0.15.0","keywords":["react","slider","period-slider","range-slider","date-picker","year-selector","month-selector","date-selector","tailwindcss","typescript"],"author":{"url":"https://x.com/fehdek","name":"fehde-k"},"license":"MIT","_id":"@aiquants/period-slider@0.15.0","maintainers":[{"name":"fehde-k","email":"owner@aiquants.co.jp"},{"name":"fehde","email":"genbu0498@gmail.com"}],"dist":{"shasum":"b84eadde14f899f63a9f2be6594ef0b8a77bb93a","tarball":"https://registry.npmjs.org/@aiquants/period-slider/-/period-slider-0.15.0.tgz","fileCount":57,"integrity":"sha512-cblHMy6id0V+rO/Y1jVP/yZwCbapd6oWr6tEBWTqkqqt2nCKfrFL2+hr9SL9kRMH+HOqNIukH0vAIGTIZ7EN6A==","signatures":[{"sig":"MEUCIQDRowiXaMLepd4M8R5ZfZzzzwxAkr57Ncma+vh9u9kTCAIgfnfnT34UT5bBHdu7d67xArr9tD3w4X/L8icg1Okon3o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDlDPAf9nftBNOP6/Oco1b32kiGbXWNsX2ueAVLfecWlwIhAN2GPEMPRPD1Obn6UgY7HwldRKVrSSuLUDE9Zom18Jhx","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1620711},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"default":"./dist/index.js","require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json","./styles/period-slider.css":"./dist/styles/period-slider.css","./styles/period-slider.standalone.css":"./dist/styles/period-slider.standalone.css"},"scripts":{"dev":"pnpm run build:css && vite build --watch --no-emptyOutDir","lint":"biome check src tests demo/src","test":"vitest run","build":"vite build && pnpm build:types-cjs && pnpm build:css","clean":"rimraf dist","watch":"pnpm run dev","format":"biome format --write src tests demo/src","demo:dev":"cd demo && pnpm run dev","lint:fix":"biome check --write src tests demo/src","test:e2e":"playwright test","test:run":"vitest run","build:css":"tailwindcss -i src/styles/components.entry.css -o dist/styles/period-slider.css --minify && tailwindcss -i src/styles/standalone.entry.css -o dist/styles/period-slider.standalone.css --minify","typecheck":"tsc --noEmit && tsc --noEmit -p demo/tsconfig.json","demo:build":"cd demo && pnpm run build","demo:start":"cd demo && pnpm run preview --port 5178","test:watch":"vitest --watch","test:e2e:ui":"playwright test --ui","format:check":"biome format src tests demo/src","publish:major":"pnpm run typecheck && pnpm run build && pnpm run --if-present test && pnpm version major --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:minor":"pnpm run typecheck && pnpm run build && pnpm run --if-present test && pnpm version minor --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:patch":"pnpm run typecheck && pnpm run build && pnpm run --if-present test && pnpm version patch --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","test:coverage":"vitest --coverage","build:types-cjs":"node -e \"require('fs').copyFileSync('dist/index.d.ts','dist/index.d.cts')\""},"_npmUser":{"name":"fehde","email":"genbu0498@gmail.com"},"description":"Customizable period slider and year/month/date selectors for React","directories":{},"sideEffects":["**/*.css"],"dependencies":{"date-fns":"^4.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.3.0","jsdom":"^26.1.0","rimraf":"^6.1.2","vitest":"^3.2.4","typescript":"^5.9.3","@types/node":"^24.10.3","tailwindcss":"^4.1.18","@types/react":"^19.2.7","vite-plugin-dts":"^4.5.4","@playwright/test":"^1.59.1","@tailwindcss/cli":"^4.1.18","@types/react-dom":"^19.2.3","@tailwindcss/vite":"^4.1.18","@vitejs/plugin-react":"^5.1.2","@testing-library/react":"^16.3.0","@aiquants/virtualscroll":"^3.7.0","@testing-library/jest-dom":"^6.9.1","@testing-library/user-event":"^14.6.1"},"peerDependencies":{"react":"^19.2.7","react-dom":"^19.2.7","@aiquants/virtualscroll":"^3.7.0"},"_npmOperationalInternal":{"tmp":"tmp/period-slider_0.15.0_1790314496537_0.14001737749278154","host":"s3://npm-registry-packages-npm-production"}},"0.15.1":{"name":"@aiquants/period-slider","version":"0.15.1","keywords":["react","slider","period-slider","range-slider","date-picker","year-selector","month-selector","date-selector","tailwindcss","typescript"],"author":{"url":"https://x.com/fehdek","name":"fehde-k"},"license":"MIT","_id":"@aiquants/period-slider@0.15.1","maintainers":[{"name":"fehde-k","email":"owner@aiquants.co.jp"},{"name":"fehde","email":"genbu0498@gmail.com"}],"dist":{"shasum":"0c54e79e64b0f5415b3804e276acc7052fcbb16e","tarball":"https://registry.npmjs.org/@aiquants/period-slider/-/period-slider-0.15.1.tgz","fileCount":57,"integrity":"sha512-2lV8eFOL7ajMtMtVsA1yY+YhnO6R8IFzNSesueQkRjGoOu/IS5BnvHP3yH6N9ZI96uHQKw6HibOG1cFCG+ThzQ==","signatures":[{"sig":"MEQCIFNlV8Xq6i0xbs7B15qLZtsON7O90Av2g3x5vCC2Y2NmAiBXqOSmvySTdyHLK4jRel18fmCP8mnJb0SpS2+aFdgAMw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIHiAUjus/7wFMhMBz5J8TaTmqXC8xWkcMdCEmDMrJ4VpAiEA7Y7Fyxa1KxxkoyprrPHpC5XM5MFaAa0geTDQsEuZE30=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1672743},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"default":"./dist/index.js","require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json","./styles/period-slider.css":"./dist/styles/period-slider.css","./styles/period-slider.standalone.css":"./dist/styles/period-slider.standalone.css"},"scripts":{"dev":"pnpm run build:css && vite build --watch --no-emptyOutDir","lint":"biome check src tests demo/src","test":"vitest run","build":"vite build && pnpm build:types-cjs && pnpm build:css","clean":"rimraf dist","watch":"pnpm run dev","format":"biome format --write src tests demo/src","demo:dev":"cd demo && pnpm run dev","lint:fix":"biome check --write src tests demo/src","test:e2e":"playwright test","test:run":"vitest run","build:css":"tailwindcss -i src/styles/components.entry.css -o dist/styles/period-slider.css --minify && tailwindcss -i src/styles/standalone.entry.css -o dist/styles/period-slider.standalone.css --minify","typecheck":"tsc --noEmit && tsc --noEmit -p demo/tsconfig.json","demo:build":"cd demo && pnpm run build","demo:start":"cd demo && pnpm run preview --port 5178","test:watch":"vitest --watch","test:e2e:ui":"playwright test --ui","format:check":"biome format src tests demo/src","publish:major":"pnpm run typecheck && pnpm run build && pnpm run --if-present test && pnpm version major --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:minor":"pnpm run typecheck && pnpm run build && pnpm run --if-present test && pnpm version minor --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:patch":"pnpm run typecheck && pnpm run build && pnpm run --if-present test && pnpm version patch --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","test:coverage":"vitest --coverage","build:types-cjs":"node -e \"require('fs').copyFileSync('dist/index.d.ts','dist/index.d.cts')\""},"_npmUser":{"name":"fehde","email":"genbu0498@gmail.com"},"description":"Customizable period slider and year/month/date selectors for React","directories":{},"sideEffects":["**/*.css"],"dependencies":{"date-fns":"^4.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.3.0","jsdom":"^26.1.0","rimraf":"^6.1.2","vitest":"^3.2.4","typescript":"^5.9.3","@types/node":"^24.10.3","tailwindcss":"^4.1.18","@types/react":"^19.2.7","vite-plugin-dts":"^4.5.4","@playwright/test":"^1.59.1","@tailwindcss/cli":"^4.1.18","@types/react-dom":"^19.2.3","@tailwindcss/vite":"^4.1.18","@vitejs/plugin-react":"^5.1.2","@testing-library/react":"^16.3.0","@aiquants/virtualscroll":"^3.7.0","@testing-library/jest-dom":"^6.9.1","@testing-library/user-event":"^14.6.1"},"peerDependencies":{"react":"^19.2.7","react-dom":"^19.2.7","@aiquants/virtualscroll":"^3.7.0"},"_npmOperationalInternal":{"tmp":"tmp/period-slider_0.15.1_1790344259363_0.6353580274386332","host":"s3://npm-registry-packages-npm-production"}},"0.16.0":{"name":"@aiquants/period-slider","version":"0.16.0","keywords":["react","slider","period-slider","range-slider","date-picker","year-selector","month-selector","date-selector","tailwindcss","typescript"],"author":{"url":"https://x.com/fehdek","name":"fehde-k"},"license":"MIT","_id":"@aiquants/period-slider@0.16.0","maintainers":[{"name":"fehde-k","email":"owner@aiquants.co.jp"},{"name":"fehde","email":"genbu0498@gmail.com"}],"dist":{"shasum":"db1339f7763c48e507c4c285687f7a6b2dc455e5","tarball":"https://registry.npmjs.org/@aiquants/period-slider/-/period-slider-0.16.0.tgz","fileCount":69,"integrity":"sha512-ZCUjEH9mPnn6QR9XiexqSMxqiffsZKulJO9VbnN4d9kuEtGslAsUa+Yat/aZJlZJxlxE8q4R4wSkA+gpJ7hIQg==","signatures":[{"sig":"MEUCIBUokiG+AVQ50TdW4fXzZWzcXQpRjI0pjLcf6PHZUbyaAiEAy4gMhAaW1PdQ/Vbb4eqy5Znd8/j4g6Ob3/voQgzSztA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCtAjWVfpQl78fevlZOPIw0z4F31mjEx9egAxLkPgx1eAIgAR0QSRuH1FdgakohwHNq4+eGVcWgFZ3+WMaWa64ggTk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2108615},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"default":"./dist/index.js","require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json","./styles/period-slider.css":"./dist/styles/period-slider.css","./styles/period-slider.standalone.css":"./dist/styles/period-slider.standalone.css"},"scripts":{"dev":"pnpm run build:css && vite build --watch --no-emptyOutDir","lint":"biome check src tests demo/src","test":"vitest run","build":"vite build && pnpm build:types-cjs && pnpm build:css","clean":"rimraf dist","watch":"pnpm run dev","format":"biome format --write src tests demo/src","demo:dev":"cd demo && pnpm run dev","lint:fix":"biome check --write src tests demo/src","test:e2e":"playwright test","test:run":"vitest run","build:css":"tailwindcss -i src/styles/components.entry.css -o dist/styles/period-slider.css --minify && tailwindcss -i src/styles/standalone.entry.css -o dist/styles/period-slider.standalone.css --minify","typecheck":"tsc --noEmit && tsc --noEmit -p demo/tsconfig.json","demo:build":"cd demo && pnpm run build","demo:start":"cd demo && pnpm run preview --port 5178","test:watch":"vitest --watch","test:e2e:ui":"playwright test --ui","format:check":"biome format src tests demo/src","publish:major":"pnpm run typecheck && pnpm run build && pnpm run --if-present test && pnpm version major --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:minor":"pnpm run typecheck && pnpm run build && pnpm run --if-present test && pnpm version minor --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:patch":"pnpm run typecheck && pnpm run build && pnpm run --if-present test && pnpm version patch --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","test:coverage":"vitest --coverage","build:types-cjs":"node -e \"require('fs').copyFileSync('dist/index.d.ts','dist/index.d.cts')\""},"_npmUser":{"name":"fehde","email":"genbu0498@gmail.com"},"description":"Customizable period slider and year/month/date selectors for React","directories":{},"sideEffects":["**/*.css"],"dependencies":{"date-fns":"^4.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.3.0","jsdom":"^26.1.0","rimraf":"^6.1.2","vitest":"^3.2.4","typescript":"^5.9.3","@types/node":"^24.10.3","tailwindcss":"^4.1.18","@types/react":"^19.2.7","vite-plugin-dts":"^4.5.4","@playwright/test":"^1.59.1","@tailwindcss/cli":"^4.1.18","@types/react-dom":"^19.2.3","@tailwindcss/vite":"^4.1.18","@vitejs/plugin-react":"^5.1.2","@testing-library/react":"^16.3.0","@aiquants/virtualscroll":"^3.7.0","@testing-library/jest-dom":"^6.9.1","@testing-library/user-event":"^14.6.1"},"peerDependencies":{"react":"^19.2.7","react-dom":"^19.2.7","@aiquants/virtualscroll":"^3.7.0"},"_npmOperationalInternal":{"tmp":"tmp/period-slider_0.16.0_1790801672095_0.422784223061593","host":"s3://npm-registry-packages-npm-production"}},"0.17.0":{"name":"@aiquants/period-slider","version":"0.17.0","keywords":["react","slider","period-slider","range-slider","date-picker","year-selector","month-selector","date-selector","tailwindcss","typescript"],"author":{"url":"https://x.com/fehdek","name":"fehde-k"},"license":"MIT","_id":"@aiquants/period-slider@0.17.0","maintainers":[{"name":"fehde-k","email":"owner@aiquants.co.jp"},{"name":"fehde","email":"genbu0498@gmail.com"}],"dist":{"shasum":"2ad52f5ddc480d7bca6ae7742a648fa24d197576","tarball":"https://registry.npmjs.org/@aiquants/period-slider/-/period-slider-0.17.0.tgz","fileCount":75,"integrity":"sha512-Extyndgvbd+Sfi4WjkN/6teXp3l+nUQfOlEtA9b1w8Bz5kCapLyrHf3vjfIJbih794pvrjYg46dIC42DZtbkdQ==","signatures":[{"sig":"MEUCIQCQdIGZ5yTCGjlAG1rtqk/TghmZWlMOsJuhmrvibpxZmQIgfdLmBUGAZxayHIMHMrzW8aFWU5qCat3fSy3I9i3rq1w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIEXLagQOh8IBZ+EygtwubnmiRgWwKE60Ig4OZG5bR8F0AiEAs+rTKaMro6gZBwNfAYg9F4htKDlF5MP60wdelgKf6xI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2337363},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"default":"./dist/index.js","require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json","./styles/period-slider.css":"./dist/styles/period-slider.css","./styles/period-slider.standalone.css":"./dist/styles/period-slider.standalone.css"},"scripts":{"dev":"pnpm run build:css && vite build --watch --no-emptyOutDir","lint":"biome check src tests demo/src","test":"vitest run","build":"vite build && pnpm build:types-cjs && pnpm build:css","clean":"rimraf dist","watch":"pnpm run dev","format":"biome format --write src tests demo/src","demo:dev":"cd demo && pnpm run dev","lint:fix":"biome check --write src tests demo/src","test:e2e":"playwright test","test:run":"vitest run","build:css":"tailwindcss -i src/styles/components.entry.css -o dist/styles/period-slider.css --minify && tailwindcss -i src/styles/standalone.entry.css -o dist/styles/period-slider.standalone.css --minify","typecheck":"tsc --noEmit && tsc --noEmit -p demo/tsconfig.json","demo:build":"cd demo && pnpm run build","demo:start":"cd demo && pnpm run preview --port 5178","test:watch":"vitest --watch","test:e2e:ui":"playwright test --ui","format:check":"biome format src tests demo/src","publish:major":"pnpm run typecheck && pnpm run build && pnpm run --if-present test && pnpm version major --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:minor":"pnpm run typecheck && pnpm run build && pnpm run --if-present test && pnpm version minor --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:patch":"pnpm run typecheck && pnpm run build && pnpm run --if-present test && pnpm version patch --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","test:coverage":"vitest --coverage","build:types-cjs":"node -e \"require('fs').copyFileSync('dist/index.d.ts','dist/index.d.cts')\""},"_npmUser":{"name":"fehde","email":"genbu0498@gmail.com"},"description":"Customizable period slider and year/month/date selectors for React","directories":{},"sideEffects":["**/*.css"],"dependencies":{"date-fns":"^4.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.3.0","jsdom":"^26.1.0","rimraf":"^6.1.2","vitest":"^3.2.4","typescript":"^5.9.3","@types/node":"^24.10.3","tailwindcss":"^4.1.18","@types/react":"^19.2.7","vite-plugin-dts":"^4.5.4","@playwright/test":"^1.59.1","@tailwindcss/cli":"^4.1.18","@types/react-dom":"^19.2.3","@tailwindcss/vite":"^4.1.18","@vitejs/plugin-react":"^5.1.2","@testing-library/react":"^16.3.0","@aiquants/virtualscroll":"^3.7.0","@testing-library/jest-dom":"^6.9.1","@testing-library/user-event":"^14.6.1"},"peerDependencies":{"react":"^19.2.7","react-dom":"^19.2.7","@aiquants/virtualscroll":"^3.7.0"},"_npmOperationalInternal":{"tmp":"tmp/period-slider_0.17.0_1790857444388_0.6016970633427412","host":"s3://npm-registry-packages-npm-production"}},"0.18.0":{"name":"@aiquants/period-slider","version":"0.18.0","keywords":["react","slider","period-slider","range-slider","date-picker","year-selector","month-selector","date-selector","tailwindcss","typescript"],"author":{"url":"https://x.com/fehdek","name":"fehde-k"},"license":"MIT","_id":"@aiquants/period-slider@0.18.0","maintainers":[{"name":"fehde-k","email":"owner@aiquants.co.jp"},{"name":"fehde","email":"genbu0498@gmail.com"}],"dist":{"shasum":"81ecd12116d9015e09a39477eb6897acc6cf1e56","tarball":"https://registry.npmjs.org/@aiquants/period-slider/-/period-slider-0.18.0.tgz","fileCount":75,"integrity":"sha512-kOpYujkVwKvDmAH8oh3ojumCp74zEOWcdiKA2QoRL1ZqabLrelYTUvZ72u0Q7Q21YqkN98H3Ohn4vArFRLvE5w==","signatures":[{"sig":"MEUCIApGF6if988M3Yp5EALh6iECSpkxpbHx77TDf5DIl38SAiEA0oyaggDFjI3Doyi0pbFoPy7pPyjsIyXtVHAbugILb9E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDnX1eU/GJiJjloF895zP8i/x9jOzPLhpdDFc1JOOzA/QIhAPNq1r+o9Duj3TT4nJuniZTLiIdiw+WxFxnKvM+mx7c6","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2437709},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"default":"./dist/index.js","require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json","./styles/period-slider.css":"./dist/styles/period-slider.css","./styles/period-slider.standalone.css":"./dist/styles/period-slider.standalone.css"},"scripts":{"dev":"pnpm run build:css && vite build --watch --no-emptyOutDir","lint":"biome check src tests demo/src","test":"vitest run","build":"vite build && pnpm build:types-cjs && pnpm build:css","clean":"rimraf dist","watch":"pnpm run dev","format":"biome format --write src tests demo/src","demo:dev":"cd demo && pnpm run dev","lint:fix":"biome check --write src tests demo/src","test:e2e":"playwright test","test:run":"vitest run","build:css":"tailwindcss -i src/styles/components.entry.css -o dist/styles/period-slider.css --minify && tailwindcss -i src/styles/standalone.entry.css -o dist/styles/period-slider.standalone.css --minify","typecheck":"tsc --noEmit && tsc --noEmit -p demo/tsconfig.json","demo:build":"cd demo && pnpm run build","demo:start":"cd demo && pnpm run preview --port 5178","test:watch":"vitest --watch","test:e2e:ui":"playwright test --ui","format:check":"biome format src tests demo/src","publish:major":"pnpm run typecheck && pnpm run build && pnpm run --if-present test && pnpm version major --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:minor":"pnpm run typecheck && pnpm run build && pnpm run --if-present test && pnpm version minor --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:patch":"pnpm run typecheck && pnpm run build && pnpm run --if-present test && pnpm version patch --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","test:coverage":"vitest --coverage","build:types-cjs":"node -e \"require('fs').copyFileSync('dist/index.d.ts','dist/index.d.cts')\""},"_npmUser":{"name":"fehde","email":"genbu0498@gmail.com"},"description":"Customizable period slider and year/month/date selectors for React","directories":{},"sideEffects":["**/*.css"],"dependencies":{"date-fns":"^4.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.3.0","jsdom":"^26.1.0","rimraf":"^6.1.2","vitest":"^3.2.4","typescript":"^5.9.3","@types/node":"^24.10.3","tailwindcss":"^4.1.18","@types/react":"^19.2.7","vite-plugin-dts":"^4.5.4","@playwright/test":"^1.59.1","@tailwindcss/cli":"^4.1.18","@types/react-dom":"^19.2.3","@tailwindcss/vite":"^4.1.18","@vitejs/plugin-react":"^5.1.2","@testing-library/react":"^16.3.0","@aiquants/virtualscroll":"^3.7.0","@testing-library/jest-dom":"^6.9.1","@testing-library/user-event":"^14.6.1"},"peerDependencies":{"react":"^19.2.7","react-dom":"^19.2.7","@aiquants/virtualscroll":"^3.7.0"},"_npmOperationalInternal":{"tmp":"tmp/period-slider_0.18.0_1790893246269_0.8656872741029236","host":"s3://npm-registry-packages-npm-production"}},"0.19.0":{"name":"@aiquants/period-slider","version":"0.19.0","keywords":["react","slider","period-slider","range-slider","date-picker","year-selector","month-selector","date-selector","tailwindcss","typescript"],"author":{"url":"https://x.com/fehdek","name":"fehde-k"},"license":"MIT","_id":"@aiquants/period-slider@0.19.0","maintainers":[{"name":"fehde-k","email":"owner@aiquants.co.jp"},{"name":"fehde","email":"genbu0498@gmail.com"}],"dist":{"shasum":"412ba2e108419942cbfe5f5e33634460b23dacf9","tarball":"https://registry.npmjs.org/@aiquants/period-slider/-/period-slider-0.19.0.tgz","fileCount":75,"integrity":"sha512-FoHMljkNFvT6Vl0ZyEKHd0kacfoZncFC4+AnY41ilnkQ7qVx1uDdC5MQ1iLc/Nmo7+8Q1QAFs4fLI6sd+lSWsQ==","signatures":[{"sig":"MEUCIF+PgwMWBt+mdDgHHdOlO6TwoZojws76l2xe0/2cjk36AiEA0v3LoF7GX8RLvkgIlwlzYY00b3V1OCsI4WxYT+Ih8wg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIEuuNIQ6SUK+lk7GX+DQyB+qqqaWnGIuvbkC4h8cCxNwAiEA2+LAjOk7Ugt+gXozjb9MGEbQxpu7dFMiBusERqhQqQA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2478302},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"default":"./dist/index.js","require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json","./styles/period-slider.css":"./dist/styles/period-slider.css","./styles/period-slider.standalone.css":"./dist/styles/period-slider.standalone.css"},"scripts":{"dev":"pnpm run build:css && vite build --watch --no-emptyOutDir","lint":"biome check src tests demo/src","test":"vitest run","build":"vite build && pnpm build:types-cjs && pnpm build:css","clean":"rimraf dist","watch":"pnpm run dev","format":"biome format --write src tests demo/src","demo:dev":"cd demo && pnpm run dev","lint:fix":"biome check --write src tests demo/src","test:e2e":"playwright test","test:run":"vitest run","build:css":"tailwindcss -i src/styles/components.entry.css -o dist/styles/period-slider.css --minify && tailwindcss -i src/styles/standalone.entry.css -o dist/styles/period-slider.standalone.css --minify","typecheck":"tsc --noEmit && tsc --noEmit -p demo/tsconfig.json","demo:build":"cd demo && pnpm run build","demo:start":"cd demo && pnpm run preview --port 5178","test:watch":"vitest --watch","test:e2e:ui":"playwright test --ui","format:check":"biome format src tests demo/src","publish:major":"pnpm run typecheck && pnpm run build && pnpm run --if-present test && pnpm version major --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:minor":"pnpm run typecheck && pnpm run build && pnpm run --if-present test && pnpm version minor --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:patch":"pnpm run typecheck && pnpm run build && pnpm run --if-present test && pnpm version patch --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","test:coverage":"vitest --coverage","build:types-cjs":"node -e \"require('fs').copyFileSync('dist/index.d.ts','dist/index.d.cts')\""},"_npmUser":{"name":"fehde","email":"genbu0498@gmail.com"},"description":"Customizable period slider and year/month/date selectors for React","directories":{},"sideEffects":["**/*.css"],"dependencies":{"date-fns":"^4.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.3.0","jsdom":"^26.1.0","rimraf":"^6.1.2","vitest":"^3.2.4","typescript":"^5.9.3","@types/node":"^24.10.3","tailwindcss":"^4.1.18","@types/react":"^19.2.7","vite-plugin-dts":"^4.5.4","@playwright/test":"^1.59.1","@tailwindcss/cli":"^4.1.18","@types/react-dom":"^19.2.3","@tailwindcss/vite":"^4.1.18","@vitejs/plugin-react":"^5.1.2","@testing-library/react":"^16.3.0","@aiquants/virtualscroll":"^3.7.0","@testing-library/jest-dom":"^6.9.1","@testing-library/user-event":"^14.6.1"},"peerDependencies":{"react":"^19.2.7","react-dom":"^19.2.7","@aiquants/virtualscroll":"^3.7.0"},"_npmOperationalInternal":{"tmp":"tmp/period-slider_0.19.0_1790906425114_0.4033261613873784","host":"s3://npm-registry-packages-npm-production"}},"0.20.0":{"name":"@aiquants/period-slider","version":"0.20.0","keywords":["react","slider","period-slider","range-slider","date-picker","year-selector","month-selector","date-selector","tailwindcss","typescript"],"author":{"url":"https://x.com/fehdek","name":"fehde-k"},"license":"MIT","_id":"@aiquants/period-slider@0.20.0","maintainers":[{"name":"fehde-k","email":"owner@aiquants.co.jp"},{"name":"fehde","email":"genbu0498@gmail.com"}],"dist":{"shasum":"1263941b8b59e2ce384d535bbfeeec647d0f0328","tarball":"https://registry.npmjs.org/@aiquants/period-slider/-/period-slider-0.20.0.tgz","fileCount":78,"integrity":"sha512-e2wNLWt+zoQM6p2JZwrPBOjhGAZ09g4csz/scRPXnbsrlfYxQFm7NTQyWfGQO4B4eKnkjxdB+AW7gtbADDXwGA==","signatures":[{"sig":"MEQCIGSPj7RXOFxL9sFxCw1PD4d0xNRM8Shnb4Z63N6qZrXwAiBqk/PNNQijmPEcc/Z5B/yKrsYs4A1/CPyzs/1FyqC8FA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCf2CCZR/quVo7pc8Tlace8KdC7R1BmTCcjgQnz2UPS+gIgTJZ+Mr32GLa26ceCDW4c9tdV9+zadxrCEdwI8NRpUMg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2683520},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"default":"./dist/index.js","require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json","./styles/period-slider.css":"./dist/styles/period-slider.css","./styles/period-slider.standalone.css":"./dist/styles/period-slider.standalone.css"},"scripts":{"dev":"pnpm run build:css && vite build --watch --no-emptyOutDir","lint":"biome check src tests demo/src","test":"vitest run","build":"vite build && pnpm build:types-cjs && pnpm build:css","clean":"rimraf dist","watch":"pnpm run dev","format":"biome format --write src tests demo/src","demo:dev":"cd demo && pnpm run dev","lint:fix":"biome check --write src tests demo/src","test:e2e":"playwright test","test:run":"vitest run","build:css":"tailwindcss -i src/styles/components.entry.css -o dist/styles/period-slider.css --minify && tailwindcss -i src/styles/standalone.entry.css -o dist/styles/period-slider.standalone.css --minify","typecheck":"tsc --noEmit && tsc --noEmit -p demo/tsconfig.json","demo:build":"cd demo && pnpm run build","demo:start":"cd demo && pnpm run preview --port 5178","test:watch":"vitest --watch","test:e2e:ui":"playwright test --ui","format:check":"biome format src tests demo/src","publish:major":"pnpm run typecheck && pnpm run build && pnpm run --if-present test && pnpm version major --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:minor":"pnpm run typecheck && pnpm run build && pnpm run --if-present test && pnpm version minor --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:patch":"pnpm run typecheck && pnpm run build && pnpm run --if-present test && pnpm version patch --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","test:coverage":"vitest --coverage","build:types-cjs":"node -e \"require('fs').copyFileSync('dist/index.d.ts','dist/index.d.cts')\""},"_npmUser":{"name":"fehde","email":"genbu0498@gmail.com"},"description":"Customizable period slider and year/month/date selectors for React","directories":{},"sideEffects":["**/*.css"],"dependencies":{"date-fns":"^4.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.3.0","jsdom":"^26.1.0","rimraf":"^6.1.2","vitest":"^3.2.4","typescript":"^5.9.3","@types/node":"^24.10.3","tailwindcss":"^4.1.18","@types/react":"^19.2.7","vite-plugin-dts":"^4.5.4","@playwright/test":"^1.59.1","@tailwindcss/cli":"^4.1.18","@types/react-dom":"^19.2.3","@tailwindcss/vite":"^4.1.18","@vitejs/plugin-react":"^5.1.2","@testing-library/react":"^16.3.0","@aiquants/virtualscroll":"^3.7.0","@testing-library/jest-dom":"^6.9.1","@testing-library/user-event":"^14.6.1"},"peerDependencies":{"react":"^19.2.7","react-dom":"^19.2.7","@aiquants/virtualscroll":"^3.7.0"},"_npmOperationalInternal":{"tmp":"tmp/period-slider_0.20.0_1790943771655_0.8019773493896665","host":"s3://npm-registry-packages-npm-production"}},"0.20.1":{"_id":"@aiquants/period-slider@0.20.1","dist":{"shasum":"99a22756a77eec90691bb9f3993f9bfb1ece0601","tarball":"https://registry.npmjs.org/@aiquants/period-slider/-/period-slider-0.20.1.tgz","fileCount":78,"integrity":"sha512-EJ/hF293C8PjYfdSqWat+2zVBuu4RMETPD+DSsaohicbbRd6vWqyfAKEoikIa93cRRWebvHvzngWIduZtU99AQ==","signatures":[{"sig":"MEQCIByigeqyUCki681qp57bMMxjoexeX9YGFhXXshepcLMlAiBaipdMboBzKLdQFSFVqtcM4VgAJx9OCBOpfElj0l+Xlw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIG2KHrjCbwaNn0cNzKUsOdvgnIdOurPOyrTaJA8XvGRyAiEAuaWLpPKIz0aneA0I3JcR5q6fFJVsS60NjXD3n5da3vc="}],"unpackedSize":2718890},"main":"./dist/index.cjs","name":"@aiquants/period-slider","type":"module","types":"./dist/index.d.ts","author":{"url":"https://x.com/fehdek","name":"fehde-k"},"module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"default":"./dist/index.js","require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json","./styles/period-slider.css":"./dist/styles/period-slider.css","./styles/period-slider.standalone.css":"./dist/styles/period-slider.standalone.css"},"license":"MIT","scripts":{"dev":"pnpm run build:css && vite build --watch --no-emptyOutDir","lint":"biome check src tests demo/src","test":"vitest run","build":"vite build && pnpm build:types-cjs && pnpm build:css","clean":"rimraf dist","watch":"pnpm run dev","format":"biome format --write src tests demo/src","demo:dev":"cd demo && pnpm run dev","lint:fix":"biome check --write src tests demo/src","test:e2e":"playwright test","test:run":"vitest run","build:css":"tailwindcss -i src/styles/components.entry.css -o dist/styles/period-slider.css --minify && tailwindcss -i src/styles/standalone.entry.css -o dist/styles/period-slider.standalone.css --minify","typecheck":"tsc --noEmit && tsc --noEmit -p demo/tsconfig.json","demo:build":"cd demo && pnpm run build","demo:start":"cd demo && pnpm run preview --port 5178","test:watch":"vitest --watch","test:e2e:ui":"playwright test --ui","format:check":"biome format src tests demo/src","publish:major":"pnpm run typecheck && pnpm run build && pnpm run --if-present test && node ../../.config/scripts/check-publish-leaks.mjs && pnpm version major --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:minor":"pnpm run typecheck && pnpm run build && pnpm run --if-present test && node ../../.config/scripts/check-publish-leaks.mjs && pnpm version minor --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","publish:patch":"pnpm run typecheck && pnpm run build && pnpm run --if-present test && node ../../.config/scripts/check-publish-leaks.mjs && pnpm version patch --no-git-tag-version --no-git-checks && pnpm publish --no-git-checks","test:coverage":"vitest --coverage","build:types-cjs":"node -e \"require('fs').copyFileSync('dist/index.d.ts','dist/index.d.cts')\""},"version":"0.20.1","_npmUser":{"name":"fehde","email":"genbu0498@gmail.com"},"keywords":["react","slider","period-slider","range-slider","date-picker","year-selector","month-selector","date-selector","tailwindcss","typescript"],"description":"Customizable period slider and year/month/date selectors for React","directories":{},"maintainers":[{"name":"fehde-k","email":"owner@aiquants.co.jp"},{"name":"fehde","email":"genbu0498@gmail.com"}],"sideEffects":["**/*.css"],"dependencies":{"date-fns":"^4.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.3.0","jsdom":"^26.1.0","rimraf":"^6.1.2","vitest":"^3.2.4","typescript":"^5.9.3","@types/node":"^24.10.3","tailwindcss":"^4.1.18","@types/react":"^19.2.7","vite-plugin-dts":"^4.5.4","@playwright/test":"^1.59.1","@tailwindcss/cli":"^4.1.18","@types/react-dom":"^19.2.3","@tailwindcss/vite":"^4.1.18","@vitejs/plugin-react":"^5.1.2","@testing-library/react":"^16.3.0","@aiquants/virtualscroll":"^3.8.0","@testing-library/jest-dom":"^6.9.1","@testing-library/user-event":"^14.6.1"},"peerDependencies":{"react":"^19.2.7","react-dom":"^19.2.7","@aiquants/virtualscroll":"^3.8.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/period-slider_0.20.1_1790964311604_0.35638330798602724"}}},"time":{"created":"2026-09-11T06:19:46.416Z","modified":"2026-10-02T18:05:11.909Z","0.2.0":"2026-09-11T06:19:46.746Z","0.3.0":"2026-09-13T01:53:58.148Z","0.4.0":"2026-09-13T01:54:46.144Z","0.4.1":"2026-09-13T02:33:28.796Z","0.4.2":"2026-09-13T03:49:46.279Z","0.5.0":"2026-09-13T11:40:14.386Z","0.6.0":"2026-09-13T23:28:52.484Z","0.7.0":"2026-09-14T09:19:35.131Z","0.8.0":"2026-09-16T08:25:32.906Z","0.9.0":"2026-09-16T22:44:00.009Z","0.10.0":"2026-09-18T21:10:34.641Z","0.10.1":"2026-09-18T22:09:13.973Z","0.10.2":"2026-09-19T02:44:42.295Z","0.11.0":"2026-09-22T12:08:26.773Z","0.11.1":"2026-09-22T14:10:38.456Z","0.12.0":"2026-09-23T03:21:14.648Z","0.13.0":"2026-09-23T10:23:27.051Z","0.14.0":"2026-09-23T22:41:05.169Z","0.15.0":"2026-09-25T05:34:56.645Z","0.15.1":"2026-09-25T13:50:59.472Z","0.16.0":"2026-09-30T20:54:32.234Z","0.17.0":"2026-10-01T12:24:04.493Z","0.18.0":"2026-10-01T22:20:46.362Z","0.19.0":"2026-10-02T02:00:25.224Z","0.20.0":"2026-10-02T12:22:51.748Z","0.20.1":"2026-10-02T18:05:11.720Z"},"author":{"url":"https://x.com/fehdek","name":"fehde-k"},"license":"MIT","keywords":["react","slider","period-slider","range-slider","date-picker","year-selector","month-selector","date-selector","tailwindcss","typescript"],"description":"Customizable period slider and year/month/date selectors for React","maintainers":[{"name":"fehde-k","email":"owner@aiquants.co.jp"},{"name":"fehde","email":"genbu0498@gmail.com"}],"readme":"<!-- markdownlint-disable MD013 -->\n# @aiquants/period-slider\n\n時系列分析・期間指定 UI のための React スライダーおよび日付セレクタコンポーネントライブラリ。\n\n## 概要\n\n`@aiquants/period-slider` は、年・月・日単位での期間範囲選択 (Range) および単一時点選択 (Point) に対応した `PeriodSlider`、および年・年月・年月日のステッパー付き入力コンポーネント (`YearSelector`, `MonthSelector`, `DateSelector`) を提供します。\n\n外部依存ライブラリ (nouislider 等) を排した純粋な React / SVG 実装であり、滑らかなドラッグ操作、数学的幾何計算による近接ラベルの重なり防止自動斜めエフェクト、上限/下限交差時のアクティブハイライト自動追従、および WAI-ARIA に準拠したキーボードアクセシビリティを備えています。\n\n必須の入力 (定義域境界・初期値) が欠落または不正な場合、本パッケージは既定値や壁時計時刻で代替せず、すべて `RangeError` で即座に失敗します。詳細は [実行時バリデーション](#実行時バリデーション-fail-fast) を参照してください。検証は初回のマウントだけでなく再描画のたびに効き、メモ化した部品 (`PeriodSlider` と 3 セレクタ) も、使えない値を渡した再描画を省きません。使えない Date 型 Props は、文字列へ変換できない値 (`Object.create(null)`・Date を包んだ Proxy など) も含め、初回のマウントでも再描画でも、[実行時バリデーション](#実行時バリデーション-fail-fast) の表のとおり名前付きの `RangeError` になります。\n\n地域化は独立した 2 つの軸を持ちます。**UI クローム言語** (`locale`: `\"en\"` [既定] / `\"ja\"`) はつまみ・ステッパー・セレクト・ポップアップのアクセシブル名を凍結カタログから選び、`labels` でキー単位に上書きできます ([Localization](#localization-ui-クローム言語-locale-と-labels))。**日付テキスト** の既定値はロケール非依存の ISO 8601 表記 (`2025` / `2025-01` / `2025-01-15`) で、`formatLocale` (BCP 47 言語タグ) を渡した時のみ `Intl.DateTimeFormat` 書式へ切り替わります ([日付の表示書式](#日付の表示書式-formatlocale))。一方の軸から他方を導出することはありません。\n\n## 特徴\n\n- **柔軟な時間単位**: `year`, `month`, `day` の 3 つの単位をサポート。\n- **暦年以外の年 (`yearStartMonth`)**: 1 年の始まりを任意の暦月へ置けます (`3` なら 4 月〜翌 3 月の会計年度、`9` なら 10 月〜翌 9 月のでん粉年度)。年はその年の先頭月が属する暦年で名乗り、レールの目盛・ノギスのマクロ窓・年解像度の離散候補がまとめて同じ境界に従います。四半期は `resolveQuarter` / `formatQuarterLabel` が暦四半期・年度四半期の双方を返します (スライダーの Props とは独立した引数で選びます)。\n- **3 つの操作モード**:\n  - `range`: 開始時期と終了時期の 2 つのつまみと連結バーで範囲を選択。\n  - `point`: 単一のつまみで時点を選択。\n  - `vernier`: ノギス (Vernier Caliper) 型 2 段スケール一体型モード。全体期間からマクロ表示窓を上側で指定し、その拡大スケールを下側で精密選択。上下反転、台形プロジェクション光、2 段スケールの目盛線、精密ヘアライン針を完備。\n    - **ミクロレールは期間と時点の 2 形態**: `microRange` / `defaultMicroRange` / `onChangeMicroRange` を渡せば 2 つまみの期間選択、`microValue` / `defaultMicroValue` / `onChangeMicroPoint` を渡せば 1 つまみの時点選択になります。2 系統の同時指定は型で禁じられ、実行時も `RangeError` で拒否します。時点形態ではミクロ側の接続バーを描かず、つまみは `role=\"slider\"` が 1 つだけ立ちます (全体で 3 つ)。\n    - **半円直径 (±8px) 完全充填幾何配置**: 半円ノブ底面 (16px) を完全に満たす一体型選択ゲージ。\n    - **上下段つまみ交差反転スワップ (Crossover)**: マクロ・ミクロ双方で上限下限の追い越し反転をサポート。\n    - **弾性復元 (Push-and-Restore)**: マクロつまみを掴んでいる間、記憶するのは掴んだ時点のミクロ選択で、毎 move それを生きた窓へ当て直します。縮めてから広げれば元位置へ戻るのはこの 1 ドラッグの中の話で、指を離すと記憶も終わります (掴み直しは新しい出発点になり、別の描画で渡された `microRange` を跨いで戻ることはありません)。\n    - **窓ごとの平行移動は長さを保つ (Pan)**: `macro-connect` のドラッグ・`Shift` + ホイール・フックの `shiftMacroRange` はいずれも窓全体を動かす操作であり、ミクロ選択は同じ長さのまま新しい窓へ運ばれます。新しい窓の縁を越えた選択は、越えたのが一部でも全部でも丸ごと押し戻され、長さが先に決まって端は後になります (窓より長い選択だけが窓全体へ縮みます)。長さはミクロ単位で数えるため、月の日数や夏時間で増減しません。`macro-connect` は窓と一緒に暦の差分だけ選択を平行移動してから押し戻すので、日単位の選択が月をまたいで運ばれると、長さは運んだ先の暦での日数になります。離散ミクロレールでは両端がそれぞれ最寄りの候補へ寄るため、候補の疎な窓では運んだ選択が短くなることがあります。片側の縁だけを動かす操作 (マクロつまみ 1 本の操作・利用側が名指す `macroRange` の変更) では選択は動かず、動いた縁に切り落とされるだけです。\n    - **マクロ・ミクロ完全独立設定**: マクロ (年) × ミクロ (日) やマクロ (年) × ミクロ (月) などの異単位構成、個別離散スナップ (`macroIsDiscrete` / `microIsDiscrete` と併用)、個別カスタムフォーマッタに対応。\n    - **中央 1 px スリット空隙**: 上段 3.5 px、中央空隙 1.0 px、下段 3.5 px (`calc(50% - 0.5px)`) の独立レール設計による高い視認性と数学的均等分割。\n    - **SVG ベクター幾何学半円ドーム (`VernierKnobSvg`)**: 数学的真円弧コマンド (`shapeRendering=\"geometricPrecision\"`) による、環境非依存で一切のガタつき・階段状ジャギーのない滑らかな真円弧。\n    - **上下反転時のセマンティック配色直交分離**: 配置位置 (`data-vernier-pos`) と配色 (`data-handle-type`) を CSS セレクタレベルで直交分離し、反転時もマクロ針・ノブグロー・目盛線・台形プロジェクション光が完璧に追従。\n- **トラック厚み 8px 偶数設計**: サブピクセル滲みを完全に解消し、上下対称の半円つまみ配置と 3.5px+1.0px+3.5px マクロ・ミクロ塗り分けを実現。\n- **離散日付対応 (`allowedDates`)**: 実データが存在する日付のみをスナップ対象にする離散モードを内蔵。`[minDate, maxDate]` 外の要素は到達不能なため除外され、全要素が範囲外の場合は `RangeError` で失敗。\n- **ラベル配置と重なり防止自動傾斜**:\n  - `labelPosition`: 上側 (`\"top\"`, 既定) または下側 (`\"bottom\"`) のラベル表示位置を選択可能。\n  - `autoSlantLabels`: 2 つのラベルが近接した際に Smootherstep 補間により 0° 〜 90° に滑らかに自動傾斜し、テキストの重なりを数学的に完全防止。回転時もラベル下端がトラック中心から常に 10px (つまみ上端から 2px) の統一された高さを維持。角度は 2 つの値が一致する位置まで連続で、その位置で 90° に達します。\n  - 傾斜は Range の 1 対と、ノギスのマクロ対・ミクロ対の計 3 組へ**対ごとに独立して**適用されます (対ごとに比率も単位もラベル幅も違うため、計算を共有しません)。マクロ対とミクロ対で角度が異なるのは正常です。\n  - 垂直レイアウト (`isVertical={true}`、垂直ノギスを含む) では傾斜しません。傾斜幾何が X 軸方向にしか分離しないためで、垂直向けの衝突回避は未整備の保留領域です。\n  - 衝突判定はラベルの実測幅 (`ResizeObserver` が返すボーダーボックス幅) のみを用います。単位や書式から推定した定数を使わないため、`formatLocale`・`formatLabel`・ホストのフォントを変えても判定はずれません。実測値が得られるまでラベルは傾斜せず直立します。\n  - 2 つのつまみが同じ値に重なったときは、同一文字列のラベルを 2 枚並べず 1 枚へ畳みます。冗長な側のラベルには `data-duplicate=\"true\"` が付いて `visibility: hidden` になり (要素は残るため実測は継続)、残った 1 枚は 90° に傾いたままつまみの中心に立ちます (畳んでも角度は変えず、離す相手が居なくなった水平方向の押し退けだけを 0 にします)。畳まれたかどうかは傾斜の可否を動かしません。値が一致していても、上記のとおり実測が揃うまで・`autoSlantLabels={false}`・垂直レイアウトでは直立のままです。同じ機構がノギスのマクロ対・ミクロ対にも適用され (判定は各対の符号化値の厳密一致)、可視ラベルは掴んだ・打鍵した・`Tab` で到達したつまみへ追従します。\n  - トラック上をホバーしたときに出る追従ラベル (ポインターオーバーレイ) も、指している値がつまみの確定値と一致する間は同じ機構で隠します。つまみのラベルと一字一句同じ文字列が 4px ずれて二重に描かれるのを防ぐためで、判定はラベル併合と同じ符号化値の厳密一致です。ポインター位置そのものを示す点とガイドは表示したままです。\n  - 操作中 (ドラッグ中)、直近にクリック・キー操作・フォーカスしたラベル・つまみを前面 (`z-index`) に強調表示。併合時に見えるのはこの前面側のラベルです。\n- **ドラッグは指に付いて来ます (目盛りの粗さに関わらず)**: つまみ・帯・ラベル・針・ノギスの台形プロジェクションは、押している間はポインターそのものの位置に描かれます。年スケールのように 1 目盛りが数十ピクセルあるレールでも、つまみが固まってから跳ぶことはありません。**コールバックの発火値と回数、`debounceMs` は 1 ビットも変わりません**。指を離すと 120ms の短い収め戻しで確定位置へ座ります。キーボード・ホイール・ステッパーによる変化は決して動きません — 収め戻しの窓が開いている最中に起きた変化でも、値を動かす前に窓を閉じます (`prefers-reduced-motion: reduce` では収め戻しも動きません)。専用の Props はありません。\n- **掴んでいる間に表示される値は、描かれている位置が名指す値です**: ラベルの文字・`aria-valuetext` / `aria-valuenow` は、指の下に描かれているつまみが立っている値を示します (位置は連続、値は離散)。`debounceMs` を渡した制御下の利用側でも、通知が届くまで文字が古い値で固まることはありません。**指を離した瞬間に表示の持ち主は利用側へ戻る**ため、届いた値を畳む・採らない利用側ではその判断が即座に表示へ現れます。キーボード・ホイール・ステッパーは表示の持ち主にならず、利用側が値を返したときにだけ表示が動きます。\n- **上限/下限交差 (クロスオーバー) の動的ハイライト追従**:\n  - レンジドラッグ中につまみが相手側アンカーを超えて上限と下限が入れ替わった際、現在ポインターで操作している側のつまみへアクティブ状態 (`[data-active=\"true\"]`、スケール縮小＋ブルーグロー・波紋) がリアルタイムに自動スワップ。\n- **充実した日付セレクタ**:\n  - `YearSelector`: ドロップダウンと ◀▶ ステッパーで年を選択。\n  - `MonthSelector`: カレンダー入力 (`variant=\"date\"`, 既定) / ドロップダウン (`variant=\"dropdown\"`) 対応の月セレクタ。連続した境界のほか、実データに存在する月だけを選ばせる離散集合 (`allowedMonths`) に対応。\n  - `DateSelector`: 日付入力 (`variant=\"date\"`, 既定)、日付範囲全体を仮想化したコンボボックス (`variant=\"dropdown\"`、100 年分の日でも定数費用)、年月日の 3 分割セレクト (`variant=\"split-dropdown\"`) に対応。離散集合 (`allowedDates`) にも対応。\n  - 3 セレクタの ◀▶ とスライダーのステッパーは同じ部品を共有し、押せる間だけホバーで強調され、44px の当たり判定とキーボードフォーカスのリングを持ちます。境界に着いたボタンはフォーカスを保ち、タブ順にも残ったまま使用不可 (`aria-disabled=\"true\"`) になります。どのボタンも `type=\"button\"` のため、ホストの `<form>` の中に置いても押下でフォームを送信しません。\n  - **◀▶ を所有者へ引き渡せます (`stepper`)**: セレクタが示す値は期間の片端やノギスの窓の片端であることが多く、セレクタ自身の ◀▶ はその 1 つの値しか動かせません。`stepper` を渡すと ◀▶ の押下は向き付きで所有者へ届き (`onChange` は呼ばれません)、押せるかどうかも所有者が決めます。押下が期間・窓をどう動かすか (期間ごと・片端だけ・1 点へ、データの端で止めるか縮めるか、窓を据え置くか追従させるか) は 1 か所の規則 (`resolveSelectorSteps` / `resolveVernierSelectorSteps`) が決め、フックは `selectorStep` / `macroSelectorStep` / `microSelectorStep` を渡すだけでそれを配線します。\n- **カラーテーマ・メリハリ対比 & ダークモード**:\n  - `colorScheme`: 6 系統のカラーパレット (`\"blue-rose\"` [既定], `\"indigo-amber\"`, `\"teal-emerald\"`, `\"violet-fuchsia\"`, `\"slate-sky\"`, `\"monochrome\"`) をサポート。\n  - ノギス 2 段スケールにおける広域マクロ (青系) と確定ミクロ (赤系) の明確なメリハリ対比、および境界を結ぶ台形プロジェクション光の動的 2 色グラデーション。\n  - トラック、ノブ、目盛線、ツールチップ、セレクタ群 (`YearSelector`, `MonthSelector`, `DateSelector`) を含む Tailwind `.dark` クラスによるダークモード完全対応。\n- **CSS カスタムプロパティによるスタイリング API**: 配色 11 個に加え、重なり順 (z-index) 9 個、インジケーターラベルの配色・文字寸法・余白・角丸 7 個とノギスのレール離隔 1 個の計 28 変数を `--aqps-` 接頭辞で公開。対応する Props は持たず、自前の CSS か `style` プロップで上書きします。既定値は現在の描画結果そのもののため、何も与えなければ見た目は一切変わりません。\n- **垂直レイアウト対応 (`isVertical`)**:\n  - `isVertical={true}` によりダッシュボードのサイドバーや狭小パネルに最適な垂直指向スライダーを提供。\n  - つまみのラベルはつまみの左側、ホバーガイドのラベルはトラックの右側へ排他配置し、垂直時の重なりを構造的に回避。つまみ左端からラベル右端までの実測離隔は 16px です (スタイルシートの 1 つの宣言 `right: calc(100% + var(--ps-vertical-label-gap))` が決めます。`--ps-vertical-label-gap` は内部変数であり、上書きしてよい公開の CSS カスタムプロパティではありません — 名前も値も予告なく変わります)。\n- **ノギスの均一 8px クリアランス & ツールチップ色分け**:\n  - ノギス (Vernier) モードでは、上下左右いずれのレールでも半円つまみの平面からラベルまでの距離を 8px に統一 (`--aqps-label-rail-gap` で変更可)。\n  - ノギスモードではマクロツールチップ (`--aqps-macro-color`) とミクロツールチップ (`--aqps-micro-color`) がセマンティックに色分けされ、上下段の対応関係が一目で判別可能。\n- **独立した 2 軸の地域化**: アクセシブル名は `locale` (`\"en\"` [既定] / `\"ja\"`) が選ぶ凍結カタログ (`PERIOD_SLIDER_LABEL_CATALOGS`) と `labels` の上書きから決まり、`DateSelector variant=\"dropdown\"` のポップアップにある `@aiquants/virtualscroll` のスクロールクロームも同じ言語で描かれます。日付表記の既定値は ISO 8601 で、`formatLocale` を渡せば `Intl.DateTimeFormat` 書式、フォーマッタ Props を渡せば任意書式になります。フォーマッタ Props はレールの 4 つもセレクタの `formatOption` も同一の `PeriodOptionFormatter` で、1 つのコールバックがパッケージの全テキスト面を賄います。`<input>` の `value` と `<option value>` は常に ISO 8601 (または生の数値) で、どちらの軸の影響も受けません。\n- **高いアクセシビリティ**: WAI-ARIA `slider` ロール、キーボード操作 (矢印キー, PageUp/Down, Home/End) 完全準拠 (Vernier ノギスハンドル含む)。\n- **`Shift` + ホイールによる平行移動**: スライダーの範囲領域 (レールの行・つまみとラベルが描かれる帯 — レール方向にもラベルの外縁まで — ・ステッパー) のどこでも `Shift` を押しながらホイールを回すと、選択がステッパーと同じ ±1 単位だけ平行移動します。インジケーターの真上である必要はありません。`Shift` 無しの素のホイールはページのスクロールのままで、ページのスクロールを奪うのは `Shift` 付きのホイールが使えるデルタを運んでいるときだけです (選択が端に着いていて結果的に何も動かない場合も、操作は範囲領域へ向けられているため奪います)。縦向きレールではレールの正方向が上のため符号が反転します。ノギスではポインターがトラック中心線のどちら側にあるかで段 (マクロレールならマクロ窓、ミクロレールならミクロ選択) が決まり、ステッパーの上ではクリックと同じミクロ選択が動きます。\n- **レールが描く位置だけを名乗り、そこだけを確定させる**: 離散ミクロレール (`microIsDiscrete`) は候補集合しか描かないため、つまみの位置・読み上げ値・ラベル・そして確定値がすべて同じ 1 規則 (候補があれば最近傍候補、無ければ窓へのクランプ) を読みます。つまみが描かれている場所と利用側が受け取る値が食い違いません。\n- **マクロ窓の両境界は対**: ノギスのミクロレールは、マクロつまみが名乗る期間をちょうど覆います。`macroRange` に期間の途中を指す日付を渡しても、開始側は先頭マクロ期間の先頭へ (`getMacroWindowStartDate`)、終了側は末尾マクロ期間の末日へ (`getMacroWindowEndDate`) 揃います (例: `2026-09-15`〜`2026-10-15` は `2026-09-01`〜`2026-10-31`)。丸めた窓が `[minDate, maxDate]` をはみ出す場合は定義域で切り落とされ (末尾の期間が `maxDate` の期間かそれより後なら、期間の末日を組まずに `maxDate` のミクロ単位の始まりで閉じるため、Date の表現範囲の最後のマクロ期間へ届く窓も描けます)、この交差は `resolveMacroWindow` が一手に引き受けます — レール・フックの収め込み・ミクロセレクタが同じ窓を読むため、どの経路も定義域外のミクロ日付を確定させません。\n\n## インストール\n\n```bash\npnpm add @aiquants/period-slider @aiquants/virtualscroll\n```\n\n`@aiquants/virtualscroll` は peer dependency です。`DateSelector` の `variant=\"dropdown\"` はポップアップの行をこのパッケージで仮想化して描くため、ホストが自分で導入し、同梱スタイルシート (`@aiquants/virtualscroll/styles/virtualscroll.css`、非 Tailwind ホストは `.standalone.css`) も読み込んでください (下の「スタイル読み込み」)。\n\n版ごとの変更と、版を上げるときの移行手順は同梱の `CHANGELOG.md` にあります (各版の「修正」「変更」「移行」「利用側の契約が変わる点」などの節)。\n\n`jsdom` でこのコンポーネントを描画するテストは、`jsdom` が実装していないブラウザ API のシムが要ります (`ResizeObserver`、`window.matchMedia`、`Element.prototype.setPointerCapture` / `releasePointerCapture` / `hasPointerCapture`)。`createPortal` で別文書 (`<iframe>` やポップアウトのウィンドウ) へ描く場合は、`Element.prototype` が文書ごとに別であるため、その文書の `Element` へも同じシムを載せてください (スライダー側は操作のリスナーもホイールの登録も、自分が描かれている文書の `window` へ張ります)。\n\n## 使用方法\n\n### スタイル読み込み\n\n本パッケージは 2 種類の CSS 成果物を出力します。ホスト環境に応じてどちらか一方のみを読み込んでください。\n\n```typescript\n// A. Tailwind CSS v4 プロジェクトの場合: パッケージ固有のコンポーネントクラスのみを読み込む\nimport \"@aiquants/period-slider/styles/period-slider.css\"\nimport \"@aiquants/virtualscroll/styles/virtualscroll.css\"\n\n// B. 非 Tailwind (スタンドアロン) 環境の場合: 自己完結 CSS を読み込む\nimport \"@aiquants/period-slider/styles/period-slider.standalone.css\"\nimport \"@aiquants/virtualscroll/styles/virtualscroll.standalone.css\"\n```\n\npeer dependency の `@aiquants/virtualscroll` のスタイルシートは、本パッケージの成果物には含まれません (2 つのパッケージの事前生成 CSS は連結では再現できないため)。`DateSelector` の `variant=\"dropdown\"` を使わないホストでも、読み込みは無害です。\n\n| 成果物 | 含まれるもの | 用途 |\n| :--- | :--- | :--- |\n| `styles/period-slider.css` | 手書きコンポーネントクラス (`.period-slider-*`) のみ。テーマ変数・ユーティリティ・preflight は含まない | ホスト側に Tailwind CSS v4 ビルドがある場合 |\n| `styles/period-slider.standalone.css` | テーマ変数・ユーティリティを同梱した自己完結スタイル | ホストに Tailwind ビルドが無い場合 |\n\n> [!IMPORTANT]\n> A を選ぶ場合、ホスト側の Tailwind エントリ CSS に次の 3 行が必須です。\n>\n> ```css\n> @import \"tailwindcss\";\n> @source \"../node_modules/@aiquants/period-slider/dist\";\n> @custom-variant dark (&:where(.dark, .dark *));\n> ```\n>\n> - `@source`: Tailwind CSS v4 は既定で `node_modules` を走査しないため、これが無いとパッケージが出力するユーティリティクラス (`grid`, `rounded-full`, `not-aria-disabled:hover:*`, `dark:*`, `forced-colors:*` 等の状態・バリアント付きのものを含む) が一切生成されず、コンポーネントが未装飾のテキストとして描画されます。\n> - `@custom-variant dark`: Tailwind CSS v4 の `dark:` は既定で `@media (prefers-color-scheme: dark)` にコンパイルされます。これが無いと `.dark` クラスでは切り替わらず、手書きクラスで配色を持つスライダー本体だけが暗転し、`dark:` ユーティリティで配色を持つ 3 セレクタ (`YearSelector`, `MonthSelector`, `DateSelector`) が明色のまま取り残されます。\n>\n> B のスタンドアロン CSS は自己完結のため `@source` 指定は不要ですが、ホストの Tailwind ビルドと混在させないでください (ユーティリティ層が二重定義になります)。\n\n### Localization (UI クローム言語 `locale` と `labels`)\n\n`PeriodSlider`・`YearSelector`・`MonthSelector`・`DateSelector` はいずれも次の 2 つの Props を受け取ります。\n\n| Prop | 型 | 既定 | 説明 |\n| :--- | :--- | :--- | :--- |\n| `locale` | `PeriodSliderLocale` (`\"en\"` \\| `\"ja\"`) | `undefined` (= `\"en\"`) | UI クローム言語。アクセシブル名と、`DateSelector variant=\"dropdown\"` のポップアップに埋め込まれた `@aiquants/virtualscroll` のスクロールクロームの言語を選ぶ。それ以外の値 (`\"ja-JP\"`・`\"EN\"`・`\"\"`・`null` 等) は `RangeError` |\n| `labels` | `PeriodSliderLabelOverrides` | `undefined` | `locale` のカタログへキー単位で重ねる上書き。各コンポーネントは自分のキーだけを読むため、1 つのオブジェクトをスライダーと全セレクタへ渡せる |\n\n- **`locale` と `formatLocale` は別の軸です**。`locale` は部品の名前の言語 (閉じた `\"en\"` / `\"ja\"`)、`formatLocale` は日付テキストの書式 (任意の BCP 47 タグ) です。`formatLocale=\"ja-JP\"` を渡しても名前は英語のまま、`locale=\"ja\"` を渡しても日付は ISO 8601 のままです。**言語ネゴシエーションは行いません**: `navigator.language` などからの対応付けはホストの責務です。\n- **日付の書式を `locale` へ渡さないでください**。`\"ja-JP\"` のようなタグは `RangeError` で止まりますが、`\"ja\"` / `\"en\"` は日付書式の BCP 47 タグとしても正当である一方、`locale` の受理値そのものでもあるため拒否されません。その場合、日付テキストは ISO 8601 のまま (`2024-01`) で、`\"ja\"` では部品の名前だけが切り替わり (`Previous month` → `前月`)、アクセシブル名や Intl 書式の日付を照合するテストは原因を示さずに失敗します。日付の書式は常に `formatLocale` へ渡し、部品の名前を日本語にしたいときだけ `locale=\"ja\"` を加えます。フックのオプションと `SelectorProps` も同じです。\n- `PeriodSliderLocale` は `@aiquants/virtualscroll` の `VirtualScrollLocale` そのものです。エンジンの 7 キーは `VIRTUAL_SCROLL_LABEL_CATALOGS` の値をそのまま再利用し、本パッケージでは書き直しません。\n\n```tsx\n// 名前は日本語、日付は ja-JP の Intl 書式 (2 つの軸を両方指定)\n<PeriodSlider mode=\"range\" unit=\"month\" locale=\"ja\" formatLocale=\"ja-JP\" minDate={minDate} maxDate={maxDate} range={range} onChangeRange={setRange} />\n\n// 1 つの labels を全部品へ渡す (各部品は自分のキーだけを読む)。インラインで書いても値が同じなら再描画しない\nconst labels = { rangeStart: \"調査開始月\", rangeEnd: \"調査完了月\", previousMonth: \"1 か月前\" } as const\n<PeriodSlider mode=\"range\" unit=\"month\" locale=\"ja\" labels={labels} {...rest} />\n<MonthSelector locale=\"ja\" labels={labels} {...selectorRest} />\n```\n\n#### カタログ (`PERIOD_SLIDER_LABEL_CATALOGS`)\n\n全 29 キー (エンジン 7 + 固有 22)。`PERIOD_SLIDER_LABEL_KEYS` はこの順の閉じたキー集合です。\n\n| キー | 読む部品 / 面 | `en` | `ja` |\n| :--- | :--- | :--- | :--- |\n| `scrollUp` | `DateSelector variant=\"dropdown\"` ポップアップの上矢印 | `Scroll up` | `上へスクロール` |\n| `scrollDown` | 同 下矢印 | `Scroll down` | `下へスクロール` |\n| `scrollLeft` | (横スクロールを持たないため描かれない) | `Scroll left` | `左へスクロール` |\n| `scrollRight` | (同上) | `Scroll right` | `右へスクロール` |\n| `scrollToTop` | (端移動ピルを有効にしないため描かれない) | `Top` | `先頭へ` |\n| `scrollToBottom` | (同上) | `Bottom` | `末尾へ` |\n| `noItems` | (選択肢 0 件ではポップアップを開かないため描かれない) | `No items` | `項目がありません` |\n| `rangeStart` | `PeriodSlider` range の下限つまみ | `Range start` | `期間の開始` |\n| `rangeEnd` | `PeriodSlider` range の上限つまみ | `Range end` | `期間の終了` |\n| `selectedDate` | `PeriodSlider` point のつまみ | `Selected date` | `選択日` |\n| `macroRangeStart` | ノギスのマクロ下限つまみ | `Macro range start` | `広域期間の開始` |\n| `macroRangeEnd` | ノギスのマクロ上限つまみ | `Macro range end` | `広域期間の終了` |\n| `microRangeStart` | ノギス (ミクロ期間形態) のミクロ下限つまみ | `Micro range start` | `詳細期間の開始` |\n| `microRangeEnd` | ノギス (ミクロ期間形態) のミクロ上限つまみ | `Micro range end` | `詳細期間の終了` |\n| `microSelectedDate` | ノギス (ミクロ時点形態) のミクロつまみ | `Micro selected date` | `詳細の選択日` |\n| `decrease` | `PeriodSlider` の `minDate` 方向ステッパー | `Decrease` | `前へ` |\n| `increase` | `PeriodSlider` の `maxDate` 方向ステッパー | `Increase` | `次へ` |\n| `previousYear` | `YearSelector` の ◀ | `Previous year` | `前年` |\n| `nextYear` | `YearSelector` の ▶ | `Next year` | `翌年` |\n| `yearSelect` | `YearSelector` の年セレクト | `Year` | `年` |\n| `previousMonth` | `MonthSelector` の ◀ | `Previous month` | `前月` |\n| `nextMonth` | `MonthSelector` の ▶ | `Next month` | `翌月` |\n| `monthSelect` | `MonthSelector` の年月セレクト / `input[type=\"month\"]` | `Month` | `年月` |\n| `previousDay` | `DateSelector` の ◀ | `Previous day` | `前日` |\n| `nextDay` | `DateSelector` の ▶ | `Next day` | `翌日` |\n| `dateSelect` | `DateSelector` の日付入力、`variant=\"dropdown\"` ではコンボボックスとポップアップの `listbox` の双方 | `Date` | `日付` |\n| `splitYear` | `DateSelector variant=\"split-dropdown\"` の年セレクト | `Year` | `年` |\n| `splitMonth` | 同 月セレクト | `Month` | `月` |\n| `splitDay` | 同 日セレクト | `Day` | `日` |\n\n`monthSelect` と `splitMonth` は `en` では同じ `Month` ですが、指す対象 (年月全体と月の部位) が違うため別キーです。\n\n#### 解決規則 (`resolvePeriodSliderLabels`)\n\n`resolvePeriodSliderLabels(locale, overrides)` は各部品が描画中に呼ぶ唯一の畳込み点で、公開もされています。\n\n- ロケールは `resolveVirtualScrollLocale` で解決します (`undefined` → `\"en\"`)。それ以外の非対応値は、エンジンの `RangeError` を `cause` に持つ `RangeError: [period-slider] locale is the UI language, not a BCP 47 tag (date formatting reads formatLocale): [virtualscroll] locale must be one of \"en\", \"ja\"; got ...` になり、`locale` へ取り違えて渡した日付書式タグの移し先 (`formatLocale`) を示します。\n- `overrides` が `undefined` ならカタログそのもの (同一参照) を返します。\n- それ以外は素のオブジェクト (プロトタイプが `Object.prototype` か `null`) だけを受け付け、**自身のプロパティだけ**を読みます。配列・クラスインスタンス・他オブジェクト継承・`null`・非オブジェクトは `RangeError` です。\n- 未知キーは `RangeError` です (`lowerAriaLabel` のような `*AriaLabel` の名前も、`labels` のキーではないため未知キーです)。値が `undefined` のキーはカタログ値のままです。\n- 与えた値は空白以外の文字を含む文字列でなければ `RangeError` です。エンジン 7 キーの検証は `resolveVirtualScrollLabels` 自身が行います。メッセージ中の拒否値は例外を投げない記述 (文字列は JSON、`null` は `null`、それ以外は `typeof`) で示されます。\n- 結果は凍結された新しいオブジェクトです。入力は変更しません。\n\n部品は解決結果を値で安定化します。`labels={{ ... }}` をインラインで書いても、文字列が同じ間はメモ比較器が再描画を起こさず、内蔵 VirtualScroll へ渡すエンジンラベルの同一性も保たれます。\n\n### 日付の表示書式 (`formatLocale`)\n\n`PeriodSlider`・`YearSelector`・`MonthSelector`・`DateSelector` はいずれも `formatLocale?: string` (BCP 47 言語タグ) を受け取ります。UI クローム言語の `locale` とは独立しています。\n\n| `formatLocale` | 組み込みの日付表記 |\n| :--- | :--- |\n| 未指定 (既定) | ロケール非依存の ISO 8601 表記。`unit=\"year\"` は `2025`、`unit=\"month\"` は `2025-01`、`unit=\"day\"` は `2025-01-15` (年は 4 桁ゼロ埋め) |\n| 指定 | `Intl.DateTimeFormat(formatLocale, options)` の出力。`options` は単位ごとに `year: { year: \"numeric\" }`、`month: { year: \"numeric\", month: \"2-digit\" }`、`day: { year: \"numeric\", month: \"2-digit\", day: \"2-digit\" }` |\n\nISO 8601 はフォールバックではなく、本パッケージの仕様上の既定値です。英語などの自然言語表記を既定にすると汎用パッケージへ 1 つの言語を焼き付けることになり、`Intl` の出力は ICU / Node のバージョン間で変化するためです。\n\n- **優先順位**: フォーマッタ Props (`PeriodSlider` の `formatLabel` / `formatMacroLabel` / `formatMicroLabel` / `formatAriaValueText`、`YearSelector` / `MonthSelector` / `DateSelector` の `formatOption`) が最優先、次に `formatLocale`、最後に ISO 8601 既定です。この 5 つは**すべて同じ型 `PeriodOptionFormatter`** で、同一の関数値をどのスロットへも渡せます ([1 つのフォーマッタで全テキスト面を決める](#1-つのフォーマッタで全テキスト面を決める-formatoption))。四半期表記だけはこの 3 段に乗りません (`formatLocale` の段を持ちません)。理由と書き方は [四半期表示](#四半期表示-暦四半期と年度四半期) を参照してください。\n- **地域化されるのは人間が読むテキストのみ**: `<input type=\"date\">` の `value` / `min` / `max` は常に `yyyy-MM-dd`、`<input type=\"month\">` は常に `yyyy-MM`、`DateSelector` の `variant=\"dropdown\"` が操作要素に持つ `data-value` は常に `yyyy-MM-dd`、`<option value>` は常に ISO 文字列 (`yyyy-MM`) または生の数値 (年セレクト、`variant=\"split-dropdown\"` の 3 セレクト) です。\n- **アクセシブル名は `formatLocale` では変わりません**: ボタン・セレクト・つまみの名称は UI クローム言語 (`locale` / `labels`) だけが決めます ([Localization](#localization-ui-クローム言語-locale-と-labels))。\n- **Fail Fast**: 空文字列や `Intl.DateTimeFormat` が受理しない値 (`\"en_US\"`、非文字列等) を渡した場合、既定の ISO へ黙って戻さず `RangeError` を送出します (メッセージは [実行時バリデーション](#実行時バリデーション-fail-fast) 参照)。`\"xx-YY\"` のように構造として妥当なタグは、対応する翻訳データが無くても受理されます。\n\n```tsx\n// 既定 (formatLocale 省略): ラベルは \"2024-03-10\"\n<PeriodSlider mode=\"point\" unit=\"day\" minDate={minDate} maxDate={maxDate} value={date} onChangePoint={setDate} />\n\n// formatLocale 指定: ラベルは ja-JP ロケールの \"2024/03/10\"\n<PeriodSlider mode=\"point\" unit=\"day\" formatLocale=\"ja-JP\" minDate={minDate} maxDate={maxDate} value={date} onChangePoint={setDate} />\n```\n\n#### 日本語 UI での表示\n\n`formatLocale=\"ja-JP\"` を渡すと、日本語ロケールの書式へ切り替わります (部品の名前も日本語にするには、別軸の `locale=\"ja\"` を併せて渡します)。`PeriodSlider` のラベルは `unit` に応じて `2024年` / `2024/01` / `2024/01/15`、`YearSelector` の選択肢は `2024年`、`MonthSelector` の選択肢は `2024/01`、`DateSelector` の選択肢は `2024/01/15`、`DateSelector` の `variant=\"split-dropdown\"` は `2024年` / `01月` / `15日` になります (`variant=\"date\"` はブラウザ標準の日付入力 UI のため、表示書式はブラウザのロケール設定が決めます)。\n\n`2024年01月15日` のような独自表記が必要な場合は、`formatLocale` ではなくフォーマッタ Props を渡してください。\n\n```tsx\nconst formatJapaneseDay = (date: Date): string => `${date.getFullYear()}年${String(date.getMonth() + 1).padStart(2, \"0\")}月${String(date.getDate()).padStart(2, \"0\")}日`\n\n<PeriodSlider mode=\"point\" unit=\"day\" formatLabel={formatJapaneseDay} minDate={minDate} maxDate={maxDate} value={date} onChangePoint={setDate} />\n```\n\n#### 1 つのフォーマッタで全テキスト面を決める (`formatOption`)\n\nレールと 3 セレクタは**同じ 1 つのコールバック型**でテキストを作ります。`PeriodSlider` の `formatLabel` / `formatMacroLabel` / `formatMicroLabel` / `formatAriaValueText` も、`YearSelector` / `MonthSelector` / `DateSelector` の `formatOption` も、いずれも `PeriodOptionFormatter` です。1 つの関数値をすべてへ渡せば、レールが `2025年度 第1四半期` と描いている隣でセレクタが `2025-04` と名乗る、という食い違いが起こりません。\n\n```ts\ntype PeriodOptionScope = \"period\" | \"part\"\ntype PeriodOptionFormatter = (date: Date, unit: PeriodSliderUnit, scope: PeriodOptionScope) => string\n```\n\n- `date` は**その面が表す日付**です。面が所有する単位の先頭へ正規化され、所有しない細かい部位は 1 に固定されます。`scope: \"part\"` は自分の部位より粗い部位だけを保持値から取り、細かい部位は 1 に固定します (年は 1 月 1 日、月は当月 1 日、日は保持中の年月とその日)。**保持中の細かい部位を混ぜません** — 混ぜると、境界の異なる暦で同じ `<select>` の別々の値が同じ文字になります (下の「既知の制約」)。Invalid Date が渡ることはありません。確定値でない唯一の面はレールのホバーツールチップで、そこではポインタ下の日付が渡ります。\n- `unit` と `scope` は**ウィジェットが与えます**。利用側が単位を言い当てるラッパーを書く必要はなく、年・月・日のどの面かは引数から判ります。\n- `scope: \"period\"` はその操作要素の値そのもの (年・月・日それぞれの選択肢 1 件と、畳んだ表示)、`scope: \"part\"` は `variant=\"split-dropdown\"` が横に 3 つ並べる部位の 1 つです。同じ `\"month\"` でも、前者は「年月全体」、後者は「月の部位」を指します。組み込みの段はこの 2 つを別の書式で描きます。\n\n| `scope` | `unit=\"year\"` | `unit=\"month\"` | `unit=\"day\"` |\n| :--- | :--- | :--- | :--- |\n| `\"period\"` (`formatLocale` 未指定) | `2025` | `2025-04` | `2025-04-15` |\n| `\"period\"` (`formatLocale=\"ja-JP\"`) | `2025年` | `2025/04` | `2025/04/15` |\n| `\"part\"` (`formatLocale` 未指定) | `2025` | `04` | `15` |\n| `\"part\"` (`formatLocale=\"ja-JP\"`) | `2025年` | `04月` | `15日` |\n\n面ごとの呼び出しは次の通りです。\n\n| コンポーネント / バリアント | 面 | `unit` | `scope` | `date` |\n| :--- | :--- | :--- | :--- | :--- |\n| `YearSelector` | 選択肢・畳んだ表示・境界外の保持年 | `\"year\"` | `\"period\"` | その年の先頭月 1 日 (`yearStartMonth` 準拠) |\n| `MonthSelector variant=\"dropdown\"` | 選択肢・畳んだ表示 | `\"month\"` | `\"period\"` | その月の 1 日 |\n| `MonthSelector variant=\"dropdown\"` | 集合外プレースホルダ | `\"month\"` | `\"period\"` | 保持中の日付 |\n| `MonthSelector variant=\"date\"` | ネイティブ入力 | — | — | **呼び出さない** |\n| `DateSelector variant=\"dropdown\"` | 仮想化された `role=\"option\"` 行 | `\"day\"` | `\"period\"` | その行の日付 |\n| `DateSelector variant=\"dropdown\"` | 操作要素の表示テキスト (畳んだ表示) | `\"day\"` | `\"period\"` | 保持中の日付 |\n| `DateSelector variant=\"split-dropdown\"` | 年の選択肢とプレースホルダ | `\"year\"` | `\"part\"` | その年の 1 月 1 日 |\n| `DateSelector variant=\"split-dropdown\"` | 月の選択肢とプレースホルダ | `\"month\"` | `\"part\"` | 保持中の年の、その月の 1 日 |\n| `DateSelector variant=\"split-dropdown\"` | 日の選択肢とプレースホルダ | `\"day\"` | `\"part\"` | 保持中の年月の、その日 |\n| `DateSelector variant=\"date\"` | ネイティブ入力 | — | — | **呼び出さない** |\n| ステッパー ◀▶ (3 セレクタ共通) | SVG の矢印 | — | — | **テキストノードを持たない** |\n| `PeriodSlider` | つまみラベル・ツールチップ・マクロ / ミクロレール・`aria-valuetext` | 各単位 | `\"period\"` | 各つまみの日付 (ホバーツールチップだけはポインタ下の日付) |\n\n基準日は表の日付そのもので、Date の表現範囲の端でも別の日へ寄せません。その日を組めない年 (-271821 年) の日付は、Props としても、以前の描画から保持している非制御の選択としても `variant=\"split-dropdown\"` が受け付けず (`RangeError`)、範囲の外で始まる月・日は選択肢に描かれないため、`formatOption` が Invalid Date を受け取ることはありません。暦に無い日 (月末を越えた日・タイムゾーンが飛ばした日) も選択肢に描かれないため、日の選択肢の基準日は常にその日です。\n\n`<select>` の畳んだ表示は選択中の `<option>` のテキストそのもの (HTML の規定) なので、一覧と畳んだ表示が食い違うことはありません。`DateSelector variant=\"dropdown\"` だけは一覧行と操作要素が別経路ですが、**同じ関数値へ同じ形の引数**を渡すため同じ文字列になります。\n\n返り値は画面に出るだけのテキストではありません。レールのつまみは同じ文字列を `aria-valuetext` として読み上げ、`variant=\"dropdown\"` のコンボボックスはそれを可視テキストである `value` として持ちます。**読み上げられる前提のテキストを返してください** — 記号や罫線だけのラベルは、晴眼者に見えている値がそのまま読み上げ不能になります。\n\n**フォーマッタが届かない先** (いずれも別の関数が別の経路で作ります):\n\n- すべての `aria-label` (◀▶・セレクト・コンボボックス・ポップアップの `listbox`、ポップアップのスクロールバーの矢印ボタン 2 つ)。これらは UI クローム言語の `locale` と `labels` が決めます ([Localization](#localization-ui-クローム言語-locale-と-labels))。矢印ボタンの名前 (`scrollUp` / `scrollDown`) は内蔵の `@aiquants/virtualscroll` へ転送され、常に `disabled` のためタブ順には入らず、支援技術がポップアップ内を辿ったときに現れます。\n- すべての機械可読値: `<option value>`、`variant=\"dropdown\"` の `data-value`、`<input type=\"date\">` / `<input type=\"month\">` の `value` / `min` / `max`。\n- `onChange` が渡す引数。表示を変えても発行される `Date` は 1 ミリ秒も動きません。\n\n**呼び出しすら行わない面**: `MonthSelector variant=\"date\"` と `DateSelector variant=\"date\"` です。ネイティブ入力の表示テキストはブラウザが所有し、DOM 上に差し込む場所がありません (`formatLocale` も同じ理由で届きません)。受け取って無視するだけで、例外にはなりません — `variant` を切り替えただけで落ちると、Props を 1 度設定して使い分ける形が壊れるためです。\n\n**先頭一致入力は表示書式に追従しません**。`DateSelector variant=\"dropdown\"` の打鍵は、`formatOption` が何を描いていても**先発グレゴリオ暦の `yyyy[MM[dd]]` の数字列**として解釈されます。`20250309` と打てば 2025-03-09 の行へ飛び、その行の表示が `2024年度 第4四半期 (2025/03/09)` であっても変わりません。表示テキストの前方一致照合は選択肢総数に比例する費用になり、1 打鍵あたり定数時間という保証を壊すため採用していません。\n\n**参照比較で再描画を判定するため、利用側でメモ化してください** (`allowedMonths` / `allowedDates` と同じ約束です)。JSX へインラインで書いた矢印関数は毎描画で同一性が変わり、選択肢ラベルの再計算を毎回起こします。モジュール直下の `const` か `useCallback` で固定してください。\n\n**一部の (`unit`, `scope`) だけを担当する場合は、残りを `formatOptionText` へ転送します**。引数順がコールバックと同一なので逐語転送でき、担当外の書式を手で書き直す必要はありません。「`undefined` を返したら既定」という形は採っていません (代替値連鎖になるためです)。\n\n```ts\nimport { formatOptionText, type PeriodOptionFormatter } from \"@aiquants/period-slider\"\n\n// 年の period 区分だけを自分で描き、残りは組み込みの段へそのまま渡す\nconst formatOption: PeriodOptionFormatter = (date, unit, scope) =>\n    unit === \"year\" && scope === \"period\" ? `${date.getFullYear()}年度` : formatOptionText(date, unit, scope, \"ja-JP\")\n\nformatOption(new Date(2025, 3, 1), \"year\", \"period\")  // \"2025年度\"\nformatOption(new Date(2025, 3, 1), \"month\", \"period\") // \"2025/04\"\nformatOption(new Date(2025, 3, 1), \"month\", \"part\")   // \"04月\"\n```\n\n#### フック利用時の `formatLocale` / `locale` / `labels`\n\nフック (`usePeriodSliderRange` 等) へ渡した `formatLocale`・`formatOption`・`locale`・`labels` は `sliderProps` と全 `SelectorProps` の両方へ配られます。フックへ 1 度渡せば、レールと隣のセレクタは同じ書式・同じ言語で描かれます。セレクタだけ別の値にしたい場合は、スプレッドの後ろで直接渡してください (後ろの指定が勝ちます)。\n\n```tsx\nconst { sliderProps, startSelectorProps } = usePeriodSliderRange({ unit: \"month\", minDate, maxDate, initialRange, formatLocale: \"ja-JP\", locale: \"ja\" })\n<PeriodSlider {...sliderProps} />\n<MonthSelector {...startSelectorProps} />\n```\n\n#### 四半期表示 (暦四半期と年度四半期)\n\n四半期だけは上の 3 段の優先順位に乗りません。**`formatLocale` の段が存在しない**ためです。ECMA-402 に四半期のフィールドが無く、`Intl.DateTimeFormat` は `quarter` オプションを受け取っても送出せず黙って捨てます (Node v24.16.0 / ICU 78.3 で実測)。\n\n```ts\nconst formatter = new Intl.DateTimeFormat(\"ja-JP\", { quarter: \"long\", year: \"numeric\" })\n\nformatter.resolvedOptions()\n// { locale: \"ja-JP\", calendar: \"gregory\", numberingSystem: \"latn\", timeZone: \"Asia/Tokyo\", year: \"numeric\" }\n// -> quarter は解決結果に残らない\nformatter.format(new Date(2025, 3, 1)) // \"2025年\" (四半期はどこにも現れない)\nIntl.supportedValuesOf(\"unit\").includes(\"quarter\") // false\n```\n\n履行できない引数は置かない方針のため、四半期の 2 関数は `formatLocale` を受け取りません。\n\n| 関数 | シグネチャ | 返り値 |\n| :--- | :--- | :--- |\n| `resolveQuarter` | `(d: Date, yearStartMonth: number) => PeriodQuarter` | `{ year, quarter, startDate }` の四半期座標 |\n| `formatQuarterLabel` | `(d: Date, yearStartMonth: number) => string` | `\"2025-Q1\"` 形式のロケール非依存文字列 |\n\n- **`yearStartMonth` は 2 関数とも必須です**。年を扱う 8 つのヘルパー (`normalizeDateByUnit` 等) が `= 0` を持つのとは意図的に違えています。非暦年の四半期を扱えることがこの API の目的であり、省略を暦四半期として黙って解釈すると、年度四半期のつもりの呼び出しが 1 四半期ずれたまま通ってしまうためです。\n- **この `yearStartMonth` は関数自身の引数であり、スライダーの同名 Props を読むものではありません**。年度レール (`yearStartMonth={3}`) 上の暦四半期も、暦年レール上の年度四半期も、どちらも表現できます。\n- **返る文字列はロケール非依存ですが ISO 8601 ではありません**。ISO 8601 が定めるのは暦日・年間通日・週日付の 3 形式だけで、四半期の表記はありません。\n\n`2025年度 第2四半期` のような地域化した表記は、`resolveQuarter` から利用側が組み立てます。年は必ず `year` から取ってください。1 月境界を跨ぐ四半期では `startDate.getFullYear()` と一致しません (`yearStartMonth` が `3` のとき `2026-01-15` は `year: 2025` / `startDate: 2026-01-01`)。\n\n```tsx\nimport { resolveQuarter } from \"@aiquants/period-slider\"\n\nconst FISCAL_YEAR_START_MONTH = 3\n\nconst formatFiscalQuarterJa = (date: Date): string => {\n    const { year, quarter } = resolveQuarter(date, FISCAL_YEAR_START_MONTH)\n    return `${year}年度 第${quarter}四半期`\n}\n\nformatFiscalQuarterJa(new Date(2026, 0, 15)) // \"2025年度 第4四半期\"\n```\n\n年の部分だけは `formatLocale` に従わせられます。年ラベルと同じ公開経路 (`normalizeDateByUnit` を通した `formatLabel(\"year\", ...)`) を使うと、`Q` の綴りだけがロケール非依存のまま残ります。\n\n```tsx\nimport { formatLabel, normalizeDateByUnit, resolveQuarter } from \"@aiquants/period-slider\"\n\nconst formatQuarterWithLocale = (date: Date, formatLocale?: string): string => {\n    const { quarter } = resolveQuarter(date, FISCAL_YEAR_START_MONTH)\n    // 年の切り出しを自前で書くと、年ラベルと四半期ラベルが年について食い違い得る\n    const year = formatLabel(\"year\", normalizeDateByUnit(\"year\", date, FISCAL_YEAR_START_MONTH), undefined, formatLocale)\n    return `${year} Q${quarter}`\n}\n\nformatQuarterWithLocale(new Date(2025, 3, 1))          // \"2025 Q1\"\nformatQuarterWithLocale(new Date(2025, 3, 1), \"ja-JP\") // \"2025年 Q1\"\n```\n\n##### 1 つのコールバックをレールと 3 セレクタへ渡す\n\n`formatLabel` と `formatOption` は同じ `PeriodOptionFormatter` なので、**ページ全体で 1 つの関数値**を作り、レールにもセレクタにも同じものを渡せます。自分で描かない `scope: \"part\"` は `formatOptionText` へ逐語転送します。\n\n```tsx\nimport {\n    DateSelector,\n    MonthSelector,\n    PeriodSlider,\n    YearSelector,\n    formatOptionText,\n    resolveQuarter,\n    type PeriodOptionFormatter,\n} from \"@aiquants/period-slider\"\n\nconst FISCAL_YEAR_START_MONTH = 3\n\n// モジュール直下に置いて同一性を固定する (インラインの矢印関数は毎描画で別物になる)\nconst formatFiscalPeriod: PeriodOptionFormatter = (date, unit, scope) => {\n    // 分割セレクトの 3 部位は自分で描かず、組み込みの段へそのまま渡す\n    if (scope === \"part\") return formatOptionText(date, unit, scope, \"ja-JP\")\n    const { year, quarter } = resolveQuarter(date, FISCAL_YEAR_START_MONTH)\n    if (unit === \"year\") return `${year}年度`\n    if (unit === \"month\") return `${year}年度 第${quarter}四半期`\n    return `${year}年度 第${quarter}四半期 (${formatOptionText(date, \"day\", \"period\", \"ja-JP\")})`\n}\n\nformatFiscalPeriod(new Date(2026, 0, 1), \"year\", \"period\")   // \"2025年度\"\nformatFiscalPeriod(new Date(2026, 0, 1), \"month\", \"period\")  // \"2025年度 第4四半期\"\nformatFiscalPeriod(new Date(2025, 4, 15), \"day\", \"period\")   // \"2025年度 第1四半期 (2025/05/15)\"\nformatFiscalPeriod(new Date(2025, 4, 15), \"month\", \"part\")   // \"05月\"\n```\n\n```tsx\n<PeriodSlider\n    mode=\"point\"\n    unit=\"month\"\n    yearStartMonth={FISCAL_YEAR_START_MONTH}\n    minDate={new Date(2025, 3, 1)}\n    maxDate={new Date(2026, 2, 31)}\n    value={month}\n    formatLabel={formatFiscalPeriod}\n    onChangePoint={setMonth}\n/>\n\n{/* 選択肢は \"2026年度\" / \"2025年度\" / \"2024年度\" */}\n<YearSelector\n    value={month}\n    minYear={2024}\n    maxYear={2026}\n    yearStartMonth={FISCAL_YEAR_START_MONTH}\n    formatOption={formatFiscalPeriod}\n    onChange={setMonth}\n/>\n\n{/* 選択肢は \"2025年度 第2四半期\" (2025-09 〜 2025-07) と \"2025年度 第1四半期\" (2025-06 〜 2025-04) */}\n<MonthSelector\n    variant=\"dropdown\"\n    value={month}\n    minDate={new Date(2025, 3, 1)}\n    maxDate={new Date(2025, 8, 30)}\n    formatOption={formatFiscalPeriod}\n    onChange={setMonth}\n/>\n\n{/* 3 部位は \"2025年\" / \"05月\" / \"15日\" */}\n<DateSelector\n    variant=\"split-dropdown\"\n    value={day}\n    minDate={new Date(2025, 3, 1)}\n    maxDate={new Date(2025, 5, 30)}\n    formatOption={formatFiscalPeriod}\n    onChange={setDay}\n/>\n```\n\n`formatAriaValueText` を省略すれば、読み上げにも同じ文字列が流れます (上の `PeriodSlider` は 2025-05 を選択中に `aria-valuetext=\"2025年度 第1四半期\"` を持ちます)。`DateSelector variant=\"dropdown\"` へ同じ関数を渡すと、行も操作要素も `2025年度 第1四半期 (2025/05/15)` になり、`data-value` は `2025-05-15` のままです。\n\n> [!WARNING]\n> **`unit=\"month\"` の四半期ラベルは、3 つ並ぶ月が同じ文字列になります。** 上の `MonthSelector` は 2025-04 / 2025-05 / 2025-06 の 3 選択肢がすべて `2025年度 第1四半期` です (`<option value>` は `2025-04` / `2025-05` / `2025-06` のまま区別されるので、選択そのものは壊れません)。四半期を 1 行 1 件で選ばせたい場合は、四半期の開始月だけを `allowedMonths` へ渡してください。\n\n```tsx\n// 各四半期の開始月だけを候補にすると、選択肢と表示が 1 対 1 になる\nconst quarterStarts = useMemo(\n    () => [0, 3, 6, 9].map((offset) => new Date(2025, FISCAL_YEAR_START_MONTH + offset, 1)),\n    [],\n)\n\n// 選択肢は \"2025年度 第4四半期\" (2026-01) / 第3 (2025-10) / 第2 (2025-07) / 第1 (2025-04) の 4 件\n<MonthSelector variant=\"dropdown\" value={month} allowedMonths={quarterStarts} formatOption={formatFiscalPeriod} onChange={setMonth} />\n```\n\n`PeriodQuarter` の各フィールド、`yearStartMonth` ごとの出力表、例外の契約は [公開ユーティリティ関数](#公開ユーティリティ関数) にまとめてあります。\n\n### ゼロ・ボイラープレート React フック連携 (`usePeriodSliderRange`)\n\nステート管理・単一要素ミューテータ・セレクタ連動を 1 行で完結できます。\n\n```tsx\nimport { PeriodSlider, MonthSelector, usePeriodSliderRange } from \"@aiquants/period-slider\"\n\nexport function FastRangeExample() {\n    const { sliderProps, startSelectorProps, endSelectorProps } = usePeriodSliderRange({\n        unit: \"month\",\n        initialRange: [new Date(2024, 0, 1), new Date(2024, 11, 1)],\n        minDate: new Date(2020, 0, 1),\n        maxDate: new Date(2025, 11, 1),\n        colorScheme: \"indigo-amber\",\n    })\n\n    return (\n        <div className=\"flex items-center gap-8\">\n            <MonthSelector {...startSelectorProps} />\n            <PeriodSlider {...sliderProps} className=\"flex-1\" />\n            <MonthSelector {...endSelectorProps} />\n        </div>\n    )\n}\n```\n\n### PeriodSlider (Range モード: タプル直接指定)\n\n```tsx\nimport { PeriodSlider } from \"@aiquants/period-slider\"\nimport { useState } from \"react\"\n\nexport function Example() {\n    const [range, setRange] = useState<[Date, Date]>([\n        new Date(2024, 0, 1),\n        new Date(2024, 11, 1),\n    ])\n\n    return (\n        <PeriodSlider\n            mode=\"range\"\n            unit=\"month\"\n            minDate={new Date(2020, 0, 1)}\n            maxDate={new Date(2025, 11, 1)}\n            range={range}\n            onChangeRange={(lower, upper) => setRange([lower, upper])}\n            labelPosition=\"top\"\n            autoSlantLabels={true}\n        />\n    )\n}\n```\n\n### PeriodSlider (Point モード)\n\n```tsx\nimport { PeriodSlider } from \"@aiquants/period-slider\"\nimport { useState } from \"react\"\n\nexport function PointExample() {\n    const [date, setDate] = useState<Date>(new Date(2024, 5, 1))\n\n    return (\n        <PeriodSlider\n            mode=\"point\"\n            unit=\"month\"\n            minDate={new Date(2020, 0, 1)}\n            maxDate={new Date(2025, 11, 1)}\n            value={date}\n            labelPosition=\"top\"\n            onChangePoint={(nextDate) => setDate(nextDate)}\n        />\n    )\n}\n```\n\n### PeriodSlider (Vernier ノギス 2 段スケール一体型モード)\n\n広域期間 (例: 数年〜十数年) の中から極小期間 (例: 数日〜数ヶ月) を精密に選択する場合に適した、ノギス型 2 段スケール一体型スライダーです。上側 (マクロ) で全体期間の表示窓を定め、下側 (ミクロ) でその表示窓を 100% に拡大した精密な選択を行います。\n\n```tsx\nimport { PeriodSlider } from \"@aiquants/period-slider\"\nimport { useState } from \"react\"\n\nexport function VernierExample() {\n    // マクロ側の表示窓 (2023 年〜2025 年)\n    const [macroRange, setMacroRange] = useState<[Date, Date]>([\n        new Date(2023, 0, 1),\n        new Date(2025, 0, 1),\n    ])\n    // ミクロ側の最終確定選択期間 (2023 年 6 月〜11 月)\n    const [microRange, setMicroRange] = useState<[Date, Date]>([\n        new Date(2023, 5, 1),\n        new Date(2023, 10, 1),\n    ])\n\n    return (\n        <PeriodSlider\n            mode=\"vernier\"\n            unit=\"month\"\n            minDate={new Date(2010, 0, 1)}\n            maxDate={new Date(2026, 11, 31)}\n            macroRange={macroRange}\n            onChangeMacroRange={(lower, upper) => setMacroRange([lower, upper])}\n            microRange={microRange}\n            onChangeMicroRange={(lower, upper) => setMicroRange([lower, upper])}\n            vernierOrientation=\"macro-top\"\n            showVernierProjection={true}\n            showVernierTicks={true}\n            showHairline={true}\n        />\n    )\n}\n```\n\nマクロ・ミクロ両段のラベルと `aria-valuetext` は、つまみ位置と `aria-valuenow` を決めるのと同一の符号値から復元した `Date` を整形します。したがって `macroUnit=\"month\"` で `macroRange` に月の途中の日付を渡しても、ラベルは常に `aria-valuenow` と一致します。対の 2 つの符号値が一致したとき (例: 同一マクロ単位内に収まる `macroRange`) は、同一文字列のラベルを 2 枚描かず 1 枚へ畳みます (下記 DOM 契約の `data-duplicate`)。\n\n### PeriodSlider (Vernier ノギス × 時点選択)\n\n数年の定義域から 1 か月・1 日を「1 点だけ」指す画面向けに、ノギスのミクロレールを単一つまみにした形態です。マクロ窓で定義域を絞ってからミクロレールで精密に指す操作は期間選択と同じで、違いはミクロ側が期間ではなく時点であることだけです。\n\nミクロ側に `microValue` (制御) または `defaultMicroValue` (非制御) を渡すと、この形態になります。\n\n```tsx\nimport { PeriodSlider } from \"@aiquants/period-slider\"\nimport { useState } from \"react\"\n\nexport function VernierPointExample() {\n    // マクロ側の表示窓 (2020 年〜2026 年)\n    const [macroRange, setMacroRange] = useState<[Date, Date]>([\n        new Date(2020, 0, 1),\n        new Date(2026, 0, 1),\n    ])\n    // ミクロ側の確定時点 (2023 年 6 月)\n    const [basisMonth, setBasisMonth] = useState<Date>(new Date(2023, 5, 1))\n\n    return (\n        <PeriodSlider\n            mode=\"vernier\"\n            unit=\"month\"\n            macroUnit=\"year\"\n            microUnit=\"month\"\n            minDate={new Date(2015, 0, 1)}\n            maxDate={new Date(2030, 11, 31)}\n            macroRange={macroRange}\n            onChangeMacroRange={(lower, upper) => setMacroRange([lower, upper])}\n            microValue={basisMonth}\n            onChangeMicroPoint={setBasisMonth}\n        />\n    )\n}\n```\n\n時点形態の契約は次のとおりです。\n\n- ミクロレールのつまみは 1 つ (`data-handle-type=\"micro-point\"`) で、`role=\"slider\"` はマクロ 2 つと合わせて 3 つになります。既定のアクセシブル名は `\"Micro selected date\"` (`locale=\"ja\"` では `詳細の選択日`) で、`labels.microSelectedDate` で上書きできます (point モード用の `selectedDate` は読みません)。\n- ミクロ側の接続バー (`period-slider-connect-micro`) は描きません。幅を持たない選択を帯で表すと「満タンの期間」に見え、掴める帯まで生えてしまうためです。マクロ窓の帯は残ります。\n- `aria-valuemin` / `aria-valuemax` はミクロレールの可動端で、`aria-valuenow` は選択時点そのものです。期間形態のように相手のつまみで塞がれることはありません。可動端は連続レールではマクロ窓で切り出した範囲の両端、離散レールでは**窓が含む候補集合の両端**です (レールが決して置かない値を読み上げないため。ステッパーの可否も同じ縁で決まります)。\n- キーボードは `mode=\"point\"` と同じく左右対称です。`←` `→` で ±1 ミクロ単位、`PageUp` / `PageDown` で ±5、`Home` / `End` でレールの両端へ届きます。動けない押下はコールバックを発火しません。\n- ステッパーは ±1 ミクロ単位で、レールの端に着いた側だけが使用不可 (`aria-disabled=\"true\"`、フォーカスは保持) になります。\n- マクロ窓を掴んで動かすと時点も同じ暦差分だけ平行移動し、窓の端を動かして時点が窓の外に出る場合は窓の内側へ収まります。\n- `microIsDiscrete` / `microAllowedDates` は期間形態と同じく併用でき、キーボードもステッパーも候補集合の上だけを歩きます。\n\n### PeriodSlider (垂直レイアウト)\n\n`isVertical={true}` を指定することで、縦向き (下部が最小日付、上部が最大日付) のスライダーとして表示できます。\n\n> [!NOTE]\n> ルート要素はグリッドで、トラックの長さはルート要素の高さ − 104px (ステッパーの当たり判定の予約 19px + ボタン 22px + 間隔 11px を上下で)、`showStepper={false}` では高さ − 44px (丸つまみの当たり判定のはみ出しをルートが確保する分を上下で) です。ホストが高さを与えなければトラックは 0px に潰れるため、`className` で高さを与えてください。ブロックレベルのルート要素は親の幅いっぱいに広がるため、幅は `w-fit` などで内容へ合わせます (下の例のように `flex` の子にすれば内容幅になります)。\n\n```tsx\nimport { PeriodSlider } from \"@aiquants/period-slider\"\nimport { useState } from \"react\"\n\nexport function VerticalExample() {\n    const [range, setRange] = useState<[Date, Date]>([\n        new Date(2024, 2, 1),\n        new Date(2024, 8, 1),\n    ])\n\n    return (\n        <div className=\"flex items-center justify-center p-4\">\n            <PeriodSlider\n                mode=\"range\"\n                unit=\"month\"\n                isVertical={true}\n                className=\"h-60\"\n                minDate={new Date(2024, 0, 1)}\n                maxDate={new Date(2024, 11, 31)}\n                range={range}\n                onChangeRange={(lower, upper) => setRange([lower, upper])}\n            />\n        </div>\n    )\n}\n```\n\n### PeriodSlider (離散日付スナップ & 目盛表示)\n\n実データが存在する離散日付のみを選択対象とし、トラック上に目盛線を表示します。`allowedDates` を指定する場合も `minDate` / `maxDate` は必須で、範囲外の要素は除外されます。\n\n```tsx\nimport { PeriodSlider } from \"@aiquants/period-slider\"\nimport { useState } from \"react\"\n\nconst discreteDates = [\n    new Date(2024, 0, 15),\n    new Date(2024, 1, 14),\n    new Date(2024, 2, 18),\n    new Date(2024, 3, 22),\n    new Date(2024, 4, 10),\n]\n\nexport function DiscreteExample() {\n    const [point, setPoint] = useState<Date>(discreteDates[0])\n\n    return (\n        <PeriodSlider\n            mode=\"point\"\n            unit=\"day\"\n            minDate={new Date(2024, 0, 1)}\n            maxDate={new Date(2024, 11, 31)}\n            allowedDates={discreteDates}\n            showTicks={true}\n            snapMode=\"time\"\n            value={point}\n            onChangePoint={(d) => setPoint(d)}\n        />\n    )\n}\n```\n\n### PeriodSlider (カスタムラベル & 独立 2 点選択)\n\n四半期表示などのカスタムフォーマット (`formatLabel`) や、2 点間の連結バーを非表示にする `hideConnectBar={true}` を組み合わせた設定例です。四半期の文字列はパッケージが公開する `formatQuarterLabel` で作ります (`Math.floor(month / 3)` を自前で書くと、年度運用へ移したときに年と四半期が食い違います)。\n\n```tsx\nimport { formatQuarterLabel, PeriodSlider } from \"@aiquants/period-slider\"\nimport { useCallback, useState } from \"react\"\n\nexport function CustomLabelExample() {\n    const [range, setRange] = useState<[Date, Date]>([\n        new Date(2024, 0, 1),\n        new Date(2024, 6, 1),\n    ])\n\n    // 暦四半期 (1-3 月が Q1): 2024-01-01 -> \"2024-Q1\"、2024-07-01 -> \"2024-Q3\"\n    const formatCalendarQuarter = useCallback((date: Date) => formatQuarterLabel(date, 0), [])\n\n    return (\n        <PeriodSlider\n            mode=\"range\"\n            unit=\"month\"\n            minDate={new Date(2023, 0, 1)}\n            maxDate={new Date(2025, 11, 31)}\n            range={range}\n            hideConnectBar={true}\n            formatLabel={formatCalendarQuarter}\n            tooltipStyle=\"balloon\"\n            onChangeRange={(lower, upper) => setRange([lower, upper])}\n        />\n    )\n}\n```\n\n同じレールへ年度四半期 (4 月開始) を載せる場合も、変えるのは `formatQuarterLabel` の第 2 引数だけです。レールの構成 (`unit` / `minDate` / `maxDate`) は 1 文字も変わりません。\n\n```tsx\nimport { formatQuarterLabel, PeriodSlider } from \"@aiquants/period-slider\"\nimport { useCallback, useState } from \"react\"\n\nconst FISCAL_YEAR_START_MONTH = 3\n\nexport function FiscalQuarterLabelExample() {\n    const [range, setRange] = useState<[Date, Date]>([\n        new Date(2024, 0, 1),\n        new Date(2024, 6, 1),\n    ])\n\n    // 年度四半期 (4-6 月が Q1): 2024-01-01 -> \"2023-Q4\"、2024-07-01 -> \"2024-Q2\"\n    const formatFiscalQuarter = useCallback((date: Date) => formatQuarterLabel(date, FISCAL_YEAR_START_MONTH), [])\n\n    return (\n        <PeriodSlider\n            mode=\"range\"\n            unit=\"month\"\n            minDate={new Date(2023, 0, 1)}\n            maxDate={new Date(2025, 11, 31)}\n            range={range}\n            hideConnectBar={true}\n            formatLabel={formatFiscalQuarter}\n            tooltipStyle=\"balloon\"\n            onChangeRange={(lower, upper) => setRange([lower, upper])}\n        />\n    )\n}\n```\n\n同じ 2 つの日付が、2 つの四半期系で次のように分かれます。\n\n| 日付 | `formatQuarterLabel(date, 0)` | `formatQuarterLabel(date, 3)` |\n| :--- | :--- | :--- |\n| `2024-01-01` | `\"2024-Q1\"` | `\"2023-Q4\"` |\n| `2024-07-01` | `\"2024-Q3\"` | `\"2024-Q2\"` |\n\n上の 2 例はどちらも `yearStartMonth` Props を渡していません。`unit=\"month\"` のレールには動かすべき年の境界が無いためです (渡しても値の検証が走るだけで、つまみの位置もラベルも変わりません)。Props が効くのは年の格子を持つ構成 — `unit=\"year\"`、ノギスの `macroUnit=\"year\"`、年解像度の `allowedDates` — で、そこでもラベルの四半期系を決めるのは関数の第 2 引数のままです。\n\n```tsx\n// 年度レールの上に年度四半期を載せる (抜粋): 定数は 1 つ、渡す先は 2 つ、どちらも明示的\n<PeriodSlider\n    mode=\"vernier\"\n    unit=\"month\"\n    macroUnit=\"year\"\n    microUnit=\"month\"\n    yearStartMonth={FISCAL_YEAR_START_MONTH}\n    minDate={new Date(2020, 3, 1)}\n    maxDate={new Date(2026, 2, 31)}\n    macroRange={macroRange}\n    microRange={microRange}\n    formatMicroLabel={formatFiscalQuarter}\n    onChangeMacroRange={(lower, upper) => setMacroRange([lower, upper])}\n    onChangeMicroRange={(lower, upper) => setMicroRange([lower, upper])}\n/>\n```\n\n四半期フォーマッタを `formatMacroLabel` ではなく `formatMicroLabel` へ渡している点が要点です。マクロつまみが `macroUnit=\"year\"` のとき、フォーマッタが受け取る日付は必ずその年の先頭月なので、四半期は常に Q1 になります。\n\n### ポインター操作の約束\n\n- **1 つの操作が押下から解放まで値の持ち主です**: 掴んでいる間は、2 本目の指の押下も `Shift` + ホイールも矢印キーもステッパーも値を動かしません (ホイールはページのスクロールのままです)。ネイティブの `range` 入力と同じく、先に押した指のものです。\n- **取り消されたポインターは中断された位置を残します**: OS のジェスチャーや第 3 のタッチで `pointercancel` が届いても、ドラッグ開始前の値へは戻しません。途上の値は既に `onChange*` で渡っているためです。\n- **押すだけで動きます**: トラックを押して指を動かさずに離すと、最寄りの対象がその位置へ寄ります (ノギスのマクロ窓・ミクロ選択も同じ)。ドラッグを要しない単一ポインターの経路です (WCAG 2.2 SC 2.5.7)。\n- **使用不可の ◀▶ / ステッパーは押下をホストへ通しません**: 境界に着いたボタンは `aria-disabled=\"true\"` でフォーカスを保ったまま、押下を捕捉フェーズで飲み込みます (`preventDefault` + `stopPropagation`)。`mousedown` / `mouseup` / `click` は React のルートコンテナより下のもの (ボタン自身と、その間にあるホストの要素) へ 1 つも届かず、押下がフォーカスを奪うこともありません。クリック可能なカード・イベント委譲・外側押下による閉じ処理・クリック計測の中へ置いても、淡く塗られた矢印からホストのハンドラが発火することはありません。ネイティブの `disabled` と同じく `pointerdown` / `pointerup` は配送されます。\n\n### 配置の注意 (範囲領域と当たり判定)\n\n- **範囲領域はホストの押下を奪いません**: `Shift` + ホイールを受ける範囲領域 (ルート要素の箱に加えて、レールの上下のレーンと描かれたラベルの帯。レール方向にもラベルの外縁まで届きます) は何も描かず、ヒットテストにも一切答えません。レール方向の伸びは要素の箱ではなく持ち主判定の中だけにあるため、余裕のないスクロールコンテナへスクロールのはみ出しを足すこともありません。帯がホストの要素に重なっても、押下・ホバー・コンテキストメニューは何も変わりません。帯を空けるかどうかは、ラベルが読めるかどうかという見た目の判断です (レーンはレールの上下 22px、ノギスは 28px。ラベルの帯の厚みは描かれるラベルの寸法と傾きで変わり、日単位で接近した対では 90px を超えます)。\n- **範囲領域の持ち主は幾何で決まります**: スライダーを 2 つ近づけて範囲領域が重なっても、動くのはトラック中心線が近い方だけ (同距離なら先にマウントした方だけ) で、互いを動かすことはありません。描かれていないスライダー — `visibility: hidden` の下、`display: none` の下、畳んだアコーディオン (`max-height: 0; overflow: hidden` や `contain: paint`) の中 — はどの点も持たないため、そこに見えているホストの要素から操作を奪うこともありません。切り取りは CSS の規則どおり包含ブロックの連鎖でだけ効きます (`position: fixed` のスライダーは、`transform` などで包含ブロックを作らない祖先の `overflow` には切り取られず、浮いて描かれているとおり自分の領域を持ちます)。祖先の `clip-path` と `mask` が消した部分だけは扱いません (算出値から復元できないため、その方法で隠したスライダーは自分の点を持ち続けます)。逆に、スライダーの上へ重ねたホストの層 (ドロップダウンなど) の上でも `Shift` + ホイールはスライダーを動かします。ホストの層を優先させたい場合の手立ては 3 つあります。(a) ルート要素のインライン `--ps-label-reach-before` / `--ps-label-reach-after` / `--ps-label-reach-main` を読んで帯の厚みだけ避ける (この 3 つは `--ps-` 名前空間で唯一、**読み取り専用の出力として名前と意味を保つ**もので、ホストが読んでかまいません。上書きの口ではありません。ラベルが描かれていない側は変数自体が出ないため `var(--ps-label-reach-after, 0px)` の形で読みます)、(b) `labelPosition` で帯を反対側へ移す、(c) `tooltipStyle=\"hover\"` でラベルを描かせず、領域をレール周りのレーン (22px / ノギス 28px) へ縮める。いずれもスライダーの機能は落ちません。\n- **ドラッグ中はトラックがインライン変数を持ちます**: 押している間、トラック要素 (`[data-testid=\"period-slider-track\"]`) は `--ps-drag-*` (位置とラベルの配置) を、指を離した直後の収め戻しの間は `data-drag-snap=\"true\"` と `--ps-drag-snap-duration` を持ちます。いずれも内部のもので、上書き口ではありません。配布スタイルシートは位置と配置の 24 個をトラック自身へ `initial` として宣言するため、ホストが同名の変数を宣言してもスライダーの描画には届きません。`--ps-drag-snap-duration` には宣言を置きません — この変数が無い間は収め戻しの宣言そのものが算出時に無効となるため、既定時間で勝手に動き出すことがないからです (コンポーネントは属性と一緒に必ずインラインで書きます)。\n- **当たり判定のはみ出し**: スライダーの当たり判定がレール方向へ伸びる分は、ステッパーの表示・非表示のどちらでもルート要素が自分の箱の中へ確保するため、**レール方向には離隔が要りません**。残るのはセレクタの ◀▶ の四方 11px と、スライダーのレールの交差軸方向 (ステッパーを表示していれば 11px、`showStepper={false}` なら 18px。ルートの箱の厚みがボタンの箱 22px からレールの 8px へ薄くなる分だけ、丸つまみの 44px の当たり判定が外へ残ります) です。\n\n  | 境界 | 空ける量 (ステッパー表示 / 非表示) |\n  | :--- | ---: |\n  | セレクタの矢印 ⇄ 文字などの非操作要素 | 11px |\n  | セレクタ ⇄ セレクタ (縦横とも) | 22px |\n  | セレクタ ⇄ スライダー (レール方向に並べる) | 11px |\n  | セレクタ ⇄ スライダー (レールの交差軸方向に並べる) | 22px / 29px |\n  | スライダー ⇄ スライダー (レール方向) | 0px |\n  | スライダー ⇄ スライダー (交差軸方向) | 22px / 36px |\n  | スライダー ⇄ 文字などの非操作要素 (交差軸方向) | 11px / 18px |\n\n  空けないと、はみ出した当たり判定が隣の文字や部品の押下を受けます。押せるステッパーの当たり判定は `--aqps-z-handle-front` + 1 (既定 41) の層に載るため、`z-index` が 41 未満のホストの層に重なると、ステッパーの上でその層の押下を奪います。\n- **ルート要素のレイアウトはコンポーネントが持つ**: `PeriodSlider` のルート要素はグリッド (`grid` / `gap` / `place-items`)、セレクタのルート要素は内容幅の `inline-flex` です。`className` には寸法と余白 (`flex-1`、`h-60`、`w-fit` など) だけを与えてください。\n- **縦向きのスライダー**: トラックの長さはルート要素の高さから決まるため、高さを与えてください (与えないとトラックは 0px に潰れます)。幅は `w-fit` などで内容へ合わせます。\n- **セレクタだけを使う場合もスタイルシートを読み込む**: 44px の当たり判定は、配布スタイルシートがパッケージ自身の要素 (`.period-slider` と 1 単位移動ボタン) に宣言する内部変数を読みます。読み込まないと押せる範囲はボタンの箱 (22px) だけになります。\n\n### PeriodSlider Props\n\n#### 全モード共通 Props\n\n| プロパティ | 型 | 既定値 | 説明 |\n| :--- | :--- | :--- | :--- |\n| `mode` | `\"range\" \\| \"point\" \\| \"vernier\"` | (必須) | 操作モード (`range`: 2 点範囲選択, `point`: 1 点選択, `vernier`: ノギス 2 段スケール一体型) |\n| `unit` | `\"year\" \\| \"month\" \\| \"day\"` | (必須) | 時間解像度単位。`\"year\"` / `\"month\"` / `\"day\"` 以外 (`null` を含む) は `RangeError` |\n| `yearStartMonth` | `number` | `0` | `unit=\"year\"` (ノギスの `macroUnit=\"year\"` / `microUnit=\"year\"` を含む) の 1 年が始まる暦月 (0 始まり)。`3` は 4 月〜翌 3 月の会計年度、`9` は 10 月〜翌 9 月のでん粉年度。**年はその年の先頭月が属する暦年で名乗ります** (`yearStartMonth={3}` なら 2025-04-01 〜 2026-03-31 が「2025 年」)。`allowedDates` / `macroAllowedDates` の要素は「その日を含む年」として読まれるため、年解像度の候補は `new Date(y, yearStartMonth, 1)` で渡してください (1 月 1 日を渡すと `yearStartMonth={3}` では前年の候補になります)。`unit=\"month\"` / `\"day\"` のレールには年の境界が無いため位置は変わりません。`0`〜`11` の整数以外 (`12` / `-1` / `1.5` / `NaN` / `null`) は `RangeError`、未指定は仕様上の `0` (暦年) |\n| `minDate` | `Date` | (必須) | 選択可能最小日付。欠落・Invalid Date は `RangeError` |\n| `maxDate` | `Date` | (必須) | 選択可能最大日付。`minDate` より厳密に後であること。欠落・Invalid Date・逆転は `RangeError` |\n| `allowedDates` | `Date[]` | `undefined` | 離散スナップ対象日付配列 (指定時はこの日付のみにスナップ)。`[minDate, maxDate]` 外の要素は除外され、全要素が範囲外なら `RangeError`。省略は `undefined` だけで、`[]` はレールを連続のまま保つ。配列でない指定値 (`null`・単独の Date など) は `RangeError` (`PeriodSlider: allowedDates must be an array of Dates (received: null)`、ノギスの行が継いだときは `PeriodSlider: allowedDates (inherited by the micro row) must be an array of Dates (received: null)`)。どちらの `RangeError` も一覧を読む所で送出する。range / point は `unit` で読み、ノギスは自分の一覧を省略した離散の行 (`macroIsDiscrete` / `microIsDiscrete`) だけがその行の単位で読む (継ぐ行が無ければ読まず、検証もしない) |\n| `snapMode` | `\"index\" \\| \"time\"` | `\"index\"` | 離散スナップ時の配置方式 (`\"index\"`: 配列インデックス均等, `\"time\"`: 実時間比例)。実時間軸やチャートと位置を揃える場合は `\"time\"` を明示指定 |\n| `labelPosition` | `\"top\" \\| \"bottom\"` | `\"top\"` | 日付ラベルの表示位置 (スライダーの上側または下側) |\n| `autoSlantLabels` | `boolean` | `true` | 近接時にラベルを斜め〜90° に自動傾斜させて重なりを防止 (Range の 1 対とノギスの 2 対へ対ごとに適用。垂直レイアウトでは適用されない) |\n| `tooltipStyle` | `\"always\" \\| \"hover\" \\| \"balloon\"` | `\"always\"` | ツールチップの表示スタイル (`\"always\"`: 常時, `\"hover\"`: ポインター操作時, `\"balloon\"`: 吹き出し型)。`\"balloon\"` の宣言は `!important` 付きでユーティリティ層に勝つが、ノギスのツールチップだけは段の配色 (マクロ青 / ミクロ赤) を保ち、角丸・余白・文字サイズ・高さのみ吹き出し型になる |\n| `isVertical` | `boolean` | `false` | 垂直スライダー表示の有効化。**ホストが `className` で高さを与える必要があります** (トラックの長さはルート要素の高さ − 104px、`showStepper={false}` では高さ − 44px で、高さが無いと 0px に潰れて何も見えません) |\n| `hideConnectBar` | `boolean` | `false` | 範囲選択バー (ハイライト) を非表示にし、独立 2 点選択 UI として利用 |\n| `showTicks` | `boolean` | `false` | 離散モード時のトラック上の目盛線の表示有無 |\n| `showStepper` | `boolean` | `true` | ステッパーボタンの表示有無 (水平時は左右、垂直時は上下を指す矢印) |\n| `formatLabel` | `PeriodOptionFormatter` | `undefined` | 日付ラベル・ツールチップのカスタム表示文字列生成関数。`formatLocale` より優先される。3 セレクタの `formatOption` と同じ型のため、同一の関数値を両方へ渡せる (引数は `(date, unit, scope)` で `scope` は常に `\"period\"`。`(date) => string` も代入可能)。ノギスでは `formatMacroLabel` / `formatMicroLabel` 双方の既定値でもあるため、ここへ四半期フォーマッタを渡すと**マクロ側にも同じ関数が流れ**、マクロラベルが常に Q1 になる。ノギスで四半期を出すなら `formatMicroLabel` にだけ渡す |\n| `formatLocale` | `string` | `undefined` | 組み込み日付表記のロケール (BCP 47 言語タグ)。未指定はロケール非依存の ISO 8601 (`2025` / `2025-01` / `2025-01-15`)、指定時は `Intl.DateTimeFormat` 書式。空文字列・不正タグ・非文字列は `RangeError`。アクセシブル名の言語は変えない |\n| `locale` | `PeriodSliderLocale` | `undefined` (= `\"en\"`) | UI クローム言語 (`\"en\"` / `\"ja\"`)。つまみとステッパーのアクセシブル名を選ぶ。日付表記は変えない。非対応値は `RangeError` ([Localization](#localization-ui-クローム言語-locale-と-labels)) |\n| `labels` | `PeriodSliderLabelOverrides` | `undefined` | `locale` のカタログへのキー単位の上書き。スライダーが読むのは下の [アクセシブル名](#アクセシブル名-labels-のキー全モード共通) の 10 キー |\n| `disabled` | `boolean` | `false` | スライダーの無効化・非活性表示 |\n| `debounceMs` | `number` | `0` | 変更コールバック呼び出しのデバウンス時間 (ミリ秒)。`0` は即時発火 |\n| `colorScheme` | `PeriodSliderColorScheme` | `\"blue-rose\"` | カラーテーマプリセット (`\"blue-rose\"`, `\"indigo-amber\"`, `\"teal-emerald\"`, `\"violet-fuchsia\"`, `\"slate-sky\"`, `\"monochrome\"`) |\n| `className` | `string` | `\"\"` | 最外層コンテナ要素の追加 CSS クラス。ルート要素のレイアウト (`grid` / `gap` / `place-items`) はコンポーネントが持つため、寸法と余白だけを与える |\n| `style` | `React.CSSProperties` | `undefined` | 最外層コンテナ要素のインラインスタイル。`--aqps-` カスタムプロパティを 1 台単位で注入する正式な経路 (「CSS カスタムプロパティ (スタイリング API)」を参照) |\n\n#### Range モード専用 Props (`mode=\"range\"`)\n\n| プロパティ | 型 | 既定値 | 説明 |\n| :--- | :--- | :--- | :--- |\n| `range` | `[Date, Date]` | `undefined` | 制御 (Controlled) 時の選択期間タプル [開始, 終了]。指定時は本 Props が単一真実源 |\n| `defaultRange` | `[Date, Date]` | `undefined` | 非制御 (Uncontrolled) 時の初期選択期間タプル。`range` 指定時は無視。ノギスでマウントした木を `range` へ切り替えたときは (ミクロ選択の制御・非制御に依らず)、新しくマウントした場合と同じ位置から始め、平レールを最初に操作するまでこの値の変更に従う |\n| `onChangeRange` | `(lower: Date, upper: Date) => void` | `undefined` | 選択期間変更時コールバック |\n\n`range` / `defaultRange` を共に省略した場合、両つまみは `minDate` (離散時は候補日付の先頭) に重なり、幅ゼロの期間として描画されます (この状態のラベルは 1 枚へ畳まれます)。意図した期間は必ずどちらかで与えてください。\n\n#### Point モード専用 Props (`mode=\"point\"`)\n\n| プロパティ | 型 | 既定値 | 説明 |\n| :--- | :--- | :--- | :--- |\n| `value` | `Date` | `undefined` | 制御 (Controlled) 時の選択日付。指定時は本 Props が単一真実源 |\n| `defaultValue` | `Date` | `undefined` | 非制御 (Uncontrolled) 時の初期選択日付。`value` 指定時は無視。ノギスでマウントした木を `point` へ切り替えたときは (ミクロ選択の制御・非制御に依らず)、新しくマウントした場合と同じ位置から始め、平レールを最初に操作するまでこの値の変更に従う |\n| `onChangePoint` | `(value: Date) => void` | `undefined` | 選択日付変更時コールバック |\n\n`value` / `defaultValue` を共に省略した場合、選択日付は定義域下限 (`minDate`、離散時は候補日付の先頭) として描画されます。\n\n#### Vernier モード専用 Props (`mode=\"vernier\"`)\n\nノギスは**ミクロレールの形態で 2 つに分かれます**。下の表はどちらの形態にも共通する Props で、ミクロ選択そのものは続く 2 表のいずれか一方だけを使います。\n\n| プロパティ | 型 | 既定値 | 説明 |\n| :--- | :--- | :--- | :--- |\n| `macroRange` | `[Date, Date]` | (必須) | マクロ側の広域表示窓 [開始, 終了]。制御専用 (非制御版は存在しない)。欠落・2 要素タプル以外・Invalid Date・逆転 (`end` が `start` より前) は `RangeError`。`start` と `end` が同値の場合は 1 マクロ単位幅の窓として有効 |\n| `onChangeMacroRange` | `(lower: Date, upper: Date) => void` | `undefined` | マクロ窓変更時コールバック |\n| `macroUnit` | `\"year\" \\| \"month\" \\| \"day\"` | `unit` | マクロ側時間解像度単位 (異単位構成用)。`macroUnit` で `minDate` と `maxDate` が同じ単位へ丸められる定義域も、1 マクロ単位の定義域として描く。既定の `unit` は省略 (`undefined`) のときだけ。`null` を含む宣言外の値は `RangeError` |\n| `microUnit` | `\"year\" \\| \"month\" \\| \"day\"` | `unit` | ミクロ側時間解像度単位 (異単位構成用)。既定の `unit` は省略 (`undefined`) のときだけ。`null` を含む宣言外の値は `RangeError` |\n| `macroIsDiscrete` | `boolean` | `false` | マクロ側の離散スナップ有効化フラグ。離散にするのは `true` だけで、それ以外 (省略・`false`・`1` などの真偽値以外の値) の間は `macroAllowedDates` (省略時に継ぐ `allowedDates`) が参照されない。ノギスのフックも同じ規則で読む |\n| `microIsDiscrete` | `boolean` | `false` | ミクロ側の離散スナップ有効化フラグ。離散にするのは `true` だけで、それ以外 (省略・`false`・`1` などの真偽値以外の値) の間は `microAllowedDates` (省略時に継ぐ `allowedDates`) が参照されない。ノギスのフックも同じ規則で読む。`true` かつ現在のマクロ窓が候補を 1 つ以上含む間、ミクロレールは候補集合しか描かないため、位置・`aria-valuenow` / `aria-valuetext`・ラベル・**確定値**のすべてが最近傍候補へ解決される (ドラッグ・キーボード・ホイール・ステッパー・フックの収め込みで同一規則)。窓が候補を 1 つも含まない場合は窓内の連続値として振る舞う |\n| `macroAllowedDates` | `Date[]` | `allowedDates` | マクロ側の離散スナップ対象日付配列。`macroIsDiscrete={true}` との併用が必須。`allowedDates` を継ぐのは省略 (`undefined`) したときだけで、`null` は継がずに `RangeError: PeriodSlider: macroAllowedDates must be an array of Dates (received: null)` |\n| `microAllowedDates` | `Date[]` | `allowedDates` | ミクロ側の離散スナップ対象日付配列。`microIsDiscrete={true}` との併用が必須。`allowedDates` を継ぐのは省略 (`undefined`) したときだけで、`null` は継がずに `RangeError: PeriodSlider: microAllowedDates must be an array of Dates (received: null)`。候補はマクロ窓で切り出され、窓の外の日付へはキーボード・ポインターのいずれからも到達しない。窓内に候補が 1 件も残らない場合、ミクロレールは窓内の連続値として振る舞う |\n| `formatMacroLabel` | `PeriodOptionFormatter` | `formatLabel` | マクロ側ラベル・ツールチップのカスタム表示文字列生成関数。引数はつまみ位置・`aria-valuenow` と同一の符号値から復元した `macroUnit` 正規化済み `Date` であり、`macroRange` の生の値ではない (`macroUnit=\"month\"` なら常に月初、`\"year\"` なら常にその年の先頭月 1 日 (`yearStartMonth` が `0` なら元日)、`\"day\"` は暦日そのままで時刻が 0 時)。`macroUnit=\"year\"` では引数が必ず年の先頭月であるため、ここへ四半期フォーマッタを渡すと表示は常に Q1 になる (四半期は月・日解像度のミクロ側へ載せる) |\n| `formatMicroLabel` | `PeriodOptionFormatter` | `formatLabel` | ミクロ側ラベル・ツールチップのカスタム表示文字列生成関数。引数はつまみ位置と同一の `microUnit` 正規化済み `Date` (`microUnit=\"month\"` なら常に月初)。四半期ラベルはこの `microUnit=\"month\"` / `\"day\"` の側に載せる。`formatQuarterLabel` へ渡す `yearStartMonth` はその関数自身の引数であり、スライダーの `yearStartMonth` Props とは独立に選べる |\n| `vernierOrientation` | `\"macro-top\" \\| \"macro-bottom\" \\| \"macro-left\" \\| \"macro-right\"` | 水平時 `\"macro-top\"` / `isVertical` 時 `\"macro-left\"` | ノギスのレール配置。水平時は上下 (`macro-top` / `macro-bottom`)、垂直時は左右 (`macro-left` / `macro-right`) を指定 |\n| `showVernierProjection` | `boolean` | `true` | マクロ窓からミクロ全幅へ広がる半透明台形プロジェクション光の表示有無 |\n| `showVernierTicks` | `boolean` | `true` | 目盛線の表示有無。マクロレールに 20% 間隔で 4 本、ミクロレールに 10% 間隔で 9 本を等間隔に描画する |\n| `showHairline` | `boolean` | `true` | 半円つまみ先端の 1px 精密ヘアライン針の表示有無 |\n\n##### ミクロが期間の形態 (`PeriodSliderVernierRangeProps`)\n\n| プロパティ | 型 | 既定値 | 説明 |\n| :--- | :--- | :--- | :--- |\n| `microRange` | `[Date, Date]` | `undefined` | 制御時のミクロ選択期間タプル [開始, 終了]。指定時は本 Props が単一真実源となり、内部ステートは一切参照されない |\n| `defaultMicroRange` | `[Date, Date]` | `undefined` | 非制御時の初期ミクロ選択期間タプル。以降のミクロ操作はコンポーネント内部のステートが保持し、つまみは操作に追従する。`microRange` 指定時は無視 |\n| `onChangeMicroRange` | `(lower: Date, upper: Date) => void` | `undefined` | ミクロ選択期間変更時コールバック |\n\n`microRange` (制御) / `defaultMicroRange` (非制御) はいずれか一方が必須です。共に省略した場合は描画時に `RangeError` を送出し、ミクロ選択範囲を発明しません。両方を渡すと表示には制御の Props を使いますが、既定値も描画のたびに検証し、不正な値や定義域外の値は `RangeError` になります。\n\n##### ミクロが時点の形態 (`PeriodSliderVernierPointProps`)\n\n| プロパティ | 型 | 既定値 | 説明 |\n| :--- | :--- | :--- | :--- |\n| `microValue` | `Date` | `undefined` | 制御時のミクロ選択時点。指定時は本 Props が単一真実源となり、内部ステートは一切参照されない |\n| `defaultMicroValue` | `Date` | `undefined` | 非制御時の初期ミクロ選択時点。以降のミクロ操作はコンポーネント内部のステートが保持し、つまみは操作に追従する。`microValue` 指定時は無視 |\n| `onChangeMicroPoint` | `(value: Date) => void` | `undefined` | ミクロ選択時点変更時コールバック |\n\n`microValue` (制御) / `defaultMicroValue` (非制御) はいずれか一方が必須です。ミクロ選択を 1 つも渡さなければ、期間側・時点側の双方を名指しする `RangeError` を送出します。両方を渡すと表示には制御の Props を使いますが、既定値も描画のたびに検証し、不正な値や定義域外の値は `RangeError` になります。\n\n期間側の 3 Props と時点側の 3 Props は**相互排他**です。型では互いを `never` として宣言しているため同時指定はコンパイルエラーになり、JavaScript からの同時指定は描画時に `RangeError` で拒否します (黙ってどちらかを優先すると、渡したはずのコールバックが永久に鳴らない状態になるため)。\n\n#### アクセシブル名 (`labels` のキー、全モード共通)\n\n`PeriodSlider` のつまみとステッパーの名前は `locale` のカタログと `labels` から決まります ([Localization](#localization-ui-クローム言語-locale-と-labels))。\n\n| `labels` のキー | 既定 (`en` / `ja`) | 名指す部品 |\n| :--- | :--- | :--- |\n| `rangeStart` / `rangeEnd` | `Range start` / `期間の開始`、`Range end` / `期間の終了` | `mode=\"range\"` の下限・上限つまみ |\n| `selectedDate` | `Selected date` / `選択日` | `mode=\"point\"` のつまみ |\n| `macroRangeStart` / `macroRangeEnd` | `Macro range start` / `広域期間の開始`、`Macro range end` / `広域期間の終了` | ノギスのマクロ下限・上限つまみ |\n| `microRangeStart` / `microRangeEnd` | `Micro range start` / `詳細期間の開始`、`Micro range end` / `詳細期間の終了` | ノギス (ミクロ期間形態) のミクロ下限・上限つまみ |\n| `microSelectedDate` | `Micro selected date` / `詳細の選択日` | ノギス (ミクロ時点形態) のミクロつまみ |\n| `decrease` | `Decrease` / `前へ` | 値を `minDate` 方向へ 1 単位動かすステッパーボタン (水平時は左端の左向き矢印、垂直時は下端の下向き矢印) |\n| `increase` | `Increase` / `次へ` | 値を `maxDate` 方向へ 1 単位動かすステッパーボタン (水平時は右端の右向き矢印、垂直時は上端の上向き矢印) |\n\n読み上げ値 (`aria-valuetext`) は名前ではなく日付テキストで、次の Prop が決めます。\n\n| プロパティ | 型 | 既定値 | 説明 |\n| :--- | :--- | :--- | :--- |\n| `formatAriaValueText` | `PeriodOptionFormatter` | `undefined` | `aria-valuetext` の読み上げ文字列生成関数。未指定時は可視ラベルと同一の文字列 (ISO 8601、`formatLocale` 指定時は `Intl.DateTimeFormat` 書式)。ノギスでは可視ラベルと同じく、マクロ側に `macroUnit` 正規化済み、ミクロ側に `microUnit` 正規化済みの `Date` が渡される。**指定すると、`aria-valuetext` を組み立てる 6 か所すべてで可視ラベルの経路 (`formatScreenReaderLabel`) を短絡します**。四半期ラベルを表示しているなら、ここへ渡す文字列も**同じ `resolveQuarter` 呼び出し**から組み立ててください (省略すれば可視ラベルと一字一句同じ文字列が読み上げられます) |\n\nステッパーの 2 つの名称は配置ではなく値への作用で定義されています。同じボタンが水平レイアウトでは左、垂直レイアウトでは下に立つため、位置で命名すると意味が反転するからです。\n\n#### コールバック一覧\n\n各イベントに対するコールバックは 1 つだけ存在し、別名は提供されません。\n\n| コールバック | 発火モード | シグネチャ |\n| :--- | :--- | :--- |\n| `onChangePoint` | `point` | `(value: Date) => void` |\n| `onChangeRange` | `range` | `(lower: Date, upper: Date) => void` |\n| `onChangeMacroRange` | `vernier` (両形態) | `(lower: Date, upper: Date) => void` |\n| `onChangeMicroRange` | `vernier` (ミクロが期間の形態) | `(lower: Date, upper: Date) => void` |\n| `onChangeMicroPoint` | `vernier` (ミクロが時点の形態) | `(value: Date) => void` |\n\n#### DOM 契約 (テストフック)\n\nDOM 要素の特定は CSS クラス名ではなく `data-*` 属性で行います。クラス名はスタイリングの契約であり、予告なく変更されます。\n\n| フック | 対象 |\n| :--- | :--- |\n| `[data-mode=\"range\" \\| \"point\" \\| \"vernier\"]` | ルート要素。`data-unit` / `data-orientation` / `data-label-position` / `data-color-scheme` / `data-disabled` を併せ持つ。インライン `style` に `--ps-label-reach-before` / `--ps-label-reach-after` / `--ps-label-reach-main` (範囲領域の厚みとレール方向の伸びに使う実測値) を持つことがある。上書きの口ではないが、ホストが自分の層を避けるために**読む**ことは想定しており、名前と意味は保つ (配置の注意を参照) |\n| `[role=\"slider\"]` | すべてのつまみ。`aria-label` (既定 `\"Range start\"` / `\"Range end\"` / `\"Selected date\"` / `\"Macro range start\"` / `\"Macro range end\"` / `\"Micro range start\"` / `\"Micro range end\"` / `\"Micro selected date\"`) で個々のつまみを識別でき、`data-active` / `data-front` が操作状態を表す。個数はモードと形態で決まり、`range` は 2、`point` は 1、ノギスの期間形態は 4、ノギスの時点形態は 3 |\n| `[data-testid=\"period-slider-knob\"]` | `range` / `point` モードのつまみ本体 (円形ノブ)。つまみの位置・寸法の測定に用いる |\n| `[data-handle-type=\"macro-low\" \\| \"macro-high\" \\| \"micro-low\" \\| \"micro-high\" \\| \"micro-point\"]` | ノギスモードのつまみのみに付与 (`role=\"slider\"` との併用)。`micro-low` / `micro-high` はミクロが期間の形態、`micro-point` はミクロが時点の形態でのみ現れ、両者が同時に存在することはない。配置位置は `data-vernier-pos` (`top` / `bottom` / `left` / `right`) が持ち、配色を決める `data-handle-type` と直交する |\n| `[data-testid=\"period-slider-track\"]` | トラック (`data-vernier-orientation` でノギスのレール配置を判別) |\n| `[data-range-area]` | 範囲領域 (ルート要素の最初の子)。`Shift` + ホイールを受ける矩形そのもので、何も描かず `pointer-events: none` のためヒットテストにも答えない |\n| `button[aria-label]` 内の `svg[data-arrow=\"left\" \\| \"right\" \\| \"up\" \\| \"down\"]` | ステッパー (アクセシブル名は `labels` の `decrease` / `increase`、`type=\"button\"`) とその矢印の向き。矢印は色を持たず、ボタンの文字色 (`currentColor`) で塗られる (パッケージのスタイルシートも、ボタンや祖先のクラスも矢印を選ばない)。ホバーの文字色は不透明で、押せる矢印をホバーで使用不可の淡色へ落とさない。境界で動けない間はボタンが `aria-disabled=\"true\"` を持ち、フォーカスを保ちタブ順にも残ったまま押下を受け付けない。ネイティブの `disabled` は `disabled` Props でスライダー全体を無効にしたときだけ付く |\n| `[data-testid=\"period-slider-connect\"]` | 接続バー。ノギスでは `period-slider-connect-macro` / `period-slider-connect-micro` の 2 本 (ミクロが時点の形態では `period-slider-connect-micro` を描かない) |\n| `[data-testid=\"period-slider-tick\"]` | 目盛線と離散レールの候補点。ノギスモードでは `data-tick-scale=\"macro\" \\| \"micro\"` が併記され上下段を判別できる。塗りはパッケージのスタイルシートが 1 か所で持つ (レールの境界線と同じインク) |\n| `[data-testid=\"period-slider-hairline\"]` | ノギスの読み取りの針 (`showHairline` が真のときだけ描かれる)。線の中心がつまみの中心 = 値そのものに揃う |\n| `[data-testid=\"period-slider-hover-guide\"]` | ポインターオーバーレイ (点と追従ラベルを束ねる器)。`range` / `point` のみで、ノギスモードでは描かれない |\n| `[data-testid=\"period-slider-hover-dot\"]` | オーバーレイの点 (ポインター位置そのものを示す。重複時も表示され続ける) |\n| `[data-testid=\"period-slider-hover-tooltip\"]` | オーバーレイの追従ラベル。指している値がつまみの確定値と一致する間は `data-duplicate=\"true\"` が付いて `visibility: hidden` になる |\n| `[data-tooltip-style=\"always\" \\| \"hover\" \\| \"balloon\"]` | すべてのツールチップ (Range は 2 枚、Point は 1 枚、ノギスはミクロ期間形態が 4 枚・ミクロ時点形態が 3 枚)。`tooltipStyle=\"hover\"` ではツールチップ要素自体が描かれない。`range` / `point` のツールチップは `data-label-position` / `data-front` を併せ持つ (ノギスではこの 2 つは親つまみ側にある) |\n| `[data-slanted=\"true\"]` | 近接傾斜中のツールチップ。Range の 2 枚とノギスのミクロ期間形態の 4 枚が対象 (Point モードと、ノギスのミクロ時点形態のミクロラベルには付かない。いずれも離す相手が居ないため)。ノギスは対ごとに独立して傾くため、マクロ対とミクロ対で有無が違うのは正常。垂直レイアウトでは付かない |\n| `[data-duplicate=\"true\"]` | 同じ値が二重に描かれる側を隠す唯一の印。対象は 2 種類で、いずれも符号化値 (`aria-valuenow`) の厳密一致が条件。(1) 同じ値に重なった対のうち冗長な側のつまみラベル 1 枚 — 対は Range の下限 / 上限、ノギスのマクロ下限 / 上限、ノギスのミクロ期間形態のミクロ下限 / 上限の 3 つで、Point モードとノギスのミクロ時点形態には付かない。(2) 指している値がつまみの確定値と一致したときのオーバーレイの追従ラベル — こちらは Point モードでも付く (`tooltipStyle=\"hover\"` ではつまみのラベルが描かれず二重にならないため付かない) |\n| `[data-handle-type=\"macro-low\"] [data-tooltip-style]` | 個々のノギスラベル。ノギスのツールチップは親つまみ経由で特定する。水平レール (`macro-top` / `macro-bottom`) かつ `autoSlantLabels` 有効時はインライン `style` に `--ps-tooltip-tx` / `--ps-tooltip-ty` / `--ps-tooltip-rot` の 3 つを持ち (`--ps-tooltip-ty` はレール基準からの生のピクセル差分)、垂直レール (`macro-left` / `macro-right`)、`autoSlantLabels={false}`、およびミクロ時点形態のミクロラベルでは `style` 属性を持たない (時点には離す相手が居ないため傾斜計算そのものを行わない) |\n\n### 公開ユーティリティ関数\n\n`PeriodSlider` が内部で使う純粋関数のうち、次のものはパッケージのルート (`@aiquants/period-slider`) から公開されています。React に依存しないため、レールの外 (取得期間の算出、集計キーの生成など) でもそのまま使えます。\n\nセレクタの ◀▶ が期間・窓をどう動かすかの規則 (`resolveSelectorSteps` / `resolveVernierSelectorSteps`) も React に依存しない純粋関数です。契約は [セレクタの矢印を所有者が引き受ける](#セレクタの矢印を所有者が引き受ける-stepper-と-1-歩の規則) にまとめてあります。\n\n単位を受け取る公開関数 (`normalizeDateByUnit` / `encode` / `decode` / `addUnit` / `getMacroWindowStartDate` / `getMacroWindowEndDate` / `resolveMacroWindow` / `findNearestDateIndex` / `getSortedAllowedDates` / `formatLabel` / `formatScreenReaderLabel` / `formatOptionText` / `calculateConnectDragValues` / `resolveSelectorSteps` / `resolveVernierSelectorSteps`) は、`\"year\"` / `\"month\"` / `\"day\"` 以外の単位 (`null`・大文字違い・空文字列を含む。省略できない単位の引数では `undefined` も) を日として読まず、`RangeError: <関数名>: <引数名> must be one of \"year\", \"month\", \"day\" (received: ...)` で拒否します (`encode: unit must be one of \"year\", \"month\", \"day\" (received: \"decade\")`)。単位は `yearStartMonth`・日付・`amount`・候補の一覧より先、無効日付の短絡 (`formatLabel` / `formatScreenReaderLabel` / `formatOptionText` の `\"\"`) と早期 return (`findNearestDateIndex` / `getSortedAllowedDates` の空の一覧、`calculateConnectDragValues` の連続モード) より先に判定します。`resolveSelectorSteps` / `resolveVernierSelectorSteps` だけは、オプションがオブジェクトであること (`resolveVernierSelectorSteps` は `row` / `shows` も) を単位より先に判定します。`resolveSelectorSteps` の `stepUnit` が `unit` になるのは省略 (`undefined`) したときだけで、`null` は同じ `RangeError` です。\n\n日付は、どの部品・フック・公開関数も **Date 自身のゲッターではなく、時刻値をシステムのタイムゾーンで読みます** (年・月・日・四半期の判定、`addUnit` の加算、`formatLocale` を渡さない ISO と数字の表記。`formatLocale` を渡した Intl の表記と同じ読み方です)。自身のゲッターが別のタイムゾーンを名乗る Date の派生クラス (別のタイムゾーンで作った `@date-fns/tz` の `TZDate`、`@date-fns/utc` の `UTCDate` など) も、同じ時刻の素の `Date` と同じ年・月・日として扱います。別のタイムゾーンの暦の年・月・日を選ばせたいときは、その年・月・日に当たるシステムのタイムゾーンでの日付を渡してください。\n\n#### 表示テキスト — `formatOptionText` / `PeriodOptionFormatter` / `PeriodOptionScope`\n\n```ts\nexport type PeriodOptionScope = \"period\" | \"part\"\nexport type PeriodOptionFormatter = (date: Date, unit: PeriodSliderUnit, scope: PeriodOptionScope) => string\n\nexport declare const formatOptionText: (date: Date, unit: PeriodSliderUnit, scope: PeriodOptionScope, formatLocale?: string) => string\n```\n\n- `PeriodOptionFormatter` は、4 つのスライダー Props (`formatLabel` / `formatMacroLabel` / `formatMicroLabel` / `formatAriaValueText`) と 3 セレクタの `formatOption` に**共通の 1 つの型**です。面ごとの契約は [1 つのフォーマッタで全テキスト面を決める](#1-つのフォーマッタで全テキスト面を決める-formatoption) にまとめてあります。\n- **引数を減らした関数は今まで通り渡せます**。`(date: Date) => string` も `(date: Date, unit: PeriodSliderUnit) => string` も代入可能で、逆向き (3 引数の関数を 1 引数のスロットへ) だけがコンパイルエラーになります。`formatQuarterLabel` は `(Date, number) => string` で第 2 引数が単位ではなく `yearStartMonth` のため、`formatOption` へ**直接は渡せません** (型が拒否します)。四半期は上のレシピのように `resolveQuarter` から組み立ててください。\n- `PeriodOptionScope` は `\"period\"` (その操作要素の値そのもの) と `\"part\"` (`variant=\"split-dropdown\"` が 3 つ並べる部位の 1 つ) の 2 値です。組み込みの段がこの 2 つを別の Intl オプション集合で描き分けているため、`unit` だけでは同じ `\"month\"` が「年月全体」と「月の部位」のどちらを指すのか決まりません。\n- `formatOptionText` は**組み込みの 2 段そのもの**です (`formatLocale` 指定時は `Intl.DateTimeFormat`、未指定時はロケール非依存の ISO 8601)。第 1 段を担当しない (`unit`, `scope`) の組は、この関数へそのまま転送してください。引数順がコールバックと同一なので逐語転送できます。\n- **「`undefined` を返したら既定」という形は採っていません**。それは代替値連鎖であり、本パッケージが排している形です。返り値は常に文字列で、**空文字列も合法**です (無効な日付に対する `formatLabel` の仕様値と同じ)。\n- `date` が未指定・Invalid Date のときは `\"\"` を返します (`formatLabel` と同じ約束)。\n- `unit` が `\"year\"` / `\"month\"` / `\"day\"` 以外、`scope` が `\"period\"` / `\"part\"` 以外の場合は `RangeError` を送出し、メッセージは関数自身を名指しします (`formatOptionText: unit must be one of \"year\", \"month\", \"day\" (received: \"quarter\")` は単位を受け取る他の公開関数と同じ文言、`formatOptionText: scope must be \"period\" or \"part\" (received: \"label\")`)。フォーマッタ Props は型検査を受けますが、この関数は公開の入口であり JavaScript からも引数が届くためです。\n\n`formatOptionTe","readmeFilename":""}