{"_id":"r3f-interactive-flow","_rev":"34-d4fd1170b7d59262d6067420cfe39663","name":"r3f-interactive-flow","dist-tags":{"latest":"2.12.0"},"versions":{"0.1.0":{"name":"r3f-interactive-flow","version":"0.1.0","keywords":["react-three-fiber","three","react","r3f","interactive","phase","flow","animation","webgl"],"author":"YT-TechDev","license":"MIT","_id":"r3f-interactive-flow@0.1.0","maintainers":[{"name":"yuto.yt-techdev","email":"msc_prop@proton.me"}],"homepage":"https://github.com/YT-TechDev/r3f-interactive-flow#readme","bugs":{"url":"https://github.com/YT-TechDev/r3f-interactive-flow/issues"},"dist":{"shasum":"ecc201c8256e50cac499706ec8530f69f92310ef","tarball":"https://registry.npmjs.org/r3f-interactive-flow/-/r3f-interactive-flow-0.1.0.tgz","fileCount":10,"integrity":"sha512-3fTm1z6fdswWY+aB+vukw6dMnaryMmnFIEq4pld9MNlde7PmWyiYROgvdhlxA3BWL1pwdyRX3x0FyhF94pEiOA==","signatures":[{"sig":"MEQCIHxk5z8FMTfCryHcEcB7i25MU8yTU61sWXozjjMbg6iiAiATByBREGBrj1d0yMWcayg5D1dHGhEf+HDWsIbKbT2+BA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":92616},"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","require":"./dist/index.cjs"}},"scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","pack:dry-run":"pnpm build && npm pack --dry-run"},"_npmUser":{"name":"yuto.yt-techdev","email":"msc_prop@proton.me"},"repository":{"url":"https://github.com/YT-TechDev/r3f-interactive-flow.git","type":"git","directory":"packages/r3f-interactive-flow"},"description":"A small React Three Fiber utility for predictable phase-based interactive flow control.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{},"peerDependencies":{"react":">=18.0.0 <20.0.0","three":">=0.150.0 <1.0.0","react-dom":">=18.0.0 <20.0.0","@react-three/fiber":">=8.0.0 <10.0.0"},"_npmOperationalInternal":{"tmp":"tmp/r3f-interactive-flow_0.1.0_1781153065808_0.7402508920920199","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"r3f-interactive-flow","version":"0.2.0","keywords":["react-three-fiber","three","react","r3f","interactive","phase","flow","animation","webgl"],"author":"YT-TechDev","license":"MIT","_id":"r3f-interactive-flow@0.2.0","maintainers":[{"name":"yuto.yt-techdev","email":"msc_prop@proton.me"}],"homepage":"https://github.com/YT-TechDev/r3f-interactive-flow#readme","bugs":{"url":"https://github.com/YT-TechDev/r3f-interactive-flow/issues"},"dist":{"shasum":"cf4bac90307f41781596012c1b4fa7e9b4a1a25b","tarball":"https://registry.npmjs.org/r3f-interactive-flow/-/r3f-interactive-flow-0.2.0.tgz","fileCount":10,"integrity":"sha512-LaeEsRa2IP9Ycxxj56fBQkL4mJwFm0cCnavGVnOvSyuOfx4AhL4aKydsuSnE3YErUDFdF6/TqbvQLKopUaMIsA==","signatures":[{"sig":"MEYCIQCkB2V6asyL1hvEwayRESNrrQBIQur53AVHJRZfrPVWxwIhAPy4QmnMo0U/YctEbvjnkZiVWPxSmZLL0xUcohzMol0Z","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":99471},"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","require":"./dist/index.cjs"}},"scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","pack:dry-run":"pnpm build && npm pack --dry-run"},"_npmUser":{"name":"yuto.yt-techdev","email":"msc_prop@proton.me"},"repository":{"url":"https://github.com/YT-TechDev/r3f-interactive-flow.git","type":"git","directory":"packages/r3f-interactive-flow"},"description":"A small React Three Fiber utility for predictable phase-based interactive flow control.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{},"peerDependencies":{"react":">=18.0.0 <20.0.0","three":">=0.150.0 <1.0.0","react-dom":">=18.0.0 <20.0.0","@react-three/fiber":">=8.0.0 <10.0.0"},"_npmOperationalInternal":{"tmp":"tmp/r3f-interactive-flow_0.2.0_1781404771343_0.47259888690096097","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"r3f-interactive-flow","version":"0.3.0","keywords":["react-three-fiber","three","react","r3f","interactive","phase","flow","animation","webgl"],"author":"YT-TechDev","license":"MIT","_id":"r3f-interactive-flow@0.3.0","maintainers":[{"name":"yuto.yt-techdev","email":"msc_prop@proton.me"}],"homepage":"https://github.com/YT-TechDev/r3f-interactive-flow#readme","bugs":{"url":"https://github.com/YT-TechDev/r3f-interactive-flow/issues"},"dist":{"shasum":"6d0a584ad95ec4ae772740e9527718b21471f9c5","tarball":"https://registry.npmjs.org/r3f-interactive-flow/-/r3f-interactive-flow-0.3.0.tgz","fileCount":10,"integrity":"sha512-4UZFt4NfYlcYczO8HXXb8Wl1Op0ju2GZw471Z3ap3l93LwcF9mjaVu3CrYxvXxG0eDsM4m5I6Fm2do41czaSdg==","signatures":[{"sig":"MEUCIBtZS84KBJ11ecU/r0FdqpaJOlVDG+ej2V+C7lh1v789AiEAzTxylXKE1fVkTIrm6O/NiTHJreOLc1ho6WtrzIHTet4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":146991},"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","require":"./dist/index.cjs"}},"scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","pack:dry-run":"pnpm build && npm pack --dry-run"},"_npmUser":{"name":"yuto.yt-techdev","email":"msc_prop@proton.me"},"repository":{"url":"https://github.com/YT-TechDev/r3f-interactive-flow.git","type":"git","directory":"packages/r3f-interactive-flow"},"description":"A small React Three Fiber utility for predictable phase-based interactive flow control.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{},"peerDependencies":{"react":">=18.0.0 <20.0.0","three":">=0.150.0 <1.0.0","react-dom":">=18.0.0 <20.0.0","@react-three/fiber":">=8.0.0 <10.0.0"},"_npmOperationalInternal":{"tmp":"tmp/r3f-interactive-flow_0.3.0_1781493996268_0.14101743691192636","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"r3f-interactive-flow","version":"0.4.0","keywords":["react-three-fiber","three","react","r3f","interactive","phase","flow","animation","webgl"],"author":"YT-TechDev","license":"MIT","_id":"r3f-interactive-flow@0.4.0","maintainers":[{"name":"yuto.yt-techdev","email":"msc_prop@proton.me"}],"homepage":"https://github.com/YT-TechDev/r3f-interactive-flow#readme","bugs":{"url":"https://github.com/YT-TechDev/r3f-interactive-flow/issues"},"dist":{"shasum":"1fad488cafc30a82edf5d3ab164a6f87d307946f","tarball":"https://registry.npmjs.org/r3f-interactive-flow/-/r3f-interactive-flow-0.4.0.tgz","fileCount":10,"integrity":"sha512-XJXJVzXpCpvKbTSxbXznPMZIAzO30WXthwCtAgTTfxvH5BoCEY0XL8GMsANlJqFfdlfjhXaxkEfAcSJVfq9t9g==","signatures":[{"sig":"MEUCIQDIYqGlvcRfrDaEuTodC0XiTfRbsgE4gv+81bL+chxsqQIgJtTNSCsgB6wquncWG+71CMKdPkhrBo+H8J97+f00RbE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":150216},"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","require":"./dist/index.cjs"}},"scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","pack:dry-run":"pnpm build && npm pack --dry-run"},"_npmUser":{"name":"yuto.yt-techdev","email":"msc_prop@proton.me"},"repository":{"url":"https://github.com/YT-TechDev/r3f-interactive-flow.git","type":"git","directory":"packages/r3f-interactive-flow"},"description":"A small React Three Fiber utility for predictable phase-based interactive flow control.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{},"peerDependencies":{"react":">=18.0.0 <20.0.0","three":">=0.150.0 <1.0.0","react-dom":">=18.0.0 <20.0.0","@react-three/fiber":">=8.0.0 <10.0.0"},"_npmOperationalInternal":{"tmp":"tmp/r3f-interactive-flow_0.4.0_1781570411819_0.9403919743444489","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"r3f-interactive-flow","version":"0.5.0","keywords":["react-three-fiber","three","react","r3f","interactive","phase","flow","animation","webgl"],"author":"YT-TechDev","license":"MIT","_id":"r3f-interactive-flow@0.5.0","maintainers":[{"name":"yuto.yt-techdev","email":"msc_prop@proton.me"}],"homepage":"https://github.com/YT-TechDev/r3f-interactive-flow#readme","bugs":{"url":"https://github.com/YT-TechDev/r3f-interactive-flow/issues"},"dist":{"shasum":"c7f6f105cfdbb934bf20e88d0732bdf36e7e2e54","tarball":"https://registry.npmjs.org/r3f-interactive-flow/-/r3f-interactive-flow-0.5.0.tgz","fileCount":10,"integrity":"sha512-Hpk4nbQXOWhDlYR3s898H5o4ulJk5lkKDzNZ4ipo7W8B0naz64ZMQPak66cCQXFiJdXTSXnKilYudXpMBlJUPQ==","signatures":[{"sig":"MEQCIA24bkV5XZeziaGucRUs84WUKX6H1zqbH5dVZaTk93gcAiBwvJqJ+y1ERTvjuxYEt9s3UvympDJDemQhUkIh8vBW4w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":152012},"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","require":"./dist/index.cjs"}},"scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","pack:dry-run":"pnpm build && npm pack --dry-run"},"_npmUser":{"name":"yuto.yt-techdev","email":"msc_prop@proton.me"},"repository":{"url":"https://github.com/YT-TechDev/r3f-interactive-flow.git","type":"git","directory":"packages/r3f-interactive-flow"},"description":"A small React Three Fiber utility for predictable phase-based interactive flow control.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{},"peerDependencies":{"react":">=18.0.0 <20.0.0","three":">=0.150.0 <1.0.0","react-dom":">=18.0.0 <20.0.0","@react-three/fiber":">=8.0.0 <10.0.0"},"_npmOperationalInternal":{"tmp":"tmp/r3f-interactive-flow_0.5.0_1781602212088_0.5811887989201545","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"r3f-interactive-flow","version":"0.6.0","keywords":["react-three-fiber","three","react","r3f","interactive","phase","flow","animation","webgl"],"author":"YT-TechDev","license":"MIT","_id":"r3f-interactive-flow@0.6.0","maintainers":[{"name":"yuto.yt-techdev","email":"msc_prop@proton.me"}],"homepage":"https://github.com/YT-TechDev/r3f-interactive-flow#readme","bugs":{"url":"https://github.com/YT-TechDev/r3f-interactive-flow/issues"},"dist":{"shasum":"f17a52b90c24447cb0b0e2c0937fe103a077b710","tarball":"https://registry.npmjs.org/r3f-interactive-flow/-/r3f-interactive-flow-0.6.0.tgz","fileCount":10,"integrity":"sha512-dANd+GkP2mVpI/EWzM6F2CiClN6pgRZvL+tnH9OgSGgUOmoDxt6eVtxlq/08uD9X2MSmWHB+n4qYvE9N7G+NWA==","signatures":[{"sig":"MEYCIQDjPfFdxqBbzCfDLbSk530gJmeQAD1mZhveIDwezTsWTAIhAPRDuFv+MxvfeNClZL1G8PM3GHwhqSbURPS7gLxalke8","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":156130},"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","require":"./dist/index.cjs"}},"scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","pack:dry-run":"pnpm build && npm pack --dry-run"},"_npmUser":{"name":"yuto.yt-techdev","email":"msc_prop@proton.me"},"repository":{"url":"https://github.com/YT-TechDev/r3f-interactive-flow.git","type":"git","directory":"packages/r3f-interactive-flow"},"description":"A small React Three Fiber utility for predictable phase-based interactive flow control.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{},"peerDependencies":{"react":">=18.0.0 <20.0.0","three":">=0.150.0 <1.0.0","react-dom":">=18.0.0 <20.0.0","@react-three/fiber":">=8.0.0 <10.0.0"},"_npmOperationalInternal":{"tmp":"tmp/r3f-interactive-flow_0.6.0_1781657082915_0.9762750402969274","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"r3f-interactive-flow","version":"0.7.0","keywords":["react-three-fiber","three","react","r3f","interactive","phase","flow","animation","webgl"],"author":"YT-TechDev","license":"MIT","_id":"r3f-interactive-flow@0.7.0","maintainers":[{"name":"yuto.yt-techdev","email":"msc_prop@proton.me"}],"homepage":"https://github.com/YT-TechDev/r3f-interactive-flow#readme","bugs":{"url":"https://github.com/YT-TechDev/r3f-interactive-flow/issues"},"dist":{"shasum":"90b18fdfeafbbcc206a42380782addfaeafbc3d5","tarball":"https://registry.npmjs.org/r3f-interactive-flow/-/r3f-interactive-flow-0.7.0.tgz","fileCount":10,"integrity":"sha512-yAGTBuSWMfUMW/qggx9eG/luqJEJXa9tiQCmREtlr9u2ZTOfrUWcAPwgHdTL5PVY7hhABMFtMHybmEpb78bFaA==","signatures":[{"sig":"MEQCIEA1uZRhTkZ8NngsV346HYszyn/FOSAVCNXUd47NfnPXAiAqNXe4E79untSFQ0gGMbIJm+goA7Ye+vUVvBjl1W5kYg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":156391},"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","require":"./dist/index.cjs"}},"scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","pack:dry-run":"pnpm build && npm pack --dry-run"},"_npmUser":{"name":"yuto.yt-techdev","email":"msc_prop@proton.me"},"repository":{"url":"https://github.com/YT-TechDev/r3f-interactive-flow.git","type":"git","directory":"packages/r3f-interactive-flow"},"description":"A small React Three Fiber utility for predictable phase-based interactive flow control.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{},"peerDependencies":{"react":">=18.0.0 <20.0.0","three":">=0.150.0 <1.0.0","react-dom":">=18.0.0 <20.0.0","@react-three/fiber":">=8.0.0 <10.0.0"},"_npmOperationalInternal":{"tmp":"tmp/r3f-interactive-flow_0.7.0_1782458138445_0.0638072721040257","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"r3f-interactive-flow","version":"0.8.0","keywords":["react-three-fiber","three","react","r3f","interactive","phase","flow","animation","webgl"],"author":"YT-TechDev","license":"MIT","_id":"r3f-interactive-flow@0.8.0","maintainers":[{"name":"yuto.yt-techdev","email":"msc_prop@proton.me"}],"homepage":"https://github.com/YT-TechDev/r3f-interactive-flow#readme","bugs":{"url":"https://github.com/YT-TechDev/r3f-interactive-flow/issues"},"dist":{"shasum":"a74c49cfcb7bba4654b7eeabb318037dd6f2b26e","tarball":"https://registry.npmjs.org/r3f-interactive-flow/-/r3f-interactive-flow-0.8.0.tgz","fileCount":10,"integrity":"sha512-joWXfjW82eV94gLsyZMgRzz9aQ7Q874Ql5PhdqTThQoAHi2GgchY5Nd9PAt/ENQtUlS40qN5XSp2DLeSDbSDMQ==","signatures":[{"sig":"MEUCIGJTgk+3UL0VG0VOULxH0eGSbG9w8Bd5JxW7xJlat2R+AiEAx1EGJ1KgqdLfG8Xazm684y3UCCzdDOLcTR88wTHsVM4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":158565},"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","require":"./dist/index.cjs"}},"scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","pack:dry-run":"pnpm build && npm pack --dry-run"},"_npmUser":{"name":"yuto.yt-techdev","email":"msc_prop@proton.me"},"repository":{"url":"https://github.com/YT-TechDev/r3f-interactive-flow.git","type":"git","directory":"packages/r3f-interactive-flow"},"description":"A small React Three Fiber utility for predictable phase-based interactive flow control.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{},"peerDependencies":{"react":">=18.0.0 <20.0.0","three":">=0.150.0 <1.0.0","react-dom":">=18.0.0 <20.0.0","@react-three/fiber":">=8.0.0 <10.0.0"},"_npmOperationalInternal":{"tmp":"tmp/r3f-interactive-flow_0.8.0_1782515272038_0.3467681354222234","host":"s3://npm-registry-packages-npm-production"}},"0.9.0":{"name":"r3f-interactive-flow","version":"0.9.0","keywords":["react-three-fiber","three","react","r3f","interactive","phase","flow","animation","webgl"],"author":"YT-TechDev","license":"MIT","_id":"r3f-interactive-flow@0.9.0","maintainers":[{"name":"yuto.yt-techdev","email":"msc_prop@proton.me"}],"homepage":"https://github.com/YT-TechDev/r3f-interactive-flow#readme","bugs":{"url":"https://github.com/YT-TechDev/r3f-interactive-flow/issues"},"dist":{"shasum":"66472bb2b15029962b8757f3faa7d4f0f0fbf8e1","tarball":"https://registry.npmjs.org/r3f-interactive-flow/-/r3f-interactive-flow-0.9.0.tgz","fileCount":10,"integrity":"sha512-/6Ps1qqvKO+Q4A/NibBwNiVKixnKcoHSOY9wBWHNfuz12jV17DilIfFJ3ZjmJlafs9Bm4Z8Mj+52gWK8k8QjFw==","signatures":[{"sig":"MEQCICGmWm7sYv6+2ciVVOUkyL6Cjx0oD8PakAj55YqvSzjyAiBca9JVqUPmeEjMSsL/7FpavxvuffclXAS9BRM5qpUMbQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":175515},"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","require":"./dist/index.cjs"}},"scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","pack:dry-run":"pnpm build && npm pack --dry-run"},"_npmUser":{"name":"yuto.yt-techdev","email":"msc_prop@proton.me"},"repository":{"url":"https://github.com/YT-TechDev/r3f-interactive-flow.git","type":"git","directory":"packages/r3f-interactive-flow"},"description":"A small React Three Fiber utility for predictable phase-based interactive flow control.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{},"peerDependencies":{"react":">=18.0.0 <20.0.0","three":">=0.150.0 <1.0.0","react-dom":">=18.0.0 <20.0.0","@react-three/fiber":">=8.0.0 <10.0.0"},"_npmOperationalInternal":{"tmp":"tmp/r3f-interactive-flow_0.9.0_1782538781006_0.6943895021922861","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"r3f-interactive-flow","version":"1.0.0","keywords":["react-three-fiber","three","react","r3f","interactive","phase","flow","animation","webgl"],"author":"YT-TechDev","license":"MIT","_id":"r3f-interactive-flow@1.0.0","maintainers":[{"name":"yuto.yt-techdev","email":"msc_prop@proton.me"}],"homepage":"https://github.com/YT-TechDev/r3f-interactive-flow#readme","bugs":{"url":"https://github.com/YT-TechDev/r3f-interactive-flow/issues"},"dist":{"shasum":"466fa8f2298224b8d0fd3635755a59b601f43f33","tarball":"https://registry.npmjs.org/r3f-interactive-flow/-/r3f-interactive-flow-1.0.0.tgz","fileCount":10,"integrity":"sha512-ifzSLPONVcGhlzagN0XUEd1wVAOUU91DPddy2MCZLVAbVjVjRuA77sZqJUhGiuMrYl83hRr1nXQKe4WjDVwzXg==","signatures":[{"sig":"MEUCIQCRAfBfdUBFxlEG79JYY8gz4ttRmB4uihg2ctbt3RaU0gIgNr/UL6hAbm8KVPprpgdwpPk818QFZyBrMtbP1fjt35Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":177923},"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","require":"./dist/index.cjs"}},"scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","pack:dry-run":"pnpm build && npm pack --dry-run"},"_npmUser":{"name":"yuto.yt-techdev","email":"msc_prop@proton.me"},"repository":{"url":"https://github.com/YT-TechDev/r3f-interactive-flow.git","type":"git","directory":"packages/r3f-interactive-flow"},"description":"A small React Three Fiber utility for predictable phase-based interactive flow control.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{},"peerDependencies":{"react":">=18.0.0 <20.0.0","three":">=0.150.0 <1.0.0","react-dom":">=18.0.0 <20.0.0","@react-three/fiber":">=8.0.0 <10.0.0"},"_npmOperationalInternal":{"tmp":"tmp/r3f-interactive-flow_1.0.0_1782548623983_0.12579794457523463","host":"s3://npm-registry-packages-npm-production"}},"1.2.5":{"name":"r3f-interactive-flow","version":"1.2.5","keywords":["react-three-fiber","three","react","r3f","interactive","phase","flow","animation","webgl"],"author":"YT-TechDev","license":"MIT","_id":"r3f-interactive-flow@1.2.5","maintainers":[{"name":"yuto.yt-techdev","email":"msc_prop@proton.me"}],"homepage":"https://github.com/YT-TechDev/r3f-interactive-flow#readme","bugs":{"url":"https://github.com/YT-TechDev/r3f-interactive-flow/issues"},"dist":{"shasum":"87318b612c3ca752c5598d0e3a64f59cfbd94099","tarball":"https://registry.npmjs.org/r3f-interactive-flow/-/r3f-interactive-flow-1.2.5.tgz","fileCount":10,"integrity":"sha512-YPi2VCzcqN9dq++sRDJvUbWv0zR9cmTEe65fjWBKkdIDnYvJOT4vNWtD12bG3CWXloT6dP0gAksKQUFmFZQRdg==","signatures":[{"sig":"MEUCIADYFs/zkZ76y2DIkSOirrz6yDCUlONs0zcLgaXDguu5AiEAv/ZiOGtu9yZ19dCp2cR/hNcOl/UUcnDQM395eg3ZaAQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":193876},"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","require":"./dist/index.cjs"}},"scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","pack:dry-run":"pnpm build && npm pack --dry-run"},"_npmUser":{"name":"yuto.yt-techdev","email":"msc_prop@proton.me"},"repository":{"url":"https://github.com/YT-TechDev/r3f-interactive-flow.git","type":"git","directory":"packages/r3f-interactive-flow"},"description":"A small React Three Fiber utility for predictable phase-based interactive flow control.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{},"peerDependencies":{"react":">=18.0.0 <20.0.0","three":">=0.150.0 <1.0.0","react-dom":">=18.0.0 <20.0.0","@react-three/fiber":">=8.0.0 <10.0.0"},"_npmOperationalInternal":{"tmp":"tmp/r3f-interactive-flow_1.2.5_1783034564390_0.517629772158585","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"r3f-interactive-flow","version":"1.3.0","keywords":["react-three-fiber","three","react","r3f","interactive","phase","flow","animation","webgl"],"author":"YT-TechDev","license":"MIT","_id":"r3f-interactive-flow@1.3.0","maintainers":[{"name":"yuto.yt-techdev","email":"msc_prop@proton.me"}],"homepage":"https://github.com/YT-TechDev/r3f-interactive-flow#readme","bugs":{"url":"https://github.com/YT-TechDev/r3f-interactive-flow/issues"},"dist":{"shasum":"cd82e505fed70225085274b85fff4b3c00b94948","tarball":"https://registry.npmjs.org/r3f-interactive-flow/-/r3f-interactive-flow-1.3.0.tgz","fileCount":10,"integrity":"sha512-fXLfpUDEHgLLo6Kx5G+ol2mhOZ7lO8PdSGlc/ezfIHyU9vk1FFSdzmqBPDmfeSEISRXzf3GX633lBj0aJDSAlw==","signatures":[{"sig":"MEYCIQDulnSK/L0O/xF8GtJ2avcgB6ydAxUSOaoHp40xEHm71wIhAIV2IIoXN6wNvRg+oobyUNT0aA0qK2qd7g/NM0gLcERm","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":198946},"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","require":"./dist/index.cjs"}},"scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","pack:dry-run":"pnpm build && npm pack --dry-run"},"_npmUser":{"name":"yuto.yt-techdev","email":"msc_prop@proton.me"},"repository":{"url":"https://github.com/YT-TechDev/r3f-interactive-flow.git","type":"git","directory":"packages/r3f-interactive-flow"},"description":"A small React Three Fiber utility for predictable phase-based interactive flow control.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{},"peerDependencies":{"react":">=18.0.0 <20.0.0","three":">=0.150.0 <1.0.0","react-dom":">=18.0.0 <20.0.0","@react-three/fiber":">=8.0.0 <10.0.0"},"_npmOperationalInternal":{"tmp":"tmp/r3f-interactive-flow_1.3.0_1783055273973_0.6943218542988894","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"r3f-interactive-flow","version":"1.4.0","keywords":["react-three-fiber","three","react","r3f","interactive","phase","flow","animation","webgl"],"author":"YT-TechDev","license":"MIT","_id":"r3f-interactive-flow@1.4.0","maintainers":[{"name":"yuto.yt-techdev","email":"msc_prop@proton.me"}],"homepage":"https://github.com/YT-TechDev/r3f-interactive-flow#readme","bugs":{"url":"https://github.com/YT-TechDev/r3f-interactive-flow/issues"},"dist":{"shasum":"814cd06ca00a5460f3b2ee9ca98104f61c675f3e","tarball":"https://registry.npmjs.org/r3f-interactive-flow/-/r3f-interactive-flow-1.4.0.tgz","fileCount":10,"integrity":"sha512-dSevuZfIbU5WXraYsaQw7Ios/snfVGdJa3BQyJSRL+MAEaNBNS6/QLsQ8W8J1gXPhHUqnUeTsBM9h8Rfm7PBJA==","signatures":[{"sig":"MEYCIQDMOkaVcla2ntvLmfa95SwGc+vA86kN6XIGja6T9zeRtgIhAMZyvFlzpiSO3PrlOHwrKf0/NZb05YzToIhl2fmzSl56","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":206217},"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","require":"./dist/index.cjs"}},"scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","pack:dry-run":"pnpm build && npm pack --dry-run"},"_npmUser":{"name":"yuto.yt-techdev","email":"msc_prop@proton.me"},"repository":{"url":"https://github.com/YT-TechDev/r3f-interactive-flow.git","type":"git","directory":"packages/r3f-interactive-flow"},"description":"A small React Three Fiber utility for predictable phase-based interactive flow control.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{},"peerDependencies":{"react":">=18.0.0 <20.0.0","three":">=0.150.0 <1.0.0","react-dom":">=18.0.0 <20.0.0","@react-three/fiber":">=8.0.0 <10.0.0"},"_npmOperationalInternal":{"tmp":"tmp/r3f-interactive-flow_1.4.0_1783091671646_0.6855736270327215","host":"s3://npm-registry-packages-npm-production"}},"1.5.0":{"name":"r3f-interactive-flow","version":"1.5.0","keywords":["react-three-fiber","three","react","r3f","interactive","phase","flow","animation","webgl"],"author":"YT-TechDev","license":"MIT","_id":"r3f-interactive-flow@1.5.0","maintainers":[{"name":"yuto.yt-techdev","email":"msc_prop@proton.me"}],"homepage":"https://github.com/YT-TechDev/r3f-interactive-flow#readme","bugs":{"url":"https://github.com/YT-TechDev/r3f-interactive-flow/issues"},"dist":{"shasum":"c7fcac0f81850265697bc20e755391b08563cd34","tarball":"https://registry.npmjs.org/r3f-interactive-flow/-/r3f-interactive-flow-1.5.0.tgz","fileCount":10,"integrity":"sha512-YXJMeh0cSeMCGQpm+dUBYC8D129VY/WKXEeKYnXFn8oB5RmM25EI+0RmYjMUwPhpz4oowHHOkUr7UhDVrdy0Hw==","signatures":[{"sig":"MEUCICDb5Eiw1KpW84QKch1H3uDjhmfDYz0R0996pte7Y60DAiEAyWR3NiMAMIdm79h8iwjteiDPOWBB7ouRuY0x2nuRZcE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":214213},"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","require":"./dist/index.cjs"}},"scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","pack:dry-run":"pnpm build && npm pack --dry-run"},"_npmUser":{"name":"yuto.yt-techdev","email":"msc_prop@proton.me"},"repository":{"url":"https://github.com/YT-TechDev/r3f-interactive-flow.git","type":"git","directory":"packages/r3f-interactive-flow"},"description":"A small React Three Fiber utility for predictable phase-based interactive flow control.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{},"peerDependencies":{"react":">=18.0.0 <20.0.0","three":">=0.150.0 <1.0.0","react-dom":">=18.0.0 <20.0.0","@react-three/fiber":">=8.0.0 <10.0.0"},"_npmOperationalInternal":{"tmp":"tmp/r3f-interactive-flow_1.5.0_1783098947409_0.5837809267023477","host":"s3://npm-registry-packages-npm-production"}},"1.6.0":{"name":"r3f-interactive-flow","version":"1.6.0","keywords":["react-three-fiber","three","react","r3f","interactive","phase","flow","animation","webgl"],"author":"YT-TechDev","license":"MIT","_id":"r3f-interactive-flow@1.6.0","maintainers":[{"name":"yuto.yt-techdev","email":"msc_prop@proton.me"}],"homepage":"https://github.com/YT-TechDev/r3f-interactive-flow#readme","bugs":{"url":"https://github.com/YT-TechDev/r3f-interactive-flow/issues"},"dist":{"shasum":"7ab9abecd75ff07cdeee95a1c60ddd8b1b5126ec","tarball":"https://registry.npmjs.org/r3f-interactive-flow/-/r3f-interactive-flow-1.6.0.tgz","fileCount":10,"integrity":"sha512-daPXs9sAJJIidH8sRGAEJ3BerR8y5HE001mTczRq3s1WWX/zmdjGMl7w8qynsXhV/GbVdaqM0oUlpnepawGwLA==","signatures":[{"sig":"MEYCIQDFJO/kYKKi0hv9N/0Y06kl63D4sTqaruPzmqy14NsBBgIhAMNcW2fs0iSneJ+MEM2+lMWNvctl1gAkCTtWR6+XY4hh","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":215977},"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","require":"./dist/index.cjs"}},"scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","pack:dry-run":"pnpm build && npm pack --dry-run"},"_npmUser":{"name":"yuto.yt-techdev","email":"msc_prop@proton.me"},"repository":{"url":"https://github.com/YT-TechDev/r3f-interactive-flow.git","type":"git","directory":"packages/r3f-interactive-flow"},"description":"A small React Three Fiber utility for predictable phase-based interactive flow control.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{},"peerDependencies":{"react":">=18.0.0 <20.0.0","three":">=0.150.0 <1.0.0","react-dom":">=18.0.0 <20.0.0","@react-three/fiber":">=8.0.0 <10.0.0"},"_npmOperationalInternal":{"tmp":"tmp/r3f-interactive-flow_1.6.0_1783107922141_0.02395859391042965","host":"s3://npm-registry-packages-npm-production"}},"1.7.0":{"name":"r3f-interactive-flow","version":"1.7.0","keywords":["react-three-fiber","three","react","r3f","interactive","phase","flow","animation","webgl"],"author":"YT-TechDev","license":"MIT","_id":"r3f-interactive-flow@1.7.0","maintainers":[{"name":"yuto.yt-techdev","email":"msc_prop@proton.me"}],"homepage":"https://github.com/YT-TechDev/r3f-interactive-flow#readme","bugs":{"url":"https://github.com/YT-TechDev/r3f-interactive-flow/issues"},"dist":{"shasum":"dfdad4397d9f107fe0b63ed30c907258db343346","tarball":"https://registry.npmjs.org/r3f-interactive-flow/-/r3f-interactive-flow-1.7.0.tgz","fileCount":10,"integrity":"sha512-KZMt02RjTmBnIb/5rkwqsPjXjsfMjqquV66B8JgNnNmFuVxyDZ/EEKDmYnAzOmttln0GAXXr/qBKyd3CS0zBtw==","signatures":[{"sig":"MEUCIAt6VSqVC7LSBnzUvaVRowQkQ3qnwpd0NGsSzQfWGVZ0AiEAmJ97GbKuN04RamcGyaZ9d5bmzDPgeFcAQXs9Z05qoso=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":218425},"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","require":"./dist/index.cjs"}},"scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","pack:dry-run":"pnpm build && npm pack --dry-run"},"_npmUser":{"name":"yuto.yt-techdev","email":"msc_prop@proton.me"},"repository":{"url":"https://github.com/YT-TechDev/r3f-interactive-flow.git","type":"git","directory":"packages/r3f-interactive-flow"},"description":"A small React Three Fiber utility for predictable phase-based interactive flow control.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{},"peerDependencies":{"react":">=18.0.0 <20.0.0","three":">=0.150.0 <1.0.0","react-dom":">=18.0.0 <20.0.0","@react-three/fiber":">=8.0.0 <10.0.0"},"_npmOperationalInternal":{"tmp":"tmp/r3f-interactive-flow_1.7.0_1783130652277_0.46945853009700267","host":"s3://npm-registry-packages-npm-production"}},"1.8.0":{"name":"r3f-interactive-flow","version":"1.8.0","keywords":["react-three-fiber","three","react","r3f","interactive","phase","flow","animation","webgl"],"author":"YT-TechDev","license":"MIT","_id":"r3f-interactive-flow@1.8.0","maintainers":[{"name":"yuto.yt-techdev","email":"msc_prop@proton.me"}],"homepage":"https://github.com/YT-TechDev/r3f-interactive-flow#readme","bugs":{"url":"https://github.com/YT-TechDev/r3f-interactive-flow/issues"},"dist":{"shasum":"24f5a4994ab4205aaad2ac44e1950d2aab1f4375","tarball":"https://registry.npmjs.org/r3f-interactive-flow/-/r3f-interactive-flow-1.8.0.tgz","fileCount":10,"integrity":"sha512-XUhYfF8olykzfyFbewphEZZLe1WBgklDNkrWNqRVU+4880UrDAXDC8T1/4hvHUE7tnlFNwnuD/A/eKqydU18EQ==","signatures":[{"sig":"MEQCIGprwAUHp/Ba5EvNCw7x4kr5deQ+z/+8hTRPhdUhnLazAiAHQtkVebeqzhUHckMSXyOOqYvXq1HE5Q/GI6Xlw9ID+w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":224422},"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","require":"./dist/index.cjs"}},"scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","pack:dry-run":"pnpm build && npm pack --dry-run"},"_npmUser":{"name":"yuto.yt-techdev","email":"msc_prop@proton.me"},"repository":{"url":"https://github.com/YT-TechDev/r3f-interactive-flow.git","type":"git","directory":"packages/r3f-interactive-flow"},"description":"A small React Three Fiber utility for predictable phase-based interactive flow control.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{},"peerDependencies":{"react":">=18.0.0 <20.0.0","three":">=0.150.0 <1.0.0","react-dom":">=18.0.0 <20.0.0","@react-three/fiber":">=8.0.0 <10.0.0"},"_npmOperationalInternal":{"tmp":"tmp/r3f-interactive-flow_1.8.0_1783147178721_0.0048071553858104465","host":"s3://npm-registry-packages-npm-production"}},"1.9.0":{"name":"r3f-interactive-flow","version":"1.9.0","keywords":["react-three-fiber","three","react","r3f","interactive","phase","flow","animation","webgl"],"author":"YT-TechDev","license":"MIT","_id":"r3f-interactive-flow@1.9.0","maintainers":[{"name":"yuto.yt-techdev","email":"msc_prop@proton.me"}],"homepage":"https://github.com/YT-TechDev/r3f-interactive-flow#readme","bugs":{"url":"https://github.com/YT-TechDev/r3f-interactive-flow/issues"},"dist":{"shasum":"4e6d347f33b956b6e61154c203f285d07c8f017a","tarball":"https://registry.npmjs.org/r3f-interactive-flow/-/r3f-interactive-flow-1.9.0.tgz","fileCount":10,"integrity":"sha512-BuJHiMynJgW4EDW0h8vrrrPEsHdrWdIqSgPcgtE05f6X54e5ql9qYUb4hBQi4njBnKUEa3Z3zwaoFShgalh1uw==","signatures":[{"sig":"MEUCIAhOd7aJd7zLCBqgqPiJ2itcbpvSsxjKBfP9gUrVUx5qAiEA9OjE9TXbPp88T+RwZrHQOrsaZw6L2PvtimAfrYYkdCw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":226114},"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","require":"./dist/index.cjs"}},"scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","pack:dry-run":"pnpm build && npm pack --dry-run"},"_npmUser":{"name":"yuto.yt-techdev","email":"msc_prop@proton.me"},"repository":{"url":"https://github.com/YT-TechDev/r3f-interactive-flow.git","type":"git","directory":"packages/r3f-interactive-flow"},"description":"A small React Three Fiber utility for predictable phase-based interactive flow control.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{},"peerDependencies":{"react":">=18.0.0 <20.0.0","three":">=0.150.0 <1.0.0","react-dom":">=18.0.0 <20.0.0","@react-three/fiber":">=8.0.0 <10.0.0"},"_npmOperationalInternal":{"tmp":"tmp/r3f-interactive-flow_1.9.0_1783188876569_0.33151105414181137","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"r3f-interactive-flow","version":"2.0.0","keywords":["react-three-fiber","three","react","r3f","interactive","phase","flow","animation","webgl"],"author":"YT-TechDev","license":"MIT","_id":"r3f-interactive-flow@2.0.0","maintainers":[{"name":"yuto.yt-techdev","email":"msc_prop@proton.me"}],"homepage":"https://github.com/YT-TechDev/r3f-interactive-flow#readme","bugs":{"url":"https://github.com/YT-TechDev/r3f-interactive-flow/issues"},"dist":{"shasum":"45a9f0bc855870bd8af8dbe8fea68a979543958f","tarball":"https://registry.npmjs.org/r3f-interactive-flow/-/r3f-interactive-flow-2.0.0.tgz","fileCount":10,"integrity":"sha512-NdGmruhgDC2cEqzUVFlXmXxjz0nfv1lGZA44IDijA8b2tm1fqCEheuOEjsUmw34FgBdy9dJz1FzwGC5AtOk2kw==","signatures":[{"sig":"MEQCIEWMpvkByklg9VmMW8qGxl/FGKmJ3YSFtb+Bn/vaY4DDAiBdicnMmZW2GiMkbtQhgNDoxmBhGEAqNLHPN+zI1CqyyA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":184360},"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","require":"./dist/index.cjs"}},"scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","pack:dry-run":"pnpm build && npm pack --dry-run"},"_npmUser":{"name":"yuto.yt-techdev","email":"msc_prop@proton.me"},"repository":{"url":"https://github.com/YT-TechDev/r3f-interactive-flow.git","type":"git","directory":"packages/r3f-interactive-flow"},"description":"A small React Three Fiber utility for predictable phase-based interactive flow control.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{},"peerDependencies":{"react":">=18.0.0 <20.0.0","three":">=0.150.0 <1.0.0","react-dom":">=18.0.0 <20.0.0","@react-three/fiber":">=8.0.0 <10.0.0"},"_npmOperationalInternal":{"tmp":"tmp/r3f-interactive-flow_2.0.0_1783214277628_0.3153335522368539","host":"s3://npm-registry-packages-npm-production"}},"2.1.0":{"name":"r3f-interactive-flow","version":"2.1.0","keywords":["react-three-fiber","three","react","r3f","interactive","phase","flow","animation","webgl"],"author":"YT-TechDev","license":"MIT","_id":"r3f-interactive-flow@2.1.0","maintainers":[{"name":"yuto.yt-techdev","email":"msc_prop@proton.me"}],"homepage":"https://github.com/YT-TechDev/r3f-interactive-flow#readme","bugs":{"url":"https://github.com/YT-TechDev/r3f-interactive-flow/issues"},"dist":{"shasum":"4b73095ab667231ee5ffceaab0ce63c1e99b0f7b","tarball":"https://registry.npmjs.org/r3f-interactive-flow/-/r3f-interactive-flow-2.1.0.tgz","fileCount":10,"integrity":"sha512-ZEWi/LGRKOiEm//tqHHSOdZ4lJ0ORfYPML6NGechjYc+ns++LpYqBL1wODpjOwHBqvqPWTIoC/acjLHtGM0k8Q==","signatures":[{"sig":"MEUCIQC1qTfmAT4JLRHqFmn9SeGSYK1+babhmzm6N/rSUaLXagIgKlqf4yLzcnI0XbPz1vYOJZ/Gg+syELBI6Ox0GQ2fChM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":185673},"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","require":"./dist/index.cjs"}},"scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","pack:dry-run":"pnpm build && npm pack --dry-run"},"_npmUser":{"name":"yuto.yt-techdev","email":"msc_prop@proton.me"},"repository":{"url":"https://github.com/YT-TechDev/r3f-interactive-flow.git","type":"git","directory":"packages/r3f-interactive-flow"},"description":"A small React Three Fiber utility for predictable phase-based interactive flow control.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{},"peerDependencies":{"react":">=18.0.0 <20.0.0","three":">=0.150.0 <1.0.0","react-dom":">=18.0.0 <20.0.0","@react-three/fiber":">=8.0.0 <10.0.0"},"_npmOperationalInternal":{"tmp":"tmp/r3f-interactive-flow_2.1.0_1783235324575_0.3617002548102617","host":"s3://npm-registry-packages-npm-production"}},"2.2.0":{"name":"r3f-interactive-flow","version":"2.2.0","keywords":["react-three-fiber","three","react","r3f","interactive","phase","flow","animation","webgl"],"author":"YT-TechDev","license":"MIT","_id":"r3f-interactive-flow@2.2.0","maintainers":[{"name":"yuto.yt-techdev","email":"msc_prop@proton.me"}],"homepage":"https://github.com/YT-TechDev/r3f-interactive-flow#readme","bugs":{"url":"https://github.com/YT-TechDev/r3f-interactive-flow/issues"},"dist":{"shasum":"1de62351230bdfa3254a5c5fcae8ec0f57cb86fa","tarball":"https://registry.npmjs.org/r3f-interactive-flow/-/r3f-interactive-flow-2.2.0.tgz","fileCount":10,"integrity":"sha512-fHOFKqJgf0FYe0LdbAnD0PkN9fDf+qXF/sLZpXJ9zpsmArvrBRhmMzfH4XLNgAvYY2DR4IA0xbAwQ34yUZ4lHQ==","signatures":[{"sig":"MEQCIANr5XEOhf+10rWfVJPo+rWptrARurHBU0Fy5ss71RkfAiBCeROaOQ+JG8cg+BaSKcY4dRyUB9R55WsBbHE+TWsddg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":192787},"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","require":"./dist/index.cjs"}},"scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","pack:dry-run":"pnpm build && npm pack --dry-run"},"_npmUser":{"name":"yuto.yt-techdev","email":"msc_prop@proton.me"},"repository":{"url":"https://github.com/YT-TechDev/r3f-interactive-flow.git","type":"git","directory":"packages/r3f-interactive-flow"},"description":"A small React Three Fiber utility for predictable phase-based interactive flow control.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{},"peerDependencies":{"react":">=18.0.0 <20.0.0","three":">=0.150.0 <1.0.0","react-dom":">=18.0.0 <20.0.0","@react-three/fiber":">=8.0.0 <10.0.0"},"_npmOperationalInternal":{"tmp":"tmp/r3f-interactive-flow_2.2.0_1783245728021_0.8988263949436663","host":"s3://npm-registry-packages-npm-production"}},"2.3.0":{"name":"r3f-interactive-flow","version":"2.3.0","keywords":["react-three-fiber","three","react","r3f","interactive","phase","flow","animation","webgl"],"author":"YT-TechDev","license":"MIT","_id":"r3f-interactive-flow@2.3.0","maintainers":[{"name":"yuto.yt-techdev","email":"msc_prop@proton.me"}],"homepage":"https://github.com/YT-TechDev/r3f-interactive-flow#readme","bugs":{"url":"https://github.com/YT-TechDev/r3f-interactive-flow/issues"},"dist":{"shasum":"5a7bfa8a53f8d9012614e1dec204d57be7925d26","tarball":"https://registry.npmjs.org/r3f-interactive-flow/-/r3f-interactive-flow-2.3.0.tgz","fileCount":10,"integrity":"sha512-0iwqdZinoEr6RX6mILMPzhsDQNxsNdeQgaR9UD66GtsSHj/DBugEn9oO7oM2gye0S3/NEZKjKZSict8CasGmxg==","signatures":[{"sig":"MEUCIE+NKYvi1zqI8EKwd4OMc7S1cnVKmpDbcg/zsL8PgMCFAiEAxdcUplhYCcPONcr9ULTfKfbpWGgHiKqXHUBYV7fMSjs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":194018},"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","require":"./dist/index.cjs"}},"scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","pack:dry-run":"pnpm build && npm pack --dry-run"},"_npmUser":{"name":"yuto.yt-techdev","email":"msc_prop@proton.me"},"repository":{"url":"https://github.com/YT-TechDev/r3f-interactive-flow.git","type":"git","directory":"packages/r3f-interactive-flow"},"description":"A small React Three Fiber utility for predictable phase-based interactive flow control.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{},"peerDependencies":{"react":">=18.0.0 <20.0.0","three":">=0.150.0 <1.0.0","react-dom":">=18.0.0 <20.0.0","@react-three/fiber":">=8.0.0 <10.0.0"},"_npmOperationalInternal":{"tmp":"tmp/r3f-interactive-flow_2.3.0_1783487894753_0.2320589632565675","host":"s3://npm-registry-packages-npm-production"}},"2.3.1":{"name":"r3f-interactive-flow","version":"2.3.1","keywords":["react-three-fiber","three","react","r3f","interactive","phase","flow","animation","webgl"],"author":"YT-TechDev","license":"MIT","_id":"r3f-interactive-flow@2.3.1","maintainers":[{"name":"yuto.yt-techdev","email":"msc_prop@proton.me"}],"homepage":"https://github.com/YT-TechDev/r3f-interactive-flow#readme","bugs":{"url":"https://github.com/YT-TechDev/r3f-interactive-flow/issues"},"dist":{"shasum":"79b38489b932b859c8834f1cf604eaf2718f7b21","tarball":"https://registry.npmjs.org/r3f-interactive-flow/-/r3f-interactive-flow-2.3.1.tgz","fileCount":10,"integrity":"sha512-PO1ezMaV5yFd0PZ6PVNi7Bf4XkTu/TpuIDPYQAkKvmrSnuDTiJCaiQmlpKYGqwUbogCVL4PYgCPf6VuL2J4egw==","signatures":[{"sig":"MEYCIQDipv6XCJhoFQw1XgN4sdpI07J1zM2iB7JQUHnDbyztNwIhALuGz6AXaXMR8bcH9DCk+a2xrDNuMtnkb3U5I+cDFBOi","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":210324},"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"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","pack:dry-run":"pnpm build && npm pack --dry-run"},"_npmUser":{"name":"yuto.yt-techdev","email":"msc_prop@proton.me"},"repository":{"url":"https://github.com/YT-TechDev/r3f-interactive-flow.git","type":"git","directory":"packages/r3f-interactive-flow"},"description":"A small React Three Fiber utility for predictable phase-based interactive flow control.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{},"peerDependencies":{"react":">=18.0.0 <20.0.0","three":">=0.150.0 <1.0.0","react-dom":">=18.0.0 <20.0.0","@react-three/fiber":">=8.0.0 <10.0.0"},"_npmOperationalInternal":{"tmp":"tmp/r3f-interactive-flow_2.3.1_1783740539481_0.07607836376504706","host":"s3://npm-registry-packages-npm-production"}},"2.4.0":{"name":"r3f-interactive-flow","version":"2.4.0","keywords":["react-three-fiber","three","react","r3f","interactive","phase","flow","animation","webgl"],"author":{"name":"YT-TechDev"},"license":"MIT","_id":"r3f-interactive-flow@2.4.0","maintainers":[{"name":"yuto.yt-techdev","email":"msc_prop@proton.me"}],"homepage":"https://github.com/YT-TechDev/r3f-interactive-flow#readme","bugs":{"url":"https://github.com/YT-TechDev/r3f-interactive-flow/issues"},"dist":{"shasum":"54e99b8b79f72cf91e176502e28f9ae426270985","tarball":"https://registry.npmjs.org/r3f-interactive-flow/-/r3f-interactive-flow-2.4.0.tgz","fileCount":10,"integrity":"sha512-dhZJvBB7dqBveDPHi1wqptNF99P6Ga4XSuRTrj/lL7BIF0URLgu+YjXsWWN57jOzpnlLDsYgGJxRepQ99pjqAw==","signatures":[{"sig":"MEUCIQDD2qzklPWHx9yFYYuS22sQCGw/VgwU37yd8NOiMeV7AAIgV7t7oCbFYkJvcgwhwHcugEq9REfngKVEVFWNVvRlnFk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/r3f-interactive-flow@2.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":244698},"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"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"gitHead":"18b62d175a7168e0347c949988d8178976c69688","scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","pack:dry-run":"pnpm build && npm pack --dry-run"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8992e7fb-05d2-4bb6-9e50-d0b10c6cffa4"}},"repository":{"url":"git+https://github.com/YT-TechDev/r3f-interactive-flow.git","type":"git","directory":"packages/r3f-interactive-flow"},"_npmVersion":"12.0.1","description":"A small React Three Fiber utility for predictable phase-based interactive flow control.","directories":{},"sideEffects":false,"_nodeVersion":"22.23.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{},"peerDependencies":{"react":">=18.0.0 <20.0.0","three":">=0.150.0 <1.0.0","react-dom":">=18.0.0 <20.0.0","@react-three/fiber":">=8.0.0 <10.0.0"},"_npmOperationalInternal":{"tmp":"tmp/r3f-interactive-flow_2.4.0_1784502254094_0.3828625101164598","host":"s3://npm-registry-packages-npm-production"}},"2.5.0":{"name":"r3f-interactive-flow","version":"2.5.0","keywords":["react-three-fiber","three","react","r3f","interactive","phase","flow","animation","webgl"],"author":{"name":"YT-TechDev"},"license":"MIT","_id":"r3f-interactive-flow@2.5.0","maintainers":[{"name":"yuto.yt-techdev","email":"msc_prop@proton.me"}],"homepage":"https://github.com/YT-TechDev/r3f-interactive-flow#readme","bugs":{"url":"https://github.com/YT-TechDev/r3f-interactive-flow/issues"},"dist":{"shasum":"0351cf9e1110af03abfdf061886e28ef5eb04556","tarball":"https://registry.npmjs.org/r3f-interactive-flow/-/r3f-interactive-flow-2.5.0.tgz","fileCount":10,"integrity":"sha512-o6EXFdLChm7M0GcAPruD41LkmgeLMAhkYAhWMnDV24R38kK12lzdl5Yb0Q1c0dWnU52R9/N/IEQTfM/scXQq9Q==","signatures":[{"sig":"MEYCIQDVeh8FF3LYwhEObtaw1WNCTpByq6gvNTOmHSPVHPIaTwIhALNzfHgViVhjD7oKhPKgHCmf70wTq7rmiPpzj7MlDCMr","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/r3f-interactive-flow@2.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":248279},"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"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"gitHead":"d496d5a3cdc9f0831f491dd02c3a0735b5e89538","scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","pack:dry-run":"pnpm build && npm pack --dry-run"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8992e7fb-05d2-4bb6-9e50-d0b10c6cffa4"}},"repository":{"url":"git+https://github.com/YT-TechDev/r3f-interactive-flow.git","type":"git","directory":"packages/r3f-interactive-flow"},"_npmVersion":"12.0.1","description":"A small React Three Fiber utility for predictable phase-based interactive flow control.","directories":{},"sideEffects":false,"_nodeVersion":"22.23.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{},"peerDependencies":{"react":">=18.0.0 <20.0.0","three":">=0.150.0 <1.0.0","react-dom":">=18.0.0 <20.0.0","@react-three/fiber":">=8.0.0 <10.0.0"},"_npmOperationalInternal":{"tmp":"tmp/r3f-interactive-flow_2.5.0_1784628471180_0.35261395416035834","host":"s3://npm-registry-packages-npm-production"}},"2.6.0":{"name":"r3f-interactive-flow","version":"2.6.0","keywords":["react-three-fiber","three","react","r3f","interactive","phase","flow","animation","webgl"],"author":{"name":"YT-TechDev"},"license":"MIT","_id":"r3f-interactive-flow@2.6.0","maintainers":[{"name":"yuto.yt-techdev","email":"msc_prop@proton.me"}],"homepage":"https://github.com/YT-TechDev/r3f-interactive-flow#readme","bugs":{"url":"https://github.com/YT-TechDev/r3f-interactive-flow/issues"},"dist":{"shasum":"2c2c9d247531d91586381cdcf777c887f93f50b3","tarball":"https://registry.npmjs.org/r3f-interactive-flow/-/r3f-interactive-flow-2.6.0.tgz","fileCount":10,"integrity":"sha512-Xo090bTGn4eTO3KUW0jjkXH7OIoOdlj3aJc/8MS64hc1MKjp2stGjc0/i71nlATIKcq6c5Pgm7Wn9xR74B62QQ==","signatures":[{"sig":"MEUCIBlpKmLfDGwnu0UWJC8kezufdt81OTGE4n68nf5xaGGoAiEA1ftZlAFSmWP2JbWvDBtQKXVZI+tC7HZYu3JenAITY4A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/r3f-interactive-flow@2.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":252772},"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"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"gitHead":"11daaa75330676a562469fb7a63cc5f2c506ef4b","scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","pack:dry-run":"pnpm build && npm pack --dry-run"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8992e7fb-05d2-4bb6-9e50-d0b10c6cffa4"}},"repository":{"url":"git+https://github.com/YT-TechDev/r3f-interactive-flow.git","type":"git","directory":"packages/r3f-interactive-flow"},"_npmVersion":"12.0.1","description":"A small React Three Fiber utility for predictable phase-based interactive flow control.","directories":{},"sideEffects":false,"_nodeVersion":"22.23.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{},"peerDependencies":{"react":">=18.0.0 <20.0.0","three":">=0.150.0 <1.0.0","react-dom":">=18.0.0 <20.0.0","@react-three/fiber":">=8.0.0 <10.0.0"},"_npmOperationalInternal":{"tmp":"tmp/r3f-interactive-flow_2.6.0_1784708697486_0.2258270056197753","host":"s3://npm-registry-packages-npm-production"}},"2.7.0":{"name":"r3f-interactive-flow","version":"2.7.0","keywords":["react-three-fiber","three","react","r3f","interactive","phase","flow","animation","webgl"],"author":{"name":"YT-TechDev"},"license":"MIT","_id":"r3f-interactive-flow@2.7.0","maintainers":[{"name":"yuto.yt-techdev","email":"msc_prop@proton.me"}],"homepage":"https://github.com/YT-TechDev/r3f-interactive-flow#readme","bugs":{"url":"https://github.com/YT-TechDev/r3f-interactive-flow/issues"},"dist":{"shasum":"923c6b7d8b48286f87253fa94e47dce11f9cfb4d","tarball":"https://registry.npmjs.org/r3f-interactive-flow/-/r3f-interactive-flow-2.7.0.tgz","fileCount":10,"integrity":"sha512-5aH2fCALLK3dyNMWhDcYCojsdSEUKIVojTwsPspfq/0FHn0UYKdYZEt3w1ToWCDb1G/HqVXF5hYNnfgEwPo+ew==","signatures":[{"sig":"MEYCIQCzMvw7nO4e3vM9F41yVNZl0T+BtVkeDZ4967psDShq+gIhAMFrSakaTTbpwqjzCTZaF3+PpJIcH7oYJRpLEoDGmkdo","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/r3f-interactive-flow@2.7.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":255846},"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"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"gitHead":"1e7819ddb359ff6dd5f44eddb7365837531cc28d","scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","pack:dry-run":"pnpm build && npm pack --dry-run"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8992e7fb-05d2-4bb6-9e50-d0b10c6cffa4"}},"repository":{"url":"git+https://github.com/YT-TechDev/r3f-interactive-flow.git","type":"git","directory":"packages/r3f-interactive-flow"},"_npmVersion":"12.0.1","description":"A small React Three Fiber utility for predictable phase-based interactive flow control.","directories":{},"sideEffects":false,"_nodeVersion":"22.23.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{},"peerDependencies":{"react":">=18.0.0 <20.0.0","three":">=0.150.0 <1.0.0","react-dom":">=18.0.0 <20.0.0","@react-three/fiber":">=8.0.0 <10.0.0"},"_npmOperationalInternal":{"tmp":"tmp/r3f-interactive-flow_2.7.0_1784814783182_0.5026187258970249","host":"s3://npm-registry-packages-npm-production"}},"2.8.0":{"name":"r3f-interactive-flow","version":"2.8.0","keywords":["react-three-fiber","three","react","r3f","interactive","phase","flow","animation","webgl"],"author":{"name":"YT-TechDev"},"license":"MIT","_id":"r3f-interactive-flow@2.8.0","maintainers":[{"name":"yuto.yt-techdev","email":"msc_prop@proton.me"}],"homepage":"https://github.com/YT-TechDev/r3f-interactive-flow#readme","bugs":{"url":"https://github.com/YT-TechDev/r3f-interactive-flow/issues"},"dist":{"shasum":"901d08c21a8c9337ebe936316d4ef65053eb01b3","tarball":"https://registry.npmjs.org/r3f-interactive-flow/-/r3f-interactive-flow-2.8.0.tgz","fileCount":10,"integrity":"sha512-VO7laTi/dmSef5v2udms/xGh45Zb9TPwx8fO49tXUBy7PfuV7WHWChyC3Ll5Va4IN1nxpcxk9om8jyT7wB7QQg==","signatures":[{"sig":"MEUCIA5cwNejeZH7KxVJVt5t24na35jW2+8IGm5ESnUdQzyWAiEAuIdI8qZFJc0+QmDM+/l+0YlnIwZqcrxGQ7VfHFx0N0g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/r3f-interactive-flow@2.8.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":269040},"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"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"gitHead":"3187d2e819f3cbcdb0c26aea6142a79afb4d4ae9","scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","pack:dry-run":"pnpm build && npm pack --dry-run"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8992e7fb-05d2-4bb6-9e50-d0b10c6cffa4"}},"repository":{"url":"git+https://github.com/YT-TechDev/r3f-interactive-flow.git","type":"git","directory":"packages/r3f-interactive-flow"},"_npmVersion":"12.0.1","description":"A small React Three Fiber utility for predictable phase-based interactive flow control.","directories":{},"sideEffects":false,"_nodeVersion":"22.23.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{},"peerDependencies":{"react":">=18.0.0 <20.0.0","three":">=0.150.0 <1.0.0","react-dom":">=18.0.0 <20.0.0","@react-three/fiber":">=8.0.0 <10.0.0"},"_npmOperationalInternal":{"tmp":"tmp/r3f-interactive-flow_2.8.0_1784869870585_0.05695573953493138","host":"s3://npm-registry-packages-npm-production"}},"2.8.1":{"name":"r3f-interactive-flow","version":"2.8.1","keywords":["react-three-fiber","three","react","r3f","interactive","phase","flow","animation","webgl"],"author":{"name":"YT-TechDev"},"license":"MIT","_id":"r3f-interactive-flow@2.8.1","maintainers":[{"name":"yuto.yt-techdev","email":"msc_prop@proton.me"}],"homepage":"https://github.com/YT-TechDev/r3f-interactive-flow#readme","bugs":{"url":"https://github.com/YT-TechDev/r3f-interactive-flow/issues"},"dist":{"shasum":"d680a9de21bd3d552d8c0e5373a59688954c4fc4","tarball":"https://registry.npmjs.org/r3f-interactive-flow/-/r3f-interactive-flow-2.8.1.tgz","fileCount":10,"integrity":"sha512-jOGRLQ3yl5qVyGAi8xx0weRkN7X9ieKQVyDX95COEQR+JD4REZ3MvYhmE1yvqB4D4yvuywnpeKGrZthl9B7FDA==","signatures":[{"sig":"MEYCIQCIpYmPDDdzFytRXd7jqANDRd8TTgRxypbqS7z2sF+uswIhAPI03sdSb9ESN8XD/hoYrbtIHk9i8ntPBDUF7QacwWJF","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/r3f-interactive-flow@2.8.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":273790},"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"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"gitHead":"1f775630f18b80f2045c803e600f559e2eaf6252","scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","pack:dry-run":"pnpm build && npm pack --dry-run"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8992e7fb-05d2-4bb6-9e50-d0b10c6cffa4"}},"repository":{"url":"git+https://github.com/YT-TechDev/r3f-interactive-flow.git","type":"git","directory":"packages/r3f-interactive-flow"},"_npmVersion":"12.0.1","description":"A small React Three Fiber utility for predictable phase-based interactive flow control.","directories":{},"sideEffects":false,"_nodeVersion":"22.23.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{},"peerDependencies":{"react":">=18.0.0 <20.0.0","three":">=0.150.0 <1.0.0","react-dom":">=18.0.0 <20.0.0","@react-three/fiber":">=8.0.0 <10.0.0"},"_npmOperationalInternal":{"tmp":"tmp/r3f-interactive-flow_2.8.1_1785042546184_0.6167161161080872","host":"s3://npm-registry-packages-npm-production"}},"2.9.0":{"name":"r3f-interactive-flow","version":"2.9.0","keywords":["react-three-fiber","three","react","r3f","interactive","phase","flow","animation","webgl"],"author":{"name":"YT-TechDev"},"license":"MIT","_id":"r3f-interactive-flow@2.9.0","maintainers":[{"name":"yuto.yt-techdev","email":"msc_prop@proton.me"}],"homepage":"https://github.com/YT-TechDev/r3f-interactive-flow#readme","bugs":{"url":"https://github.com/YT-TechDev/r3f-interactive-flow/issues"},"dist":{"shasum":"e949a2bc5559d7c37e66777512b1a33d2b77f2ce","tarball":"https://registry.npmjs.org/r3f-interactive-flow/-/r3f-interactive-flow-2.9.0.tgz","fileCount":10,"integrity":"sha512-sQE26uvbS/Vg/6RA0wg9Vt2tPE2sss1A0X5oB/pEzXhmBNBGfN/eqZPI6sN8OsS5qH9V4iyqJuA6llf62fZFiQ==","signatures":[{"sig":"MEYCIQDYuV9oF/LznblQu+e9F4LhU1Ctc4N5J4uRiBM6LAY3oAIhAOK8VI7mvrhMDVsKNHCtvsYwBl2QYdJLkMELLe7h91IU","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/r3f-interactive-flow@2.9.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":274677},"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"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"gitHead":"fdc8aa94cd48362af9c3361d1c1bdb44617c7377","scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","pack:dry-run":"pnpm build && npm pack --dry-run"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8992e7fb-05d2-4bb6-9e50-d0b10c6cffa4"}},"repository":{"url":"git+https://github.com/YT-TechDev/r3f-interactive-flow.git","type":"git","directory":"packages/r3f-interactive-flow"},"_npmVersion":"12.0.1","description":"A small React Three Fiber utility for predictable phase-based interactive flow control.","directories":{},"sideEffects":false,"_nodeVersion":"22.23.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{},"peerDependencies":{"react":">=18.0.0 <20.0.0","three":">=0.150.0 <1.0.0","react-dom":">=18.0.0 <20.0.0","@react-three/fiber":">=8.0.0 <10.0.0"},"_npmOperationalInternal":{"tmp":"tmp/r3f-interactive-flow_2.9.0_1785059659957_0.2983967641482024","host":"s3://npm-registry-packages-npm-production"}},"2.10.0":{"name":"r3f-interactive-flow","version":"2.10.0","keywords":["react-three-fiber","three","react","r3f","interactive","phase","flow","animation","webgl"],"author":{"name":"YT-TechDev"},"license":"MIT","_id":"r3f-interactive-flow@2.10.0","maintainers":[{"name":"yuto.yt-techdev","email":"msc_prop@proton.me"}],"homepage":"https://github.com/YT-TechDev/r3f-interactive-flow#readme","bugs":{"url":"https://github.com/YT-TechDev/r3f-interactive-flow/issues"},"dist":{"shasum":"b8080a3c1135dcb38697c0aa18c4855692da9438","tarball":"https://registry.npmjs.org/r3f-interactive-flow/-/r3f-interactive-flow-2.10.0.tgz","fileCount":10,"integrity":"sha512-rhwCrtUm8ALkw5yguMpRSKl9zfqN3Thkf0xDJycUj9twuOWc84clq/om0y0gL2GTUNskbYWVLzjpXyr6/PgzXw==","signatures":[{"sig":"MEQCIBuA38LsakUks6/4pLAeXCVF4nDqey2rg5vFg738eeR4AiAetBciHk7uSO3LiRgukTnSytQ3QW01x22bQBMVbeuz4Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/r3f-interactive-flow@2.10.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":279829},"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"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"gitHead":"22fffd19cff5b56c2153197421ddfc9b3e6e1c6a","scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","pack:dry-run":"pnpm build && npm pack --dry-run"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8992e7fb-05d2-4bb6-9e50-d0b10c6cffa4"}},"repository":{"url":"git+https://github.com/YT-TechDev/r3f-interactive-flow.git","type":"git","directory":"packages/r3f-interactive-flow"},"_npmVersion":"12.0.1","description":"A small React Three Fiber utility for predictable phase-based interactive flow control.","directories":{},"sideEffects":false,"_nodeVersion":"22.23.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{},"peerDependencies":{"react":">=18.0.0 <20.0.0","three":">=0.150.0 <1.0.0","react-dom":">=18.0.0 <20.0.0","@react-three/fiber":">=8.0.0 <10.0.0"},"_npmOperationalInternal":{"tmp":"tmp/r3f-interactive-flow_2.10.0_1785123569333_0.5086587497159782","host":"s3://npm-registry-packages-npm-production"}},"2.11.0":{"name":"r3f-interactive-flow","version":"2.11.0","keywords":["react-three-fiber","three","react","r3f","interactive","phase","flow","animation","webgl"],"author":{"name":"YT-TechDev"},"license":"MIT","_id":"r3f-interactive-flow@2.11.0","maintainers":[{"name":"yuto.yt-techdev","email":"msc_prop@proton.me"}],"homepage":"https://github.com/YT-TechDev/r3f-interactive-flow#readme","bugs":{"url":"https://github.com/YT-TechDev/r3f-interactive-flow/issues"},"dist":{"shasum":"eff253f0698a348d8f75e6d0787f9c0eed69f208","tarball":"https://registry.npmjs.org/r3f-interactive-flow/-/r3f-interactive-flow-2.11.0.tgz","fileCount":10,"integrity":"sha512-p7eSsGWNGx8Ltw0/EiQNS8EUtcjjL/kpXvmvCoandcoCQmCSQoREbnJBmEej+/8/2B/f4mundk5b0IX9oItezw==","signatures":[{"sig":"MEUCIBdzMG5il93jSnXAAJtLGh+MK34fQxevVCoECojvX12sAiEA8xbF2TssuYXdZAUsQHlIlSURLgoa5HMPtzh0qjhVCDw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/r3f-interactive-flow@2.11.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":284646},"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"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"gitHead":"d7d9dc7e0bcf8d523fb316357afc0012bc1193e0","scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","pack:dry-run":"pnpm build && npm pack --dry-run"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8992e7fb-05d2-4bb6-9e50-d0b10c6cffa4"}},"repository":{"url":"git+https://github.com/YT-TechDev/r3f-interactive-flow.git","type":"git","directory":"packages/r3f-interactive-flow"},"_npmVersion":"12.0.1","description":"A small React Three Fiber utility for predictable phase-based interactive flow control.","directories":{},"sideEffects":false,"_nodeVersion":"22.23.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{},"peerDependencies":{"react":">=18.0.0 <20.0.0","three":">=0.150.0 <1.0.0","react-dom":">=18.0.0 <20.0.0","@react-three/fiber":">=8.0.0 <10.0.0"},"_npmOperationalInternal":{"tmp":"tmp/r3f-interactive-flow_2.11.0_1785185789808_0.28003661190746776","host":"s3://npm-registry-packages-npm-production"}},"2.11.1":{"name":"r3f-interactive-flow","version":"2.11.1","keywords":["react-three-fiber","three","react","r3f","interactive","phase","flow","animation","webgl"],"author":{"name":"YT-TechDev"},"license":"MIT","_id":"r3f-interactive-flow@2.11.1","maintainers":[{"name":"yuto.yt-techdev","email":"msc_prop@proton.me"}],"homepage":"https://github.com/YT-TechDev/r3f-interactive-flow#readme","bugs":{"url":"https://github.com/YT-TechDev/r3f-interactive-flow/issues"},"dist":{"shasum":"7a7713c4e8ae52d1b70b80438741c0f7ed762d22","tarball":"https://registry.npmjs.org/r3f-interactive-flow/-/r3f-interactive-flow-2.11.1.tgz","fileCount":10,"integrity":"sha512-CULEdGuaow3nORhC0LEAqLZ+7n7uKbhocdCPdwoyv61wn90UKNTNnx5LsOIOop/LeF0WtythOXU0HHglLrExeA==","signatures":[{"sig":"MEUCIQCG271Ny1tL9QCWAiqwcOL4RsZ9QXXWkeVOSTHziypBvAIgUphD0O3jBs4Yx1lwGRLFDQxl7ud6saurQzntkwRH/FU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/r3f-interactive-flow@2.11.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":287316},"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"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"gitHead":"9d5b46822c2ee3cf3bf132d9731c4a1d1fa58444","scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","pack:dry-run":"pnpm build && npm pack --dry-run"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8992e7fb-05d2-4bb6-9e50-d0b10c6cffa4"}},"repository":{"url":"git+https://github.com/YT-TechDev/r3f-interactive-flow.git","type":"git","directory":"packages/r3f-interactive-flow"},"_npmVersion":"12.0.1","description":"A small React Three Fiber utility for predictable phase-based interactive flow control.","directories":{},"sideEffects":false,"_nodeVersion":"22.23.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{},"peerDependencies":{"react":">=18.0.0 <20.0.0","three":">=0.150.0 <1.0.0","react-dom":">=18.0.0 <20.0.0","@react-three/fiber":">=8.0.0 <10.0.0"},"_npmOperationalInternal":{"tmp":"tmp/r3f-interactive-flow_2.11.1_1785319466829_0.1194171873468326","host":"s3://npm-registry-packages-npm-production"}},"2.12.0":{"name":"r3f-interactive-flow","version":"2.12.0","description":"A small React Three Fiber utility for predictable phase-based interactive flow control.","license":"MIT","author":{"name":"YT-TechDev"},"type":"module","sideEffects":false,"main":"./dist/index.cjs","module":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"keywords":["react-three-fiber","three","react","r3f","interactive","phase","flow","animation","webgl"],"repository":{"type":"git","url":"git+https://github.com/YT-TechDev/r3f-interactive-flow.git","directory":"packages/r3f-interactive-flow"},"homepage":"https://github.com/YT-TechDev/r3f-interactive-flow#readme","bugs":{"url":"https://github.com/YT-TechDev/r3f-interactive-flow/issues"},"publishConfig":{"access":"public"},"scripts":{"build":"tsup","typecheck":"tsc --noEmit","test":"vitest run","test:watch":"vitest","pack:dry-run":"pnpm build && npm pack --dry-run"},"peerDependencies":{"@react-three/fiber":">=8.0.0 <10.0.0","react":">=18.0.0 <20.0.0","react-dom":">=18.0.0 <20.0.0","three":">=0.150.0 <1.0.0"},"devDependencies":{},"gitHead":"9c1e1d7b4dee026f4e5724435315f72eb11974ce","_id":"r3f-interactive-flow@2.12.0","_nodeVersion":"22.23.1","_npmVersion":"12.0.1","dist":{"integrity":"sha512-5weq7N3ewOChUZ3i5QJ1To+pEQFWPuKPfQ38NkvtkZrw5/1JOfASBIcRRuGsQ7bDd+U2IzYSI8jsqftYTJc6dg==","shasum":"4e18cf7ac09ed4d2ec1cd0b27bb7a7f78e3050fe","tarball":"https://registry.npmjs.org/r3f-interactive-flow/-/r3f-interactive-flow-2.12.0.tgz","fileCount":10,"unpackedSize":289489,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/r3f-interactive-flow@2.12.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQC1lxepsLotpC2ES5Ysn0jF/W6EnbDTfWS3vddaBGVjdAIgWmLdNVODegQ7phQfwXtHQYFi0e5DPOqonnqLudwi7BU="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8992e7fb-05d2-4bb6-9e50-d0b10c6cffa4"}},"directories":{},"maintainers":[{"name":"yuto.yt-techdev","email":"msc_prop@proton.me"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/r3f-interactive-flow_2.12.0_1786429319466_0.6779137367462627"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-11T04:44:25.646Z","modified":"2026-08-11T06:21:59.949Z","0.1.0":"2026-06-11T04:44:25.984Z","0.2.0":"2026-06-14T02:39:31.471Z","0.3.0":"2026-06-15T03:26:36.402Z","0.4.0":"2026-06-16T00:40:12.006Z","0.5.0":"2026-06-16T09:30:12.289Z","0.6.0":"2026-06-17T00:44:43.092Z","0.7.0":"2026-06-26T07:15:38.570Z","0.8.0":"2026-06-26T23:07:52.216Z","0.9.0":"2026-06-27T05:39:41.140Z","1.0.0":"2026-06-27T08:23:44.150Z","1.2.5":"2026-07-02T23:22:44.525Z","1.3.0":"2026-07-03T05:07:54.128Z","1.4.0":"2026-07-03T15:14:31.886Z","1.5.0":"2026-07-03T17:15:47.539Z","1.6.0":"2026-07-03T19:45:22.271Z","1.7.0":"2026-07-04T02:04:12.416Z","1.8.0":"2026-07-04T06:39:38.890Z","1.9.0":"2026-07-04T18:14:36.713Z","2.0.0":"2026-07-05T01:17:57.772Z","2.1.0":"2026-07-05T07:08:44.744Z","2.2.0":"2026-07-05T10:02:08.155Z","2.3.0":"2026-07-08T05:18:14.887Z","2.3.1":"2026-07-11T03:28:59.633Z","2.4.0":"2026-07-19T23:04:14.246Z","2.5.0":"2026-07-21T10:07:51.376Z","2.6.0":"2026-07-22T08:24:57.651Z","2.7.0":"2026-07-23T13:53:03.330Z","2.8.0":"2026-07-24T05:11:10.710Z","2.8.1":"2026-07-26T05:09:06.327Z","2.9.0":"2026-07-26T09:54:20.108Z","2.10.0":"2026-07-27T03:39:29.481Z","2.11.0":"2026-07-27T20:56:29.964Z","2.11.1":"2026-07-29T10:04:26.990Z","2.12.0":"2026-08-11T06:21:59.620Z"},"bugs":{"url":"https://github.com/YT-TechDev/r3f-interactive-flow/issues"},"author":{"name":"YT-TechDev"},"license":"MIT","homepage":"https://github.com/YT-TechDev/r3f-interactive-flow#readme","keywords":["react-three-fiber","three","react","r3f","interactive","phase","flow","animation","webgl"],"repository":{"type":"git","url":"git+https://github.com/YT-TechDev/r3f-interactive-flow.git","directory":"packages/r3f-interactive-flow"},"description":"A small React Three Fiber utility for predictable phase-based interactive flow control.","maintainers":[{"name":"yuto.yt-techdev","email":"msc_prop@proton.me"}],"readme":"# r3f-interactive-flow\n\n`r3f-interactive-flow` is a small React Three Fiber utility for predictable phase-based interactive flow control in client-side React/R3F sites.\n\nIt helps an app describe a known list of phases, move between those phases with `next`, `prev`, and `goTo`, read transition progress from DOM/UI, connect optional browser input hooks, and bridge the same flow state into Canvas-bound frame updates with `useFlowFrame`.\n\nThis README describes the current stable public API for r3f-interactive-flow. For release history, see CHANGELOG.md.\n\n## Mental model\n\n- `FlowProvider` owns one phase machine and the single transition clock that advances it, one step per animation frame while a transition settles.\n- `useFlow` reads the current phase snapshot and controls phase changes with `next`, `prev`, `goTo`, `lock`, and `unlock`. Its `progress` advances continuously during a transition.\n- `useFlowProgress` reads that same transition progress for DOM/client UI such as labels and progress bars, and updates every frame while a transition runs.\n- `useFlowFrame` is a read-only R3F observer for scene animation: it reads the same machine inside the Canvas frame loop without advancing it, and belongs inside Canvas-bound components.\n- `useWheelInput`, `useTouchInput`, and `useKeyboardInput` are optional browser input helpers that call the existing flow controls from components mounted under `FlowProvider`.\n\nReact manages application and UI state. React Three Fiber manages frame-based scene updates. This package keeps phase transitions, input, DOM/UI coordination, and the Canvas frame bridge explicit.\n\n## Public API\n\nImport public APIs from the package root:\n\n```ts\nimport {\n  FlowProvider,\n  useFlow,\n  useFlowProgress,\n  useFlowFrame,\n  useWheelInput,\n  useTouchInput,\n  useKeyboardInput\n} from \"r3f-interactive-flow\";\n```\n\nPublic type exports are limited to the documented provider, frame bridge, transition, and input option types:\n\n```ts\nimport type {\n  FlowFrameCallback,\n  FlowFrameState,\n  FlowInputTarget,\n  FlowTransitionBaseOptions,\n  FlowTransitionOptions,\n  UseKeyboardInputOptions,\n  UseTouchInputOptions,\n  UseWheelInputOptions\n} from \"r3f-interactive-flow\";\n```\n\nDo not import from internal package paths such as `r3f-interactive-flow/react`, `r3f-interactive-flow/r3f`, or `r3f-interactive-flow/input`; those paths are not public package exports.\n\nSupported imports are package-root imports only. Internal source, build, or responsibility-specific paths are not public API, including `r3f-interactive-flow/src/*`, `r3f-interactive-flow/dist/*`, `r3f-interactive-flow/react`, `r3f-interactive-flow/r3f`, and `r3f-interactive-flow/input`.\n\n## Validated integration behavior\n\nPublished-package validation for the v2.5.0 usage milestone exercised `r3f-interactive-flow@2.4.0` from npm through package-root imports only. The durable behavior validated for consumers is that `next()`, `prev()`, and direct `goTo()` share one `FlowProvider` machine; rejected navigation from boundaries, locks, active transitions, or cooldowns is safe and does not queue stale movement.\n\nA single `FlowProvider` can wrap DOM controls, input helpers, progress UI, and a Canvas subtree. DOM navigation and `useFlowProgress` do not require Canvas, and a remounted Canvas can observe the current provider-owned flow again through read-only `useFlowFrame` consumers. Input hooks call the existing `next` and `prev` controls. Accepted input navigation may call `preventDefault()` when enabled; rejected navigation remains unprevented. `useWheelInput` and `useTouchInput` skip `preventDefault()` for explicitly non-cancelable events without making navigation acceptance depend on event cancelability. `preventDefault: true` does not guarantee that native browser behavior can always be interrupted. Reduced motion is application-owned: pass the transition timing your app wants, and use a React `key` remount only when you intentionally want to apply a new provider configuration and reset flow state.\n\nThe evidence included representative desktop Chrome validation with physical mouse, high-resolution trackpad, and keyboard input, plus physical iPhone Safari touch validation. This is not broad browser certification, and optional physical tablet validation was not completed. Current bounded evidence includes focused Node/minimal-DOM tests for deterministic library contracts and one Vitest Browser Mode file running through a Playwright-managed headless Chromium instance for native activation, focus non-interference, prevention, repeat, and DOM ancestry. This is not physical-device, screen-reader, cross-browser, WCAG, or accessibility certification. The detailed input guide is available at <https://github.com/YT-TechDev/r3f-interactive-flow/blob/main/docs/guides/input-handling.md>, the accessible interaction and reduced-motion guide is available at <https://github.com/YT-TechDev/r3f-interactive-flow/blob/main/docs/guides/accessibility-and-reduced-motion.md>, and the repository evidence report is available at <https://github.com/YT-TechDev/r3f-interactive-flow/blob/main/docs/releases/v2.5.0-real-world-browser-validation-report.md>.\n\n## Install\n\n```bash\npnpm add r3f-interactive-flow three @react-three/fiber react react-dom\n```\n\nnpm and yarn equivalents are also fine:\n\n```bash\nnpm install r3f-interactive-flow three @react-three/fiber react react-dom\nyarn add r3f-interactive-flow three @react-three/fiber react react-dom\n```\n\n## Peer dependencies\n\n`react`, `react-dom`, `three`, and `@react-three/fiber` are peer dependencies and should be installed by the application.\n\n```json\n{\n  \"@react-three/fiber\": \">=8.0.0 <10.0.0\",\n  \"react\": \">=18.0.0 <20.0.0\",\n  \"react-dom\": \">=18.0.0 <20.0.0\",\n  \"three\": \">=0.150.0 <1.0.0\"\n}\n```\n\nThe package does not add Next.js, `@react-three/drei`, GSAP, Framer Motion, or any visual-effect library as a dependency.\n\n## Consumer and compatibility policy\n\nThe peer ranges above are the allowed installation ranges, not evidence that every version combination has been tested. The peer compatibility check exercises these exact representative configurations:\n\n| React / React DOM | React Three Fiber | Three.js |\n| ----------------- | ----------------- | -------- |\n| 18.3.1            | 8.18.0            | 0.150.1  |\n| 19.2.7            | 9.6.1             | 0.185.1  |\n\nThe regular repository checks use the versions resolved by the lockfile. These checks and the package audits prove package-root TypeScript resolution, ESM `import`, CommonJS `require`, and matching declarations for the exercised configurations. They do not guarantee every TypeScript version, compiler mode, bundler, or resolver. The eight types listed under [Public API](#public-api) are intentional named root exports; types that appear only structurally in public signatures are not additional named exports. Consumer imports are package-root only, and internal source, build, and responsibility paths remain private.\n\n`FlowProvider`, `useFlow`, `useFlowProgress`, and the input hooks belong to client-side React/DOM work. Input listeners attach in client-side effects rather than at module import time. `useFlowFrame` is Canvas-bound and must run in an R3F `<Canvas>` subtree under `FlowProvider`. Keep DOM input handling separate from scene logic, and keep frame-driven scene values in refs, mutable Three.js objects, or Canvas-local frame logic rather than per-frame React state.\n\nBrowser evidence is bounded to the Node/minimal-DOM tests, the headless Chromium smoke described above, and the historically scoped physical-device checks linked above. It is not a cross-browser, physical-device, native-scroll, screen-reader, WCAG, accessibility, or performance certification. Accessible controls, focus behavior, reduced motion, responsive layout, and application UX remain application responsibilities.\n\nThe maintained Vite example and temporary Vite/Rolldown consumer checks demonstrate representative package consumption, not a promise for every Vite, bundler, or framework configuration. Next.js App Router usage is limited to Client Components as described below; the package does not support hooks in Server Components or provide router, deployment-platform, SSR-framework, or hosting integration. Next.js is not a package dependency.\n\nSecurity fixes are prioritized for the latest stable release; this is not an LTS commitment for older release lines. Changes to peer ranges, compiler or module-resolution expectations, browser or framework coverage, or support duration require concrete evidence, a focused Issue, compatibility and maintenance-cost review, and an explicit documentation update.\n\n## Transition semantics\n\nThis section is the complete public transition contract and stands on its own. Current regression coverage includes `createFlowMachine.transition-regressions.test.ts`, `FlowProvider.test.tsx`, and `useFlowFrame.test.tsx`.\n\n### Initial snapshot\n\nOn mount, the snapshot reports the configured `initialPhase` (or the first phase in `phases`), `progress: 0`, `direction: \"none\"`, `isTransitioning: false`, and `isCoolingDown: false`.\n\nThe navigation controls have these signatures:\n\n```ts\nnext: () => boolean;\nprev: () => boolean;\ngoTo: (phase: TPhase) => boolean;\n```\n\nAccepted known navigation returns `true`; known safe rejection returns `false`. The result reports request acceptance, not transition completion. Existing statement-position calls such as `next()` remain valid because callers may ignore the result. `lock()` and `unlock()` remain `void`.\n\n### Accepted navigation start (positive duration)\n\nImmediately after an accepted `next()`, `prev()`, or different-phase `goTo()` with a positive `duration`:\n\n| Field                | Value                                                    |\n| -------------------- | -------------------------------------------------------- |\n| `phase`/`phaseIndex` | the accepted **target**, synchronously                   |\n| `progress`           | `0`                                                      |\n| `direction`          | `\"next\"` or `\"prev\"`, from target index vs. source index |\n| `isTransitioning`    | `true`                                                   |\n\nThe **source** phase (the phase being left) selects `transition.byPhase` options for this transition, but the source phase itself is not exposed in the public snapshot — only the target `phase` is.\n\n### Active transition: easing and progress\n\nWhile a positive-duration transition runs, raw elapsed progress is derived from elapsed time and `duration`, and the configured easing function receives that raw progress. Ordinary finite easing output is clamped to `[0, 1]` and becomes public `progress`.\n\n- A non-monotonic or endpoint-producing custom easing function can make `progress` decrease, or reach `0` or `1`, before the transition actually finishes.\n- **Raw elapsed time — not the eased `progress` value — decides completion.** Reaching `progress === 1` does not by itself prove the transition is done.\n- `direction` and `isTransitioning` both stay unchanged until raw completion.\n\nUse `isTransitioning` as the lifecycle signal, not `progress === 1` alone. Non-finite (`NaN`, `Infinity`) easing return values are not part of the stable contract — treat them as an incidental implementation detail, not something to rely on.\n\n### Completion\n\nAt raw completion: `progress` is forced to `1`, `direction` becomes `\"none\"`, `isTransitioning` becomes `false`, and provider cooldown begins (if configured). `isCoolingDown` is `true` while that machine-wide provider cooldown has positive time remaining, then changes to `false` at expiry. Other completed snapshot fields stay stable through cooldown-only time.\n\n### Adjacent and non-adjacent `goTo()`\n\n`next()`/`prev()` move exactly one phase index. `goTo(target)` navigates directly to any known phase, forward or backward, in **one** transition:\n\n```text\nphases: [\"intro\", \"overview\", \"detail\", \"contact\"]\ncurrent: \"intro\" (index 0)\ngoTo(\"contact\") -> target \"contact\" (index 3), direction \"next\"\n```\n\nIntermediate phases (`\"overview\"`, `\"detail\"`) are neither visited nor queued. `transition.byPhase` resolves from the source phase for both adjacent and non-adjacent navigation. There is no route-pair configuration, graph, queue, or timeline — one direct transition per accepted call.\n\n### Rejection and errors\n\n| Request                            | Blocking condition          | Result                       |\n| ---------------------------------- | --------------------------- | ---------------------------- |\n| `next`/`prev`                      | out of bounds               | returns `false`, no mutation |\n| `goTo(known target)`               | same as current phase       | returns `false`, no mutation |\n| `next`/`prev`/`goTo(known target)` | manual lock active          | returns `false`, no mutation |\n| `next`/`prev`/`goTo(known target)` | active transition           | returns `false`, no mutation |\n| `next`/`prev`/`goTo(known target)` | provider cooldown remaining | returns `false`, no mutation |\n| `goTo(unknown target)`             | any state                   | **throws**, no mutation      |\n\nAn unknown `goTo()` target throws before the normal lock/transition/cooldown rejection path — this happens even while locked, transitioning, or in cooldown. With a properly typed closed phase union (an `as const` phase tuple), ordinary application code cannot construct an unknown target; an unsafe cast or an unvalidated dynamic string is what reaches this path. Known targets never throw — they are rejected as a safe no-op instead.\n\n### Transition option precedence\n\nEach option field resolves independently, in this order:\n\n1. `transition.byPhase[sourcePhase].field`\n2. `transition.field`\n3. legacy top-level field (`transitionDurationMs`, `cooldownMs`, `easing` prop)\n4. package default\n\nDefaults: `duration: 1000`, `cooldown: 0`, `easing`: linear.\n\nA `byPhase` override for one field (say, `duration`) does not replace the other fields (`cooldown`, `easing`) — each field falls back through the precedence chain independently. `byPhase` selects by **source** phase only; it does not select by target phase or by a source/target pair.\n\n### Zero-duration transitions\n\nAn accepted transition with `duration: 0` returns `true` and completes synchronously in the same call: `phase`/`phaseIndex` update immediately, `progress` is `1` immediately, `direction` is `\"none\"` immediately, and `isTransitioning` stays `false` — there is no observable active-transition frame. Provider cooldown (if configured) starts immediately. The `true` result still reports acceptance rather than serving as a completion signal.\n\n### Manual lock and cooldown composition\n\n- **Manual lock** (`lock()`/`unlock()`) blocks new valid navigation. It does not pause, cancel, or slow an active transition, and it does not pause provider cooldown. It is a navigation gate, not a clock pause.\n- **Provider cooldown** belongs to the provider-owned flow machine. It starts once a transition completes (including synchronous zero-duration completion) and rejects manual controls and all input hooks globally until it elapses. `useFlow()` exposes this machine-wide lifecycle as `isCoolingDown`: positive-duration transitions set it after completion, while accepted zero-duration transitions may set it synchronously. It continues to run while manual lock is active. The boolean is not a countdown and exposes no remaining time.\n- **Hook-local cooldown** belongs only to one `useWheelInput`/`useTouchInput`/`useKeyboardInput` instance. It starts only after that hook produces an accepted navigation and throttles only that hook — it does not lock the machine and does not block direct `next`/`prev`/`goTo` calls or other hook instances when provider state is otherwise ready.\n\nFor a control that should be unavailable at every provider-owned navigation gate:\n\n```ts\nconst { isTransitioning, isCoolingDown, isLocked } = useFlow();\nconst disabled = isTransitioning || isCoolingDown || isLocked;\n```\n\nHook-local input cooldown never changes `isCoolingDown`.\n\n### React and R3F sampling\n\nOne `FlowProvider` owns one flow machine and its transition clock for its mounted lifetime. `useFlow` and `useFlowProgress` are the public React/DOM observation surface; `useFlowFrame` (Canvas-bound) is a read-only R3F observer that samples the same machine every frame without advancing it. Multiple React and R3F consumers observe the same provider-owned flow, but React commits and R3F frames run on separate scheduling paths — they are not guaranteed to read the exact same `progress` at the exact same instant.\n\n### Source and target metadata\n\nr3f-interactive-flow intentionally does not add `sourcePhase`, `targetPhase`, or `previousPhase` to `FlowSnapshot`, `FlowControls`, or `FlowFrameState`. Evaluation found no genuine missing capability: `phase` already reports the accepted target immediately, and `direction` reports forward/reverse for positive-duration transitions.\n\nWhen application code needs the phase a transition left from, retain the previously observed public `phase` and compare it against the current one, but the comparison point differs by environment:\n\n- **React** (`useFlow`): compare committed phase observations inside a `useEffect` that depends on `phase`, so the trace updates only after an actually committed phase change, not during render.\n- **R3F** (`useFlowFrame`): compare samples directly inside the frame callback, since that callback already runs once per Canvas frame outside React's render cycle.\n\nIn both environments: when the retained value differs from the newly observed `phase`, the retained value is the source and the new `phase` is the target; then update the retained value. For a positive-duration transition, use the current `direction` directly. For a zero-duration transition (where `direction` is already `\"none\"` in the same call), derive direction by comparing the source and target phase indexes instead.\n\nRejected and same-phase requests never mutate the public `phase`, so this derivation never records a false trace. This pattern is application code built on public `useFlow`/`useFlowFrame` output — it is not a package API, and no such field is planned. React and R3F observe the same provider-owned machine through separate scheduling paths, so do not assume a React comparison and an R3F frame comparison land on the exact same instant.\n\n## Minimal setup\n\nDefine phases as a stable const tuple, wrap the shared DOM and Canvas subtree with `FlowProvider`, and consume flow state from hooks under the provider.\n\n```tsx\n\"use client\";\n\nimport { Canvas } from \"@react-three/fiber\";\nimport { useRef } from \"react\";\nimport type * as THREE from \"three\";\nimport { FlowProvider, useFlow, useFlowFrame, useFlowProgress } from \"r3f-interactive-flow\";\n\nconst phases = [\"intro\", \"work\", \"contact\"] as const;\ntype Phase = (typeof phases)[number];\n\nfunction Controls() {\n  const { phase, phaseIndex, next, prev, goTo } = useFlow<Phase>();\n\n  return (\n    <div>\n      <p>Current phase: {phase}</p>\n      <button type=\"button\" onClick={prev} disabled={phaseIndex === 0}>\n        Previous\n      </button>\n      <button type=\"button\" onClick={next} disabled={phaseIndex === phases.length - 1}>\n        Next\n      </button>\n      <button type=\"button\" onClick={() => goTo(\"contact\")}>\n        Contact\n      </button>\n    </div>\n  );\n}\n\nfunction ProgressLabel() {\n  const progress = useFlowProgress();\n\n  return <span>{Math.round(progress * 100)}%</span>;\n}\n\nfunction SceneObject() {\n  const meshRef = useRef<THREE.Mesh | null>(null);\n\n  useFlowFrame<Phase>(({ phase, progress }) => {\n    if (!meshRef.current) {\n      return;\n    }\n\n    meshRef.current.rotation.y = progress * Math.PI;\n    meshRef.current.visible = phase !== \"contact\";\n  });\n\n  return (\n    <mesh ref={meshRef}>\n      <boxGeometry />\n      <meshStandardMaterial />\n    </mesh>\n  );\n}\n\nexport function App() {\n  return (\n    <FlowProvider phases={phases}>\n      <Controls />\n      <ProgressLabel />\n\n      <Canvas>\n        <ambientLight />\n        <SceneObject />\n      </Canvas>\n    </FlowProvider>\n  );\n}\n```\n\n`FlowProvider` reads its configuration when that provider instance mounts. Ordinary parent rerenders, including fresh equivalent inline arrays or objects, preserve the current flow state; changing configuration props alone does not reconfigure the mounted machine. To intentionally reset state or apply new phases, timing, cooldown, or easing, change the provider element's React `key` so React remounts it. Hoist phase tuples for TypeScript inference, readability, and a clear phase type—not merely to prevent rerender resets. `key` is React's remount mechanism, not a `FlowProvider` API prop.\n\n## Focused usage recipes\n\nThese recipes use package root imports only. Keep DOM controls and input layers under `FlowProvider`; keep R3F frame work inside Canvas-bound components.\n\n### Minimal phase navigation\n\n```tsx\nimport { FlowProvider, useFlow } from \"r3f-interactive-flow\";\n\nconst phases = [\"intro\", \"work\", \"contact\"] as const;\ntype Phase = (typeof phases)[number];\n\nfunction Navigation() {\n  const { phase, phaseIndex, next, prev, goTo } = useFlow<Phase>();\n\n  return (\n    <nav>\n      <p>Phase: {phase}</p>\n      <button type=\"button\" onClick={prev} disabled={phaseIndex === 0}>\n        Previous\n      </button>\n      <button type=\"button\" onClick={next} disabled={phaseIndex === phases.length - 1}>\n        Next\n      </button>\n      <button type=\"button\" onClick={() => goTo(\"contact\")}>\n        Contact\n      </button>\n    </nav>\n  );\n}\n\nexport function App() {\n  return (\n    <FlowProvider phases={phases} initialPhase=\"intro\">\n      <Navigation />\n    </FlowProvider>\n  );\n}\n```\n\n### DOM controls with flow state\n\n```tsx\nfunction PhaseControls() {\n  const { phase, phaseIndex, next, prev, goTo } = useFlow<Phase>();\n\n  return (\n    <section>\n      <p>\n        {phaseIndex + 1} / {phases.length}: {phase}\n      </p>\n      <button type=\"button\" onClick={prev} disabled={phaseIndex === 0}>\n        Previous\n      </button>\n      <button type=\"button\" onClick={next} disabled={phaseIndex === phases.length - 1}>\n        Next\n      </button>\n      <button type=\"button\" onClick={() => goTo(\"work\")}>\n        Work\n      </button>\n    </section>\n  );\n}\n```\n\nUse DOM controls outside `<Canvas>` when they are regular page UI. They can still share the same flow state as the Canvas subtree through one `FlowProvider`.\n\n### Reading transition progress\n\n```tsx\nimport { useFlowProgress } from \"r3f-interactive-flow\";\n\nfunction ProgressBar() {\n  const progress = useFlowProgress();\n\n  return <progress max={1} value={progress} aria-label=\"Flow transition progress\" />;\n}\n```\n\n`useFlowProgress` is for DOM UI such as labels and progress bars. It updates every animation frame while a transition runs, so this `<progress>` element moves smoothly from `0` to `1` with no `<Canvas>` mounted — navigation and progress are fully Canvas-free. Reserve `useFlowFrame` for animating an R3F scene instead of copying every-frame values into React state.\n\n### Driving R3F frame updates\n\n```tsx\nimport { useRef } from \"react\";\nimport type * as THREE from \"three\";\nimport { useFlowFrame } from \"r3f-interactive-flow\";\n\nfunction FlowMesh() {\n  const meshRef = useRef<THREE.Mesh | null>(null);\n\n  useFlowFrame<Phase>(({ phase, progress }, delta) => {\n    if (!meshRef.current) {\n      return;\n    }\n\n    meshRef.current.rotation.y += delta;\n    meshRef.current.position.x = phase === \"work\" ? progress * 2 : 0;\n  });\n\n  return <mesh ref={meshRef} />;\n}\n```\n\nCall `useFlowFrame` only from components rendered inside `<Canvas>` and under `FlowProvider`. Update refs or Three.js objects in the frame callback instead of routing high-frequency scene values through React state.\n\n### Basic input hooks\n\n```tsx\nimport { useKeyboardInput, useTouchInput, useWheelInput } from \"r3f-interactive-flow\";\n\nconst inputIgnore = [\"[data-flow-ignore]\"] as const;\nconst keyboardKeys = {\n  next: [\"ArrowDown\", \"ArrowRight\", \"PageDown\"],\n  prev: [\"ArrowUp\", \"ArrowLeft\", \"PageUp\"]\n} as const;\n\nfunction InputLayer() {\n  useWheelInput<Phase>({ threshold: 40, cooldown: 500, ignore: inputIgnore });\n  useTouchInput<Phase>({ threshold: 50, cooldown: 500, ignore: inputIgnore });\n  useKeyboardInput<Phase>({ cooldown: 250, keys: keyboardKeys });\n\n  return null;\n}\n```\n\nMount input hooks from a client-side input layer under `FlowProvider`, outside the R3F scene tree by default. Browser listeners are attached in React Effects after mount; `enabled: false` skips setup, and cleanup follows unmount or Effect replacement. An omitted target resolves to `window`, but an unresolved explicit ref attaches nowhere and never falls back to `window`. Later arbitrary `ref.current` changes are not automatically tracked; for dynamic targets, pass a resolved element through React state or intentionally reconfigure/remount the input layer. Touch support is bounded single-touch swipe behavior, not a full gesture framework. Use `ignore` selectors for wheel and touch regions that should not trigger flow navigation, such as `<div data-flow-ignore />`; keyboard input has no `ignore` selector and ignores typing targets by default.\n\n### Lock and cooldown notes\n\nUse the existing `lock`, `unlock`, provider transition cooldown, and input hook cooldown options to prevent repeated accidental phase changes. Provider transition cooldown starts after the accepted transition completes, runs for the full configured duration after completion, and applies globally to manual controls and all input hooks. Hook-local cooldown starts only after that hook produces an accepted input navigation and remains separate. Input hooks respect active positive-duration transitions, locks, phase boundaries, and cooldowns; they drive the same `next` and `prev` controls rather than bypassing flow state. There is no `lockDuringTransition` option in the current v2 API. A transition duration of `0` is supported as immediate: `progress` settles at `1`, `isTransitioning` is `false`, and any provider cooldown starts immediately after that synchronous completion.\n\n## FlowProvider and flow controls\n\n`FlowProvider` creates one phase machine for a known list of phases. Place it above the DOM controls, status UI, optional browser input helpers, and `<Canvas>` subtree that should share one flow state.\n\n```tsx\nconst phases = [\"intro\", \"details\", \"contact\"] as const;\ntype Phase = (typeof phases)[number];\n\nfunction Status() {\n  const progress = useFlowProgress();\n  const { phase, isTransitioning } = useFlow<Phase>();\n\n  return (\n    <p>\n      {phase} · {Math.round(progress * 100)}%{isTransitioning ? \" transitioning\" : \" ready\"}\n    </p>\n  );\n}\n\nfunction Controls() {\n  const { phaseIndex, next, prev, goTo } = useFlow<Phase>();\n\n  return (\n    <div>\n      <button type=\"button\" onClick={prev} disabled={phaseIndex === 0}>\n        Previous\n      </button>\n      <button type=\"button\" onClick={next} disabled={phaseIndex === phases.length - 1}>\n        Next\n      </button>\n      <button type=\"button\" onClick={() => goTo(\"contact\")}>\n        Contact\n      </button>\n    </div>\n  );\n}\n\nexport function ExperienceShell() {\n  return (\n    <FlowProvider\n      phases={phases}\n      initialPhase=\"intro\"\n      transition={{ duration: 700, cooldown: 250 }}\n    >\n      <Status />\n      <Controls />\n    </FlowProvider>\n  );\n}\n```\n\n`useFlow` returns the current phase snapshot and controls such as `next`, `prev`, `goTo`, `lock`, and `unlock`. Use it for DOM/client controls, labels, and phase-aware UI.\n\n`useFlowProgress` returns the current transition progress from the active provider snapshot. Use it for DOM progress labels, status displays, and progress bars; it advances continuously while a transition runs. For frame-driven scene animation, use `useFlowFrame` inside Canvas-bound components instead of pushing every-frame values through React state.\n\n## R3F frame bridge\n\n`useFlowFrame` bridges flow state into the React Three Fiber frame loop for scene animation. It is a read-only observer: it reads the provider-owned machine each frame without advancing it, so transitions are driven by the provider clock whether or not any `useFlowFrame` consumer is mounted. It must be called from a component rendered inside `<Canvas>` and under `FlowProvider`.\n\n```tsx\nfunction FlowBox() {\n  const meshRef = useRef<THREE.Mesh | null>(null);\n\n  useFlowFrame<Phase>(({ progress }, delta) => {\n    if (!meshRef.current) {\n      return;\n    }\n\n    meshRef.current.rotation.y += delta;\n    meshRef.current.position.x = progress * 2;\n  });\n\n  return <mesh ref={meshRef} />;\n}\n```\n\nKeep high-frequency visual values in refs, mutable Three.js objects, or Canvas-local frame state. Do not push every-frame mesh positions, material values, camera movement, or transition interpolation through React state unless you are intentionally synchronizing a stable UI snapshot.\n\n## Input hooks\n\nThe input hooks are optional DOM/browser helpers. Mount them from client-side React components under `FlowProvider`, outside the R3F scene tree by default.\n\n```tsx\nfunction InputLayer() {\n  useWheelInput<Phase>({ threshold: 40, cooldown: 500 });\n  useTouchInput<Phase>({ threshold: 50, cooldown: 500 });\n  useKeyboardInput<Phase>({\n    keys: {\n      next: [\"ArrowDown\", \"ArrowRight\", \"PageDown\"],\n      prev: [\"ArrowUp\", \"ArrowLeft\", \"PageUp\"]\n    }\n  });\n\n  return null;\n}\n```\n\n- `useWheelInput` maps wheel movement to `next` and `prev`.\n- `useTouchInput` maps swipe gestures to `next` and `prev`.\n- `useKeyboardInput` maps configured keys to `next` and `prev`.\n\nThe hooks attach browser event listeners from effects, support `enabled: false`, and do not access browser APIs at module import time. They drive the existing flow controls; they are not a full gesture system and do not bypass locks, active transitions, boundaries, or cooldown behavior.\n\n## Client usage and Next.js App Router boundary\n\n`FlowProvider`, `useFlow`, `useFlowProgress`, `useFlowFrame`, and input hooks are client-side React APIs. In Next.js App Router projects, use them from Client Components and add `\"use client\"` to files that render the provider or call these hooks.\n\n- Server Components can pass serializable data into a Client Component wrapper, but this package does not claim Server Component support.\n- Do not render `FlowProvider` or call flow hooks directly from Server Components.\n- Do not access `window`, `document`, or browser event APIs at module import time. Browser input hooks attach listeners only from client-side runtime effects.\n- `useFlowFrame` still belongs only in Canvas-bound components.\n- The package is Next.js compatible, but not Next.js integrated. Next.js is not a dependency.\n- The package does not provide Next.js router integration.\n\n## Hook boundary summary\n\n| Hook or component                                    | Where it belongs                                                         | Use it for                                                                                               |\n| ---------------------------------------------------- | ------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------- |\n| `FlowProvider`                                       | Client-side React tree around the UI and Canvas integration area         | One shared phase machine for DOM controls, status UI, optional input helpers, and the `<Canvas>` subtree |\n| `useFlow`                                            | Client-side React components rendered under `FlowProvider`               | Phase state, labels, navigation controls, locks, and DOM/client UI wiring                                |\n| `useFlowProgress`                                    | Client-side React components rendered under `FlowProvider`               | DOM progress labels, status text, and progress bars that update continuously during a transition         |\n| `useFlowFrame`                                       | R3F scene components rendered inside `<Canvas>` and under `FlowProvider` | Bridging flow state into the R3F frame loop for refs and Canvas-local objects                            |\n| `useWheelInput`, `useTouchInput`, `useKeyboardInput` | Client-side React input layer components rendered under `FlowProvider`   | Browser wheel, touch, and keyboard listeners that drive existing flow controls                           |\n\n## Do / do not\n\nDo:\n\n- Import supported APIs from the package root.\n- Keep phase names explicit with `as const` tuples.\n- Put `FlowProvider` above the DOM controls, input layer, and Canvas subtree that share flow state.\n- Mount browser input hooks under `FlowProvider`, outside the R3F scene tree by default.\n- Use refs or Three.js objects inside `useFlowFrame` for frame-driven scene updates.\n- Keep examples small and phase-focused.\n\nDo not:\n\n- Import from internal source, build, or responsibility-specific paths.\n- Use React state for every-frame scene animation values.\n- Put browser input listener logic inside R3F scene components unless there is a clear scene-specific reason.\n- Treat this package as a router, animation timeline, camera preset, shader, particle, visual-effects, template, CLI, or codegen library.\n- Add Next.js router integration or Server Component support claims to examples.\n- Add dependencies or public API surface for convenience.\n\n## Agent-readable boundaries\n\nWhen editing this project or writing examples, keep changes within phase management, transition progress, input handling, DOM/UI to Canvas coordination, and the R3F frame bridge. Prefer small examples over full templates, preserve package-root imports, and avoid adding runtime dependencies, package exports, or public APIs for convenience.\n\n## Non-goals\n\nThis package is intentionally narrow. It is not:\n\n- a visual effects collection\n- an `@react-three/drei` replacement\n- a particle library\n- a camera preset library\n- a shader or effect library\n- a portfolio template\n- a full animation framework\n- a GSAP wrapper\n- a Framer Motion wrapper\n- a router integration\n- a CLI or codegen system\n\nScene animation, effects, camera movement, routing, templates, and application-specific interaction design stay in your application or in focused tools built for those jobs.\n","readmeFilename":"README.md"}