{"_id":"@go22/take-a-tour","_rev":"29-13386f7fce71f04bb22cdcc9b0b4e60f","name":"@go22/take-a-tour","dist-tags":{"latest":"0.1.26"},"versions":{"0.1.9":{"name":"@go22/take-a-tour","version":"0.1.9","keywords":["react","product-tour","guided-tour","walkthrough","accessibility"],"license":"GPL-3.0-only","_id":"@go22/take-a-tour@0.1.9","maintainers":[{"name":"go22","email":"go22.npm@gmail.com"}],"dist":{"shasum":"d5a91c4faf272ee11446039b0fb8fd8aa4c227bf","tarball":"https://registry.npmjs.org/@go22/take-a-tour/-/take-a-tour-0.1.9.tgz","fileCount":45,"integrity":"sha512-t7kHUVDciJPMIr9ss60DHfJPH1UZQ1x/CP8r9tpKu3MLRRuRANAX5ffgRErNpdUkWveBHh3PsSIofEItConHTg==","signatures":[{"sig":"MEUCIQDq71ukKhjIcr4+D4NQtlGZ6u+I9U5ah6ckfXsAjMVEUwIge/NpL654xp6W9JB1qOyfkBzyXLqzn7Tjrd2rU3CMjW4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":124360},"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"},"./styles.css":"./dist/style.css"},"scripts":{"test":"vitest run","build":"vite build && tsc -p tsconfig.build.json","check":"npm run typecheck && npm run test && npm run build","typecheck":"tsc --noEmit","build:example":"vite build --config vite.example.config.ts"},"_npmUser":{"name":"go22","email":"go22.npm@gmail.com"},"_npmVersion":"11.13.0","description":"Accessible, declarative product tours for React applications","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"26.2.0","_hasShrinkwrap":false,"devDependencies":{"vite":"8.2.1","jsdom":"30.0.1","react":"^18.3.1","vitest":"4.1.10","react-dom":"^18.3.1","typescript":"7.0.2","@types/react":"^18.3.18","@types/react-dom":"^18.3.5","@vitejs/plugin-react":"6.0.5","@testing-library/react":"16.3.2","vite-plugin-singlefile":"^2.3.0","@testing-library/jest-dom":"7.0.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/take-a-tour_0.1.9_1786328464444_0.26398653720951004","host":"s3://npm-registry-packages-npm-production"}},"0.1.10":{"name":"@go22/take-a-tour","version":"0.1.10","keywords":["react","product-tour","guided-tour","walkthrough","accessibility"],"license":"GPL-3.0-only","_id":"@go22/take-a-tour@0.1.10","maintainers":[{"name":"go22","email":"go22.npm@gmail.com"}],"bin":{"take-a-tour-init":"bin/init.js"},"dist":{"shasum":"85b891b24d350b646ddc443e2660aa7e41a0a7ee","tarball":"https://registry.npmjs.org/@go22/take-a-tour/-/take-a-tour-0.1.10.tgz","fileCount":46,"integrity":"sha512-ENcPI1OLHCMET0rPJZWAy0vetSMAfq/2g3gO9bmhUB/thcpa5tw9oE4SKbcNCGiYQ2L0OPeOyEuf9QwdyuR0hg==","signatures":[{"sig":"MEQCIFhY84k9teSTIuJvO3RNME5bmjcJPQ8eBeXQFLghctXWAiAtzIksQ1PYwWHEf45i4pISE2G5K7ZTf+qRDJVZQ3/fUQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":128644},"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"},"./styles.css":"./dist/style.css"},"scripts":{"test":"vitest run","build":"vite build && tsc -p tsconfig.build.json","check":"npm run typecheck && npm run test && npm run build","typecheck":"tsc --noEmit","build:example":"vite build --config vite.example.config.ts"},"_npmUser":{"name":"go22","email":"go22.npm@gmail.com"},"_npmVersion":"11.13.0","description":"Accessible, declarative product tours for React applications","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"26.2.0","_hasShrinkwrap":false,"devDependencies":{"vite":"8.2.1","jsdom":"30.0.1","react":"^18.3.1","vitest":"4.1.10","react-dom":"^18.3.1","typescript":"7.0.2","@types/react":"^18.3.18","@types/react-dom":"^18.3.5","@vitejs/plugin-react":"6.0.5","@testing-library/react":"16.3.2","vite-plugin-singlefile":"^2.3.0","@testing-library/jest-dom":"7.0.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/take-a-tour_0.1.10_1786329117070_0.24461631844733178","host":"s3://npm-registry-packages-npm-production"}},"0.1.11":{"name":"@go22/take-a-tour","version":"0.1.11","keywords":["react","product-tour","guided-tour","walkthrough","accessibility"],"license":"GPL-3.0-only","_id":"@go22/take-a-tour@0.1.11","maintainers":[{"name":"go22","email":"go22.npm@gmail.com"}],"bin":{"take-a-tour-init":"bin/init.js"},"dist":{"shasum":"313adc76cc4b77397d587fa16ce8c26d79eb4b12","tarball":"https://registry.npmjs.org/@go22/take-a-tour/-/take-a-tour-0.1.11.tgz","fileCount":46,"integrity":"sha512-9RjDGs1LsZbntU9NDVmnxOmhvdObOifMeOMJ0skMwZwaivftzNuzbMKQ1gLZvZkUM6N/HNosAsoV9RfEWgtNtg==","signatures":[{"sig":"MEYCIQD+d3R14+nT2xdvkKAE9VGqai/RGrCC2T+9BmgoU+QNKwIhAKoTN2D80X1BZYOOq5CyAdvQshutSHHqwVmJnEZ2Ee9q","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":129896},"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"},"./styles.css":"./dist/style.css"},"scripts":{"test":"vitest run","build":"vite build && tsc -p tsconfig.build.json","check":"npm run typecheck && npm run test && npm run build","typecheck":"tsc --noEmit","build:example":"vite build --config vite.example.config.ts"},"_npmUser":{"name":"go22","email":"go22.npm@gmail.com"},"_npmVersion":"11.13.0","description":"Accessible, declarative product tours for React applications","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"26.2.0","_hasShrinkwrap":false,"devDependencies":{"vite":"8.2.1","jsdom":"30.0.1","react":"^18.3.1","vitest":"4.1.10","react-dom":"^18.3.1","typescript":"7.0.2","@types/react":"^18.3.18","@types/react-dom":"^18.3.5","@vitejs/plugin-react":"6.0.5","@testing-library/react":"16.3.2","vite-plugin-singlefile":"^2.3.0","@testing-library/jest-dom":"7.0.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/take-a-tour_0.1.11_1786375361793_0.4006714797384645","host":"s3://npm-registry-packages-npm-production"}},"0.1.12":{"name":"@go22/take-a-tour","version":"0.1.12","keywords":["react","product-tour","guided-tour","walkthrough","accessibility"],"license":"GPL-3.0-only","_id":"@go22/take-a-tour@0.1.12","maintainers":[{"name":"go22","email":"go22.npm@gmail.com"}],"bin":{"take-a-tour-init":"bin/init.js"},"dist":{"shasum":"9e82021a6928cc6af435998aed2dcabdb430d7a7","tarball":"https://registry.npmjs.org/@go22/take-a-tour/-/take-a-tour-0.1.12.tgz","fileCount":46,"integrity":"sha512-Sb3Gn5//kKciWBtK9vapXsWjdZMb2o9pFB+LMg/PlkpoJKNNNO3pEkx/HYiC55IRvIvCYQnZ74bzoworzuO0YA==","signatures":[{"sig":"MEUCIQCe+MIO+swvSr+ov+1/UaPceOZ3vljVBFVo3oUJSM4SygIgMJEwImAHe01CpDbfsQ0GTDOOwJn5keeKSVFDdYTlER0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":130399},"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"},"./styles.css":"./dist/style.css"},"scripts":{"test":"vitest run","build":"vite build && tsc -p tsconfig.build.json","check":"npm run typecheck && npm run test && npm run build","typecheck":"tsc --noEmit","build:example":"vite build --config vite.example.config.ts"},"_npmUser":{"name":"go22","email":"go22.npm@gmail.com"},"_npmVersion":"11.13.0","description":"Accessible, declarative product tours for React applications","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"26.2.0","_hasShrinkwrap":false,"devDependencies":{"vite":"8.2.1","jsdom":"30.0.1","react":"^18.3.1","vitest":"4.1.10","react-dom":"^18.3.1","typescript":"7.0.2","@types/react":"^18.3.18","@types/react-dom":"^18.3.5","@vitejs/plugin-react":"6.0.5","@testing-library/react":"16.3.2","vite-plugin-singlefile":"^2.3.0","@testing-library/jest-dom":"7.0.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/take-a-tour_0.1.12_1786376003221_0.3101941381170261","host":"s3://npm-registry-packages-npm-production"}},"0.1.13":{"name":"@go22/take-a-tour","version":"0.1.13","keywords":["react","product-tour","guided-tour","walkthrough","accessibility"],"license":"GPL-3.0-only","_id":"@go22/take-a-tour@0.1.13","maintainers":[{"name":"go22","email":"go22.npm@gmail.com"}],"bin":{"take-a-tour-init":"bin/init.js"},"dist":{"shasum":"9ff589d0e5157c0902e5b04c06c38b86679b80c6","tarball":"https://registry.npmjs.org/@go22/take-a-tour/-/take-a-tour-0.1.13.tgz","fileCount":46,"integrity":"sha512-j9SaRVi+Plb+XadR4fjaFsj/sdx4zmkfB8Li1fVUiZajJMamdVdMuSIl7R4pa1s/6AzT67iZbVq8Ay/nicxoZw==","signatures":[{"sig":"MEQCIEcMW4FNjsuFA4AKSGU7Fwnw2PcgbNQy5rGZx48mGjASAiAD7X2dw2Nt33Ozx9X11P3O4Bs9fa6to59XMMqw3Z3vpQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":130411},"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"},"./styles.css":"./dist/style.css"},"scripts":{"test":"vitest run","build":"vite build && tsc -p tsconfig.build.json","check":"npm run typecheck && npm run test && npm run build","typecheck":"tsc --noEmit","build:example":"vite build --config vite.example.config.ts"},"_npmUser":{"name":"go22","email":"go22.npm@gmail.com"},"_npmVersion":"11.13.0","description":"Accessible, declarative product tours for React applications","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"26.2.0","_hasShrinkwrap":false,"devDependencies":{"vite":"8.2.1","jsdom":"30.0.1","react":"^18.3.1","vitest":"4.1.10","react-dom":"^18.3.1","typescript":"7.0.2","@types/react":"^18.3.18","@types/react-dom":"^18.3.5","@vitejs/plugin-react":"6.0.5","@testing-library/react":"16.3.2","vite-plugin-singlefile":"^2.3.0","@testing-library/jest-dom":"7.0.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/take-a-tour_0.1.13_1786376402483_0.5678322716022597","host":"s3://npm-registry-packages-npm-production"}},"0.1.14":{"name":"@go22/take-a-tour","version":"0.1.14","keywords":["react","product-tour","guided-tour","walkthrough","accessibility"],"license":"GPL-3.0-only","_id":"@go22/take-a-tour@0.1.14","maintainers":[{"name":"go22","email":"go22.npm@gmail.com"}],"bin":{"take-a-tour-init":"bin/init.js"},"dist":{"shasum":"f4d823bcc8f4083da7d956c513ec7598fe7107ed","tarball":"https://registry.npmjs.org/@go22/take-a-tour/-/take-a-tour-0.1.14.tgz","fileCount":46,"integrity":"sha512-150g8Cwef9sw52oor31WQwyxrqzAIHFz8rvfItDVXFhMYlDB2N2HU/Tkcy1BPnUl5/TbYy9xJ+hdyVmeLNpAYQ==","signatures":[{"sig":"MEYCIQChG650kZXsAdFEE+DyCsm2WnVl+4QCKLNTLCF6YUOWAAIhAPKdCf6wJ/90mB3rSsWxqrCHevYRzZ4y25Uhz9+4Ia26","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":130395},"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"},"./styles.css":"./dist/style.css"},"scripts":{"test":"vitest run","build":"vite build && tsc -p tsconfig.build.json","check":"npm run typecheck && npm run test && npm run build","typecheck":"tsc --noEmit","build:example":"vite build --config vite.example.config.ts"},"_npmUser":{"name":"go22","email":"go22.npm@gmail.com"},"_npmVersion":"11.13.0","description":"Accessible, declarative product tours for React applications","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"26.2.0","_hasShrinkwrap":false,"devDependencies":{"vite":"8.2.1","jsdom":"30.0.1","react":"^18.3.1","vitest":"4.1.10","react-dom":"^18.3.1","typescript":"7.0.2","@types/react":"^18.3.18","@types/react-dom":"^18.3.5","@vitejs/plugin-react":"6.0.5","@testing-library/react":"16.3.2","vite-plugin-singlefile":"^2.3.0","@testing-library/jest-dom":"7.0.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/take-a-tour_0.1.14_1786378088380_0.8811091201484975","host":"s3://npm-registry-packages-npm-production"}},"0.1.15":{"name":"@go22/take-a-tour","version":"0.1.15","keywords":["react","product-tour","guided-tour","walkthrough","accessibility"],"license":"GPL-3.0-only","_id":"@go22/take-a-tour@0.1.15","maintainers":[{"name":"go22","email":"go22.npm@gmail.com"}],"bin":{"take-a-tour-init":"bin/init.js"},"dist":{"shasum":"2f65c8339ea07866343faa53d87b5250956d1b90","tarball":"https://registry.npmjs.org/@go22/take-a-tour/-/take-a-tour-0.1.15.tgz","fileCount":46,"integrity":"sha512-WZsesx4UZdjkQRFfQ0kap/egAOms6uQD6TEo3OHvbBxtNlTRLE24lnvA6yN971W9DCSGtCVElWYEN/FcNnUWjw==","signatures":[{"sig":"MEUCIQDvF7JWI6HsoiEiw6fTm/lB5rFrdeaFDxlIPHIDVHo+MwIgRQOGZrUupBXg7dOQZsmyaOw2xUNCgYqLXA7kPqrlbFI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":130395},"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"},"./styles.css":"./dist/style.css"},"scripts":{"test":"vitest run","build":"vite build && tsc -p tsconfig.build.json","check":"npm run typecheck && npm run test && npm run build","typecheck":"tsc --noEmit","build:example":"vite build --config vite.example.config.ts"},"_npmUser":{"name":"go22","email":"go22.npm@gmail.com"},"_npmVersion":"11.13.0","description":"Accessible, declarative product tours for React applications","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"26.2.0","_hasShrinkwrap":false,"devDependencies":{"vite":"8.2.1","jsdom":"30.0.1","react":"^18.3.1","vitest":"4.1.10","react-dom":"^18.3.1","typescript":"7.0.2","@types/react":"^18.3.18","@types/react-dom":"^18.3.5","@vitejs/plugin-react":"6.0.5","@testing-library/react":"16.3.2","vite-plugin-singlefile":"^2.3.0","@testing-library/jest-dom":"7.0.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/take-a-tour_0.1.15_1786379933904_0.17993340774887945","host":"s3://npm-registry-packages-npm-production"}},"0.1.16":{"name":"@go22/take-a-tour","version":"0.1.16","keywords":["react","product-tour","guided-tour","walkthrough","accessibility"],"license":"GPL-3.0-only","_id":"@go22/take-a-tour@0.1.16","maintainers":[{"name":"go22","email":"go22.npm@gmail.com"}],"bin":{"take-a-tour-init":"bin/init.js"},"dist":{"shasum":"a014edebe3cad32b72f218a87c2c5775c3698e71","tarball":"https://registry.npmjs.org/@go22/take-a-tour/-/take-a-tour-0.1.16.tgz","fileCount":46,"integrity":"sha512-HU7D/AIeZlBihMt507JoAEf+00GazdU1a/cRhF1+0g3KhJ7PkO1QqgE0PWwITTW0/XleCkyt/w/op6GuAew5RQ==","signatures":[{"sig":"MEYCIQD4pHkoR3jCfGp9WRCMswNcC4DCztclIWkvYdahnNoWZgIhAPgp1lWIH5UHgZzPyv8QoaBTCwWe1E6xyeM8zxIqd/7z","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":129853},"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"},"./styles.css":"./dist/style.css"},"scripts":{"test":"vitest run","build":"vite build && tsc -p tsconfig.build.json","check":"npm run typecheck && npm run test && npm run build","typecheck":"tsc --noEmit","build:example":"vite build --config vite.example.config.ts"},"_npmUser":{"name":"go22","email":"go22.npm@gmail.com"},"_npmVersion":"11.13.0","description":"Accessible, declarative product tours for React applications","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"26.2.0","_hasShrinkwrap":false,"devDependencies":{"vite":"8.2.1","jsdom":"30.0.1","react":"^18.3.1","vitest":"4.1.10","react-dom":"^18.3.1","typescript":"7.0.2","@types/react":"^18.3.18","@types/react-dom":"^18.3.5","@vitejs/plugin-react":"6.0.5","@testing-library/react":"16.3.2","vite-plugin-singlefile":"^2.3.0","@testing-library/jest-dom":"7.0.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/take-a-tour_0.1.16_1786381612697_0.20646547138118443","host":"s3://npm-registry-packages-npm-production"}},"0.1.17":{"name":"@go22/take-a-tour","version":"0.1.17","keywords":["react","product-tour","guided-tour","walkthrough","accessibility"],"license":"GPL-3.0-only","_id":"@go22/take-a-tour@0.1.17","maintainers":[{"name":"go22","email":"go22.npm@gmail.com"}],"bin":{"take-a-tour-init":"bin/init.js"},"dist":{"shasum":"14873e3724a74417524003c778d863bb3a7c461b","tarball":"https://registry.npmjs.org/@go22/take-a-tour/-/take-a-tour-0.1.17.tgz","fileCount":46,"integrity":"sha512-ScZnAs5jWfB1Zq7dg39gVtxT8j0ADlLCvlGowgX4HfVCE+FntVH5p6Avb/9BgvGxieH+C8Gkqk3haNkYt8mgTQ==","signatures":[{"sig":"MEQCIHOeRnWT01RpRFRNRygbgnECIAzP3ZXohNmHBZUhrYpXAiABL5sE3wQnp+fj7R3wsPFWvSiNloxfej87J7MSVWH9tA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":131758},"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"},"./styles.css":"./dist/style.css"},"scripts":{"test":"vitest run","build":"vite build && tsc -p tsconfig.build.json","check":"npm run typecheck && npm run test && npm run build","typecheck":"tsc --noEmit","build:example":"vite build --config vite.example.config.ts"},"_npmUser":{"name":"go22","email":"go22.npm@gmail.com"},"_npmVersion":"11.13.0","description":"Accessible, declarative product tours for React applications","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"26.2.0","_hasShrinkwrap":false,"devDependencies":{"vite":"8.2.1","jsdom":"30.0.1","react":"^18.3.1","vitest":"4.1.10","react-dom":"^18.3.1","typescript":"7.0.2","@types/react":"^18.3.18","@types/react-dom":"^18.3.5","@vitejs/plugin-react":"6.0.5","@testing-library/react":"16.3.2","vite-plugin-singlefile":"^2.3.0","@testing-library/jest-dom":"7.0.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/take-a-tour_0.1.17_1786384905148_0.42225976667990595","host":"s3://npm-registry-packages-npm-production"}},"0.1.18":{"name":"@go22/take-a-tour","version":"0.1.18","keywords":["react","product-tour","guided-tour","walkthrough","accessibility"],"license":"GPL-3.0-only","_id":"@go22/take-a-tour@0.1.18","maintainers":[{"name":"go22","email":"go22.npm@gmail.com"}],"bin":{"take-a-tour-init":"bin/init.js"},"dist":{"shasum":"1885dc57faa67f4ea6458be680e5b2639ca6a16b","tarball":"https://registry.npmjs.org/@go22/take-a-tour/-/take-a-tour-0.1.18.tgz","fileCount":46,"integrity":"sha512-1rgubAW0ypul/63Ge6DD7TqHaCFRF23wqfjSaZ29Jt7T34Psrsb0DzSRjG5XGTw1NjCJoENbaXFj9rmYdmzCtw==","signatures":[{"sig":"MEUCIGwwvjvp0CQtm7BWBCNd95VmRUtr87DFFVq2MRsTIkz2AiEAuZSSW8oOQN8kQzkLPqkwDHy2fYn1jVmY0bF/UuSvdBQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":131737},"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"},"./styles.css":"./dist/style.css"},"scripts":{"test":"vitest run","build":"vite build && tsc -p tsconfig.build.json","check":"npm run typecheck && npm run test && npm run build","typecheck":"tsc --noEmit","build:example":"vite build --config vite.example.config.ts"},"_npmUser":{"name":"go22","email":"go22.npm@gmail.com"},"_npmVersion":"11.13.0","description":"Accessible, declarative product tours for React applications","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"26.2.0","_hasShrinkwrap":false,"devDependencies":{"vite":"8.2.1","jsdom":"30.0.1","react":"^18.3.1","vitest":"4.1.10","react-dom":"^18.3.1","typescript":"7.0.2","@types/react":"^18.3.18","@types/react-dom":"^18.3.5","@vitejs/plugin-react":"6.0.5","@testing-library/react":"16.3.2","vite-plugin-singlefile":"^2.3.0","@testing-library/jest-dom":"7.0.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/take-a-tour_0.1.18_1786385669497_0.08368308172516237","host":"s3://npm-registry-packages-npm-production"}},"0.1.19":{"name":"@go22/take-a-tour","version":"0.1.19","keywords":["react","product-tour","guided-tour","walkthrough","accessibility"],"license":"GPL-3.0-only","_id":"@go22/take-a-tour@0.1.19","maintainers":[{"name":"go22","email":"go22.npm@gmail.com"}],"bin":{"take-a-tour-init":"bin/init.js"},"dist":{"shasum":"06b8131c7a64910697c1f8020d83d8d0c9b56fbc","tarball":"https://registry.npmjs.org/@go22/take-a-tour/-/take-a-tour-0.1.19.tgz","fileCount":46,"integrity":"sha512-BrSzE3ioa/UVR/MVLL5ynaE1uRQ7VM+bTKs0CqTMA1PM4S6EkvqsTVj0xN9PgNfZMlC7vFdh/JGQXH0knMdaZw==","signatures":[{"sig":"MEUCIQCemP408BrIhmWS3LKoeKHMFxaHVgYXMI/qGhd0qFmbsAIgBHAu8V2DnObf9KGqaVwo619ka8mQkfwUb/VZO1TKyBM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":131821},"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"},"./styles.css":"./dist/style.css"},"scripts":{"test":"vitest run","build":"vite build && tsc -p tsconfig.build.json","check":"npm run typecheck && npm run test && npm run build","typecheck":"tsc --noEmit","build:example":"vite build --config vite.example.config.ts"},"_npmUser":{"name":"go22","email":"go22.npm@gmail.com"},"_npmVersion":"11.13.0","description":"Accessible, declarative product tours for React applications","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"26.2.0","_hasShrinkwrap":false,"devDependencies":{"vite":"8.2.1","jsdom":"30.0.1","react":"^18.3.1","vitest":"4.1.10","react-dom":"^18.3.1","typescript":"7.0.2","@types/react":"^18.3.18","@types/react-dom":"^18.3.5","@vitejs/plugin-react":"6.0.5","@testing-library/react":"16.3.2","vite-plugin-singlefile":"^2.3.0","@testing-library/jest-dom":"7.0.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/take-a-tour_0.1.19_1786386458468_0.5311951787326097","host":"s3://npm-registry-packages-npm-production"}},"0.1.20":{"name":"@go22/take-a-tour","version":"0.1.20","keywords":["react","product-tour","guided-tour","walkthrough","accessibility"],"license":"GPL-3.0-only","_id":"@go22/take-a-tour@0.1.20","maintainers":[{"name":"go22","email":"go22.npm@gmail.com"}],"bin":{"take-a-tour-init":"bin/init.js"},"dist":{"shasum":"831e354fbca679e1d76261eac39ae70def0b906a","tarball":"https://registry.npmjs.org/@go22/take-a-tour/-/take-a-tour-0.1.20.tgz","fileCount":46,"integrity":"sha512-9p+Xnx2n507xRxw9QCph/gVrdmieqNNHNFmbhGWI6jinx/nkSQe6AeeOA6g1tmeLlcAoI4xeS5u5rbhbpvvOQQ==","signatures":[{"sig":"MEQCIDJxBzQToQAEeebyo8CtwFL8OxaNXLyG8Hm7zKa8bSpTAiB8hWwI8PAQJjw4jNi253p9NKmXRTCpoZWHrbDtJDAT/w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":132153},"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"},"./styles.css":"./dist/style.css"},"scripts":{"test":"vitest run","build":"vite build && tsc -p tsconfig.build.json","check":"npm run typecheck && npm run test && npm run build","typecheck":"tsc --noEmit","build:example":"vite build --config vite.example.config.ts"},"_npmUser":{"name":"go22","email":"go22.npm@gmail.com"},"_npmVersion":"11.13.0","description":"Accessible, declarative product tours for React applications","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"26.2.0","_hasShrinkwrap":false,"devDependencies":{"vite":"8.2.1","jsdom":"30.0.1","react":"^18.3.1","vitest":"4.1.10","react-dom":"^18.3.1","typescript":"7.0.2","@types/react":"^18.3.18","@types/react-dom":"^18.3.5","@vitejs/plugin-react":"6.0.5","@testing-library/react":"16.3.2","vite-plugin-singlefile":"^2.3.0","@testing-library/jest-dom":"7.0.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/take-a-tour_0.1.20_1786387814757_0.7682108462571373","host":"s3://npm-registry-packages-npm-production"}},"0.1.21":{"name":"@go22/take-a-tour","version":"0.1.21","keywords":["react","product-tour","guided-tour","walkthrough","accessibility"],"license":"GPL-3.0-only","_id":"@go22/take-a-tour@0.1.21","maintainers":[{"name":"go22","email":"go22.npm@gmail.com"}],"bin":{"take-a-tour-init":"bin/init.js"},"dist":{"shasum":"92004ff2c11cc13bc15aa1a259cf5855d34776f5","tarball":"https://registry.npmjs.org/@go22/take-a-tour/-/take-a-tour-0.1.21.tgz","fileCount":46,"integrity":"sha512-FqoX+rVIrwlBssWV4d9m0gNpDJ+w3cNP8brcTquKspyF4puBji6Mt35D2zV0Y8islNyDfIKFfIPkINr8g18ZHw==","signatures":[{"sig":"MEUCIQDy6IfI0k+fwCMyTMsQFQBA7/kQmdwmoElRi/9Vr8TxKQIgGOTBMUMnebV6FoLzgaBjwVtotYSnP/zw5tOxlJJFIMo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":132209},"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"},"./styles.css":"./dist/style.css"},"scripts":{"test":"vitest run","build":"vite build && tsc -p tsconfig.build.json","check":"npm run typecheck && npm run test && npm run build","typecheck":"tsc --noEmit","build:example":"vite build --config vite.example.config.ts"},"_npmUser":{"name":"go22","email":"go22.npm@gmail.com"},"_npmVersion":"11.13.0","description":"Accessible, declarative product tours for React applications","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"26.2.0","_hasShrinkwrap":false,"devDependencies":{"vite":"8.2.1","jsdom":"30.0.1","react":"^18.3.1","vitest":"4.1.10","react-dom":"^18.3.1","typescript":"7.0.2","@types/react":"^18.3.18","@types/react-dom":"^18.3.5","@vitejs/plugin-react":"6.0.5","@testing-library/react":"16.3.2","vite-plugin-singlefile":"^2.3.0","@testing-library/jest-dom":"7.0.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/take-a-tour_0.1.21_1786388832639_0.7994345884614396","host":"s3://npm-registry-packages-npm-production"}},"0.1.22":{"name":"@go22/take-a-tour","version":"0.1.22","keywords":["react","product-tour","guided-tour","walkthrough","accessibility"],"license":"GPL-3.0-only","_id":"@go22/take-a-tour@0.1.22","maintainers":[{"name":"go22","email":"go22.npm@gmail.com"}],"bin":{"take-a-tour-init":"bin/init.js"},"dist":{"shasum":"d5949a914986740e94394ed64754db66470b3b34","tarball":"https://registry.npmjs.org/@go22/take-a-tour/-/take-a-tour-0.1.22.tgz","fileCount":46,"integrity":"sha512-Ichf0hRnTuTVz2yglwAZ1FDUReApUx/uG5Hj8DQRc5PprEI3AbU2Cm+X3Z6ndXX27fAX6X0+UldanZNeGpWhAA==","signatures":[{"sig":"MEYCIQDwiqS770OE8FWoKoJW4T9pNJ2ZwKrmVxzfMfA5ajlA1QIhAMtvkAUKHqtWzUxj5tIepXfxzgtsLEBA7gYMbH8P3UxC","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":135416},"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"},"./styles.css":"./dist/style.css"},"scripts":{"test":"vitest run","build":"vite build && tsc -p tsconfig.build.json","check":"npm run typecheck && npm run test && npm run build","typecheck":"tsc --noEmit","build:example":"vite build --config vite.example.config.ts"},"_npmUser":{"name":"go22","email":"go22.npm@gmail.com"},"_npmVersion":"11.13.0","description":"Accessible, declarative product tours for React applications","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"26.2.0","_hasShrinkwrap":false,"devDependencies":{"vite":"8.2.1","jsdom":"30.0.1","react":"^18.3.1","vitest":"4.1.10","react-dom":"^18.3.1","typescript":"7.0.2","@types/react":"^18.3.18","@types/react-dom":"^18.3.5","@vitejs/plugin-react":"6.0.5","@testing-library/react":"16.3.2","vite-plugin-singlefile":"^2.3.0","@testing-library/jest-dom":"7.0.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/take-a-tour_0.1.22_1786391037423_0.39323024817905816","host":"s3://npm-registry-packages-npm-production"}},"0.1.23":{"name":"@go22/take-a-tour","version":"0.1.23","keywords":["react","product-tour","guided-tour","walkthrough","accessibility"],"license":"GPL-3.0-only","_id":"@go22/take-a-tour@0.1.23","maintainers":[{"name":"go22","email":"go22.npm@gmail.com"}],"bin":{"take-a-tour-init":"bin/init.js"},"dist":{"shasum":"c95ded0501d685a3a8179554d5dd9b064642e194","tarball":"https://registry.npmjs.org/@go22/take-a-tour/-/take-a-tour-0.1.23.tgz","fileCount":46,"integrity":"sha512-9idRoNpHkXwLznlwAslinLw5ktktkIrE30n2QPSDW0QAHXpOca+xWJ8vhxe0xYDeKNeoeQCXYRyx+Hd/YKBYaA==","signatures":[{"sig":"MEYCIQCMv68IksnLQTB5FXuguqpH368T5TbDh9qp0pO+m+z2iwIhAOCxyBy+upbITqFG8jAF7GgKnOkdGuO0Ar0rP/iwXxTW","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":135494},"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"},"./styles.css":"./dist/style.css"},"scripts":{"test":"vitest run","build":"vite build && tsc -p tsconfig.build.json","check":"npm run typecheck && npm run test && npm run build","typecheck":"tsc --noEmit","build:example":"vite build --config vite.example.config.ts"},"_npmUser":{"name":"go22","email":"go22.npm@gmail.com"},"_npmVersion":"11.13.0","description":"Accessible, declarative product tours for React applications","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"26.2.0","_hasShrinkwrap":false,"devDependencies":{"vite":"8.2.1","jsdom":"30.0.1","react":"^18.3.1","vitest":"4.1.10","react-dom":"^18.3.1","typescript":"7.0.2","@types/react":"^18.3.18","@types/react-dom":"^18.3.5","@vitejs/plugin-react":"6.0.5","@testing-library/react":"16.3.2","vite-plugin-singlefile":"^2.3.0","@testing-library/jest-dom":"7.0.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/take-a-tour_0.1.23_1786391969672_0.7933056044614228","host":"s3://npm-registry-packages-npm-production"}},"0.1.24":{"name":"@go22/take-a-tour","version":"0.1.24","keywords":["react","product-tour","guided-tour","walkthrough","accessibility"],"license":"GPL-3.0-only","_id":"@go22/take-a-tour@0.1.24","maintainers":[{"name":"go22","email":"go22.npm@gmail.com"}],"bin":{"take-a-tour-init":"bin/init.js"},"dist":{"shasum":"cddbb98f7993f7f4802b6c31a9036d999d7e4552","tarball":"https://registry.npmjs.org/@go22/take-a-tour/-/take-a-tour-0.1.24.tgz","fileCount":46,"integrity":"sha512-XsgpQONvxrkbNZALBWZonQwhpR52RMxUaLfPEvAkQkIO035Hh5+ZFjKMIIp+gpf0mHx7xM12IicuheRNQCdHnQ==","signatures":[{"sig":"MEUCIBeGRUgsgcppelV0+WWgzz+G520hTnWQ3dhnUT/Qp+PCAiEAoCM5/pLP/7a5Jo3awG7b3sN2o62kXb77s3R2jGfRarE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":135488},"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"},"./styles.css":"./dist/style.css"},"scripts":{"test":"vitest run","build":"vite build && tsc -p tsconfig.build.json","check":"npm run typecheck && npm run test && npm run build","typecheck":"tsc --noEmit","build:example":"vite build --config vite.example.config.ts"},"_npmUser":{"name":"go22","email":"go22.npm@gmail.com"},"_npmVersion":"11.13.0","description":"Accessible, declarative product tours for React applications","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"26.2.0","_hasShrinkwrap":false,"devDependencies":{"vite":"8.2.1","jsdom":"30.0.1","react":"^18.3.1","vitest":"4.1.10","react-dom":"^18.3.1","typescript":"7.0.2","@types/react":"^18.3.18","@types/react-dom":"^18.3.5","@vitejs/plugin-react":"6.0.5","@testing-library/react":"16.3.2","vite-plugin-singlefile":"^2.3.0","@testing-library/jest-dom":"7.0.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/take-a-tour_0.1.24_1786392312590_0.6817421105827179","host":"s3://npm-registry-packages-npm-production"}},"0.1.25":{"name":"@go22/take-a-tour","version":"0.1.25","keywords":["react","product-tour","guided-tour","walkthrough","accessibility"],"license":"GPL-3.0-only","_id":"@go22/take-a-tour@0.1.25","maintainers":[{"name":"go22","email":"go22.npm@gmail.com"}],"bin":{"take-a-tour-init":"bin/init.js"},"dist":{"shasum":"8f8d0227d878193b9e6d74daa0f0c7bd03c429c7","tarball":"https://registry.npmjs.org/@go22/take-a-tour/-/take-a-tour-0.1.25.tgz","fileCount":46,"integrity":"sha512-a5S+tNQjeK24FvsV2YZ4LHraIt5YIigJ+W1c0xVLnO0BXu8sz//0EIzD95FRX8Nts52C0gagKPLePyVPIoe3kQ==","signatures":[{"sig":"MEUCIG6ExdXbxhIVq0B17pTHz+yGpKUh/gkeLb/rqu+t5824AiEA/b+6l3A28klydw7gBlB0ZAjr4k9ChxFKK04EVdY4AP8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":136625},"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"},"./styles.css":"./dist/style.css"},"scripts":{"test":"vitest run","build":"vite build && tsc -p tsconfig.build.json","check":"npm run typecheck && npm run test && npm run build","typecheck":"tsc --noEmit","build:example":"vite build --config vite.example.config.ts"},"_npmUser":{"name":"go22","email":"go22.npm@gmail.com"},"_npmVersion":"11.13.0","description":"Accessible, declarative product tours for React applications","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"26.2.0","_hasShrinkwrap":false,"devDependencies":{"vite":"8.2.1","jsdom":"30.0.1","react":"^18.3.1","vitest":"4.1.10","react-dom":"^18.3.1","typescript":"7.0.2","@types/react":"^18.3.18","@types/react-dom":"^18.3.5","@vitejs/plugin-react":"6.0.5","@testing-library/react":"16.3.2","vite-plugin-singlefile":"^2.3.0","@testing-library/jest-dom":"7.0.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/take-a-tour_0.1.25_1786629968888_0.8827468605273752","host":"s3://npm-registry-packages-npm-production"}},"0.1.26":{"name":"@go22/take-a-tour","version":"0.1.26","description":"Accessible, declarative product tours for React applications","type":"module","sideEffects":["**/*.css"],"bin":{"take-a-tour-init":"bin/init.js"},"main":"./dist/index.js","module":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./styles.css":"./dist/style.css"},"scripts":{"build":"vite build && tsc -p tsconfig.build.json","build:example":"vite build --config vite.example.config.ts","test":"vitest run","typecheck":"tsc --noEmit","check":"npm run typecheck && npm run test && npm run build"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"devDependencies":{"@testing-library/jest-dom":"7.0.0","@testing-library/react":"16.3.2","@types/react":"^18.3.18","@types/react-dom":"^18.3.5","@vitejs/plugin-react":"6.0.5","jsdom":"30.0.1","react":"^18.3.1","react-dom":"^18.3.1","typescript":"7.0.2","vite":"8.2.1","vite-plugin-singlefile":"^2.3.0","vitest":"4.1.10"},"keywords":["react","product-tour","guided-tour","walkthrough","accessibility"],"license":"GPL-3.0-only","_id":"@go22/take-a-tour@0.1.26","_nodeVersion":"26.2.0","_npmVersion":"11.13.0","dist":{"integrity":"sha512-tkrNZ07EnTizjgQ8gHr9oYq4Yorez/3EARV7F8Dwl/tD4ICHzrgzGS+1vBLmz+zkubEqSYABBk2+1rto7EPE+w==","shasum":"c9b576240a4c64b5c815c9bd6afa17937329b32d","tarball":"https://registry.npmjs.org/@go22/take-a-tour/-/take-a-tour-0.1.26.tgz","fileCount":46,"unpackedSize":137260,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIHlzrqXCAdATCPwdVI299czlfrF9PGHOuHsTrn7lJI0XAiEAhMB/uQYiZ7Higx/feZedIG8ymasdK+f1XAMckwDni3M="}]},"_npmUser":{"name":"go22","email":"go22.npm@gmail.com"},"directories":{},"maintainers":[{"name":"go22","email":"go22.npm@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/take-a-tour_0.1.26_1786630918534_0.32482260471755064"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-10T02:21:04.180Z","modified":"2026-08-13T14:21:58.961Z","0.1.0":"2026-08-08T16:56:10.293Z","0.1.1":"2026-08-08T19:56:55.806Z","0.1.2":"2026-08-08T20:42:56.860Z","0.1.3":"2026-08-08T20:45:53.076Z","0.1.4":"2026-08-08T20:46:40.959Z","0.1.5":"2026-08-08T20:49:22.542Z","0.1.6":"2026-08-08T20:49:55.635Z","0.1.7":"2026-08-08T20:53:14.594Z","0.1.8":"2026-08-08T20:56:06.541Z","0.1.9":"2026-08-10T02:21:04.591Z","0.1.10":"2026-08-10T02:31:57.220Z","0.1.11":"2026-08-10T15:22:41.939Z","0.1.12":"2026-08-10T15:33:23.365Z","0.1.13":"2026-08-10T15:40:02.628Z","0.1.14":"2026-08-10T16:08:08.559Z","0.1.15":"2026-08-10T16:38:54.053Z","0.1.16":"2026-08-10T17:06:52.869Z","0.1.17":"2026-08-10T18:01:45.294Z","0.1.18":"2026-08-10T18:14:29.738Z","0.1.19":"2026-08-10T18:27:38.622Z","0.1.20":"2026-08-10T18:50:14.912Z","0.1.21":"2026-08-10T19:07:12.782Z","0.1.22":"2026-08-10T19:43:57.578Z","0.1.23":"2026-08-10T19:59:29.819Z","0.1.24":"2026-08-10T20:05:12.753Z","0.1.25":"2026-08-13T14:06:09.056Z","0.1.26":"2026-08-13T14:21:58.713Z"},"license":"GPL-3.0-only","keywords":["react","product-tour","guided-tour","walkthrough","accessibility"],"description":"Accessible, declarative product tours for React applications","maintainers":[{"name":"go22","email":"go22.npm@gmail.com"}],"readme":"# @go22/take-a-tour\n\nAn accessible, declarative product-tour engine for React. It can annotate an\nexisting page or render application-owned shells with fixture data for pages a\nvisitor cannot safely or normally access.\n\n> **Release status:** `0.1.10` is published under the `latest` npm tag.\n\n## License\n\nThis project is licensed under the GNU General Public License, version 3 only\n(`GPL-3.0-only`). See [LICENSE](LICENSE).\n\n## Table of contents\n\n- [Install](#install)\n- [Initialize a project](#initialize-a-project)\n- [Included templates](#included-templates)\n- [Basic tour](#basic-tour)\n- [Tour definition](#tour-definition)\n- [Provider options](#provider-options)\n- [Starting on page load](#starting-on-page-load)\n- [Launcher placement](#launcher-placement)\n- [Programmatic control](#programmatic-control)\n- [Tour UI and navigation](#tour-ui-and-navigation)\n- [Shells](#shells)\n- [Step fields](#step-fields)\n- [Selectors and element paths](#selectors-and-element-paths)\n- [Page-owned real input](#page-owned-real-input)\n- [Actions](#actions)\n- [Validation](#validation)\n- [Theme](#theme)\n- [Accessibility](#accessibility)\n- [Quick Start: single HTML page](#quick-start-single-html-page)\n- [Quick Start: normal Vite application](#quick-start-normal-vite-application)\n- [Development and testing](#development-and-testing)\n- [Scope and routing](#scope-and-routing)\n\n## Install\n\n### Published version\n\n```bash\nnpm install @go22/take-a-tour@0.1.10\n```\n\n### Local package testing\n\nPack `0.1.10` from this package directory, then install the resulting archive in\nthe consuming project:\n\n```bash\n# In react-tour/\nnpm run check\nnpm pack --pack-destination /tmp\n\n# In the consuming project\nnpm install --force --no-save --package-lock=false /tmp/go22-take-a-tour-0.1.10.tgz\n```\n\nDo not install the package directory directly with `npm install ../..`. npm\nlinks a local directory instead of installing it like a registry package,\nwhich can make an application load separate React instances and fail at\nruntime.\n\nReact and React DOM 18 or newer are peer dependencies. Import the package CSS\nonce in the application entry point:\n\n```js\nimport \"@go22/take-a-tour/styles.css\";\n```\n\n## Initialize a project\n\nThe `take-a-tour-init` executable creates or updates the integration files for\na standalone example:\n\n```text\npackage.json\nindex.html\nmain.jsx\nvite.config.js\nsteps.js\n```\n\nRun the initializer from the npm registry:\n\n```bash\nnpm exec --package @go22/take-a-tour take-a-tour-init\nnpm install\nnpm run build\n```\n\nAn existing valid `package.json` is merged with the required scripts and\ndependencies. Existing `main.jsx`, `vite.config.js`, and `steps.js` files are\nskipped. If `index.html` already exists, the matching sample page is written as\n`index_sample.html` instead. Pass `--force` to replace generated integration\nfiles intentionally:\n\n```bash\nnpm exec --package @go22/take-a-tour take-a-tour-init --force\n```\n\nThe generated manifest includes `npm run init`, `npm run dev`, and\n`npm run build`. The generated sample page and `steps.js` demonstrate uncounted\nand counted structural paths plus page-owned real input. The Vite pre-hook\nsupplies a missing `main.jsx` module entrypoint during the build.\n\n## Included templates\n\nThe package contains two runnable templates under `examples/`:\n\n```text\nexamples/\n|-- basic-react/   Normal Vite React application\n`-- single-html/   Static page compiled to one self-contained HTML file\n```\n\nEach template has its own `package.json` and README. Copy a template outside\n`node_modules` before adapting it because a later package install can replace\ninstalled package contents.\n\nBoth examples keep the demonstrated markup ordinary:\n\n```html\n<button type=\"button\">Create project</button>\n```\n\nThe tour definition locates that element structurally and adds the selector it\nwill use for spotlighting:\n\n```js\n{\n  path: \"body.main.button\",\n  spotlightSelector: \".tour-create-project\",\n}\n```\n\n## Basic tour\n\nRender the page without tour-specific classes or attributes:\n\n```jsx\nexport function Dashboard() {\n  return (\n    <main>\n      <h1>Dashboard</h1>\n      <button type=\"button\">Create project</button>\n    </main>\n  );\n}\n```\n\nDefine sequential steps in application code. This example assumes the React\napplication is mounted in a `div` under `body`:\n\n```js\nimport { defineTour } from \"@go22/take-a-tour\";\n\nexport const productTour = defineTour({\n  steps: [\n    {\n      path: \"body.div.main.h1\",\n      title: \"Your dashboard\",\n      body: \"Active projects and recent activity appear here.\",\n      auto: { dwellMs: 5000 },\n      interactive: { waitFor: \"next-click\" },\n    },\n    {\n      path: \"body.div.main.button\",\n      title: \"Create a project\",\n      body: \"Start a new project from this button.\",\n      auto: { dwellMs: 5000, holdAtEnd: true },\n      interactive: { waitFor: \"next-click\" },\n    },\n  ],\n});\n```\n\nMount one provider. It supplies the portal and tour UI; no separate tour root\nis needed:\n\n```jsx\nimport { TourEntryButton, TourProvider } from \"@go22/take-a-tour\";\nimport { productTour } from \"./tour.js\";\n\nexport function App() {\n  return (\n    <TourProvider tour={productTour}>\n      <Dashboard />\n      <TourEntryButton>Take a tour</TourEntryButton>\n    </TourProvider>\n  );\n}\n```\n\n## Tour definition\n\n`defineTour()` provides generic type checking for shell names and step data and\nreturns the public `TourConfig` shape.\n\n| Option | Default | Purpose |\n|---|---|---|\n| `steps` | required | Ordered, non-empty array of `TourStep` objects |\n| `shells` | none | Map of shell names to React shell components |\n| `remountOnStepChange` | `[]` | Shell names whose component instance is keyed by step index |\n| `defaultCadence` | `1` | Initial timing multiplier from `0.5` through `2` |\n| `defaultMode` | `\"auto\"` | Mode selected by `start()` and initially selected on the start screen |\n| `colorScheme` | `\"default\"` | `\"default\"` or `\"random\"` provider accent palette |\n| `ttloc` | none | CSS selector that relocates a rendered `TourEntryButton` |\n| `startOnLoad` | none | `\"default\"`, `\"auto\"`, or `\"interactive\"` mount behavior |\n| `labels` | built-in English labels | Partial overrides for all public UI labels |\n| `getStepAnnouncement` | built-in step announcement | Generates screen-reader text from step, position, and total |\n\nStep sequence and identity come from array order. A `TourStep` needs no `id` or\n`key`; use `remountOnStepChange` when a shell must remount between steps.\n\n## Provider options\n\n| Prop | Required | Purpose |\n|---|---|---|\n| `tour` | yes | The result of `defineTour()` |\n| `children` | yes | The application or demonstrated content |\n| `portalContainer` | no | Portal destination; defaults to `document.body` |\n| `className` | no | Additional class on the active `.rt-canvas` |\n\nChanging `portalContainer` changes where the tour canvas is portaled, not which\ndocument is searched for selectors. `useTour()` must be called below the\nprovider.\n\n## Starting on page load\n\nSet `startOnLoad` when the provider should launch the tour on its first mount:\n\n```js\nconst tour = defineTour({\n  startOnLoad: \"default\",\n  steps,\n});\n```\n\n| Value | Page-load behavior |\n|---|---|\n| `\"default\"` | Opens the start screen so the user can choose mode and pace |\n| `\"auto\"` | Skips the start screen and starts Auto mode |\n| `\"interactive\"` | Skips the start screen and starts Interactive mode |\n\nOmit it to wait for `TourEntryButton`, `open()`, or `start()`. An entry button\ncan remain on an auto-starting page so the user can replay the tour.\n\n## Launcher placement\n\n`TourEntryButton` normally renders in a fixed surface at the lower right. Set\n`ttloc` to portal that same rendered button into the first matching element:\n\n```js\nconst tour = defineTour({\n  ttloc: \"main\",\n  steps,\n});\n```\n\nA relocated button is an unenclosed, underlined `Take-a-Tour` control. Missing,\nempty, malformed, or unmatched selectors, including the string `\"null\"`, use\nthe lower-right fallback. Void elements such as `input` and `img` cannot receive\nthe button and also use the fallback. `ttloc` only relocates a rendered\n`TourEntryButton`; it does not create one, resolve paths, or affect step\ntargeting.\n\n## Programmatic control\n\n`useTour()` exposes a stable controller for custom launchers and controls:\n\n```jsx\nimport { useTour } from \"@go22/take-a-tour\";\n\nfunction HelpButton() {\n  const tour = useTour();\n  return (\n    <button onClick={() => tour.start({ mode: \"interactive\", stepIndex: 1 })}>\n      Help\n    </button>\n  );\n}\n```\n\nThe state fields are `active`, `configuring`, `currentStepIndex`, `mode`,\n`cadence`, and `playing`. Methods are `open`, `start`, `close`, `next`,\n`previous`, `goTo`, `setMode`, `setCadence`, `pause`, and `resume`.\n\n`open()` shows the start screen. `start()` begins at its requested zero-based\n`stepIndex`, or the first step, with optional `mode` and `cadence`. Controller `next()`\ncloses the tour when called on the final step. Controller `previous()` does\nnothing on the first step. `goTo()` ignores invalid indexes and pauses timed\nplayback. `setCadence()` clamps values to `0.5` through `2`.\n\n## Tour UI and navigation\n\nThere is no separate top bar. The current step appears in one explainer card\npositioned to avoid the spotlight when possible. Its upper completion row\ncontains the step title plus a reciprocal Auto/Interactive mode link, Restart,\nand explicit Exit controls. The message sits below it in a centered, rounded\none-pixel bordered panel with `font-weight: 500`.\n\nIn Interactive mode, the card's lower action row contains Prev, Contents,\nand Next. Prev is disabled on the first step, Next is disabled on the final\nstep, and neither control wraps. Exit closes the interactive tour. Contents\nopens the step list and selecting an item pauses playback. Prev and Next use\nthe active accent; Contents uses `#7C3AED`.\n\nIn Auto mode, the lower area contains pause/resume and pace controls instead of\nstep buttons. Pace appears beside a centered half-width slider below the\npause/resume control. A vertical countdown rail shrinks beside the message.\nTimed advance calls controller `next()`, so it closes after the final step\nunless the final step uses `holdAtEnd`. Switching modes preserves the current\nstep.\n\n## Shells\n\nShells are optional application components for authenticated screens,\ncontrolled fixture states, or interactions that must not reach a live backend.\nThey receive the active step and render inside the tour canvas.\n\n```tsx\nimport { defineTour, type TourShellProps } from \"@go22/take-a-tour\";\n\ntype Shell = \"dashboard\";\ntype StepData = { state: \"empty\" | \"populated\" };\n\nfunction DashboardShell({ step }: TourShellProps<Shell, StepData>) {\n  return <Dashboard projects={fixtures[step.data?.state ?? \"empty\"]} readOnly />;\n}\n\nexport const productTour = defineTour<Shell, StepData>({\n  steps: [\n    {\n      title: \"Project progress\",\n      body: \"Completed work is summarized here.\",\n      shell: \"dashboard\",\n      data: { state: \"populated\" },\n      spotlightSelector: \".tour-project-progress\",\n      auto: { dwellMs: 5000, holdAtEnd: true },\n      interactive: { waitFor: \"next-click\" },\n    },\n  ],\n  shells: { dashboard: DashboardShell },\n});\n```\n\nList a shell in `remountOnStepChange` only when its internal state must be\nre-created for every step. Omit it when state should persist across consecutive\nsteps. Shell-backed controls remain inside the normal modal canvas.\n\n## Step fields\n\n| Field | Required | Purpose |\n|---|---|---|\n| `title` | yes | Non-empty heading and announcement copy |\n| `body` | yes | Non-empty explainer and announcement copy |\n| `shell` | no | Name of a registered shell component |\n| `data` | no | Opaque payload passed to the shell in `step` |\n| `path` | no | Structural path whose resolved element is highlighted and used for interaction |\n| `spotlightSelector` | no | Alternative selector target, or an optional annotation applied to a path target |\n| `hideExplainer` | no | Hides the card for a self-contained shell |\n| `auto.dwellMs` | yes | Positive base duration before timed advance |\n| `auto.script` | no | String value applied to the resolved target 700ms after the step starts |\n| `auto.holdAtEnd` | no | Runs scripts but prevents timed advance |\n| `auto.playScriptInInteractive` | no | Runs the timed script in Interactive mode |\n| `interactive.waitFor` | yes | `\"next-click\"` or `\"real-input\"` |\n| `interactive.interactionSelector` | no | Override that expands or changes the page interaction opening |\n| `interactive.event` | no | Overrides the inferred `click`, `input`, or `change` event |\n\n## Selectors and element paths\n\nEvery CSS selector target is obtained with `document.querySelector()` and\ntherefore uses the first match. Structural paths use their own resolver and the\nresolved element is measured directly; no selector is required. Make every\nexplicit selector unique.\n\nA path contains dot-separated standard HTML tags. Tags are case-normalized to\nlowercase. An optional suffix is a one-based index among elements of that tag:\n`section2` is the second `section`, while `h25` is the fifth `h2`. The first\nsegment is selected in document order. Every later segment selects only among\nthe current element's direct children. An omitted index means `1`.\n\n```js\n{\n  path: \"body.main.section2.h2\",\n}\n```\n\nOnly standard tags recognized by the package are accepted; custom-element\nnames are not supported. Empty segments, unknown tags, zero or unsafe indexes,\nand unresolved direct-child paths fail silently.\n\nWhen both `path` and `spotlightSelector` are present, the provider can add only\na simple `.class`, `[attribute]`, or\n`[attribute=\"value\"]` selector to the element. A complex selector is not\nsynthesized, although it still works if the existing markup already matches it.\nOmit `path` to target any selector already present in the page.\n\nPath annotations run in a provider layout effect after React commits and rerun\nwhen the `tour.steps` array identity changes. Targets that mount later are not\nautomatically retried unless that dependency changes. Added classes and\nattributes are not removed when a step changes or the provider unmounts.\n`validateTour()` does not parse, resolve, or otherwise check `path` values.\n\n## Page-owned real input\n\nA page-annotation step can require a real interaction with existing page UI:\n\n```js\ninteractive: {\n  waitFor: \"real-input\",\n}\n```\n\nIn Interactive mode, the resolved `path` element determines the opening through\nwhich the page can receive pointer input. Four transparent shield panes cover\nthe areas above, below, left, and right of that opening. The rest of the page\nremains blocked. Without a path, `spotlightSelector` is used instead.\n\nThe event is inferred from the target: text inputs and textareas use `input`;\nselects, checkboxes, radio buttons, and file inputs use `change`; buttons,\nlinks, and other elements use `click`. Set `interactive.event` only to override\nthat behavior. Set `interactive.interactionSelector` when the interaction\nopening must differ from the path target, such as exposing a card containing\nboth an input and its Submit button.\n\nThe external target, or its first focusable descendant, receives initial focus\nand joins the card controls in the focus loop. Because focus and interaction\nintentionally cross the dialog boundary, `aria-modal` is omitted for this\nstate. Page-owned input behavior applies only to steps without a shell.\n\nThe inferred or configured event is captured on `document`; an event target\ninside the interaction opening satisfies the gate. It enables Next but does not\nautomatically advance. Until the event occurs, Next remains disabled. If the\ntarget is missing, has no measurable rectangle, or the event\nnever fires, page access does not open and the step remains gated. Use an\nexplicit Exit or Escape to leave that state.\n\n## Actions\n\n`auto.script` is a single string applied to the resolved path or spotlight\ntarget 700ms after the step starts. The delay is fixed and has no step option.\nThe target element determines the operation:\n\n- Text, number, date, time, range, color, and similar inputs receive the script\n  as their value and dispatch `input` and `change`.\n- Textareas and editable content receive the script as text.\n- A checkbox accepts `\"select\"` or `\"deselect\"`.\n- A radio input accepts a value from its named group or `\"sequence\"`.\n- A select accepts an option value or `\"sequence\"`.\n- A button, clickable input, link, or other clickable element accepts `\"click\"`.\n- File inputs cannot be populated by scripts.\n\nRadio and select sequences begin at 700ms and move through choices every 500ms,\nstopping before the current paced dwell expires. The last choice remains\nselected. Scripts run during active Auto playback and can also run in\nInteractive mode when `playScriptInInteractive` is true.\n\n```js\nauto: { dwellMs: 5000, script: \"Apollo\" }\n```\n\n```js\nauto: { dwellMs: 5000, script: \"click\" }\n```\n\n`\"click\"` performs a real DOM click. Navigation, form submission, application\nstate changes, and any other resulting effects are intentional and are the\nresponsibility of the developer authoring the step.\n\n## Validation\n\nUse `validateTour()` in consuming-application tests:\n\n```js\nimport { validateTour } from \"@go22/take-a-tour\";\nimport { productTour } from \"./tour.js\";\n\nexpect(validateTour(productTour)).toEqual([]);\n```\n\nIt reports an empty tour; blank title or body; unregistered shells; non-finite\nor non-positive dwell times; scripts whose dwell is not greater than 700ms;\nempty spotlight or interaction selectors; `defaultCadence` outside `0.5`\nthrough `2`; and unsupported `startOnLoad` or `colorScheme` values.\n\nValidation is structural. It does not test CSS selector syntax or whether a\nselector matches the document. It does not inspect `path`, require a spotlight\nselector, validate script compatibility with a target, or confirm runtime page and shell\nbehavior. An empty tour returns only the `empty-tour` issue.\n\n## Theme\n\nThe exact stylesheet defaults are:\n\n```css\n:root {\n  --rt-accent: #b45309;\n  --rt-accent-hover: #92400e;\n  --rt-accent-soft: #fffbeb;\n  --rt-on-accent: #ffffff;\n  --rt-surface: #ffffff;\n  --rt-surface-muted: #f1f5f9;\n  --rt-text: #334155;\n  --rt-text-muted: #64748b;\n  --rt-border: #cbd5e1;\n  --rt-overlay: rgba(15, 23, 42, 0.52);\n  --rt-spotlight: rgba(251, 191, 36, 0.86);\n  --rt-progress: var(--rt-accent);\n  --rt-radius: 0.65rem;\n  --rt-font: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif;\n  --rt-z-index: 3000;\n}\n```\n\nPass `className` to `TourProvider` to target one active canvas. All package\nclasses use the `rt-` prefix.\n\nAt provider initialization, `colorScheme: \"default\"` chooses `#B45309` and\n`\"random\"` chooses one of 12 predefined accents. The provider derives hover,\nsoft, and contrasting foreground colors, then writes `--rt-accent`,\n`--rt-accent-hover`, `--rt-accent-soft`, `--rt-on-accent`, and `--rt-progress`\nas inline styles on the canvas. Those inline palette values override ordinary\nclass or root declarations. Override them with inline-style priority such as\n`!important`, or theme the remaining variables normally. The palette is chosen\nonce for each provider mount, not on every tour start.\n\n## Accessibility\n\nThe package provides Escape handling, focus restoration, dynamic focus\ndiscovery, step announcements, a button-list Contents panel, and keyboard\nfocus containment. The start screen exposes mode and pace choices. Interactive\npage-owned input intentionally expands the focus loop and omits `aria-modal` as\ndescribed above.\n\nAuto mode provides pause/resume, a pace slider, and a shrinking countdown rail\nso timed transitions are predictable. The rail pauses with playback and is\nomitted in Interactive mode and on held steps. Do not remove pause from a\ncustomized Auto experience. Keep unavailable shell controls genuinely disabled\nso they do not enter the dialog's Tab cycle.\n\n## Quick Start: single HTML page\n\n`examples/single-html` is the canonical static-page workflow. It leaves the\ndemonstrated page as ordinary HTML and mounts React only for the provider and\nentry button. Vite and `vite-plugin-singlefile` compile JavaScript and CSS into\none `dist/index.html`. The tour must run in the same document as path targets;\nan iframe cannot inspect elements in its parent document.\n\nUse these root-level files:\n\n```text\nindex.html\nmain.jsx\nsteps.js\nvite.config.js\npackage.json\n```\n\nThe source `index.html` contains the static page only. It needs neither a React\nmount placeholder nor a module script because the Vite pre-hook injects the\nentry point:\n\n```html\n<!doctype html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"UTF-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <title>Single-file product tour</title>\n  </head>\n  <body>\n    <main>\n      <h1>Example dashboard</h1>\n      <section>\n        <h2>Recent activity</h2>\n        <p>Two projects were updated today.</p>\n      </section>\n      <section>\n        <h2>Project summary</h2>\n        <button type=\"button\">Create project</button>\n      </section>\n      <div><h2>Saved views</h2></div>\n      <div id=\"project-submission\">\n        <label for=\"project-name\">Project name</label>\n        <input id=\"project-name\" type=\"text\" />\n        <button id=\"project-submit\" type=\"button\">Submit project</button>\n        <p id=\"project-result\" aria-live=\"polite\" hidden></p>\n      </div>\n    </main>\n    <script>\n      const projectName = document.querySelector(\"#project-name\");\n      const projectResult = document.querySelector(\"#project-result\");\n      function submitProject() {\n        const name = projectName.value.trim();\n        if (!name) return projectName.focus();\n        projectResult.textContent = `Project submitted: ${name}`;\n        projectResult.hidden = false;\n        projectName.value = \"\";\n      }\n      document.querySelector(\"#project-submit\").addEventListener(\"click\", submitProject);\n      projectName.addEventListener(\"keydown\", (event) => {\n        if (event.key === \"Enter\") submitProject();\n      });\n    </script>\n  </body>\n</html>\n```\n\nDefine paths against that static structure in `steps.js`. An omitted count\nselects the first matching tag, while `section2` and `div2` select the second\ndirect child of each tag type:\n\n```js\nexport const startOnLoad = \"default\";\nexport const colorScheme = \"random\";\nexport const ttloc = null;\n\nexport const steps = [\n  {\n    path: \"body.main.section\",\n    title: \"Recent activity\",\n    body: \"A path without a count selects the first matching section.\",\n    auto: { dwellMs: 5000 },\n    interactive: { waitFor: \"next-click\" },\n  },\n  {\n    path: \"body.main.section2.button\",\n    title: \"Create a project\",\n    body: \"The second section contains the control for starting a project.\",\n    auto: { dwellMs: 5000 },\n    interactive: { waitFor: \"next-click\" },\n  },\n  {\n    path: \"body.main.div2.input\",\n    title: \"Name your project\",\n    body: \"Enter a project name, then submit it below.\",\n    auto: { dwellMs: 5000, script: \"Apollo\" },\n    interactive: {\n      waitFor: \"real-input\",\n      interactionSelector: \"#project-submission\",\n    },\n  },\n  {\n    path: \"body.main.div2.button\",\n    title: \"Submit your project\",\n    body: \"Submit the entered project name.\",\n    auto: { dwellMs: 5000, script: \"click\" },\n    interactive: { waitFor: \"real-input\" },\n  },\n];\n```\n\nRoot `main.jsx` creates its mount dynamically:\n\n```jsx\nimport React from \"react\";\nimport { createRoot } from \"react-dom/client\";\nimport { TourEntryButton, TourProvider, defineTour } from \"@go22/take-a-tour\";\nimport \"@go22/take-a-tour/styles.css\";\nimport * as settings from \"./steps\";\n\nconst tour = defineTour(settings);\nconst mount = document.body.appendChild(document.createElement(\"div\"));\n\ncreateRoot(mount).render(\n  <React.StrictMode>\n    <TourProvider tour={tour}>\n      <TourEntryButton>Take a tour</TourEntryButton>\n    </TourProvider>\n  </React.StrictMode>,\n);\n```\n\nThe `ensure-main-entrypoint` pre-hook avoids duplicate injection, inserts the\nroot entry before `</body>`, and appends it when an input document has no closing\nbody tag:\n\n```js\nimport react from \"@vitejs/plugin-react\";\nimport { defineConfig } from \"vite\";\nimport { viteSingleFile } from \"vite-plugin-singlefile\";\n\nconst ensureMainEntrypoint = {\n  name: \"ensure-main-entrypoint\",\n  transformIndexHtml: {\n    order: \"pre\",\n    handler(html) {\n      if (/<script\\b[^>]*\\bsrc\\s*=\\s*([\"'])\\.\\/main\\.jsx\\1[^>]*>/i.test(html)) return html;\n      const entrypoint = '  <script type=\"module\" src=\"./main.jsx\"></script>\\n';\n      return /<\\/body>/i.test(html)\n        ? html.replace(/<\\/body>/i, `${entrypoint}</body>`)\n        : `${html}\\n${entrypoint}`;\n    },\n  },\n};\n\nexport default defineConfig({\n  plugins: [ensureMainEntrypoint, react(), viteSingleFile()],\n  build: {\n    cssCodeSplit: false,\n    assetsInlineLimit: Number.MAX_SAFE_INTEGER,\n  },\n});\n```\n\nInstall the package using the command in [Install](#install), then run:\n\n```bash\nnpm run build\n```\n\nThe result is `dist/index.html`, which can be opened with a `file://` URL or\nserved as one static file. Links, remote images, fonts, network requests, and\nCSS URLs remain external unless imported and inlined by the build. A strict\nContent Security Policy must permit the generated inline script and style,\nusually with hashes or nonces.\n\n## Quick Start: normal Vite application\n\nFor a normal application, mount the page and provider together in the existing\nReact entry point. `index.html` has a root and a normal Vite module script:\n\n```html\n<div id=\"root\"></div>\n<script type=\"module\" src=\"/src/main.jsx\"></script>\n```\n\n```jsx\nimport React from \"react\";\nimport { createRoot } from \"react-dom/client\";\nimport { TourEntryButton, TourProvider, defineTour } from \"@go22/take-a-tour\";\nimport \"@go22/take-a-tour/styles.css\";\nimport App from \"./App.jsx\";\nimport { steps } from \"./steps.js\";\n\nconst tour = defineTour({ startOnLoad: \"default\", steps });\n\ncreateRoot(document.getElementById(\"root\")).render(\n  <React.StrictMode>\n    <TourProvider tour={tour}>\n      <App />\n      <TourEntryButton>Take a tour</TourEntryButton>\n    </TourProvider>\n  </React.StrictMode>,\n);\n```\n\nBecause the application is mounted under `#root`, paths to application markup\nbegin with `body.div`, for example `body.div.main.h1`. A normal Vite build does\nnot use `vite-plugin-singlefile`; deploy all of `dist/`, including generated\nJavaScript and CSS assets.\n\n## Development and testing\n\nThe current development package version is `0.1.10`. From the package directory:\n\n```bash\nnpm run typecheck\nnpm test\nnpm run build\nnpm run check\nnpm run build:example\n```\n\n`npm run check` runs type checking, the current 32-test Vitest suite, and the\npackage build. `npm run build:example` regenerates `../example.html`; review that\ngenerated output when the example source changes. Use\n`--package-lock=false` when installing a temporary packed archive into an\nexample so local verification does not rewrite its lockfile.\n\n## Scope and routing\n\nThis release supports one mounted document plus application-owned shells. It\ndoes not navigate routes or HTML pages. Coordinate routing in application code\nbefore starting the relevant tour, or render route states as shells. For a true\nmultiple-HTML Vite build, configure every HTML file as a Vite input and mount or\nimport the integration on each page; each step target must exist in the current\ndocument or in the active shell.\n","readmeFilename":"README.md"}