{"_id":"@react-text-game/core","_rev":"35-0fdc5d4501b809d118dea49830bbf52b","name":"@react-text-game/core","dist-tags":{"latest":"0.11.0"},"versions":{"0.1.0":{"name":"@react-text-game/core","version":"0.1.0","author":{"name":"laruss"},"license":"MIT","_id":"@react-text-game/core@0.1.0","maintainers":[{"name":"laruss5","email":"konstantinchist1993@gmail.com"}],"dist":{"shasum":"68b8ca781180a0aed548c8de494460a55703909d","tarball":"https://registry.npmjs.org/@react-text-game/core/-/core-0.1.0.tgz","fileCount":178,"integrity":"sha512-uWSKI2eRixrsVuePKUWmPsUwuXCiKYWa1+jBUgQ8PVzeHUlv/kzklfDhdc1ZTmpq0lOybzzIh+MULoh+xws/yg==","signatures":[{"sig":"MEUCIGCEgly858aBZybizW3GUTKhl4zLhy+zKGIjupP1O4T/AiEAslbSylvRd0jsNHO9nyeTHKaN8937WjquKkhl+D43vPk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":465956},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./saves":{"types":"./dist/saves/index.d.ts","import":"./dist/saves/index.js"},"./passages":{"types":"./dist/passages/types/index.d.ts"}},"imports":{"#*":"./dist/*"},"private":false,"scripts":{"dev":"tsc --watch & tsc-alias --watch","build":"tsc && tsc-alias","prepack":"rm -rf dist && bun run build","test-pack":"npm pack --dry-run && bunx publint"},"_npmUser":{"name":"laruss5","email":"konstantinchist1993@gmail.com"},"_npmVersion":"10.9.3","description":"A powerful, reactive text-based game engine built for React applications. This package provides a comprehensive framework for creating interactive narrative experiences with support for story passages, interactive maps, and state management.","directories":{},"_nodeVersion":"22.20.0","dependencies":{"dexie":"^4.2.0","valtio":"^2.1.8","consola":"^3.4.2","crypto-js":"^4.2.0","jsonpath-plus":"^10.3.0","dexie-react-hooks":"^4.2.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsc-alias":"^1.8.16","@types/bun":"^1.2.23","@types/node":"^24.6.2","@types/crypto-js":"^4.2.2"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0","typescript":"^5"},"_npmOperationalInternal":{"tmp":"tmp/core_0.1.0_1759919178951_0.401303343169781","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@react-text-game/core","version":"0.1.2","author":{"name":"laruss"},"license":"MIT","_id":"@react-text-game/core@0.1.2","maintainers":[{"name":"laruss5","email":"konstantinchist1993@gmail.com"}],"homepage":"https://github.com/laruss/react-text-game#readme","bugs":{"url":"https://github.com/laruss/react-text-game/issues"},"dist":{"shasum":"0b1a52dc2237f7bb63c7761ae1f2bc0e3532d2e2","tarball":"https://registry.npmjs.org/@react-text-game/core/-/core-0.1.2.tgz","fileCount":178,"integrity":"sha512-DTEUbhL6c2o6x61uCOTjSxumYfgtRG0g97090S+F8j73FwuZ1Db7JVDpe4dFDQvwuR3/Xd6dZQt3uF5yyMwQ1g==","signatures":[{"sig":"MEUCIE15IyX0YLYM6btknZyZGbhLEYT0c+UwgrhTa9NkjUSbAiEA1n4tjovRBaynPOrEPnFJkIaB++b32q5L28X2sBGvZ50=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":466007},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./saves":{"types":"./dist/saves/index.d.ts","import":"./dist/saves/index.js"},"./passages":{"types":"./dist/passages/types/index.d.ts"}},"gitHead":"88303d156ce247ba5a753ca57972588a1ce7948b","imports":{"#*":"./dist/*"},"private":false,"scripts":{"dev":"tsc --watch & tsc-alias --watch","build":"tsc && tsc-alias","prepack":"rm -rf dist && bun run build","test-pack":"npm pack --dry-run && bunx publint"},"_npmUser":{"name":"laruss5","email":"konstantinchist1993@gmail.com"},"repository":{"url":"git+https://github.com/laruss/react-text-game.git","type":"git"},"_npmVersion":"10.9.3","description":"A powerful, reactive text-based game engine built for React applications. This package provides a comprehensive framework for creating interactive narrative experiences with support for story passages, interactive maps, and state management.","directories":{},"_nodeVersion":"22.20.0","dependencies":{"dexie":"^4.2.0","valtio":"^2.1.8","consola":"^3.4.2","crypto-js":"^4.2.0","jsonpath-plus":"^10.3.0","dexie-react-hooks":"^4.2.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsc-alias":"^1.8.16","@types/bun":"^1.2.23","@types/node":"^24.6.2","@types/crypto-js":"^4.2.2"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0","typescript":"^5"},"_npmOperationalInternal":{"tmp":"tmp/core_0.1.2_1759938854185_0.3012357156372316","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@react-text-game/core","version":"0.2.0","author":{"name":"laruss"},"license":"MIT","_id":"@react-text-game/core@0.2.0","maintainers":[{"name":"laruss5","email":"konstantinchist1993@gmail.com"}],"homepage":"https://github.com/laruss/react-text-game#readme","bugs":{"url":"https://github.com/laruss/react-text-game/issues"},"dist":{"shasum":"918ceb443d33a463a635d7bceec34042f706f9c8","tarball":"https://registry.npmjs.org/@react-text-game/core/-/core-0.2.0.tgz","fileCount":210,"integrity":"sha512-gU+kLwsilyqgFbHoKdyhIXdSBJO3MvAeoaCrCKx1uCPrCEw2I3yzzySTtv2b+vlSFFq3Sw18MU9JM/gB4QJnQQ==","signatures":[{"sig":"MEYCIQC773DXXvRePxK1UQrCoNFBogqC9zlZDiK1xnPxLaN7mAIhALh743eskmF703NLoBszCvqWHFYHKVn8GgellEFKJIgp","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":510296},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./saves":{"types":"./dist/saves/index.d.ts","import":"./dist/saves/index.js"},"./passages":{"types":"./dist/passages/types/index.d.ts"}},"gitHead":"3f24f1ae69cb46d4c796e3e7af2e5d08bb0359c7","imports":{"#*":"./dist/*"},"private":false,"scripts":{"dev":"tsc --watch & tsc-alias --watch","build":"tsc && tsc-alias","prepack":"rm -rf dist && bun run build","publish":"npm whoami && npm publish","test-pack":"npm pack --dry-run && bunx publint"},"_npmUser":{"name":"laruss5","email":"konstantinchist1993@gmail.com"},"repository":{"url":"git+https://github.com/laruss/react-text-game.git","type":"git"},"_npmVersion":"10.9.3","description":"A powerful, reactive text-based game engine built for React applications. This package provides a comprehensive framework for creating interactive narrative experiences with support for story passages, interactive maps, and state management.","directories":{},"_nodeVersion":"22.20.0","dependencies":{"dexie":"^4.2.0","valtio":"^2.1.8","consola":"^3.4.2","crypto-js":"^4.2.0","jsonpath-plus":"^10.3.0","dexie-react-hooks":"^4.2.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsc-alias":"^1.8.16","@types/bun":"^1.2.23","@types/node":"^24.6.2","@types/crypto-js":"^4.2.2"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0","typescript":"^5"},"_npmOperationalInternal":{"tmp":"tmp/core_0.2.0_1760029601577_0.19094231775346815","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@react-text-game/core","version":"0.2.1","author":{"name":"laruss"},"license":"MIT","_id":"@react-text-game/core@0.2.1","maintainers":[{"name":"laruss5","email":"konstantinchist1993@gmail.com"}],"homepage":"https://laruss.github.io/react-text-game/","bugs":{"url":"https://github.com/laruss/react-text-game/issues"},"dist":{"shasum":"8aed80d11183efc50b56b19295d4d79d3f17359b","tarball":"https://registry.npmjs.org/@react-text-game/core/-/core-0.2.1.tgz","fileCount":210,"integrity":"sha512-rs5qjsge4uEpa0UmKJuWnVeLfSJxqtbr7OkoZm+FWTYghsi4rRqgYAlA1Jyuf7w+Lc51YLbfh+i8Ga2qfo+pJg==","signatures":[{"sig":"MEYCIQCxLVrrWKyg4PDWw88JHv30W7Ml/RtYIGHBuhPCrp5bJwIhAMlHTvm+69alxUZOlhVzUj1/ZA1njdgrsA9Lhf3SB3gx","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":511445},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./saves":{"types":"./dist/saves/index.d.ts","import":"./dist/saves/index.js"},"./passages":{"types":"./dist/passages/types/index.d.ts"}},"gitHead":"edbfdaf51cbac1f4a8efde92654a0b26dd5c4c25","imports":{"#*":"./dist/*"},"private":false,"scripts":{"dev":"tsc --watch & tsc-alias --watch","build":"tsc && tsc-alias","prepack":"rm -rf dist && bun run build","publish":"npm whoami && npm publish","test-pack":"npm pack --dry-run && bunx publint"},"_npmUser":{"name":"laruss5","email":"konstantinchist1993@gmail.com"},"repository":{"url":"git+https://github.com/laruss/react-text-game.git","type":"git"},"_npmVersion":"10.9.3","description":"A powerful, reactive text-based game engine built for React applications. This package provides a comprehensive framework for creating interactive narrative experiences with support for story passages, interactive maps, and state management.","directories":{},"_nodeVersion":"22.20.0","dependencies":{"dexie":"^4.2.0","valtio":"^2.1.8","consola":"^3.4.2","crypto-js":"^4.2.0","jsonpath-plus":"^10.3.0","dexie-react-hooks":"^4.2.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsc-alias":"^1.8.16","@types/bun":"^1.2.23","@types/node":"^24.6.2","@types/crypto-js":"^4.2.2"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0","typescript":"^5"},"_npmOperationalInternal":{"tmp":"tmp/core_0.2.1_1760036572665_0.07366027574291278","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"@react-text-game/core","version":"0.2.2","author":{"name":"laruss"},"license":"MIT","_id":"@react-text-game/core@0.2.2","maintainers":[{"name":"laruss5","email":"konstantinchist1993@gmail.com"}],"homepage":"https://laruss.github.io/react-text-game/","bugs":{"url":"https://github.com/laruss/react-text-game/issues"},"dist":{"shasum":"55dad3a5af79b7548ad2aa2de5e4ebb1f8cfb629","tarball":"https://registry.npmjs.org/@react-text-game/core/-/core-0.2.2.tgz","fileCount":210,"integrity":"sha512-nZOxJdDN4fV4gLnrzkzlU9wrWeTGlTbSqxu9sV7xMzMS48CYEYjslA1lgKbXtsitqmb/ySSRdrvJSCeFJmjCmA==","signatures":[{"sig":"MEUCIQCp4R7mRUQyFUy4hcjTTLoEexAleAm7Oosm9DUQwu3b4AIgZxAdQTat8SOUmiIC93bzZbau9uBUM/eyobk9drzLfs0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":511616},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./saves":{"types":"./dist/saves/index.d.ts","import":"./dist/saves/index.js"},"./passages":{"types":"./dist/passages/types/index.d.ts"}},"gitHead":"76cea889a7a8b8f7da18a22748a455531ab7ac4b","imports":{"#*":"./dist/*"},"private":false,"scripts":{"dev":"tsc --watch & tsc-alias --watch","build":"tsc && tsc-alias","prepack":"rm -rf dist && bun run build","publish":"npm whoami && npm publish","test-pack":"npm pack --dry-run && bunx publint"},"_npmUser":{"name":"laruss5","email":"konstantinchist1993@gmail.com"},"repository":{"url":"git+https://github.com/laruss/react-text-game.git","type":"git"},"_npmVersion":"10.9.3","description":"A powerful React-based text game engine with reactive state management, passage-based navigation, and persistent save system for building interactive narrative experiences","directories":{},"_nodeVersion":"22.20.0","dependencies":{"dexie":"^4.2.0","valtio":"^2.1.8","consola":"^3.4.2","crypto-js":"^4.2.0","jsonpath-plus":"^10.3.0","dexie-react-hooks":"^4.2.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsc-alias":"^1.8.16","@types/bun":"^1.2.23","@types/node":"^24.6.2","@types/crypto-js":"^4.2.2"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0","typescript":"^5"},"_npmOperationalInternal":{"tmp":"tmp/core_0.2.2_1760079789546_0.838312318333619","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@react-text-game/core","version":"0.3.0","author":"laruss","license":"MIT","_id":"@react-text-game/core@0.3.0","maintainers":[{"name":"laruss5","email":"konstantinchist1993@gmail.com"}],"homepage":"https://laruss.github.io/react-text-game/","dist":{"shasum":"3c4d8448e7af168494f9c9961be88cf61dabd96e","tarball":"https://registry.npmjs.org/@react-text-game/core/-/core-0.3.0.tgz","fileCount":234,"integrity":"sha512-iz1p0f/JQFz/8seXUB8Ek7y1+/EIjzA+BBfusiPv31qLN2rOOAaBODTPBlkcYugDtaY+9rTPLxwdaBq0tA7ykQ==","signatures":[{"sig":"MEUCIQDREyqQifVvaRURHdMtYDQQqTZTp0eQAPP6LfK/rWtWZgIgclEi1Q2cICpGTzYgAbBgCwfnNztysd8dUrryaPGboWI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":609636},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","shasum":"3c4d8448e7af168494f9c9961be88cf61dabd96e","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./saves":{"types":"./dist/saves/index.d.ts","import":"./dist/saves/index.js"},"./passages":{"types":"./dist/passages/types/index.d.ts"}},"imports":{"#*":"./dist/*"},"private":false,"scripts":{"dev":"tsc --watch & tsc-alias --watch","build":"tsc && tsc-alias","prepack":"rm -rf dist && bun run build","test-pack":"npm pack --dry-run && bunx publint"},"_npmUser":{"name":"laruss5","email":"konstantinchist1993@gmail.com"},"_integrity":"sha512-iz1p0f/JQFz/8seXUB8Ek7y1+/EIjzA+BBfusiPv31qLN2rOOAaBODTPBlkcYugDtaY+9rTPLxwdaBq0tA7ykQ==","repository":"github:laruss/react-text-game","_npmVersion":"10.8.3","description":"A powerful React-based text game engine with reactive state management, passage-based navigation, and persistent save system for building interactive narrative experiences","directories":{},"_nodeVersion":"24.3.0","dependencies":{"dexie":"^4.2.0","valtio":"^2.1.8","consola":"^3.4.2","crypto-js":"^4.2.0","jsonpath-plus":"^10.3.0","dexie-react-hooks":"^4.2.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsc-alias":"^1.8.16","@types/bun":"^1.2.23","@types/node":"^24.6.2","@types/crypto-js":"^4.2.2"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0","typescript":"^5"},"_npmOperationalInternal":{"tmp":"tmp/core_0.3.0_1760096467881_0.06979389038564388","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@react-text-game/core","version":"0.4.0","author":"laruss","license":"MIT","_id":"@react-text-game/core@0.4.0","maintainers":[{"name":"laruss5","email":"konstantinchist1993@gmail.com"}],"homepage":"https://laruss.github.io/react-text-game/","dist":{"shasum":"977cd9520ea40c1db4e98b4ac981ed09c4e6baa6","tarball":"https://registry.npmjs.org/@react-text-game/core/-/core-0.4.0.tgz","fileCount":266,"integrity":"sha512-YEAOCA7WvEkwc7Buk7g0gqHKfeGGcAUksnzOmpF/qdSCyZpIrU5Bga06TkdtNLHyC4keHmkMoQ0N/9WDJjgEHA==","signatures":[{"sig":"MEYCIQDjDwbabN5cGCgeh8fH4vscqXQiHAv5mL019xEiD1ZMgAIhAJWg8+SDU6H0JujU6mlJ7AN86N63KPnFXk+r8n8cIofx","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":693732},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","shasum":"977cd9520ea40c1db4e98b4ac981ed09c4e6baa6","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./i18n":{"types":"./dist/i18n/index.d.ts","import":"./dist/i18n/index.js"},"./saves":{"types":"./dist/saves/index.d.ts","import":"./dist/saves/index.js"},"./passages":{"types":"./dist/passages/types/index.d.ts"}},"imports":{"#*":"./dist/*"},"private":false,"scripts":{"dev":"tsc --watch & tsc-alias --watch","lint":"eslint .","build":"tsc && tsc-alias","prepack":"rm -rf dist && bun run build","test-pack":"npm pack --dry-run && bunx publint","check-types":"tsc --noEmit"},"_npmUser":{"name":"laruss5","email":"konstantinchist1993@gmail.com"},"_integrity":"sha512-YEAOCA7WvEkwc7Buk7g0gqHKfeGGcAUksnzOmpF/qdSCyZpIrU5Bga06TkdtNLHyC4keHmkMoQ0N/9WDJjgEHA==","repository":"github:laruss/react-text-game","_npmVersion":"10.8.3","description":"A powerful React-based text game engine with reactive state management, passage-based navigation, and persistent save system for building interactive narrative experiences","directories":{},"_nodeVersion":"24.3.0","dependencies":{"dexie":"^4.2.0","valtio":"^2.1.8","consola":"^3.4.2","i18next":"^25.6.0","crypto-js":"^4.2.0","jsonpath-plus":"^10.3.0","react-i18next":"^16.1.0","dexie-react-hooks":"^4.2.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.37.0","tsc-alias":"^1.8.16","@types/bun":"^1.2.23","@types/node":"^24.6.2","@types/react":"^19.0.9","@types/crypto-js":"^4.2.2","@types/react-dom":"^19.0.3"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0","typescript":"^5"},"_npmOperationalInternal":{"tmp":"tmp/core_0.4.0_1760879395205_0.08476000656881832","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"@react-text-game/core","version":"0.4.1","author":"laruss","license":"MIT","_id":"@react-text-game/core@0.4.1","maintainers":[{"name":"laruss5","email":"konstantinchist1993@gmail.com"}],"homepage":"https://reacttextgame.dev/","dist":{"shasum":"7e1a1b1a29d1bc4b765bad32f6af3d07f2f5f872","tarball":"https://registry.npmjs.org/@react-text-game/core/-/core-0.4.1.tgz","fileCount":266,"integrity":"sha512-nkQqLXSiZPsG6MJ8Mu07bUzCmpWmxDEoB0Ev4g1rCa9d/oR6dDZgiw6H9AWVMixMxHRuxfQWPLkrEl7a1aOY2g==","signatures":[{"sig":"MEYCIQDeDgqr7UwfViA2mUsL3IsheeWARth7NM5NUKEEsxSlPAIhAMMMyMzcKpIAgwU7CtFsT9J2yU6LzfxH34NYOfduHPRO","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":694210},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","shasum":"7e1a1b1a29d1bc4b765bad32f6af3d07f2f5f872","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./i18n":{"types":"./dist/i18n/index.d.ts","import":"./dist/i18n/index.js"},"./saves":{"types":"./dist/saves/index.d.ts","import":"./dist/saves/index.js"},"./passages":{"types":"./dist/passages/types/index.d.ts"}},"imports":{"#*":"./dist/*"},"private":false,"scripts":{"dev":"tsc --watch & tsc-alias --watch","lint":"eslint .","build":"tsc && tsc-alias","prepack":"rm -rf dist && bun run build","test-pack":"npm pack --dry-run && bunx publint","check-types":"tsc --noEmit"},"_npmUser":{"name":"laruss5","email":"konstantinchist1993@gmail.com"},"_integrity":"sha512-nkQqLXSiZPsG6MJ8Mu07bUzCmpWmxDEoB0Ev4g1rCa9d/oR6dDZgiw6H9AWVMixMxHRuxfQWPLkrEl7a1aOY2g==","repository":"github:laruss/react-text-game","_npmVersion":"10.8.3","description":"A powerful React-based text game engine with reactive state management, passage-based navigation, and persistent save system for building interactive narrative experiences","directories":{},"_nodeVersion":"24.3.0","dependencies":{"dexie":"^4.2.0","valtio":"^2.1.8","consola":"^3.4.2","i18next":"^25.6.0","crypto-js":"^4.2.0","jsonpath-plus":"^10.3.0","react-i18next":"^16.1.0","dexie-react-hooks":"^4.2.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.37.0","tsc-alias":"^1.8.16","@types/bun":"^1.2.23","@types/node":"^24.6.2","@types/react":"^19.0.9","@types/crypto-js":"^4.2.2","@types/react-dom":"^19.0.3"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0","typescript":"^5"},"_npmOperationalInternal":{"tmp":"tmp/core_0.4.1_1760882157001_0.35272390722748126","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@react-text-game/core","version":"0.5.0","author":"laruss","license":"MIT","_id":"@react-text-game/core@0.5.0","maintainers":[{"name":"laruss5","email":"konstantinchist1993@gmail.com"}],"homepage":"https://reacttextgame.dev/","dist":{"shasum":"38a955a20fec0cfc8f0f82db3e9ead5bd9c81b3a","tarball":"https://registry.npmjs.org/@react-text-game/core/-/core-0.5.0.tgz","fileCount":298,"integrity":"sha512-Fc99vTqSDNsTzDBUNEQgqokyLeShvt0/35CX5XBqk1AQnvwZuC2wl8tvz8F81R7gkDyrZLMys/hLdvHoy6pPMg==","signatures":[{"sig":"MEUCIQCrABoDgYK8Zg77ivZk9q/lHoqU1KoZV/JRMW6wRQSl/AIgY1dNhR4vbctRZNFjum6MLe7UOoKBV1rzGM+PpEn7YyQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":818065},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","shasum":"38a955a20fec0cfc8f0f82db3e9ead5bd9c81b3a","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./i18n":{"types":"./dist/i18n/index.d.ts","import":"./dist/i18n/index.js"},"./audio":{"types":"./dist/audio/index.d.ts","import":"./dist/audio/index.js"},"./saves":{"types":"./dist/saves/index.d.ts","import":"./dist/saves/index.js"},"./passages":{"types":"./dist/passages/types/index.d.ts"}},"imports":{"#*":"./dist/*"},"private":false,"scripts":{"dev":"tsc --watch & tsc-alias --watch","lint":"eslint .","build":"tsc && tsc-alias","prepack":"rm -rf dist && bun run build","test-pack":"npm pack --dry-run && bunx publint","check-types":"tsc --noEmit"},"_npmUser":{"name":"laruss5","email":"konstantinchist1993@gmail.com"},"_integrity":"sha512-Fc99vTqSDNsTzDBUNEQgqokyLeShvt0/35CX5XBqk1AQnvwZuC2wl8tvz8F81R7gkDyrZLMys/hLdvHoy6pPMg==","repository":"github:laruss/react-text-game","_npmVersion":"10.8.3","description":"A powerful React-based text game engine with reactive state management, passage-based navigation, and persistent save system for building interactive narrative experiences","directories":{},"_nodeVersion":"24.3.0","dependencies":{"dexie":"^4.2.0","valtio":"^2.1.8","consola":"^3.4.2","i18next":"^25.6.0","crypto-js":"^4.2.0","jsonpath-plus":"^10.3.0","react-i18next":"^16.1.0","dexie-react-hooks":"^4.2.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.37.0","tsc-alias":"^1.8.16","@types/bun":"^1.2.23","@types/node":"^24.6.2","@types/react":"^19.0.9","@types/crypto-js":"^4.2.2","@types/react-dom":"^19.0.3"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0","typescript":"^5"},"_npmOperationalInternal":{"tmp":"tmp/core_0.5.0_1761133481266_0.5200847311084191","host":"s3://npm-registry-packages-npm-production"}},"0.5.1":{"name":"@react-text-game/core","version":"0.5.1","author":"laruss","license":"MIT","_id":"@react-text-game/core@0.5.1","maintainers":[{"name":"laruss5","email":"konstantinchist1993@gmail.com"}],"homepage":"https://reacttextgame.dev/","dist":{"shasum":"23e3b3cdcda5da5f0a58973fb3db9d651ba5ffa0","tarball":"https://registry.npmjs.org/@react-text-game/core/-/core-0.5.1.tgz","fileCount":298,"integrity":"sha512-JKlA9L24dBmF8R8SDboIAyEgxCfkNnnXfHzKpl8nlgLzngFTAXs/GiIzdTDhkewRr+NItGNHiuUPf0WD/CsKXw==","signatures":[{"sig":"MEUCICUUZm1bOsTHOOLkzOybu3Yetq0RfWBN8BhmUUPFmIyBAiEA06EXJBzOERPLghRPXw9VdK/KUUbAIPkj5LI+kv0Gi34=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":837713},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","shasum":"23e3b3cdcda5da5f0a58973fb3db9d651ba5ffa0","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./i18n":{"types":"./dist/i18n/index.d.ts","import":"./dist/i18n/index.js"},"./audio":{"types":"./dist/audio/index.d.ts","import":"./dist/audio/index.js"},"./saves":{"types":"./dist/saves/index.d.ts","import":"./dist/saves/index.js"},"./passages":{"types":"./dist/passages/types/index.d.ts"}},"imports":{"#*":"./dist/*"},"private":false,"scripts":{"dev":"tsc --watch & tsc-alias --watch","lint":"eslint .","build":"tsc && tsc-alias","prepack":"rm -rf dist && bun run build","test-pack":"npm pack --dry-run && bunx publint","check-types":"tsc --noEmit"},"_npmUser":{"name":"laruss5","email":"konstantinchist1993@gmail.com"},"_integrity":"sha512-JKlA9L24dBmF8R8SDboIAyEgxCfkNnnXfHzKpl8nlgLzngFTAXs/GiIzdTDhkewRr+NItGNHiuUPf0WD/CsKXw==","repository":"github:laruss/react-text-game","_npmVersion":"10.8.3","description":"A powerful React-based text game engine with reactive state management, passage-based navigation, and persistent save system for building interactive narrative experiences","directories":{},"_nodeVersion":"24.3.0","dependencies":{"dexie":"^4.2.0","valtio":"^2.1.8","consola":"^3.4.2","i18next":"^25.6.0","crypto-js":"^4.2.0","jsonpath-plus":"^10.3.0","react-i18next":"^16.1.0","dexie-react-hooks":"^4.2.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.37.0","tsc-alias":"^1.8.16","@types/bun":"^1.2.23","@types/node":"^24.6.2","@types/react":"^19.0.9","@types/crypto-js":"^4.2.2","@types/react-dom":"^19.0.3"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0","typescript":"^5"},"_npmOperationalInternal":{"tmp":"tmp/core_0.5.1_1761919815517_0.049039394546339654","host":"s3://npm-registry-packages-npm-production"}},"0.5.2":{"name":"@react-text-game/core","version":"0.5.2","author":"laruss","license":"MIT","_id":"@react-text-game/core@0.5.2","maintainers":[{"name":"laruss5","email":"konstantinchist1993@gmail.com"}],"homepage":"https://reacttextgame.dev/","dist":{"shasum":"08aaca0da55d4c02305601677bbed55cf67ed0e1","tarball":"https://registry.npmjs.org/@react-text-game/core/-/core-0.5.2.tgz","fileCount":298,"integrity":"sha512-OStblSeszm0oUAYue4QUbpb4nRiGnNDd5pTnSmiqxEZehgurXDMYNIWtNaOQAphCM8frVkk9MrF87KG002UNaw==","signatures":[{"sig":"MEQCICkT+n7aszGPWAIP6Kaux7kzUnmGlAwEfKkN8Kt20NeNAiBi+rDuo68pMETfkqZJDsnfIKyTJgm8x+wSG7tsEVMMAQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":841780},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","shasum":"08aaca0da55d4c02305601677bbed55cf67ed0e1","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./i18n":{"types":"./dist/i18n/index.d.ts","import":"./dist/i18n/index.js"},"./audio":{"types":"./dist/audio/index.d.ts","import":"./dist/audio/index.js"},"./saves":{"types":"./dist/saves/index.d.ts","import":"./dist/saves/index.js"},"./passages":{"types":"./dist/passages/types/index.d.ts"}},"imports":{"#*":"./dist/*"},"private":false,"scripts":{"dev":"tsc --watch & tsc-alias --watch","lint":"eslint .","build":"tsc && tsc-alias","prepack":"rm -rf dist && bun run build","test-pack":"npm pack --dry-run && bunx publint","check-types":"tsc --noEmit"},"_npmUser":{"name":"laruss5","email":"konstantinchist1993@gmail.com"},"_integrity":"sha512-OStblSeszm0oUAYue4QUbpb4nRiGnNDd5pTnSmiqxEZehgurXDMYNIWtNaOQAphCM8frVkk9MrF87KG002UNaw==","repository":"github:laruss/react-text-game","_npmVersion":"10.8.3","description":"A powerful React-based text game engine with reactive state management, passage-based navigation, and persistent save system for building interactive narrative experiences","directories":{},"_nodeVersion":"24.3.0","dependencies":{"dexie":"^4.2.0","valtio":"^2.1.8","consola":"^3.4.2","i18next":"^25.6.0","crypto-js":"^4.2.0","jsonpath-plus":"^10.3.0","react-i18next":"^16.1.0","dexie-react-hooks":"^4.2.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.37.0","tsc-alias":"^1.8.16","@types/bun":"^1.2.23","@types/node":"^24.6.2","@types/react":"^19.0.9","@types/crypto-js":"^4.2.2","@types/react-dom":"^19.0.3"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0","typescript":"^5"},"_npmOperationalInternal":{"tmp":"tmp/core_0.5.2_1762173420404_0.8949708087929233","host":"s3://npm-registry-packages-npm-production"}},"0.5.3":{"name":"@react-text-game/core","version":"0.5.3","author":"laruss","license":"MIT","_id":"@react-text-game/core@0.5.3","maintainers":[{"name":"laruss5","email":"konstantinchist1993@gmail.com"}],"homepage":"https://reacttextgame.dev/","dist":{"shasum":"dddee1018303c676fea6aea09622fb09c692a95a","tarball":"https://registry.npmjs.org/@react-text-game/core/-/core-0.5.3.tgz","fileCount":298,"integrity":"sha512-FBlvSyOtbECFmVBQ9MGdwg/74TyK0LCjMo6cRk6Q8zAiSDc1OmzQW1MRkqylSUPrpFsZSxJvPhdTrFGCX0SWyA==","signatures":[{"sig":"MEYCIQDYkGJJ2Yr40m0GULCdx8Htj5SyBBAr3m7Pyi7P/E1XaQIhAIvvbBod5DYKGIGyzrwY9DOMjYBfzH4fA3KgoCIZe2kx","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":841721},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","shasum":"dddee1018303c676fea6aea09622fb09c692a95a","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./i18n":{"types":"./dist/i18n/index.d.ts","import":"./dist/i18n/index.js"},"./audio":{"types":"./dist/audio/index.d.ts","import":"./dist/audio/index.js"},"./saves":{"types":"./dist/saves/index.d.ts","import":"./dist/saves/index.js"},"./passages":{"types":"./dist/passages/types/index.d.ts"}},"imports":{"#*":"./dist/*"},"private":false,"scripts":{"dev":"tsc --watch & tsc-alias --watch","lint":"eslint .","build":"tsc && tsc-alias","prepack":"rm -rf dist && bun run build","test-pack":"npm pack --dry-run && bunx publint","check-types":"tsc --noEmit"},"_npmUser":{"name":"laruss5","email":"konstantinchist1993@gmail.com"},"_integrity":"sha512-FBlvSyOtbECFmVBQ9MGdwg/74TyK0LCjMo6cRk6Q8zAiSDc1OmzQW1MRkqylSUPrpFsZSxJvPhdTrFGCX0SWyA==","repository":"github:laruss/react-text-game","_npmVersion":"10.8.3","description":"A powerful React-based text game engine with reactive state management, passage-based navigation, and persistent save system for building interactive narrative experiences","directories":{},"_nodeVersion":"24.3.0","dependencies":{"dexie":"^4.2.0","valtio":"^2.1.8","consola":"^3.4.2","i18next":"^25.6.0","crypto-js":"^4.2.0","jsonpath-plus":"^10.3.0","react-i18next":"^16.1.0","dexie-react-hooks":"^4.2.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.37.0","tsc-alias":"^1.8.16","@types/bun":"^1.2.23","@types/node":"^24.6.2","@types/react":"^19.0.9","@types/crypto-js":"^4.2.2","@types/react-dom":"^19.0.3"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0","typescript":"^5"},"_npmOperationalInternal":{"tmp":"tmp/core_0.5.3_1762176675013_0.14093907958217056","host":"s3://npm-registry-packages-npm-production"}},"0.5.4":{"name":"@react-text-game/core","version":"0.5.4","author":"laruss","license":"MIT","_id":"@react-text-game/core@0.5.4","maintainers":[{"name":"laruss5","email":"konstantinchist1993@gmail.com"}],"homepage":"https://reacttextgame.dev/","dist":{"shasum":"537d69d0d58dd0471bfa3fcadbf7978e11619903","tarball":"https://registry.npmjs.org/@react-text-game/core/-/core-0.5.4.tgz","fileCount":298,"integrity":"sha512-0Kw96+XStdo9oW2mJ4EFZcUKcBDd8oWV0OXt/8bq1jvyJK2GGfCLio38+QPeKnZ/pI6vX5nri3LKEtXF11bxmg==","signatures":[{"sig":"MEUCIQC4XKv1+vCzhSnDYEbysMR9Ql2sFVcEVuXXh2/mb38dfQIgRTGdfw98v+hyUk9VcrQ892wh0EebbM3vjsmaqu/qzv4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":845991},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","shasum":"537d69d0d58dd0471bfa3fcadbf7978e11619903","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./i18n":{"types":"./dist/i18n/index.d.ts","import":"./dist/i18n/index.js"},"./audio":{"types":"./dist/audio/index.d.ts","import":"./dist/audio/index.js"},"./saves":{"types":"./dist/saves/index.d.ts","import":"./dist/saves/index.js"},"./passages":{"types":"./dist/passages/types/index.d.ts"}},"imports":{"#*":"./dist/*"},"private":false,"scripts":{"dev":"tsc --watch & tsc-alias --watch","lint":"eslint .","build":"tsc && tsc-alias","prepack":"rm -rf dist && bun run build","test-pack":"npm pack --dry-run && bunx publint","check-types":"tsc --noEmit"},"_npmUser":{"name":"laruss5","email":"konstantinchist1993@gmail.com"},"_integrity":"sha512-0Kw96+XStdo9oW2mJ4EFZcUKcBDd8oWV0OXt/8bq1jvyJK2GGfCLio38+QPeKnZ/pI6vX5nri3LKEtXF11bxmg==","repository":"github:laruss/react-text-game","_npmVersion":"10.8.3","description":"A powerful React-based text game engine with reactive state management, passage-based navigation, and persistent save system for building interactive narrative experiences","directories":{},"_nodeVersion":"24.3.0","dependencies":{"dexie":"^4.2.0","valtio":"^2.1.8","consola":"^3.4.2","i18next":"^25.6.0","crypto-js":"^4.2.0","jsonpath-plus":"^10.3.0","react-i18next":"^16.1.0","dexie-react-hooks":"^4.2.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.37.0","tsc-alias":"^1.8.16","@types/bun":"^1.2.23","@types/node":"^24.6.2","@types/react":"^19.0.9","@types/crypto-js":"^4.2.2","@types/react-dom":"^19.0.3"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0","typescript":"^5"},"_npmOperationalInternal":{"tmp":"tmp/core_0.5.4_1762621059288_0.7904596714201624","host":"s3://npm-registry-packages-npm-production"}},"0.5.6":{"name":"@react-text-game/core","version":"0.5.6","author":"laruss","license":"MIT","_id":"@react-text-game/core@0.5.6","maintainers":[{"name":"laruss5","email":"konstantinchist1993@gmail.com"}],"homepage":"https://reacttextgame.dev/","dist":{"shasum":"c3a937eb61487a375a3af344ad7f3924ba5b6ec6","tarball":"https://registry.npmjs.org/@react-text-game/core/-/core-0.5.6.tgz","fileCount":298,"integrity":"sha512-DRR599L6R2h17KKJlHiPp3cn0YT0blZW+xKDOSwWXYFp2d8jeWsiEUyohmM/+pQhfffCJwDFzsBqkJ7a6meeIQ==","signatures":[{"sig":"MEUCIQD7qW53BW+jp0hJAQRDf1zYwV/M0lHj6SqVlYNsRUhg+gIgcgQr/tEFKD7TWuhdH7BfDPxCS5yWt/OTlbNOeh+BVTk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":845026},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","shasum":"c3a937eb61487a375a3af344ad7f3924ba5b6ec6","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./i18n":{"types":"./dist/i18n/index.d.ts","import":"./dist/i18n/index.js"},"./audio":{"types":"./dist/audio/index.d.ts","import":"./dist/audio/index.js"},"./saves":{"types":"./dist/saves/index.d.ts","import":"./dist/saves/index.js"},"./passages":{"types":"./dist/passages/types/index.d.ts"}},"imports":{"#*":"./dist/*"},"private":false,"scripts":{"dev":"tsc --watch & tsc-alias --watch","lint":"eslint .","build":"tsc && tsc-alias","prepack":"rm -rf dist && bun run build","test-pack":"npm pack --dry-run && bunx publint","check-types":"tsc --noEmit"},"_npmUser":{"name":"laruss5","email":"konstantinchist1993@gmail.com"},"_integrity":"sha512-DRR599L6R2h17KKJlHiPp3cn0YT0blZW+xKDOSwWXYFp2d8jeWsiEUyohmM/+pQhfffCJwDFzsBqkJ7a6meeIQ==","repository":"github:laruss/react-text-game","_npmVersion":"10.8.3","description":"A powerful React-based text game engine with reactive state management, passage-based navigation, and persistent save system for building interactive narrative experiences","directories":{},"_nodeVersion":"24.3.0","dependencies":{"dexie":"^4.2.0","valtio":"^2.1.8","consola":"^3.4.2","i18next":"^25.6.0","crypto-js":"^4.2.0","jsonpath-plus":"^10.3.0","react-i18next":"^16.1.0","dexie-react-hooks":"^4.2.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.37.0","tsc-alias":"^1.8.16","@types/bun":"^1.2.23","@types/node":"^24.6.2","@types/react":"^19.0.9","@types/crypto-js":"^4.2.2","@types/react-dom":"^19.0.3"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0","typescript":"^5"},"_npmOperationalInternal":{"tmp":"tmp/core_0.5.6_1762947135966_0.16583797947606893","host":"s3://npm-registry-packages-npm-production"}},"0.5.7":{"name":"@react-text-game/core","version":"0.5.7","author":"laruss","license":"MIT","_id":"@react-text-game/core@0.5.7","maintainers":[{"name":"laruss5","email":"konstantinchist1993@gmail.com"}],"homepage":"https://reacttextgame.dev/","dist":{"shasum":"5bd48dcf555095d48fc4974b7365b135cccfd216","tarball":"https://registry.npmjs.org/@react-text-game/core/-/core-0.5.7.tgz","fileCount":298,"integrity":"sha512-vvGj/5/FKnPG6yA30g3hLqvLnBySLiEKaxrbuXmr7mOZKQwqzLwDC8Tec85vMe4qxwSq4INgArw2pQjf3md1VA==","signatures":[{"sig":"MEUCIBSmvq7MfC3a6e2e28o0Ldhdn2VEay0A7FFjkV6kWd5NAiEArxbhlZi7jcIBNJKUqyNEUdWFbTtAN6ja+NW82tir118=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":855680},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","shasum":"5bd48dcf555095d48fc4974b7365b135cccfd216","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./i18n":{"types":"./dist/i18n/index.d.ts","import":"./dist/i18n/index.js"},"./audio":{"types":"./dist/audio/index.d.ts","import":"./dist/audio/index.js"},"./saves":{"types":"./dist/saves/index.d.ts","import":"./dist/saves/index.js"},"./passages":{"types":"./dist/passages/types/index.d.ts"}},"imports":{"#*":"./dist/*"},"private":false,"scripts":{"dev":"tsc --watch & tsc-alias --watch","lint":"eslint .","build":"tsc && tsc-alias","prepack":"rm -rf dist && bun run build","test-pack":"npm pack --dry-run && bunx publint","check-types":"tsc --noEmit"},"_npmUser":{"name":"laruss5","email":"konstantinchist1993@gmail.com"},"_integrity":"sha512-vvGj/5/FKnPG6yA30g3hLqvLnBySLiEKaxrbuXmr7mOZKQwqzLwDC8Tec85vMe4qxwSq4INgArw2pQjf3md1VA==","repository":"github:laruss/react-text-game","_npmVersion":"10.8.3","description":"A powerful React-based text game engine with reactive state management, passage-based navigation, and persistent save system for building interactive narrative experiences","directories":{},"_nodeVersion":"24.3.0","dependencies":{"dexie":"^4.2.0","valtio":"^2.1.8","consola":"^3.4.2","i18next":"^25.6.0","crypto-js":"^4.2.0","jsonpath-plus":"^10.3.0","react-i18next":"^16.1.0","dexie-react-hooks":"^4.2.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.37.0","tsc-alias":"^1.8.16","@types/bun":"^1.2.23","@types/node":"^24.6.2","@types/react":"^19.0.9","@types/crypto-js":"^4.2.2","@types/react-dom":"^19.0.3"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0","typescript":"^5"},"_npmOperationalInternal":{"tmp":"tmp/core_0.5.7_1763309083146_0.9507876689669745","host":"s3://npm-registry-packages-npm-production"}},"0.5.8":{"name":"@react-text-game/core","version":"0.5.8","author":"laruss","license":"MIT","_id":"@react-text-game/core@0.5.8","maintainers":[{"name":"laruss5","email":"konstantinchist1993@gmail.com"}],"homepage":"https://reacttextgame.dev/","dist":{"shasum":"d0edb457bd31976301d7050ee3a80b797d4df7fc","tarball":"https://registry.npmjs.org/@react-text-game/core/-/core-0.5.8.tgz","fileCount":302,"integrity":"sha512-Woc0vi/M+EHDoB6S6JeZz8YoASdE9+5w0wefLZ37PvnUGqiY1y16Ac9wc8JrQ092veZONE14Je5sxZ8H21IczA==","signatures":[{"sig":"MEUCIQDBvzpK5KvR1xO1CWGCs5Nr8jgF4f6ld8SkVcK+kcXPEAIgVG2L4uGIsfykomNI2zJtiiWRUuMPVD/prTbocTPhQk8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":857295},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","shasum":"d0edb457bd31976301d7050ee3a80b797d4df7fc","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./i18n":{"types":"./dist/i18n/index.d.ts","import":"./dist/i18n/index.js"},"./audio":{"types":"./dist/audio/index.d.ts","import":"./dist/audio/index.js"},"./saves":{"types":"./dist/saves/index.d.ts","import":"./dist/saves/index.js"},"./passages":{"types":"./dist/passages/types/index.d.ts"}},"imports":{"#*":"./dist/*"},"private":false,"scripts":{"dev":"tsc --watch & tsc-alias --watch","lint":"eslint .","build":"tsc && tsc-alias","prepack":"rm -rf dist && bun run build","test-pack":"npm pack --dry-run && bunx publint","check-types":"tsc --noEmit"},"_npmUser":{"name":"laruss5","email":"konstantinchist1993@gmail.com"},"_integrity":"sha512-Woc0vi/M+EHDoB6S6JeZz8YoASdE9+5w0wefLZ37PvnUGqiY1y16Ac9wc8JrQ092veZONE14Je5sxZ8H21IczA==","repository":"github:laruss/react-text-game","_npmVersion":"10.8.3","description":"A powerful React-based text game engine with reactive state management, passage-based navigation, and persistent save system for building interactive narrative experiences","directories":{},"_nodeVersion":"24.3.0","dependencies":{"dexie":"^4.2.0","valtio":"^2.1.8","consola":"^3.4.2","i18next":"^25.6.0","crypto-js":"^4.2.0","jsonpath-plus":"^10.3.0","react-i18next":"^16.1.0","dexie-react-hooks":"^4.2.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.37.0","tsc-alias":"^1.8.16","@types/bun":"^1.2.23","@types/node":"^24.6.2","@types/react":"^19.0.9","@types/crypto-js":"^4.2.2","@types/react-dom":"^19.0.3"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0","typescript":"^5"},"_npmOperationalInternal":{"tmp":"tmp/core_0.5.8_1766495658024_0.3776927880567267","host":"s3://npm-registry-packages-npm-production"}},"0.5.9":{"name":"@react-text-game/core","version":"0.5.9","author":"laruss","license":"MIT","_id":"@react-text-game/core@0.5.9","maintainers":[{"name":"laruss5","email":"konstantinchist1993@gmail.com"}],"homepage":"https://reacttextgame.dev/","dist":{"shasum":"8d9db2aaa21abd76819d8c4d9bd8d6aa0895bdca","tarball":"https://registry.npmjs.org/@react-text-game/core/-/core-0.5.9.tgz","fileCount":306,"integrity":"sha512-hy/G8XdbWWz3GE8SlkbWzS3P3Qq98c1jg1T3jl8gsSIL5F4NmNpiyRt7qTHnfaUpf3rN9NY/+Nw1YGXPFljCMw==","signatures":[{"sig":"MEUCIQD9mVifD+WzXiGjZhpGDyMUYzkEvteV9hQNWXTLebHADAIgQKas6E4EO9WVVGtF3cz0WsCDrHV60egKBuLlw+/uAuU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":888622},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","shasum":"8d9db2aaa21abd76819d8c4d9bd8d6aa0895bdca","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./i18n":{"types":"./dist/i18n/index.d.ts","import":"./dist/i18n/index.js"},"./audio":{"types":"./dist/audio/index.d.ts","import":"./dist/audio/index.js"},"./saves":{"types":"./dist/saves/index.d.ts","import":"./dist/saves/index.js"},"./passages":{"types":"./dist/passages/types/index.d.ts"}},"imports":{"#*":"./dist/*"},"private":false,"scripts":{"dev":"tsc --watch & tsc-alias --watch","lint":"eslint .","build":"tsc && tsc-alias","prepack":"rm -rf dist && bun run build","test-pack":"npm pack --dry-run && bunx publint","check-types":"tsc --noEmit"},"_npmUser":{"name":"laruss5","email":"konstantinchist1993@gmail.com"},"_integrity":"sha512-hy/G8XdbWWz3GE8SlkbWzS3P3Qq98c1jg1T3jl8gsSIL5F4NmNpiyRt7qTHnfaUpf3rN9NY/+Nw1YGXPFljCMw==","repository":"github:laruss/react-text-game","_npmVersion":"10.8.3","description":"A powerful React-based text game engine with reactive state management, passage-based navigation, and persistent save system for building interactive narrative experiences","directories":{},"_nodeVersion":"24.3.0","dependencies":{"dexie":"^4.2.0","valtio":"^2.1.8","consola":"^3.4.2","i18next":"^25.6.0","crypto-js":"^4.2.0","jsonpath-plus":"^10.3.0","react-i18next":"^16.1.0","dexie-react-hooks":"^4.2.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.37.0","tsc-alias":"^1.8.16","@types/bun":"^1.2.23","@types/node":"^24.6.2","@types/react":"^19.0.9","@types/crypto-js":"^4.2.2","@types/react-dom":"^19.0.3"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0","typescript":"^5"},"_npmOperationalInternal":{"tmp":"tmp/core_0.5.9_1766666143566_0.9107489228504857","host":"s3://npm-registry-packages-npm-production"}},"0.5.10":{"name":"@react-text-game/core","version":"0.5.10","author":"laruss","license":"MIT","_id":"@react-text-game/core@0.5.10","maintainers":[{"name":"laruss5","email":"konstantinchist1993@gmail.com"}],"homepage":"https://reacttextgame.dev/","dist":{"shasum":"0a0b81a4fafb3c38fa54152fb96e21141a4b8b97","tarball":"https://registry.npmjs.org/@react-text-game/core/-/core-0.5.10.tgz","fileCount":306,"integrity":"sha512-7LLvlEX5AsoKPeMV0QgZtfO964LLTJMO0ccctXoIYmkV2uOKhgV/xwh4j0eA3aWxRnZqPwyNdkgJmqR5WlZvhA==","signatures":[{"sig":"MEQCIEtJ3cMpzHWip+ThC3Vxq92zVuSc3z+T7ZbVeKf+LEPnAiAq3yAWdrHPETqlsvN7oFBtYnacJSY1IO+ckVwHMsZQvg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":895392},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","shasum":"0a0b81a4fafb3c38fa54152fb96e21141a4b8b97","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./i18n":{"types":"./dist/i18n/index.d.ts","import":"./dist/i18n/index.js"},"./audio":{"types":"./dist/audio/index.d.ts","import":"./dist/audio/index.js"},"./saves":{"types":"./dist/saves/index.d.ts","import":"./dist/saves/index.js"},"./passages":{"types":"./dist/passages/types/index.d.ts"}},"imports":{"#*":"./dist/*"},"private":false,"scripts":{"dev":"tsc --watch & tsc-alias --watch","lint":"eslint .","build":"tsc && tsc-alias","prepack":"rm -rf dist && bun run build","test-pack":"npm pack --dry-run && bunx publint","check-types":"tsc --noEmit"},"_npmUser":{"name":"laruss5","email":"konstantinchist1993@gmail.com"},"_integrity":"sha512-7LLvlEX5AsoKPeMV0QgZtfO964LLTJMO0ccctXoIYmkV2uOKhgV/xwh4j0eA3aWxRnZqPwyNdkgJmqR5WlZvhA==","repository":"github:laruss/react-text-game","_npmVersion":"10.8.3","description":"A powerful React-based text game engine with reactive state management, passage-based navigation, and persistent save system for building interactive narrative experiences","directories":{},"_nodeVersion":"24.3.0","dependencies":{"dexie":"^4.2.0","valtio":"^2.1.8","consola":"^3.4.2","i18next":"^25.6.0","crypto-js":"^4.2.0","jsonpath-plus":"^10.3.0","react-i18next":"^16.1.0","dexie-react-hooks":"^4.2.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.37.0","tsc-alias":"^1.8.16","@types/bun":"^1.2.23","@types/node":"^24.6.2","@types/react":"^19.0.9","@types/crypto-js":"^4.2.2","@types/react-dom":"^19.0.3"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0","typescript":"^5"},"_npmOperationalInternal":{"tmp":"tmp/core_0.5.10_1766746350220_0.2675630428174962","host":"s3://npm-registry-packages-npm-production"}},"0.5.11":{"name":"@react-text-game/core","version":"0.5.11","author":"laruss","license":"MIT","_id":"@react-text-game/core@0.5.11","maintainers":[{"name":"laruss5","email":"konstantinchist1993@gmail.com"}],"homepage":"https://reacttextgame.dev/","dist":{"shasum":"2ec0f61157b0350fb1f56fa648f3b8797dcecf0d","tarball":"https://registry.npmjs.org/@react-text-game/core/-/core-0.5.11.tgz","fileCount":306,"integrity":"sha512-hbnYG5AcqHAfR2mnyLr0lznJj5hSlS3KiXDd4C73uKkGoLb1g6c8NDiTLlhcFCWfIvWoeZbgyrsOQ2Sml2zCtQ==","signatures":[{"sig":"MEUCIHEAuAvfuRUZInBWyYUQaT/wsCUt2+5hGAxTDHOgjim/AiEApLhV2CgiAEV25WnL3qUoKarnDL8unNVhLQ2DlClUa1Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":907825},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","shasum":"2ec0f61157b0350fb1f56fa648f3b8797dcecf0d","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./i18n":{"types":"./dist/i18n/index.d.ts","import":"./dist/i18n/index.js"},"./audio":{"types":"./dist/audio/index.d.ts","import":"./dist/audio/index.js"},"./saves":{"types":"./dist/saves/index.d.ts","import":"./dist/saves/index.js"},"./passages":{"types":"./dist/passages/types/index.d.ts"}},"imports":{"#*":"./dist/*"},"private":false,"scripts":{"dev":"tsc --watch & tsc-alias --watch","lint":"eslint .","build":"tsc && tsc-alias","prepack":"rm -rf dist && bun run build","test-pack":"npm pack --dry-run && bunx publint","check-types":"tsc --noEmit"},"_npmUser":{"name":"laruss5","email":"konstantinchist1993@gmail.com"},"_integrity":"sha512-hbnYG5AcqHAfR2mnyLr0lznJj5hSlS3KiXDd4C73uKkGoLb1g6c8NDiTLlhcFCWfIvWoeZbgyrsOQ2Sml2zCtQ==","repository":"github:laruss/react-text-game","_npmVersion":"10.8.3","description":"A powerful React-based text game engine with reactive state management, passage-based navigation, and persistent save system for building interactive narrative experiences","directories":{},"_nodeVersion":"24.3.0","dependencies":{"dexie":"^4.2.0","valtio":"^2.1.8","consola":"^3.4.2","i18next":"^25.6.0","crypto-js":"^4.2.0","jsonpath-plus":"^10.3.0","react-i18next":"^16.1.0","dexie-react-hooks":"^4.2.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.37.0","tsc-alias":"^1.8.16","@types/bun":"^1.2.23","@types/node":"^24.6.2","@types/react":"^19.0.9","@types/crypto-js":"^4.2.2","@types/react-dom":"^19.0.3"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0","typescript":"^5"},"_npmOperationalInternal":{"tmp":"tmp/core_0.5.11_1766748893955_0.9480982974423904","host":"s3://npm-registry-packages-npm-production"}},"0.5.12":{"name":"@react-text-game/core","version":"0.5.12","author":"laruss","license":"MIT","_id":"@react-text-game/core@0.5.12","maintainers":[{"name":"laruss5","email":"konstantinchist1993@gmail.com"}],"homepage":"https://reacttextgame.dev/","dist":{"shasum":"a95aeee7aa75a545d0fca0a1d041dfe3aaddaee4","tarball":"https://registry.npmjs.org/@react-text-game/core/-/core-0.5.12.tgz","fileCount":306,"integrity":"sha512-UiyW2F1EVMPjJ8Rsj8+XJwzzrSMtOGBGTY6lO2mcLOz1yXrcWCcXfbTRvYHnSYxYV6qADHif+d2dCNSswHkm6Q==","signatures":[{"sig":"MEQCICiFl2He0Xf6+o/BY0X3A8xXUeoNURBM/bATeE/ATLBvAiAOS77nwyBJ1ByF1/lnhcPgRJZQC69HGJc3a/wKesL2Rg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":918040},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","shasum":"a95aeee7aa75a545d0fca0a1d041dfe3aaddaee4","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./i18n":{"types":"./dist/i18n/index.d.ts","import":"./dist/i18n/index.js"},"./audio":{"types":"./dist/audio/index.d.ts","import":"./dist/audio/index.js"},"./saves":{"types":"./dist/saves/index.d.ts","import":"./dist/saves/index.js"},"./passages":{"types":"./dist/passages/types/index.d.ts"}},"imports":{"#*":"./dist/*"},"private":false,"scripts":{"dev":"tsc --watch & tsc-alias --watch","lint":"eslint .","build":"tsc && tsc-alias","prepack":"rm -rf dist && bun run build","test-pack":"npm pack --dry-run && bunx publint","check-types":"tsc --noEmit"},"_npmUser":{"name":"laruss5","email":"konstantinchist1993@gmail.com"},"_integrity":"sha512-UiyW2F1EVMPjJ8Rsj8+XJwzzrSMtOGBGTY6lO2mcLOz1yXrcWCcXfbTRvYHnSYxYV6qADHif+d2dCNSswHkm6Q==","repository":"github:laruss/react-text-game","_npmVersion":"10.8.3","description":"A powerful React-based text game engine with reactive state management, passage-based navigation, and persistent save system for building interactive narrative experiences","directories":{},"_nodeVersion":"24.3.0","dependencies":{"dexie":"^4.2.0","valtio":"^2.1.8","consola":"^3.4.2","i18next":"^25.6.0","crypto-js":"^4.2.0","jsonpath-plus":"^10.3.0","react-i18next":"^16.1.0","dexie-react-hooks":"^4.2.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.37.0","tsc-alias":"^1.8.16","@types/bun":"^1.2.23","@types/node":"^24.6.2","@types/react":"^19.0.9","@types/crypto-js":"^4.2.2","@types/react-dom":"^19.0.3"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0","typescript":"^5"},"_npmOperationalInternal":{"tmp":"tmp/core_0.5.12_1768125894549_0.9996793860527264","host":"s3://npm-registry-packages-npm-production"}},"0.5.13":{"name":"@react-text-game/core","version":"0.5.13","author":"laruss","license":"MIT","_id":"@react-text-game/core@0.5.13","maintainers":[{"name":"laruss5","email":"konstantinchist1993@gmail.com"}],"homepage":"https://reacttextgame.dev/","dist":{"shasum":"5b2ebe42bd53cebe6ba100885ffb968a31f4104b","tarball":"https://registry.npmjs.org/@react-text-game/core/-/core-0.5.13.tgz","fileCount":306,"integrity":"sha512-TJNRqcstOSUdwA/W6VHlT11LibGJQU7oxHdrJ+kmQknv1VnzXfznlXmycB9Lw25cWNzzAEIoQmW/e92WKSVsYw==","signatures":[{"sig":"MEQCIHZWdHcCtgJSXaa87ck3L2lCHLWlGQDeDy48pyJ2Pi/MAiBnwk+B2pPJA1CxqS0Pw9xUgWWWUujqd+6SroOIYOXSRA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":919243},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","shasum":"5b2ebe42bd53cebe6ba100885ffb968a31f4104b","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./i18n":{"types":"./dist/i18n/index.d.ts","import":"./dist/i18n/index.js"},"./audio":{"types":"./dist/audio/index.d.ts","import":"./dist/audio/index.js"},"./saves":{"types":"./dist/saves/index.d.ts","import":"./dist/saves/index.js"},"./passages":{"types":"./dist/passages/types/index.d.ts"}},"imports":{"#*":"./dist/*"},"private":false,"scripts":{"dev":"tsc --watch & tsc-alias --watch","lint":"eslint .","build":"tsc && tsc-alias","prepack":"rm -rf dist && bun run build","test-pack":"npm pack --dry-run && bunx publint","check-types":"tsc --noEmit"},"_npmUser":{"name":"laruss5","email":"konstantinchist1993@gmail.com"},"_integrity":"sha512-TJNRqcstOSUdwA/W6VHlT11LibGJQU7oxHdrJ+kmQknv1VnzXfznlXmycB9Lw25cWNzzAEIoQmW/e92WKSVsYw==","repository":"github:laruss/react-text-game","_npmVersion":"10.8.3","description":"A powerful React-based text game engine with reactive state management, passage-based navigation, and persistent save system for building interactive narrative experiences","directories":{},"_nodeVersion":"24.3.0","dependencies":{"dexie":"^4.2.0","valtio":"^2.1.8","consola":"^3.4.2","i18next":"^25.6.0","crypto-js":"^4.2.0","jsonpath-plus":"^10.3.0","react-i18next":"^16.1.0","dexie-react-hooks":"^4.2.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.37.0","tsc-alias":"^1.8.16","@types/bun":"^1.2.23","@types/node":"^24.6.2","@types/react":"^19.0.9","@types/crypto-js":"^4.2.2","@types/react-dom":"^19.0.3"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0","typescript":"^5"},"_npmOperationalInternal":{"tmp":"tmp/core_0.5.13_1768727579888_0.5362891370618543","host":"s3://npm-registry-packages-npm-production"}},"0.5.14":{"name":"@react-text-game/core","version":"0.5.14","author":"laruss","license":"MIT","_id":"@react-text-game/core@0.5.14","maintainers":[{"name":"laruss5","email":"konstantinchist1993@gmail.com"}],"homepage":"https://reacttextgame.dev/","dist":{"shasum":"cded64cb502b9f8c4eea51e2b39a13a189601cba","tarball":"https://registry.npmjs.org/@react-text-game/core/-/core-0.5.14.tgz","fileCount":306,"integrity":"sha512-yLO6fU+o0+/NrEH24B8/xtPy4SL2HmULFKiwZcIohnBB+im9Zp7K+QhJEzl/dG8vi8IM8sYtHB4XWsvkbPs9dg==","signatures":[{"sig":"MEUCIE/BhHGYNXzhslS/ny780Hk6QqvhdTXqBUdW008TU2stAiEAyaEcdfsQK/+/1HCaolezRnCbk+J3Nt6Pdl2OkjBbeTs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":921025},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","shasum":"cded64cb502b9f8c4eea51e2b39a13a189601cba","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./i18n":{"types":"./dist/i18n/index.d.ts","import":"./dist/i18n/index.js"},"./audio":{"types":"./dist/audio/index.d.ts","import":"./dist/audio/index.js"},"./saves":{"types":"./dist/saves/index.d.ts","import":"./dist/saves/index.js"},"./passages":{"types":"./dist/passages/types/index.d.ts"}},"imports":{"#*":"./dist/*"},"private":false,"scripts":{"dev":"tsc --watch & tsc-alias --watch","lint":"eslint .","build":"tsc && tsc-alias","prepack":"rm -rf dist && bun run build","test-pack":"npm pack --dry-run && bunx publint","check-types":"tsc --noEmit"},"_npmUser":{"name":"laruss5","email":"konstantinchist1993@gmail.com"},"_integrity":"sha512-yLO6fU+o0+/NrEH24B8/xtPy4SL2HmULFKiwZcIohnBB+im9Zp7K+QhJEzl/dG8vi8IM8sYtHB4XWsvkbPs9dg==","repository":"github:laruss/react-text-game","_npmVersion":"10.8.3","description":"A powerful React-based text game engine with reactive state management, passage-based navigation, and persistent save system for building interactive narrative experiences","directories":{},"_nodeVersion":"24.3.0","dependencies":{"dexie":"^4.2.0","valtio":"^2.1.8","consola":"^3.4.2","i18next":"^25.6.0","crypto-js":"^4.2.0","jsonpath-plus":"^10.3.0","react-i18next":"^16.1.0","dexie-react-hooks":"^4.2.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.37.0","tsc-alias":"^1.8.16","@types/bun":"^1.2.23","@types/node":"^24.6.2","@types/react":"^19.0.9","@types/crypto-js":"^4.2.2","@types/react-dom":"^19.0.3"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0","typescript":"^5"},"_npmOperationalInternal":{"tmp":"tmp/core_0.5.14_1768729657681_0.7238647401095673","host":"s3://npm-registry-packages-npm-production"}},"0.5.15":{"name":"@react-text-game/core","version":"0.5.15","author":"laruss","license":"MIT","_id":"@react-text-game/core@0.5.15","maintainers":[{"name":"laruss5","email":"konstantinchist1993@gmail.com"}],"homepage":"https://reacttextgame.dev/","dist":{"shasum":"b3c20a0bdf793d83bb7338a08a10e839a18e6c5f","tarball":"https://registry.npmjs.org/@react-text-game/core/-/core-0.5.15.tgz","fileCount":310,"integrity":"sha512-BaskJHny8sfrR6TUUVHDDZsmOAnxHn4OfwqTe8R3G1OwdYW6kp+iEFpwDy6wk2mG0qzjLCGLmzpbvJF/uOqwxg==","signatures":[{"sig":"MEQCIDo3lP4F/zQkZhUCwr0pdqGppLf6Z2I/suWW/JZxSDsdAiBEt7uEX/2xZKcnxU39jBl7dh0zCOdo0JQBU3eAEJjzyQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":925665},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","shasum":"b3c20a0bdf793d83bb7338a08a10e839a18e6c5f","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./i18n":{"types":"./dist/i18n/index.d.ts","import":"./dist/i18n/index.js"},"./audio":{"types":"./dist/audio/index.d.ts","import":"./dist/audio/index.js"},"./saves":{"types":"./dist/saves/index.d.ts","import":"./dist/saves/index.js"},"./passages":{"types":"./dist/passages/types/index.d.ts"}},"imports":{"#*":"./dist/*"},"private":false,"scripts":{"dev":"tsc --watch & tsc-alias --watch","lint":"eslint .","build":"tsc && tsc-alias","prepack":"rm -rf dist && bun run build","test-pack":"npm pack --dry-run && bunx publint","check-types":"tsc --noEmit"},"_npmUser":{"name":"laruss5","email":"konstantinchist1993@gmail.com"},"_integrity":"sha512-BaskJHny8sfrR6TUUVHDDZsmOAnxHn4OfwqTe8R3G1OwdYW6kp+iEFpwDy6wk2mG0qzjLCGLmzpbvJF/uOqwxg==","repository":"github:laruss/react-text-game","_npmVersion":"10.8.3","description":"A powerful React-based text game engine with reactive state management, passage-based navigation, and persistent save system for building interactive narrative experiences","directories":{},"_nodeVersion":"24.3.0","dependencies":{"dexie":"^4.2.0","valtio":"^2.1.8","consola":"^3.4.2","i18next":"^25.6.0","crypto-js":"^4.2.0","jsonpath-plus":"^10.3.0","react-i18next":"^16.1.0","dexie-react-hooks":"^4.2.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.37.0","tsc-alias":"^1.8.16","@types/bun":"^1.2.23","@types/node":"^24.6.2","@types/react":"^19.0.9","@types/crypto-js":"^4.2.2","@types/react-dom":"^19.0.3"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0","typescript":"^5"},"_npmOperationalInternal":{"tmp":"tmp/core_0.5.15_1769176740808_0.9745638550392528","host":"s3://npm-registry-packages-npm-production"}},"0.5.16":{"name":"@react-text-game/core","version":"0.5.16","author":"laruss","license":"MIT","_id":"@react-text-game/core@0.5.16","maintainers":[{"name":"laruss5","email":"konstantinchist1993@gmail.com"}],"homepage":"https://reacttextgame.dev/","dist":{"shasum":"a98a6e08b626e525e5d330f7dd01826bdb66a620","tarball":"https://registry.npmjs.org/@react-text-game/core/-/core-0.5.16.tgz","fileCount":314,"integrity":"sha512-pXc0UqjbzMS0GC9fIwVJhEgpiSqkQh2hAp6+K+RQw2lqPh9gI/hi/sgBg47oL0XvgSeWscJvhxoV8q81F26jYg==","signatures":[{"sig":"MEUCICAvZAmIEucnT5AEEdiY+LTudfv9xpj0pjljEQiU4pigAiEA4ILMurJHnxFKIuUFo1C2bcvAZDIgHiF7lXv/BlKYKXY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":957232},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","shasum":"a98a6e08b626e525e5d330f7dd01826bdb66a620","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./i18n":{"types":"./dist/i18n/index.d.ts","import":"./dist/i18n/index.js"},"./audio":{"types":"./dist/audio/index.d.ts","import":"./dist/audio/index.js"},"./saves":{"types":"./dist/saves/index.d.ts","import":"./dist/saves/index.js"},"./passages":{"types":"./dist/passages/types/index.d.ts"}},"imports":{"#*":"./dist/*"},"private":false,"scripts":{"dev":"tsc --watch & tsc-alias --watch","lint":"eslint .","build":"tsc && tsc-alias","prepack":"rm -rf dist && bun run build","test-pack":"npm pack --dry-run && bunx publint","check-types":"tsc --noEmit"},"_npmUser":{"name":"laruss5","email":"konstantinchist1993@gmail.com"},"_integrity":"sha512-pXc0UqjbzMS0GC9fIwVJhEgpiSqkQh2hAp6+K+RQw2lqPh9gI/hi/sgBg47oL0XvgSeWscJvhxoV8q81F26jYg==","repository":"github:laruss/react-text-game","_npmVersion":"10.8.3","description":"A powerful React-based text game engine with reactive state management, passage-based navigation, and persistent save system for building interactive narrative experiences","directories":{},"_nodeVersion":"24.3.0","dependencies":{"dexie":"^4.2.0","valtio":"^2.1.8","consola":"^3.4.2","i18next":"^25.6.0","crypto-js":"^4.2.0","jsonpath-plus":"^10.3.0","react-i18next":"^16.1.0","dexie-react-hooks":"^4.2.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.37.0","tsc-alias":"^1.8.16","@types/bun":"^1.2.23","@types/node":"^24.6.2","@types/react":"^19.0.9","@types/crypto-js":"^4.2.2","@types/react-dom":"^19.0.3"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0","typescript":"^5"},"_npmOperationalInternal":{"tmp":"tmp/core_0.5.16_1769181391473_0.10948661715900587","host":"s3://npm-registry-packages-npm-production"}},"0.5.17":{"name":"@react-text-game/core","version":"0.5.17","author":"laruss","license":"MIT","_id":"@react-text-game/core@0.5.17","maintainers":[{"name":"laruss5","email":"konstantinchist1993@gmail.com"}],"homepage":"https://reacttextgame.dev/","dist":{"shasum":"0f6dc498251f637435aa14399eb3561cb24a6637","tarball":"https://registry.npmjs.org/@react-text-game/core/-/core-0.5.17.tgz","fileCount":318,"integrity":"sha512-UgmGLumr58wpUtCLih/ZYS3B1u2RJ8jEbuQ75pGJN2qDn6SOdyeABYI8R5+BZ5Pn1nG7JM/WmA6tqV29oSL8Iw==","signatures":[{"sig":"MEQCIBSC9dem6x6xk1GeB5L+opTLr6Osc7MElggqOXOKcBtZAiAMfCQXofnwd8dx4d/oR1lm2xlpohydLcasos3mVCs/rQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":988316},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","shasum":"0f6dc498251f637435aa14399eb3561cb24a6637","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./i18n":{"types":"./dist/i18n/index.d.ts","import":"./dist/i18n/index.js"},"./audio":{"types":"./dist/audio/index.d.ts","import":"./dist/audio/index.js"},"./saves":{"types":"./dist/saves/index.d.ts","import":"./dist/saves/index.js"},"./passages":{"types":"./dist/passages/types/index.d.ts"}},"imports":{"#*":"./dist/*"},"private":false,"scripts":{"dev":"tsc --watch & tsc-alias --watch","lint":"eslint .","build":"tsc && tsc-alias","prepack":"rm -rf dist && bun run build","test-pack":"npm pack --dry-run && bunx publint","check-types":"tsc --noEmit"},"_npmUser":{"name":"laruss5","email":"konstantinchist1993@gmail.com"},"_integrity":"sha512-UgmGLumr58wpUtCLih/ZYS3B1u2RJ8jEbuQ75pGJN2qDn6SOdyeABYI8R5+BZ5Pn1nG7JM/WmA6tqV29oSL8Iw==","repository":"github:laruss/react-text-game","_npmVersion":"10.8.3","description":"A powerful React-based text game engine with reactive state management, passage-based navigation, and persistent save system for building interactive narrative experiences","directories":{},"_nodeVersion":"24.3.0","dependencies":{"dexie":"^4.2.0","valtio":"^2.1.8","consola":"^3.4.2","i18next":"^25.6.0","crypto-js":"^4.2.0","jsonpath-plus":"^10.3.0","react-i18next":"^16.1.0","dexie-react-hooks":"^4.2.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.37.0","tsc-alias":"^1.8.16","@types/bun":"^1.2.23","@types/node":"^24.6.2","@types/react":"^19.0.9","@types/crypto-js":"^4.2.2","@types/react-dom":"^19.0.3"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0","typescript":"^5"},"_npmOperationalInternal":{"tmp":"tmp/core_0.5.17_1769268851608_0.5399758316940344","host":"s3://npm-registry-packages-npm-production"}},"0.5.18":{"name":"@react-text-game/core","version":"0.5.18","author":{"name":"laruss"},"license":"MIT","_id":"@react-text-game/core@0.5.18","maintainers":[{"name":"laruss5","email":"konstantinchist1993@gmail.com"}],"homepage":"https://reacttextgame.dev/","bugs":{"url":"https://github.com/laruss/react-text-game/issues"},"dist":{"shasum":"704a7fec560e42521ffdd98e33dd32c2ad1e0a11","tarball":"https://registry.npmjs.org/@react-text-game/core/-/core-0.5.18.tgz","fileCount":318,"integrity":"sha512-qD1PSR37LxGMjt+3eSmXMgjMPvi2j/iJGjXbrCj5AJ7prxFLKIgx4zcPngi8SyuJ024WliqhgRlqsVxmF1vZWA==","signatures":[{"sig":"MEYCIQCyvhFe92JwNkFKzeCzGHg/5zEA+Hc6tHWIlkE8RERpuAIhAM+sV+R8KTqrOfYGxMMea1y6CnZ72B5rOEKa/OPITnsi","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":988316},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./i18n":{"types":"./dist/i18n/index.d.ts","import":"./dist/i18n/index.js"},"./audio":{"types":"./dist/audio/index.d.ts","import":"./dist/audio/index.js"},"./saves":{"types":"./dist/saves/index.d.ts","import":"./dist/saves/index.js"},"./passages":{"types":"./dist/passages/types/index.d.ts"}},"gitHead":"bdb53ab9efe6ee8fd9beee189e41bf9c59dda60a","imports":{"#*":"./dist/*"},"private":false,"scripts":{"dev":"tsc --watch & tsc-alias --watch","lint":"eslint .","build":"tsc && tsc-alias","prepack":"rm -rf dist && bun run build","test-pack":"npm pack --dry-run && bunx publint","check-types":"tsc --noEmit"},"_npmUser":{"name":"laruss5","email":"konstantinchist1993@gmail.com"},"repository":{"url":"git+https://github.com/laruss/react-text-game.git","type":"git"},"_npmVersion":"11.13.0","description":"A powerful React-based text game engine with reactive state management, passage-based navigation, and persistent save system for building interactive narrative experiences","directories":{},"_nodeVersion":"25.6.1","dependencies":{"dexie":"^4.4.4","valtio":"^2.3.2","consola":"^3.4.2","i18next":"^25.6.0","crypto-js":"^4.2.0","jsonpath-plus":"^10.3.0","react-i18next":"^16.1.0","dexie-react-hooks":"^4.4.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.37.0","tsc-alias":"^1.8.16","@types/bun":"^1.2.23","@types/node":"^24.6.2","@types/react":"^19.0.9","@types/crypto-js":"^4.2.2","@types/react-dom":"^19.0.3"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0","typescript":"^5"},"_npmOperationalInternal":{"tmp":"tmp/core_0.5.18_1782922907431_0.0626739615210774","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@react-text-game/core","version":"0.6.0","author":"laruss","license":"MIT","_id":"@react-text-game/core@0.6.0","maintainers":[{"name":"laruss5","email":"konstantinchist1993@gmail.com"}],"homepage":"https://reacttextgame.dev/","dist":{"shasum":"a4227eca530a4ac74704ef2c98e03e090fa786d3","tarball":"https://registry.npmjs.org/@react-text-game/core/-/core-0.6.0.tgz","fileCount":262,"integrity":"sha512-2pWojvNFnZqmmOgQnuD9neUutgsPUFOEPv3cuog7p4d+krufouK0i3il51xaC4bIX0IW92uO+dcUigfVk4wGyA==","signatures":[{"sig":"MEYCIQDVMuncS+0+Ngh+HefDumIUTV5dfC2r20MYSF/BW97jAwIhAMKZnWd4lU0fLkbfRg7XBVAoTyp4au0v7lAEoFpvbqzL","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":507520},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","shasum":"a4227eca530a4ac74704ef2c98e03e090fa786d3","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./i18n":{"types":"./dist/i18n/index.d.ts","import":"./dist/i18n/index.js"},"./audio":{"types":"./dist/audio/index.d.ts","import":"./dist/audio/index.js"},"./saves":{"types":"./dist/saves/index.d.ts","import":"./dist/saves/index.js"},"./passages":{"types":"./dist/passages/types/index.d.ts"}},"imports":{"#*":"./dist/*"},"private":false,"scripts":{"dev":"tsc -p tsconfig.build.json --watch & tsc-alias -p tsconfig.build.json --watch","lint":"biome check --error-on-warnings .","test":"bun test --cwd ../.. packages/core/src/tests","build":"rm -rf dist && tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json","prepack":"bun run build","test-pack":"bun pm pack --dry-run && bunx --bun publint","check-types":"tsc --noEmit","test:coverage":"bun test --cwd ../.. --coverage --coverage-dir packages/core/coverage packages/core/src/tests && bun ../../scripts/check-coverage.ts packages/core"},"_npmUser":{"name":"laruss5","email":"konstantinchist1993@gmail.com"},"_integrity":"sha512-2pWojvNFnZqmmOgQnuD9neUutgsPUFOEPv3cuog7p4d+krufouK0i3il51xaC4bIX0IW92uO+dcUigfVk4wGyA==","repository":"github:laruss/react-text-game","_npmVersion":"10.8.3","description":"A powerful React-based text game engine with reactive state management, passage-based navigation, and persistent save system for building interactive narrative experiences","directories":{},"sideEffects":["./dist/passages/story/index.js","./dist/passages/story/start.js"],"_nodeVersion":"24.3.0","dependencies":{"dexie":"^4.4.4","valtio":"^2.3.2","i18next":"^25.6.0","crypto-js":"^4.2.0","jsonpath-plus":"^10.3.0","react-i18next":"^16.1.0","dexie-react-hooks":"^4.4.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsc-alias":"^1.8.16","@types/bun":"1.3.9","@types/node":"^24.6.2","@types/react":"^19.0.9","@types/crypto-js":"^4.2.2","@types/react-dom":"^19.0.3"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0","typescript":"^5"},"_npmOperationalInternal":{"tmp":"tmp/core_0.6.0_1784743530742_0.8348216450695727","host":"s3://npm-registry-packages-npm-production"}},"0.6.1":{"name":"@react-text-game/core","version":"0.6.1","author":"laruss","license":"MIT","_id":"@react-text-game/core@0.6.1","maintainers":[{"name":"laruss5","email":"konstantinchist1993@gmail.com"}],"homepage":"https://reacttextgame.dev/","dist":{"shasum":"c6ceb0eaab7ac6e156e8a1504c7cee98649dfb18","tarball":"https://registry.npmjs.org/@react-text-game/core/-/core-0.6.1.tgz","fileCount":262,"integrity":"sha512-uwKhnQMcyWKDgbbjeAmvoo4BFw7QjCxseALkK9IKWyrVmaY/TW0F+CJSQg+pXIQYjbJ5PEXG/amdR+6BOrWxAA==","signatures":[{"sig":"MEQCICqdqhW7BHrVTqL7FztoSVsV7y4WxnNEEyLCdmvHNLXoAiBOgyhYGPH1p077LPnGyq//+55WVWiD5esk2mruv3hpNQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":507492},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","shasum":"c6ceb0eaab7ac6e156e8a1504c7cee98649dfb18","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./i18n":{"types":"./dist/i18n/index.d.ts","import":"./dist/i18n/index.js"},"./audio":{"types":"./dist/audio/index.d.ts","import":"./dist/audio/index.js"},"./saves":{"types":"./dist/saves/index.d.ts","import":"./dist/saves/index.js"},"./passages":{"types":"./dist/passages/types/index.d.ts"}},"imports":{"#*":"./dist/*"},"private":false,"scripts":{"dev":"tsc -p tsconfig.build.json --watch & tsc-alias -p tsconfig.build.json --watch","lint":"biome check --error-on-warnings .","test":"bun test --cwd ../.. packages/core/src/tests","build":"rm -rf dist && tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json","prepack":"bun run build","test-pack":"bun pm pack --dry-run && bunx --bun publint","check-types":"tsc --noEmit","test:coverage":"bun test --cwd ../.. --coverage --coverage-dir packages/core/coverage packages/core/src/tests && bun ../../scripts/check-coverage.ts packages/core"},"_npmUser":{"name":"laruss5","email":"konstantinchist1993@gmail.com"},"_integrity":"sha512-uwKhnQMcyWKDgbbjeAmvoo4BFw7QjCxseALkK9IKWyrVmaY/TW0F+CJSQg+pXIQYjbJ5PEXG/amdR+6BOrWxAA==","repository":"github:laruss/react-text-game","_npmVersion":"10.8.3","description":"A powerful React-based text game engine with reactive state management, passage-based navigation, and persistent save system for building interactive narrative experiences","directories":{},"sideEffects":["./dist/passages/story/index.js","./dist/passages/story/start.js"],"_nodeVersion":"24.3.0","dependencies":{"dexie":"^4.4.4","valtio":"^2.3.2","i18next":"^25.6.0","crypto-js":"^4.2.0","jsonpath-plus":"^10.3.0","react-i18next":"^16.1.0","dexie-react-hooks":"^4.4.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsc-alias":"^1.8.16","@types/bun":"1.3.9","@types/node":"^24.6.2","@types/react":"^19.0.9","@types/crypto-js":"^4.2.2","@types/react-dom":"^19.0.3"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/core_0.6.1_1784744256962_0.08766823386678113","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"@react-text-game/core","version":"0.7.0","author":{"name":"laruss"},"license":"MIT","_id":"@react-text-game/core@0.7.0","maintainers":[{"name":"laruss5","email":"konstantinchist1993@gmail.com"}],"homepage":"https://reacttextgame.dev/","bugs":{"url":"https://github.com/laruss/react-text-game/issues"},"dist":{"shasum":"e2f0510f0c37cf15669264e63dbb4ab4412ce5bc","tarball":"https://registry.npmjs.org/@react-text-game/core/-/core-0.7.0.tgz","fileCount":274,"integrity":"sha512-c4D/KiMqAjt4rxNdIyDrj4O6OqG21fkUayXDeRSTgSC3h2V51HvNOWvsK5YGGMhaanrnpx9zHYqzZPB35ilbUg==","signatures":[{"sig":"MEQCIECdAdIBUUclQ1UoYd20ibbb7MoM+d+lMJjHCnPFi9ePAiAz9ImRE+TL4jnvjypQRZSFly9AoDjHFcGzqZE6mG37uA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":562299},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./i18n":{"types":"./dist/i18n/index.d.ts","import":"./dist/i18n/index.js"},"./audio":{"types":"./dist/audio/index.d.ts","import":"./dist/audio/index.js"},"./saves":{"types":"./dist/saves/index.d.ts","import":"./dist/saves/index.js"},"./passages":{"types":"./dist/passages/types/index.d.ts"}},"gitHead":"9aa52c3412169f451c3f63f9c39fe9fb6e314383","imports":{"#*":"./dist/*"},"private":false,"scripts":{"dev":"tsc -p tsconfig.build.json --watch & tsc-alias -p tsconfig.build.json --watch","lint":"biome check --error-on-warnings .","test":"bun test --cwd ../.. packages/core/src/tests","build":"rm -rf dist && tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json","prepack":"bun run build","test-pack":"bun pm pack --dry-run && bunx --bun publint","check-types":"tsc --noEmit","test:coverage":"bun test --cwd ../.. --coverage --coverage-dir packages/core/coverage packages/core/src/tests && bun ../../scripts/check-coverage.ts packages/core"},"_npmUser":{"name":"laruss5","email":"konstantinchist1993@gmail.com"},"repository":{"url":"git+https://github.com/laruss/react-text-game.git","type":"git"},"_npmVersion":"11.13.0","description":"A powerful React-based text game engine with reactive state management, passage-based navigation, and persistent save system for building interactive narrative experiences","directories":{},"sideEffects":["./dist/passages/story/index.js","./dist/passages/story/start.js"],"_nodeVersion":"25.6.1","dependencies":{"dexie":"^4.4.4","valtio":"^2.3.2","i18next":"^25.6.0","crypto-js":"^4.2.0","jsonpath-plus":"^10.3.0","react-i18next":"^16.1.0","dexie-react-hooks":"^4.4.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsc-alias":"^1.8.16","@types/bun":"1.3.9","@types/node":"^24.6.2","@types/react":"^19.0.9","@types/crypto-js":"^4.2.2","@types/react-dom":"^19.0.3"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/core_0.7.0_1785001602891_0.8768011691329871","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"@react-text-game/core","version":"0.8.0","author":{"name":"laruss"},"license":"MIT","_id":"@react-text-game/core@0.8.0","maintainers":[{"name":"laruss5","email":"konstantinchist1993@gmail.com"}],"homepage":"https://reacttextgame.dev/","bugs":{"url":"https://github.com/laruss/react-text-game/issues"},"dist":{"shasum":"c5691bd2ea8e711cd5d08ea6a092203c3cc3ffe3","tarball":"https://registry.npmjs.org/@react-text-game/core/-/core-0.8.0.tgz","fileCount":274,"integrity":"sha512-6BTqJP82MrEL8ik8gTwnGMetDfNrV+d1btoFic5v0GwQgLWU2rjDkd/4ffPjlXIsPsXPsfBI/KY9d5Kr78qNug==","signatures":[{"sig":"MEUCIQC4FR72kx4lTv6HTBCiAGmkhvHNbUJwFdWkqTnvH5iupwIgehG1hVFFP56XIl9e/5WZcS3jEYHWwT2cwTQMrFtZfAo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":568476},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./i18n":{"types":"./dist/i18n/index.d.ts","import":"./dist/i18n/index.js"},"./audio":{"types":"./dist/audio/index.d.ts","import":"./dist/audio/index.js"},"./saves":{"types":"./dist/saves/index.d.ts","import":"./dist/saves/index.js"},"./passages":{"types":"./dist/passages/types/index.d.ts"}},"gitHead":"9aa52c3412169f451c3f63f9c39fe9fb6e314383","imports":{"#*":"./dist/*"},"private":false,"scripts":{"dev":"tsc -p tsconfig.build.json --watch & tsc-alias -p tsconfig.build.json --watch","lint":"biome check --error-on-warnings .","test":"bun test --cwd ../.. packages/core/src/tests","build":"rm -rf dist && tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json","prepack":"bun run build","test-pack":"bun pm pack --dry-run && bunx --bun publint","check-types":"tsc --noEmit","test:coverage":"bun test --cwd ../.. --coverage --coverage-dir packages/core/coverage packages/core/src/tests && bun ../../scripts/check-coverage.ts packages/core"},"_npmUser":{"name":"laruss5","email":"konstantinchist1993@gmail.com"},"repository":{"url":"git+https://github.com/laruss/react-text-game.git","type":"git"},"_npmVersion":"11.13.0","description":"A powerful React-based text game engine with reactive state management, passage-based navigation, and persistent save system for building interactive narrative experiences","directories":{},"sideEffects":["./dist/passages/story/index.js","./dist/passages/story/start.js"],"_nodeVersion":"25.6.1","dependencies":{"dexie":"^4.4.4","valtio":"^2.3.2","i18next":"^25.6.0","crypto-js":"^4.2.0","jsonpath-plus":"^10.3.0","react-i18next":"^16.1.0","dexie-react-hooks":"^4.4.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsc-alias":"^1.8.16","@types/bun":"1.3.9","@types/node":"^24.6.2","@types/react":"^19.0.9","@types/crypto-js":"^4.2.2","@types/react-dom":"^19.0.3"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/core_0.8.0_1785628960193_0.7598222126423984","host":"s3://npm-registry-packages-npm-production"}},"0.9.0":{"name":"@react-text-game/core","version":"0.9.0","author":"laruss","license":"MIT","_id":"@react-text-game/core@0.9.0","maintainers":[{"name":"laruss5","email":"konstantinchist1993@gmail.com"}],"homepage":"https://reacttextgame.dev/","dist":{"shasum":"c2d02ae67970b13339a15d11050ee6c3f1f5805f","tarball":"https://registry.npmjs.org/@react-text-game/core/-/core-0.9.0.tgz","fileCount":298,"integrity":"sha512-THwGXNW20L5QQ6HPTwb8HKySkx7K727o6TtEKuqSvo0InN54FrX7XtNFIL3JnXkcT0M083Zj+t/AgEsmD1t3KQ==","signatures":[{"sig":"MEYCIQDfjT+qQTR2IK9ZzVb7txD+QGemzwBxtDfcoLg/cGO5HwIhAOXpc5DVe1NWwfninecgU965E5NHFYO07uLonFKJ1Aum","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":609473},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","shasum":"c2d02ae67970b13339a15d11050ee6c3f1f5805f","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./i18n":{"types":"./dist/i18n/index.d.ts","import":"./dist/i18n/index.js"},"./audio":{"types":"./dist/audio/index.d.ts","import":"./dist/audio/index.js"},"./clock":{"types":"./dist/clock/index.d.ts","import":"./dist/clock/index.js"},"./saves":{"types":"./dist/saves/index.d.ts","import":"./dist/saves/index.js"},"./passages":{"types":"./dist/passages/types/index.d.ts"}},"imports":{"#*":"./dist/*"},"private":false,"scripts":{"dev":"tsc -p tsconfig.build.json --watch & tsc-alias -p tsconfig.build.json --watch","lint":"biome check --error-on-warnings .","test":"bun test --cwd ../.. packages/core/src/tests","build":"rm -rf dist && tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json","prepack":"bun run build","test-pack":"bun pm pack --dry-run && bunx --bun publint","check-types":"tsc --noEmit","test:coverage":"bun test --cwd ../.. --coverage --coverage-dir packages/core/coverage packages/core/src/tests && bun ../../scripts/check-coverage.ts packages/core"},"_npmUser":{"name":"laruss5","email":"konstantinchist1993@gmail.com"},"_integrity":"sha512-THwGXNW20L5QQ6HPTwb8HKySkx7K727o6TtEKuqSvo0InN54FrX7XtNFIL3JnXkcT0M083Zj+t/AgEsmD1t3KQ==","repository":"github:laruss/react-text-game","_npmVersion":"10.8.3","description":"A powerful React-based text game engine with reactive state management, passage-based navigation, and persistent save system for building interactive narrative experiences","directories":{},"sideEffects":["./dist/passages/story/index.js","./dist/passages/story/start.js"],"_nodeVersion":"24.3.0","dependencies":{"dexie":"^4.4.4","valtio":"^2.3.2","i18next":"^25.6.0","crypto-js":"^4.2.0","jsonpath-plus":"^10.3.0","react-i18next":"^16.1.0","dexie-react-hooks":"^4.4.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsc-alias":"^1.8.16","@types/bun":"1.3.9","@types/node":"^24.6.2","@types/react":"^19.0.9","@types/crypto-js":"^4.2.2","@types/react-dom":"^19.0.3"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/core_0.9.0_1785797004856_0.15989459966891362","host":"s3://npm-registry-packages-npm-production"}},"0.9.1":{"name":"@react-text-game/core","version":"0.9.1","author":"laruss","license":"MIT","_id":"@react-text-game/core@0.9.1","maintainers":[{"name":"laruss5","email":"konstantinchist1993@gmail.com"}],"homepage":"https://reacttextgame.dev/","dist":{"shasum":"4a2e061b1dfc806e41f23bb33915651f763b6ca7","tarball":"https://registry.npmjs.org/@react-text-game/core/-/core-0.9.1.tgz","fileCount":298,"integrity":"sha512-EShyclKrexLoDo7KKWapMt7DPwZZ/zVa3HabX7/HRwH4OGgNVCcVjZx+qk9n0dAJdaEOkkU5NOhr5xidoLbw/g==","signatures":[{"sig":"MEQCIBKOotZ4fn8y2MBEXIerdFxIduYqPHDp/kgwVD9f5dqJAiBs1h2qCPvnoNJRQxpxn4SyHLVrHgD7DofzimjPDwfiEg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":610172},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","shasum":"4a2e061b1dfc806e41f23bb33915651f763b6ca7","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./i18n":{"types":"./dist/i18n/index.d.ts","import":"./dist/i18n/index.js"},"./audio":{"types":"./dist/audio/index.d.ts","import":"./dist/audio/index.js"},"./clock":{"types":"./dist/clock/index.d.ts","import":"./dist/clock/index.js"},"./saves":{"types":"./dist/saves/index.d.ts","import":"./dist/saves/index.js"},"./passages":{"types":"./dist/passages/types/index.d.ts"}},"imports":{"#*":"./dist/*"},"private":false,"scripts":{"dev":"tsc -p tsconfig.build.json --watch & tsc-alias -p tsconfig.build.json --watch","lint":"biome check --error-on-warnings .","test":"bun test --cwd ../.. packages/core/src/tests","build":"rm -rf dist && tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json","prepack":"bun run build","test-pack":"bun pm pack --dry-run && bunx --bun publint","check-types":"tsc --noEmit","test:coverage":"bun test --cwd ../.. --coverage --coverage-dir packages/core/coverage packages/core/src/tests && bun ../../scripts/check-coverage.ts packages/core"},"_npmUser":{"name":"laruss5","email":"konstantinchist1993@gmail.com"},"_integrity":"sha512-EShyclKrexLoDo7KKWapMt7DPwZZ/zVa3HabX7/HRwH4OGgNVCcVjZx+qk9n0dAJdaEOkkU5NOhr5xidoLbw/g==","repository":"github:laruss/react-text-game","_npmVersion":"10.8.3","description":"A powerful React-based text game engine with reactive state management, passage-based navigation, and persistent save system for building interactive narrative experiences","directories":{},"sideEffects":["./dist/passages/story/index.js","./dist/passages/story/start.js"],"_nodeVersion":"24.3.0","dependencies":{"dexie":"^4.4.4","valtio":"^2.3.2","i18next":"^25.6.0","crypto-js":"^4.2.0","jsonpath-plus":"^10.3.0","react-i18next":"^16.1.0","dexie-react-hooks":"^4.4.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsc-alias":"^1.8.16","@types/bun":"1.3.9","@types/node":"^24.6.2","@types/react":"^19.0.9","@types/crypto-js":"^4.2.2","@types/react-dom":"^19.0.3"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/core_0.9.1_1785798297041_0.546933874741067","host":"s3://npm-registry-packages-npm-production"}},"0.10.0":{"name":"@react-text-game/core","version":"0.10.0","author":{"name":"laruss"},"license":"MIT","_id":"@react-text-game/core@0.10.0","maintainers":[{"name":"laruss5","email":"konstantinchist1993@gmail.com"}],"homepage":"https://reacttextgame.dev/","bugs":{"url":"https://github.com/laruss/react-text-game/issues"},"dist":{"shasum":"63038ef2c7483e0b84a458e02d06c388d53e5c99","tarball":"https://registry.npmjs.org/@react-text-game/core/-/core-0.10.0.tgz","fileCount":302,"integrity":"sha512-YVAqamzlq66jxqjcY2qSED9gn9VFRJ53SCvybAclU+u5sNVdv2ilu38SmqMf3mXPZxl3grhGvVYzPYrYDSMrmg==","signatures":[{"sig":"MEYCIQDLlwIczdzrPuw6VLhHquy29+2gEerzZeeWtrl5d39toAIhAPmGd0ZQwc4ZnL9hLJxi1aNw/g8n6UCVSz9JMQV25bvb","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":618501},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./i18n":{"types":"./dist/i18n/index.d.ts","import":"./dist/i18n/index.js"},"./audio":{"types":"./dist/audio/index.d.ts","import":"./dist/audio/index.js"},"./clock":{"types":"./dist/clock/index.d.ts","import":"./dist/clock/index.js"},"./saves":{"types":"./dist/saves/index.d.ts","import":"./dist/saves/index.js"},"./passages":{"types":"./dist/passages/types/index.d.ts"}},"gitHead":"82dd17c6be044470eb82037b1d8d59eedbfff48e","imports":{"#*":"./dist/*"},"private":false,"scripts":{"dev":"tsc -p tsconfig.build.json --watch & tsc-alias -p tsconfig.build.json --watch","lint":"biome check --error-on-warnings .","test":"bun test --cwd ../.. packages/core/src/tests","build":"rm -rf dist && tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json","prepack":"bun run build","test-pack":"bun pm pack --dry-run && bunx --bun publint","check-types":"tsc --noEmit","test:coverage":"bun test --cwd ../.. --coverage --coverage-dir packages/core/coverage packages/core/src/tests && bun ../../scripts/check-coverage.ts packages/core"},"_npmUser":{"name":"laruss5","email":"konstantinchist1993@gmail.com"},"repository":{"url":"git+https://github.com/laruss/react-text-game.git","type":"git"},"_npmVersion":"11.13.0","description":"A powerful React-based text game engine with reactive state management, passage-based navigation, and persistent save system for building interactive narrative experiences","directories":{},"sideEffects":["./dist/passages/story/index.js","./dist/passages/story/start.js"],"_nodeVersion":"24.3.0","dependencies":{"dexie":"^4.4.4","valtio":"^2.3.2","i18next":"^25.6.0","crypto-js":"^4.2.0","jsonpath-plus":"^10.3.0","react-i18next":"^16.1.0","dexie-react-hooks":"^4.4.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsc-alias":"^1.8.16","@types/bun":"1.3.9","@types/node":"^24.6.2","@types/react":"^19.0.9","@types/crypto-js":"^4.2.2","@types/react-dom":"^19.0.3"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/core_0.10.0_1785853565245_0.12109035991957784","host":"s3://npm-registry-packages-npm-production"}},"0.10.1":{"name":"@react-text-game/core","version":"0.10.1","author":{"name":"laruss"},"license":"MIT","_id":"@react-text-game/core@0.10.1","maintainers":[{"name":"laruss5","email":"konstantinchist1993@gmail.com"}],"homepage":"https://reacttextgame.dev/","bugs":{"url":"https://github.com/laruss/react-text-game/issues"},"dist":{"shasum":"1cd48c75f0377869ffeaaf72a12ebb9eb9c8c072","tarball":"https://registry.npmjs.org/@react-text-game/core/-/core-0.10.1.tgz","fileCount":306,"integrity":"sha512-kgNxWaZd7CdrTmbUpO+r+X04qMH6sHL57msr/5OTS4M7quI1tDK6ZTDQV5bnvr56lghKmorPKJTed68iMtJewg==","signatures":[{"sig":"MEYCIQC0Spk4sSNDfu5V3NHTcjmXpd5fRTmDnYsJ7ggIgfsaygIhAOPXHixwwBcF96Rhiysg12EJRE4ueSjUhlAekwVM3rEi","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@react-text-game%2fcore@0.10.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":620181},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./i18n":{"types":"./dist/i18n/index.d.ts","import":"./dist/i18n/index.js"},"./audio":{"types":"./dist/audio/index.d.ts","import":"./dist/audio/index.js"},"./clock":{"types":"./dist/clock/index.d.ts","import":"./dist/clock/index.js"},"./saves":{"types":"./dist/saves/index.d.ts","import":"./dist/saves/index.js"},"./passages":{"types":"./dist/passages/types/index.d.ts"}},"gitHead":"7afdceba63b91ff6ce8e4983ca24c5de0550b15f","imports":{"#*":"./dist/*"},"private":false,"scripts":{"dev":"tsc -p tsconfig.build.json --watch & tsc-alias -p tsconfig.build.json --watch","lint":"biome check --error-on-warnings .","test":"bun test --cwd ../.. packages/core/src/tests","build":"rm -rf dist && tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json","prepack":"bun run build","test-pack":"bun pm pack --dry-run && bunx --bun publint","check-types":"tsc --noEmit","test:coverage":"bun test --cwd ../.. --coverage --coverage-dir packages/core/coverage packages/core/src/tests && bun ../../scripts/check-coverage.ts packages/core"},"_npmUser":{"name":"laruss5","email":"konstantinchist1993@gmail.com"},"repository":{"url":"git+https://github.com/laruss/react-text-game.git","type":"git","directory":"packages/core"},"_npmVersion":"10.9.8","description":"A powerful React-based text game engine with reactive state management, passage-based navigation, and persistent save system for building interactive narrative experiences","directories":{},"sideEffects":["./dist/passages/story/index.js","./dist/passages/story/start.js"],"_nodeVersion":"22.23.1","dependencies":{"dexie":"^4.4.4","valtio":"^2.3.2","i18next":"^25.6.0","crypto-js":"^4.2.0","jsonpath-plus":"^10.3.0","react-i18next":"^16.1.0","dexie-react-hooks":"^4.4.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsc-alias":"^1.8.16","@types/bun":"1.3.9","@types/node":"^24.6.2","@types/react":"^19.0.9","@types/crypto-js":"^4.2.2","@types/react-dom":"^19.0.3"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/core_0.10.1_1785929530871_0.34213020046764675","host":"s3://npm-registry-packages-npm-production"}},"0.11.0":{"name":"@react-text-game/core","version":"0.11.0","description":"A powerful React-based text game engine with reactive state management, passage-based navigation, and persistent save system for building interactive narrative experiences","main":"dist/index.js","module":"dist/index.js","types":"dist/index.d.ts","repository":{"type":"git","url":"git+https://github.com/laruss/react-text-game.git","directory":"packages/core"},"homepage":"https://reacttextgame.dev/","private":false,"sideEffects":["./dist/passages/story/index.js","./dist/passages/story/start.js"],"type":"module","scripts":{"dev":"tsc -p tsconfig.build.json --watch & tsc-alias -p tsconfig.build.json --watch","build":"rm -rf dist && tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json","test":"bun test --cwd ../.. packages/core/src/tests","test:coverage":"bun test --cwd ../.. --coverage --coverage-dir packages/core/coverage packages/core/src/tests && bun ../../scripts/check-coverage.ts packages/core","check-types":"tsc --noEmit","lint":"biome check --error-on-warnings .","prepack":"bun run build","test-pack":"bun pm pack --dry-run && bunx --bun publint"},"author":{"name":"laruss"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"license":"MIT","dependencies":{"crypto-js":"^4.2.0","dexie":"^4.4.4","dexie-react-hooks":"^4.4.0","i18next":"^25.6.0","jsonpath-plus":"^10.3.0","react-i18next":"^16.1.0","valtio":"^2.3.2"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"devDependencies":{"@types/bun":"1.3.9","@types/crypto-js":"^4.2.2","@types/node":"^24.6.2","@types/react":"^19.0.9","@types/react-dom":"^19.0.3","tsc-alias":"^1.8.16"},"imports":{"#*":"./dist/*"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./saves":{"types":"./dist/saves/index.d.ts","import":"./dist/saves/index.js"},"./passages":{"types":"./dist/passages/types/index.d.ts"},"./i18n":{"types":"./dist/i18n/index.d.ts","import":"./dist/i18n/index.js"},"./audio":{"types":"./dist/audio/index.d.ts","import":"./dist/audio/index.js"},"./clock":{"types":"./dist/clock/index.d.ts","import":"./dist/clock/index.js"}},"_id":"@react-text-game/core@0.11.0","gitHead":"1ff7cc12f6153268e252c2e249777b24bc45408e","bugs":{"url":"https://github.com/laruss/react-text-game/issues"},"_nodeVersion":"22.23.2","_npmVersion":"10.9.8","dist":{"integrity":"sha512-RyW6dZQTi5iTZMaNpjByUfKMUjjiKKnZVbHcD140LBCnZyc4MHWtD0KFoG8BCP2/5xgilA3bP1wbpei4dsl1fg==","shasum":"a40b0aed6ecf6b66bc336cd6eb201e46e2724e64","tarball":"https://registry.npmjs.org/@react-text-game/core/-/core-0.11.0.tgz","fileCount":326,"unpackedSize":671067,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@react-text-game%2fcore@0.11.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIEay6VYxgm/TT94nM8l3RKAKCrlZr7zH0Gb1sHmcLNKYAiBeKEQWoEEGrL5BqLP45tBGM4jx86X5uRuS2+qu6aDOCw=="}]},"_npmUser":{"name":"laruss5","email":"konstantinchist1993@gmail.com"},"directories":{},"maintainers":[{"name":"laruss5","email":"konstantinchist1993@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/core_0.11.0_1786834899024_0.6258929061832974"},"_hasShrinkwrap":false}},"time":{"created":"2025-10-08T10:26:18.763Z","modified":"2026-08-15T23:01:39.497Z","0.1.0":"2025-10-08T10:26:19.133Z","0.1.2":"2025-10-08T15:54:14.424Z","0.2.0":"2025-10-09T17:06:41.743Z","0.2.1":"2025-10-09T19:02:52.883Z","0.2.2":"2025-10-10T07:03:09.745Z","0.3.0":"2025-10-10T11:41:08.069Z","0.4.0":"2025-10-19T13:09:55.421Z","0.4.1":"2025-10-19T13:55:57.211Z","0.5.0":"2025-10-22T11:44:41.558Z","0.5.1":"2025-10-31T14:10:15.731Z","0.5.2":"2025-11-03T12:37:00.625Z","0.5.3":"2025-11-03T13:31:15.255Z","0.5.4":"2025-11-08T16:57:39.555Z","0.5.6":"2025-11-12T11:32:16.154Z","0.5.7":"2025-11-16T16:04:43.372Z","0.5.8":"2025-12-23T13:14:18.210Z","0.5.9":"2025-12-25T12:35:43.806Z","0.5.10":"2025-12-26T10:52:30.386Z","0.5.11":"2025-12-26T11:34:54.130Z","0.5.12":"2026-01-11T10:04:54.776Z","0.5.13":"2026-01-18T09:13:00.051Z","0.5.14":"2026-01-18T09:47:37.817Z","0.5.15":"2026-01-23T13:59:00.965Z","0.5.16":"2026-01-23T15:16:31.605Z","0.5.17":"2026-01-24T15:34:11.782Z","0.5.18":"2026-07-01T16:21:47.620Z","0.6.0":"2026-07-22T18:05:30.887Z","0.6.1":"2026-07-22T18:17:37.115Z","0.7.0":"2026-07-25T17:46:43.066Z","0.8.0":"2026-08-02T00:02:40.352Z","0.9.0":"2026-08-03T22:43:25.049Z","0.9.1":"2026-08-03T23:04:57.182Z","0.10.0":"2026-08-04T14:26:05.380Z","0.10.1":"2026-08-05T11:32:11.016Z","0.11.0":"2026-08-15T23:01:39.161Z"},"bugs":{"url":"https://github.com/laruss/react-text-game/issues"},"author":{"name":"laruss"},"license":"MIT","homepage":"https://reacttextgame.dev/","repository":{"type":"git","url":"git+https://github.com/laruss/react-text-game.git","directory":"packages/core"},"description":"A powerful React-based text game engine with reactive state management, passage-based navigation, and persistent save system for building interactive narrative experiences","maintainers":[{"name":"laruss5","email":"konstantinchist1993@gmail.com"}],"readme":"# @react-text-game/core\n\nA powerful, reactive text-based game engine built for React applications. This package provides a comprehensive framework for creating interactive narrative experiences with support for story passages, interactive maps, and state management.\n\n## Features\n\n- **Reactive State Management** - Built on Valtio for automatic UI updates\n- **Multiple Passage Types** - Story, Interactive Map, and Widget passages\n- **Flexible Save System** - JSONPath-based storage with auto-save support\n- **Audio System** - Comprehensive audio support with reactive state, persistence, and global controls\n- **Entity Registry** - Automatic registration and proxying of game objects\n- **Factory-Based Entities** - Plain-object factories for beginners with class-based escape hatches\n- **Type-Safe** - Full TypeScript support with comprehensive types\n- **React Hooks** - Built-in hooks for seamless React integration\n- **Internationalization** - i18next-powered translations with automatic language persistence\n\n## Installation\n\n```bash\n# bun\nbun add @react-text-game/core\n\n# npm\nnpm install @react-text-game/core\n\n# yarn\nyarn add @react-text-game/core\n\n# pnpm\npnpm add @react-text-game/core\n```\n\n## Quick Start\n\n```tsx\nimport { Game, createEntity, defineStory } from \"@react-text-game/core\";\n\n// IMPORTANT: Initialize the game first\nawait Game.init({\n    gameName: \"My Adventure\",\n    translations: {\n        defaultLanguage: \"en\",\n        fallbackLanguage: \"en\",\n        resources: {\n            en: {\n                passages: { intro: \"Welcome to the Game\" },\n                common: { save: \"Save\", load: \"Load\" },\n            },\n            ru: {\n                passages: { intro: \"Добро пожаловать в игру\" },\n            },\n        },\n    },\n    // ...other options\n});\n\n// Create a game entity with the factory (recommended)\nconst player = createEntity(\"player\", {\n    name: \"Hero\",\n    stats: {\n        health: 100,\n        mana: 50,\n    },\n    inventory: [] as string[],\n});\n\n// Direct property updates automatically stay reactive\nplayer.stats.health -= 10;\n\n// Persist manual changes when you need them stored\nplayer.save();\n\n// Create a story passage. The callback receives a toolbox of component\n// builders, so you never have to write component objects by hand.\nconst introStory = defineStory(\"intro\", (h) => [\n    h.header(\"Welcome to the Game\", { level: 1 }),\n    h.text(`Hello, ${player.name}!`),\n    h.actions([{ content: \"Start Adventure\", action: h.jump(\"adventure\") }]),\n]);\n\n// Navigate to passage\nGame.jumpTo(introStory);\n```\n\n> Prefer writing classes? Jump to [Advanced Entities](#advanced-entities-basegameobject) for a drop-in replacement using inheritance.\n\n## Audio System\n\nThe core engine includes a comprehensive audio system with reactive state management, automatic persistence, and global controls. Built on top of the Web Audio API with Valtio for reactive state, it provides an easy-to-use interface for managing background music, sound effects, and voice-over audio.\n\n### Features\n\n- **Reactive State** - Valtio-powered reactive state for seamless React integration\n- **Automatic Persistence** - Audio state (volume, position, playing status) saved automatically\n- **Global Controls** - Master volume, mute all, pause/resume all tracks\n- **Fade Effects** - Built-in fade in/out for smooth transitions\n- **Multiple Tracks** - Independent control of multiple audio files simultaneously\n- **Browser-friendly** - Handles autoplay policies and user interaction requirements\n- **Type-Safe** - Full TypeScript support with comprehensive types\n\n### Quick Start\n\n```typescript\nimport { createAudio, AudioManager } from \"@react-text-game/core/audio\";\n\n// Create an audio track\nconst bgMusic = createAudio(\"/audio/background.mp3\", {\n    id: \"bg-music\",\n    volume: 0.7,\n    loop: true,\n});\n\n// Play the track\nawait bgMusic.play();\n\n// Control individual tracks\nbgMusic.setVolume(0.5);\nbgMusic.pause();\nbgMusic.resume();\nbgMusic.stop();\n\n// Global controls\nAudioManager.setMasterVolume(0.8);\nAudioManager.muteAll();\nAudioManager.pauseAll();\n```\n\n### Creating Audio Tracks\n\nUse the `createAudio` factory function to create audio tracks:\n\n```typescript\nimport { createAudio } from \"@react-text-game/core/audio\";\n\n// Basic audio track\nconst sfx = createAudio(\"/audio/click.mp3\");\n\n// With options\nconst music = createAudio(\"/audio/theme.mp3\", {\n    id: \"theme-music\", // Required for persistence\n    volume: 0.6, // 0.0 to 1.0 (default: 1.0)\n    loop: true, // Auto-loop (default: false)\n    playbackRate: 1.0, // Playback speed (default: 1.0)\n    muted: false, // Start muted (default: false)\n    autoPlay: false, // Auto-play on creation (default: false)\n    preload: \"metadata\", // 'none', 'metadata', or 'auto' (default: 'metadata')\n});\n```\n\n### Audio Track Controls\n\nEach audio track provides comprehensive playback controls:\n\n```typescript\n// Playback control\nawait audio.play(); // Start playback (returns Promise)\naudio.pause(); // Pause playback\naudio.resume(); // Resume from pause\naudio.stop(); // Stop and reset to beginning\n\n// Volume and settings\naudio.setVolume(0.5); // Set volume (0.0 to 1.0)\naudio.setLoop(true); // Enable/disable looping\naudio.setPlaybackRate(1.5); // Set playback speed\naudio.setMuted(true); // Mute/unmute\n\n// Seeking\naudio.seek(30); // Seek to 30 seconds\n\n// Fade effects\nawait audio.fadeIn(2000); // Fade in over 2 seconds\nawait audio.fadeOut(1500); // Fade out over 1.5 seconds\n\n// State and persistence\nconst state = audio.getState(); // Get reactive state\naudio.save(); // Save state to storage\naudio.load(); // Load state from storage\n\n// Cleanup\naudio.dispose(); // Remove and clean up\n```\n\n### Reactive State\n\nAudio tracks use Valtio for reactive state management, making them perfect for React integration:\n\n```typescript\nconst audio = createAudio(\"/audio/music.mp3\", { id: \"music\" });\n\n// Get reactive state\nconst state = audio.getState();\n\n// Access state properties\nconsole.log(state.isPlaying); // boolean\nconsole.log(state.isPaused); // boolean\nconsole.log(state.isStopped); // boolean\nconsole.log(state.currentTime); // number (seconds)\nconsole.log(state.duration); // number (seconds)\nconsole.log(state.volume); // number (0.0 to 1.0)\nconsole.log(state.loop); // boolean\nconsole.log(state.playbackRate); // number\nconsole.log(state.muted); // boolean\n```\n\n### Global Audio Manager\n\nThe `AudioManager` provides global controls for all registered audio tracks:\n\n```typescript\nimport { AudioManager } from \"@react-text-game/core/audio\";\n\n// Master volume control\nAudioManager.setMasterVolume(0.5); // Set master volume (0.0 to 1.0)\nconst volume = AudioManager.getMasterVolume(); // Get master volume\n\n// Global playback control\nAudioManager.pauseAll(); // Pause all playing tracks\nAudioManager.resumeAll(); // Resume all paused tracks\nAudioManager.stopAll(); // Stop all tracks\n\n// Global mute control\nAudioManager.muteAll(); // Mute all tracks\nAudioManager.unmuteAll(); // Unmute all tracks\n\n// Track management\nconst tracks = AudioManager.getAllTracks(); // Get all registered tracks\nconst music = AudioManager.getTrackById(\"bg-music\"); // Get specific track by ID\n\n// Cleanup\nAudioManager.disposeAll(); // Dispose all tracks\n```\n\n**Master Volume Behavior:**\n\n- Master volume is a multiplier applied to all track volumes\n- Does not modify individual track volume settings\n- Example: Track at 0.8 volume with 0.5 master = 0.4 effective volume\n- Useful for game-wide volume sliders in settings\n\n### React Integration\n\nThe audio system includes React hooks for seamless component integration:\n\n#### useAudio Hook\n\nMonitor individual audio track state with automatic re-renders:\n\n```tsx\nimport { createAudio } from \"@react-text-game/core/audio\";\nimport { useAudio } from \"@react-text-game/core\";\n\nconst bgMusic = createAudio(\"/audio/background.mp3\", {\n    id: \"bg-music\",\n    loop: true,\n});\n\nfunction MusicPlayer() {\n    const audioState = useAudio(bgMusic);\n\n    return (\n        <div>\n            <p>Status: {audioState.isPlaying ? \"Playing\" : \"Stopped\"}</p>\n            <p>\n                Time: {audioState.currentTime.toFixed(1)}s /{\" \"}\n                {audioState.duration.toFixed(1)}s\n            </p>\n            <p>Volume: {(audioState.volume * 100).toFixed(0)}%</p>\n\n            <button onClick={() => bgMusic.play()}>Play</button>\n            <button onClick={() => bgMusic.pause()}>Pause</button>\n            <button onClick={() => bgMusic.stop()}>Stop</button>\n\n            <input\n                type=\"range\"\n                min=\"0\"\n                max=\"1\"\n                step=\"0.01\"\n                value={audioState.volume}\n                onChange={(e) => bgMusic.setVolume(parseFloat(e.target.value))}\n            />\n        </div>\n    );\n}\n```\n\n#### useAudioManager Hook\n\nAccess global audio controls in React components:\n\n```tsx\nimport { useAudioManager } from \"@react-text-game/core\";\n\nfunction AudioSettings() {\n    const audioManager = useAudioManager();\n\n    return (\n        <div>\n            <h2>Audio Settings</h2>\n\n            <label>\n                Master Volume: {(audioManager.masterVolume * 100).toFixed(0)}%\n                <input\n                    type=\"range\"\n                    min=\"0\"\n                    max=\"1\"\n                    step=\"0.01\"\n                    value={audioManager.masterVolume}\n                    onChange={(e) =>\n                        audioManager.setMasterVolume(parseFloat(e.target.value))\n                    }\n                />\n            </label>\n\n            <div>\n                <button onClick={audioManager.muteAll}>Mute All</button>\n                <button onClick={audioManager.unmuteAll}>Unmute All</button>\n                <button onClick={audioManager.pauseAll}>Pause All</button>\n                <button onClick={audioManager.resumeAll}>Resume All</button>\n            </div>\n\n            <p>Muted: {audioManager.isMuted ? \"Yes\" : \"No\"}</p>\n            <p>Active Tracks: {audioManager.getAllTracks().length}</p>\n        </div>\n    );\n}\n```\n\n### Automatic Persistence\n\nAudio tracks with an `id` automatically persist their state:\n\n```typescript\n// Create audio with ID for persistence\nconst music = createAudio(\"/audio/theme.mp3\", {\n    id: \"theme-music\",\n    volume: 0.7,\n    loop: true,\n});\n\n// State is automatically saved when it changes\nawait music.play();\nmusic.setVolume(0.5);\n// State saved automatically\n\n// On game restart/reload\nconst music = createAudio(\"/audio/theme.mp3\", {\n    id: \"theme-music\", // Same ID\n});\nmusic.load(); // Restores volume, position, playing state\n```\n\n**What Gets Persisted:**\n\n- Volume level\n- Loop setting\n- Playback rate\n- Muted status\n- Current playback position\n- Playing/paused state\n\n**Note:** Audio without an ID will not persist across page reloads.\n\n### Common Patterns\n\n#### Background Music with Crossfade\n\n```typescript\nconst oldMusic = AudioManager.getTrackById(\"current-music\");\nconst newMusic = createAudio(\"/audio/new-theme.mp3\", {\n    id: \"current-music\",\n    loop: true,\n});\n\n// Crossfade between tracks\nif (oldMusic) {\n    await Promise.all([oldMusic.fadeOut(1000), newMusic.fadeIn(1000)]);\n    oldMusic.dispose();\n}\n```\n\n#### Sound Effects Pool\n\n```typescript\n// Create sound effect without ID (no persistence needed)\nfunction playSoundEffect(src: string) {\n    const sfx = createAudio(src, {\n        volume: 0.8,\n    });\n\n    sfx.play();\n\n    // Auto-cleanup when finished\n    sfx.audioElement.addEventListener(\"ended\", () => {\n        sfx.dispose();\n    });\n}\n\nplaySoundEffect(\"/audio/click.mp3\");\n```\n\n#### Pause Audio During Dialogue\n\n```typescript\nfunction showDialogue() {\n    // Pause background music\n    AudioManager.pauseAll();\n\n    // Show dialogue...\n\n    // Resume when done\n    AudioManager.resumeAll();\n}\n```\n\n### Browser Autoplay Policies\n\nModern browsers restrict audio autoplay without user interaction. The audio system handles this gracefully:\n\n```typescript\nconst music = createAudio(\"/audio/theme.mp3\", {\n    autoPlay: true, // May be blocked by browser\n});\n\n// Autoplay failures are logged but don't throw errors\n// Manually play after user interaction:\ndocument.addEventListener(\n    \"click\",\n    async () => {\n        await music.play(); // Will work after user interaction\n    },\n    { once: true }\n);\n```\n\n### TypeScript Types\n\n```typescript\nimport type {\n    AudioOptions,\n    AudioState,\n    AudioSaveState,\n} from \"@react-text-game/core/audio\";\n\n// All types include comprehensive JSDoc documentation\n```\n\n### API Reference\n\n**createAudio(src, options?)**\n\n- `src: string` - Audio file URL\n- `options?: AudioOptions` - Configuration options\n- Returns: `AudioTrack`\n\n**AudioTrack Methods:**\n\n- `play(): Promise<void>` - Start playback\n- `pause(): void` - Pause playback\n- `resume(): void` - Resume from pause\n- `stop(): void` - Stop and reset\n- `setVolume(volume: number): void` - Set volume (0.0-1.0)\n- `setLoop(loop: boolean): void` - Enable/disable looping\n- `setPlaybackRate(rate: number): void` - Set playback speed\n- `setMuted(muted: boolean): void` - Mute/unmute\n- `seek(time: number): void` - Seek to time in seconds\n- `fadeIn(duration?: number): Promise<void>` - Fade in effect\n- `fadeOut(duration?: number): Promise<void>` - Fade out effect\n- `getState(): AudioState` - Get reactive state\n- `save(): void` - Save state to storage\n- `load(): void` - Load state from storage\n- `dispose(): void` - Clean up and remove\n\n**AudioManager Methods:**\n\n- `setMasterVolume(volume: number): void` - Set master volume\n- `getMasterVolume(): number` - Get master volume\n- `muteAll(): void` - Mute all tracks\n- `unmuteAll(): void` - Unmute all tracks\n- `pauseAll(): void` - Pause all playing tracks\n- `resumeAll(): void` - Resume all paused tracks\n- `stopAll(): void` - Stop all tracks\n- `getAllTracks(): AudioTrack[]` - Get all tracks\n- `getTrackById(id: string): AudioTrack | undefined` - Get track by ID\n- `disposeAll(): void` - Dispose all tracks\n\n## Internationalization\n\nThe core engine ships with first-class i18n based on `i18next` and `react-i18next`. Language preferences are persisted to the save database and automatically restored on load.\n\n### Configuring translations\n\nPass an `I18nConfig` via the `translations` field when you call `Game.init()`:\n\n```ts\nimport type { I18nConfig } from \"@react-text-game/core/i18n\";\n\nconst translations: I18nConfig = {\n    defaultLanguage: \"en\",\n    fallbackLanguage: \"en\",\n    debug: false,\n    resources: {\n        en: {\n            passages: { intro: \"Welcome to the game\" },\n            common: { save: \"Save\", load: \"Load\" },\n        },\n        es: {\n            passages: { intro: \"¡Bienvenido al juego!\" },\n        },\n    },\n    modules: [],\n};\n\nawait Game.init({\n    gameName: \"My Adventure\",\n    translations,\n    // ...other options\n});\n```\n\n- `resources` contains your language namespaces. Users normally keep them in `src/locales/{lang}/{namespace}.json` before importing into the app entry.\n- The engine reads any modules you supply (e.g. `i18next-browser-languagedetector`) and registers them after `initReactI18next`.\n- If you omit `translations`, the engine falls back to an English-only default config.\n\nA saved language preference is loaded from the settings store before i18next initializes, so players continue in the language they selected.\n\n### Using translations in React\n\nUse the `useGameTranslation` hook from `@react-text-game/core/i18n`:\n\n```tsx\nimport { useGameTranslation } from \"@react-text-game/core/i18n\";\n\nexport function LanguageSwitcher() {\n    const { t, languages, currentLanguage, changeLanguage } =\n        useGameTranslation(\"common\");\n\n    return (\n        <div>\n            <p>{t(\"currentLanguage\", { language: currentLanguage })}</p>\n            <select\n                value={currentLanguage}\n                onChange={(event) => changeLanguage(event.target.value)}\n            >\n                {languages.map((lang) => (\n                    <option key={lang} value={lang}>\n                        {lang}\n                    </option>\n                ))}\n            </select>\n        </div>\n    );\n}\n```\n\nThe hook filters out the `cimode` debug language unless you enable `debug` and persists language changes via the save system.\n\n### Outside React components\n\nFor game logic or utilities, grab a namespace-specific translator with `getGameTranslation`:\n\n```ts\nimport { getGameTranslation } from \"@react-text-game/core/i18n\";\n\nconst t = getGameTranslation(\"passages\");\nconst intro = t(\"forest.description\");\n```\n\n### UI package integration\n\nIf the optional `@react-text-game/ui` package is installed, the core engine automatically loads its bundled namespaces and merges them with your resources. Your translations override the UI defaults when both provide the same keys, and the engine happily runs without the UI package when you ship a custom interface.\n\n## Core Concepts\n\n### Game\n\nThe `Game` class is the central orchestrator that manages:\n\n- **Initialization** - **MUST call `Game.init(options)` before using any other methods**\n- **Entity Registry** - All game objects (entities) are registered and proxied\n- **Passage Registry** - All passages (screens/scenes) are registered\n- **Navigation** - `jumpTo()` and `setCurrent()` for passage navigation\n- **State Management** - `getState()` / `setState()` for full serialization\n- **Auto-Save** - Optional auto-save to session storage with debouncing\n\n```typescript\n// Initialize the game (REQUIRED)\nawait Game.init({\n    // your options\n});\n\n// Register entities\nGame.registerEntity(player, inventory, quest);\n\n// Register passages\nGame.registerPassage(intro, chapter1, finalBattle);\n\n// Navigate - by id or by passage instance (Story, InteractiveMap, Widget)\nGame.jumpTo(\"chapter1\");\nGame.jumpTo(chapter1);\n\n// Save/Load\nconst savedState = Game.getState();\nGame.setState(savedState);\n\n// Auto-save\nGame.enableAutoSave();\nGame.loadFromSessionStorage();\n```\n\n### Entities\n\n#### Entity Factory (`createEntity`) — Recommended Starting Point\n\nThe simplest way to model game state is with the `createEntity` factory. You\nprovide a unique id and a plain object describing the initial state; the engine\nwraps it in a `SimpleObject` that:\n\n- Registers itself with the game automatically\n- Exposes variables as direct properties (`player.health`, not `player.variables.health`)\n- Keeps nested objects/arrays reactive via deep proxies\n- Requires explicit `save()` calls so you stay in control of persistence cadence\n\n```typescript\nimport { createEntity } from \"@react-text-game/core\";\n\nconst player = createEntity(\"player\", {\n    name: \"Hero\",\n    health: 100,\n    inventory: {\n        gold: 50,\n        items: [] as string[],\n    },\n});\n\nplayer.health -= 5; // direct property access\nplayer.inventory.items.push(\"sword\");\nplayer.save(); // persist changes when you decide to\n```\n\n#### Advanced Entities (`BaseGameObject`)\n\nPrefer a class-based design, private fields, or inheritance? Extend\n`BaseGameObject` directly—the same registration and storage hooks remain\navailable:\n\n```typescript\nimport { BaseGameObject } from \"@react-text-game/core\";\n\nclass Inventory extends BaseGameObject<{ items: string[] }> {\n    constructor() {\n        super({\n            id: \"inventory\",\n            variables: { items: [] },\n        });\n    }\n\n    addItem(item: string) {\n        this._variables.items.push(item);\n        this.save();\n    }\n}\n```\n\n### Passages\n\nPassages represent different screens or scenes in your game. Three types are available, and each has a `define*` factory:\n\n```typescript\ndefineStory(id, (helpers, props) => components, options?)\ndefineInteractiveMap(id, (helpers, props) => hotspots, options)\ndefineWidget(id, reactNodeOrComponent)\n```\n\nThe content callback always receives a toolbox of builders as its first argument and the display props as its second, so learning one factory teaches all of them.\n\n> **Migrating?** The original `newStory`, `newInteractiveMap` and `newWidget` factories are fully supported and are not scheduled for removal. See [Legacy factories](#legacy-factories) for their signatures.\n\n#### Story Passages\n\nText-based narrative passages with rich components:\n\n```typescript\nimport { defineStory } from \"@react-text-game/core\";\n\nconst myStory = defineStory(\n    \"my-story\",\n    (h) => [\n        h.header(\"Chapter 1\", { level: 1 }),\n        h.text(\"Once upon a time...\"),\n        h.image(\"/assets/scene.jpg\", { alt: \"A beautiful scene\" }),\n        h.video(\"/assets/intro.mp4\", { controls: true, autoPlay: false }),\n        h.conversation(\n            [\n                {\n                    content: \"Hello there!\",\n                    who: { name: \"NPC\", avatar: \"/avatars/npc.png\" },\n                    side: \"left\",\n                },\n                { content: \"Hi!\", who: { name: \"Player\" }, side: \"right\" },\n            ],\n            { variant: \"messenger\", appearance: \"atOnce\" }\n        ),\n        h.actions(\n            [\n                {\n                    content: \"Continue\",\n                    action: h.jump(\"chapter-2\"),\n                    color: \"primary\",\n                },\n                {\n                    content: \"Go Back\",\n                    action: h.jump(\"intro\"),\n                    color: \"secondary\",\n                    variant: \"bordered\",\n                },\n            ],\n            { direction: \"horizontal\" }\n        ),\n    ],\n    {\n        background: { image: \"/bg.jpg\" },\n        classNames: { container: \"story-container\" },\n    }\n);\n```\n\n**Story helpers (`h`):**\n\n| Helper | Builds | Signature |\n| --- | --- | --- |\n| `h.text` | `text` component | `(content, options?)` |\n| `h.header` | `header` component | `(content, options?)` |\n| `h.image` | `image` component | `(src, options?)` |\n| `h.video` | `video` component | `(src, options?)` |\n| `h.actions` | `actions` component | `(items, options?)` |\n| `h.conversation` | `conversation` component | `(bubbles, options?)` |\n| `h.include` | `anotherStory` component | `(storyId, options?)` |\n| `h.jump` | click handler | `(passageOrId)` |\n| `h.when` | conditional value | `(condition, value)` |\n\nEach helper takes the component's content first and a **single flat options bag** second. Everything that lives under `props` in the raw component type is hoisted into that bag, so there is only one level to fill in: `h.header(\"Chapter 1\", { level: 1, className: \"text-center\" })`.\n\n**Action buttons**\n\nAn action's caption lives in its `content` field, which accepts any React node — not just a string:\n\n```tsx\nh.actions([\n    { content: \"Go North\", action: h.jump(\"north-path\") },\n    { content: <><KeyIcon /> Unlock the gate</>, action: h.jump(\"vault\") },\n]);\n```\n\n> **Deprecated:** actions used to take a plain-string `label`. It is still read when\n> `content` is absent, so existing stories keep working, but it is deprecated and will\n> be removed in a future major release. Prefer `content`.\n\n**Conditional content**\n\nFalsy entries are removed from the array, so conditions can be written inline instead of through a callback that returns `undefined`:\n\n```typescript\ndefineStory(\"room\", (h) => [\n    h.text(\"A locked door blocks your way.\"),\n    player.hasKey && h.text(\"The rusty key feels warm in your pocket.\"),\n    h.actions([\n        { content: \"Look around\", action: h.jump(\"room-search\") },\n        player.hasKey && { content: \"Unlock\", action: h.jump(\"vault\") },\n    ]),\n]);\n```\n\n**Mixing helpers and plain objects**\n\nHelpers return plain component objects, so hand-written literals still work in the same array — useful when migrating a story a piece at a time:\n\n```typescript\ndefineStory(\"mixed\", (h) => [\n    h.text(\"Built with a helper\"),\n    { type: \"text\", content: \"Written by hand\" },\n]);\n```\n\n**Splitting a story across files**\n\nImport `storyHelpers` directly when you need builders outside the callback body:\n\n```typescript\nimport { defineStory, storyHelpers } from \"@react-text-game/core\";\n\nconst sharedIntro = () => [storyHelpers.header(\"The Whispering Woods\")];\n\ndefineStory(\"forest\", (h) => [\n    ...sharedIntro(),\n    h.text(\"The forest is ancient and alive.\"),\n]);\n```\n\n**Typed props**\n\n`defineStory` is generic over the props passed to `display()`:\n\n```typescript\nconst greeting = defineStory<{ playerName: string }>(\"greeting\", (h, props) => [\n    h.text(`Hello, ${props.playerName}!`),\n]);\n\ngreeting.display({ playerName: \"Hero\" });\n```\n\n**Available Components:**\n\n- `text` - Text content with ReactNode support and custom styling\n- `header` - Semantic headers (h1-h6) with configurable levels\n- `image` - Images with built-in modal viewer and custom click handlers\n- `video` - HTML5 video with autoplay, loop, mute, and controls options\n- `actions` - Interactive button groups with tooltips and disabled states\n- `conversation` - Dialogue with chat/messenger variants and progressive reveal (byClick/atOnce)\n- `anotherStory` - Embed other story passages for composition and reuse\n\n#### Interactive Map Passages\n\nMap-based interactive passages with hotspots. The hotspots come from the content callback; everything else (image, caption, styling) stays in the options object:\n\n```typescript\nimport { defineInteractiveMap } from \"@react-text-game/core\";\n\nconst worldMap = defineInteractiveMap(\n    \"world-map\",\n    (h) => [\n        // Map label hotspot - positioned on the map\n        h.label(\"Village\", {\n            position: { x: 30, y: 40 }, // Percentage-based (0-100)\n            action: h.jump(\"village\"),\n            color: \"primary\",\n            variant: \"solid\",\n        }),\n        // Map image hotspot - with state-dependent images\n        h.image(\n            {\n                idle: \"/icons/chest.png\",\n                hover: \"/icons/chest-glow.png\",\n                active: \"/icons/chest-open.png\",\n                disabled: \"/icons/chest-locked.png\",\n            },\n            {\n                position: { x: 60, y: 70 },\n                action: () => openChest(),\n                isDisabled: () => !player.hasKey,\n                tooltip: {\n                    content: () => (player.hasKey ? \"Open chest\" : \"Locked\"),\n                    position: \"top\",\n                },\n                zoom: \"150%\",\n            }\n        ),\n        // Conditional hotspot - only visible if discovered\n        player.hasDiscovered(\"forest\") &&\n            h.label(\"Forest\", {\n                position: { x: 80, y: 50 },\n                action: h.jump(\"forest\"),\n            }),\n        // Decorative, non-interactive image\n        h.mapImage(\"/characters/guard.png\", {\n            position: { x: 42, y: 68 },\n            alt: \"Castle guard\",\n        }),\n        // Side hotspot - positioned on edge\n        h.label(\"Menu\", {\n            position: \"top\", // top/bottom/left/right\n            action: () => openMenu(),\n        }),\n        // Context menu - multiple choices at a location\n        h.menu(\n            [\n                h.label(\"Examine\", { action: () => examine() }),\n                h.label(\"Take\", { action: () => take() }),\n                player.hasMagic &&\n                    h.label(\"Cast Spell\", { action: () => castSpell() }),\n            ],\n            { position: { x: 50, y: 50 }, direction: \"vertical\" }\n        ),\n    ],\n    {\n        caption: \"World Map\",\n        image: \"/maps/world.jpg\",\n        bgImage: \"/maps/world-bg.jpg\",\n        props: { bgOpacity: 0.3 },\n        classNames: {\n            container: \"bg-gradient-to-b from-sky-900 to-indigo-900\",\n            topHotspots: \"bg-muted/50 backdrop-blur-sm\",\n        },\n    }\n);\n```\n\n**Map helpers (`h`):**\n\n| Helper | Builds | Signature |\n| --- | --- | --- |\n| `h.label` | label hotspot | `(content, options)` |\n| `h.image` | image hotspot | `(content, options)` |\n| `h.mapImage` | decorative map image | `(src, options)` |\n| `h.menu` | contextual menu | `(items, options)` |\n| `h.jump` | click handler | `(passageOrId)` |\n| `h.when` | conditional value | `(condition, value)` |\n\n`position` decides placement: `{ x, y }` percentages put the hotspot on the map, while `\"top\"`, `\"bottom\"`, `\"left\"` or `\"right\"` dock it to an edge. As with story helpers, the options bag is flat — `color`, `variant`, `zoom` and `classNames` are written at the top level even though they live under `props` in the raw hotspot type.\n\nOmit `position` from `h.label` to build a menu item; the menu supplies the position for its items. A position-less label is rejected by the type system anywhere a standalone hotspot is expected.\n\nImport `mapHelpers` directly when a map is split across several files, exactly like `storyHelpers`.\n\n**Hotspot Types:**\n\n- `MapLabelHotspot` - Text buttons positioned on map using percentage coordinates (x/y: 0-100)\n- `MapImageHotspot` - Image buttons with state variants (idle/hover/active/disabled) and zoom support\n- `SideLabelHotspot` - Text buttons on map edges (top/bottom/left/right)\n- `SideImageHotspot` - Image buttons on map edges\n- `MapMenu` - Contextual menu with multiple items at a specific position\n\n**Dynamic Features:**\n\n- Falsy hotspot entries are dropped, so conditional visibility can be written inline with `&&`\n- Hotspots can also be functions returning `undefined` for conditional visibility\n- Images and positions support dynamic functions: `image: () => '/maps/' + season + '.jpg'`\n- Disabled states with custom tooltips explaining why actions are unavailable\n\n#### Widget Passages\n\nCustom React components as passages:\n\n```tsx\nimport { defineWidget } from \"@react-text-game/core\";\n\nconst customUI = defineWidget(\n    \"custom-ui\",\n    <div>\n        <h1>Custom Interface</h1>\n        <MyCustomComponent />\n    </div>\n);\n\n// Pass a component (not an element) when you need hooks\nconst MyMenu = () => {\n    const [selected, setSelected] = useState(null);\n    return <MenuUI selected={selected} onSelect={setSelected} />;\n};\nconst menu = defineWidget(\"menu\", MyMenu);\n```\n\nWidgets take no helper toolbox and no display props: they are ordinary React trees, and `Widget.display()` accepts no arguments. Use `Game.jumpTo()` directly for navigation inside a widget. `defineWidget` is identical to `newWidget` in behaviour and signature — it exists so every passage factory shares the same prefix.\n\n#### Legacy factories\n\n`newStory`, `newInteractiveMap` and `newWidget` remain fully supported. They take the content as data rather than through a builder callback:\n\n```typescript\nimport { newInteractiveMap, newStory, newWidget } from \"@react-text-game/core\";\n\nnewStory(\n    \"my-story\",\n    (props) => [\n        { type: \"header\", content: \"Chapter 1\", props: { level: 1 } },\n        { type: \"text\", content: \"Once upon a time...\" },\n    ],\n    { background: { image: \"/bg.jpg\" } }\n);\n\nnewInteractiveMap(\"world-map\", {\n    image: \"/maps/world.jpg\",\n    hotspots: [\n        {\n            type: \"label\",\n            content: \"Village\",\n            position: { x: 30, y: 40 },\n            action: () => Game.jumpTo(\"village\"),\n        },\n        // conditional hotspots use a callback returning undefined\n        () =>\n            player.hasKey\n                ? {\n                      type: \"label\",\n                      content: \"Secret\",\n                      position: { x: 80, y: 30 },\n                      action: () => Game.jumpTo(\"secret\"),\n                  }\n                : undefined,\n    ],\n});\n\nnewWidget(\"custom-ui\", <MyCustomComponent />);\n```\n\nTwo differences worth knowing when you compare the two styles:\n\n- **Typed props.** `StoryContent` is a generic *function* type, so a content function cannot annotate its props (`(props: { playerName: string }) => ...` fails to type-check). `StoryContentFn`, used by `defineStory`, is a generic *alias*, so typed props work.\n- **Conditional entries.** Only the `define*` factories drop `false`/`null`/`undefined` entries from the arrays.\n\nMigration is mechanical and can be done one passage at a time — the two styles produce identical passage objects and interoperate freely.\n\n### Storage\n\nJSONPath-based storage system using the `jsonpath` library:\n\n```typescript\nimport { Storage } from \"@react-text-game/core\";\n\n// Get values\nconst health = Storage.getValue<number>(\"$.player.health\");\n\n// Set values\nStorage.setValue(\"$.player.health\", 75);\n\n// Full state\nconst state = Storage.getState();\nStorage.setState(state);\n```\n\n**Key Features:**\n\n- JSONPath queries for flexible data access\n- Protected system paths (prefixed with `$._system`)\n- Automatic path creation\n- Type-safe with generics\n\n### Save System\n\nThe engine includes a comprehensive save/load system built on IndexedDB (via Dexie) with encryption support for export/import:\n\n> **💾 Save Migrations**: For managing save compatibility across game versions, see the [Save Migration Guide](./MIGRATIONS.md).\n\n```typescript\nimport {\n    useSaveSlots,\n    useSaveGame,\n    useLoadGame,\n    useDeleteGame,\n    useLastLoadGame,\n    useExportSaves,\n    useImportSaves,\n    useRestartGame,\n} from \"@react-text-game/core/saves\";\n```\n\n**Features:**\n\n- **Persistent Storage** - IndexedDB for browser-based saves\n- **Multiple Save Slots** - Unlimited save slots with metadata\n- **Export/Import** - Encrypted file export/import (`.sx` format)\n- **System Saves** - Hidden initial state for game restart\n- **Real-time Updates** - Live queries for reactive save lists\n- **Type-Safe** - Full TypeScript support\n\n#### Save Management Hooks\n\n**useSaveSlots** - Get save slots with live updates and action methods:\n\n```tsx\nfunction SavesList() {\n    const slots = useSaveSlots({ count: 5 });\n\n    return (\n        <div>\n            {slots.map((slot, index) => (\n                <div key={index}>\n                    <p>\n                        Slot {index}: {slot.data ? \"Saved\" : \"Empty\"}\n                    </p>\n                    <button onClick={() => slot.save()}>Save</button>\n                    <button onClick={() => slot.load()} disabled={!slot.data}>\n                        Load\n                    </button>\n                    <button onClick={() => slot.delete()} disabled={!slot.data}>\n                        Delete\n                    </button>\n                </div>\n            ))}\n        </div>\n    );\n}\n```\n\n**useSaveGame** - Save current game state to a slot:\n\n```tsx\nfunction SaveButton({ slotNumber }) {\n    const saveGame = useSaveGame();\n\n    const handleSave = async () => {\n        const result = await saveGame(slotNumber, {\n            title: \"Before the boss\",\n        });\n        if (!result.success) {\n            alert(result.error);\n        }\n    };\n\n    return <button onClick={handleSave}>Save to Slot {slotNumber}</button>;\n}\n```\n\n**useLoadGame** - Load the save held by a slot:\n\n```tsx\nfunction LoadButton({ slotNumber }) {\n    const loadGame = useLoadGame();\n\n    const handleLoad = async () => {\n        const result = await loadGame(slotNumber);\n        if (!result.success) {\n            alert(result.error);\n        }\n    };\n\n    return <button onClick={handleLoad}>Load Game</button>;\n}\n```\n\n**useDeleteGame** - Delete the save held by a slot:\n\n```tsx\nfunction DeleteButton({ slotNumber }) {\n    const deleteGame = useDeleteGame();\n\n    const handleDelete = async () => {\n        const result = await deleteGame(slotNumber);\n        if (!result.success) {\n            alert(result.error);\n        }\n    };\n\n    return <button onClick={handleDelete}>Delete Save</button>;\n}\n```\n\n**useLastLoadGame** - Load the most recent saved game:\n\n```tsx\nfunction ContinueButton() {\n    const { hasLastSave, loadLastGame, isLoading } = useLastLoadGame();\n\n    if (isLoading) {\n        return <div>Loading...</div>;\n    }\n\n    return (\n        <button onClick={loadLastGame} disabled={!hasLastSave}>\n            Continue Last Game\n        </button>\n    );\n}\n```\n\n**useExportSaves** - Export all saves to encrypted file:\n\n```tsx\nfunction ExportButton() {\n    const exportSaves = useExportSaves();\n\n    const handleExport = async () => {\n        const result = await exportSaves();\n        if (result.success) {\n            console.log(\"Saves exported successfully\");\n        } else {\n            alert(`Export failed: ${result.error}`);\n        }\n    };\n\n    return <button onClick={handleExport}>Export Saves</button>;\n}\n```\n\n**useImportSaves** - Import saves from encrypted file:\n\n```tsx\nfunction ImportButton() {\n    const importSaves = useImportSaves();\n\n    const handleImport = async () => {\n        const result = await importSaves();\n        if (result.success) {\n            console.log(`Imported ${result.count} saves`);\n        } else {\n            alert(`Import failed: ${result.error}`);\n        }\n    };\n\n    return <button onClick={handleImport}>Import Saves</button>;\n}\n```\n\n**useRestartGame** - Restart game from initial state:\n\n```tsx\nfunction RestartButton() {\n    const restartGame = useRestartGame();\n\n    return <button onClick={restartGame}>Restart Game</button>;\n}\n```\n\n#### Direct Database Access\n\nFor advanced use cases, you can access the database directly:\n\n```typescript\nimport {\n    saveGame,\n    loadGame,\n    getAllSaves,\n    deleteSave,\n    db,\n} from \"@react-text-game/core/saves\";\n\n// Save game manually\nawait saveGame(\"my-save\", gameData, {\n    title: \"Before the boss\",\n    meta: { day: 3 },\n    screenshot: screenshotBase64,\n});\n\n// Load the save held by a slot\nconst save = await loadGame(\"my-save\");\n\n// Get all saves\nconst allSaves = await getAllSaves();\n\n// Delete a save\nawait deleteSave(1);\n\n// Direct Dexie access\nawait db.saves.where(\"slot\").equals(\"my-save\").first();\n```\n\n#### Save File Encryption\n\nExported save files are encrypted using AES encryption with PBKDF2 key derivation:\n\n- **Algorithm**: AES-256-CBC\n- **Key Derivation**: PBKDF2 with 1000 iterations\n- **Salt & IV**: Randomly generated for each export\n- **Password**: Derived from `gameId` and `SAVE_POSTFIX`\n\n### React Hooks\n\n#### useCurrentPassage\n\nGet the current passage with reactive updates. Returns a tuple containing the current passage and a unique render ID that changes on each navigation:\n\n```tsx\nimport { useCurrentPassage } from \"@react-text-game/core\";\n\nfunction GameScreen() {\n    const [passage, renderId] = useCurrentPassage();\n\n    if (!passage) return <div>Loading...</div>;\n\n    // Render based on passage type\n    if (passage.type === \"story\") {\n        const { components } = passage.display();\n        // Render story components\n    }\n}\n```\n\n**Render ID Purpose:**\nThe `renderId` is automatically generated on each `Game.jumpTo()` call, ensuring that React components re-render even when navigating to the same passage multiple times. This is useful for forcing component remounts, resetting animations, or clearing component state.\n\n**Usage Example:**\n\n```tsx\nfunction PassageRenderer() {\n    const [passage, renderId] = useCurrentPassage();\n\n    // Use renderId as a React key to force remount on navigation\n    return (\n        <div key={renderId} className=\"animate-fade-in\">\n            {passage && <PassageContent passage={passage} />}\n        </div>\n    );\n}\n```\n\n#### useGameEntity\n\nMonitor entity changes with automatic re-renders:\n\n```tsx\nimport { useGameEntity } from \"@react-text-game/core\";\n\nfunction PlayerStats({ player }) {\n    const reactivePlayer = useGameEntity(player);\n\n    return (\n        <div>\n            Health: {reactivePlayer.health}\n            {/* Direct property access stays reactive */}\n        </div>\n    );\n}\n```\n\n#### useGameIsStarted\n\nCheck if game has started:\n\n```tsx\nimport { useGameIsStarted } from \"@react-text-game/core\";\n\nfunction GameUI() {\n    const isStarted = useGameIsStarted();\n\n    return isStarted ? <GameScreen /> : <MainMenu />;\n}\n```\n\n## Architecture\n\n### State Flow\n\n1. **Initialization** - Call `Game.init(options)` to initialize the game engine\n2. **Entities** extend `BaseGameObject` and auto-register on construction\n3. **Passages** extend `Passage` and auto-register on construction\n4. **All state changes** go through Valtio proxies for reactivity\n5. **Storage** uses JSONPath queries for flexible state access\n6. **Auto-save** (if enabled) debounces writes to session storage\n\n### Registry Pattern\n\nThe engine uses two registries:\n\n- `objectRegistry` - Stores all game entities as Valtio proxies\n- `passagesRegistry` - Stores all passages\n\nAll objects are automatically wrapped in Valtio proxies for reactive state management.\n\n### Save System\n\nThe save system consists of:\n\n- **Entity State** - Each entity's `_variables` stored at `$.{entityId}`\n- **Game State** - Current passage stored at `$._system.game`\n- **JSONPath Access** - Flexible queries for any state data\n- **Auto-Save** - Debounced saves to session storage (500ms)\n\n## API Reference\n\n### Game\n\nStatic methods:\n\n- `init(options)` - **Initialize the game (REQUIRED - must be called first)**\n- `registerEntity(...objects)` - Register game objects\n- `registerPassage(...passages)` - Register passages\n- `jumpTo(passage)` - Navigate to passage (passage instance or registered id)\n- `setCurrent(passage)` - Set current passage (passage instance or registered id)\n- `getPassageById(id)` - Get passage by ID\n- `getAllPassages()` - Get all passages\n- `getState()` - Get full game state\n- `setState(state)` - Restore game state\n- `enableAutoSave()` - Enable auto-save\n- `disableAutoSave()` - Disable auto-save\n- `loadFromSessionStorage()` - Load from session storage\n- `clearAutoSave()` - Clear auto-saved state\n\nProperties:\n\n- `currentPassage` - Get current passage\n- `selfState` - Get game internal state\n- `options` - Get game options\n\n### BaseGameObject\n\nConstructor:\n\n- `new BaseGameObject({ id, variables? })`\n\nProperties:\n\n- `id` - Unique identifier\n- `variables` - Entity variables (readonly)\n- `_variables` - Internal variables (protected)\n\nMethods:\n\n- `save()` - Save to storage\n- `load()` - Load from storage\n\n### Passage Types\n\n**Story:**\n\n```typescript\ndefineStory<TProps>(id: string, content: StoryContentFn<TProps>, options?: StoryOptions): Story\nnewStory(id: string, content: StoryContent, options?: StoryOptions): Story\n```\n\n**Interactive Map:**\n\n```typescript\ndefineInteractiveMap<TProps>(id: string, content: MapContentFn<TProps>, options: MapDefineOptions): InteractiveMap\nnewInteractiveMap(id: string, options: InteractiveMapOptions): InteractiveMap\n```\n\n**Widget:**\n\n```typescript\ndefineWidget(id: string, content: WidgetContent): Widget\nnewWidget(id: string, content: WidgetContent): Widget\n```\n\n**Helper toolboxes:**\n\n```typescript\nstoryHelpers: StoryHelpers  // text, header, image, video, actions, conversation, include, jump, when\nmapHelpers: MapHelpers      // label, image, mapImage, menu, jump, when\n```\n\n## TypeScript\n\nFull TypeScript support with comprehensive types and detailed JSDoc documentation:\n\n```typescript\n// Import types from main package\nimport type {\n    GameSaveState,\n    JsonPath,\n    InitVarsType,\n    PassageTarget,\n    PassageType,\n    ButtonColor,\n    ButtonVariant,\n} from \"@react-text-game/core\";\n\n// Import story passage types\nimport type {\n    Component,\n    StoryContent,\n    StoryContentFn,\n    StoryContentItems,\n    StoryOptions,\n    TextComponent,\n    HeaderComponent,\n    ImageComponent,\n    VideoComponent,\n    ActionsComponent,\n    ConversationComponent,\n    AnotherStoryComponent,\n    ActionType,\n    ConversationBubble,\n    ConversationVariant,\n    ConversationAppearance,\n} from \"@react-text-game/core/passages\";\n\n// Import interactive map types\nimport type {\n    InteractiveMapOptions,\n    InteractiveMapType,\n    MapContentFn,\n    MapContentItems,\n    MapDefineOptions,\n    AnyHotspot,\n    MapLabelHotspot,\n    MapImageHotspot,\n    SideLabelHotspot,\n    SideImageHotspot,\n    MapMenu,\n    LabelHotspot,\n    ImageHotspot,\n} from \"@react-text-game/core/passages\";\n\n// Import helper toolbox types from the main package\nimport type {\n    StoryHelpers,\n    MapHelpers,\n    CommonHelpers,\n    DefineFn,\n    Conditional,\n} from \"@react-text-game/core\";\n```\n\nAll types include comprehensive JSDoc comments with:\n\n- Detailed descriptions of each property\n- Usage examples and code snippets\n- Default value annotations\n- Remarks about behavior and implementation details\n\n## Examples\n\nSee the `apps/example-game` directory for a complete implementation example.\n\n## License\n\nMIT (c) laruss\n","readmeFilename":"README.md"}