{"_id":"modern-tour","_rev":"12-3569d9ee7eb1cb30b4698ad6d789f56e","name":"modern-tour","dist-tags":{"latest":"0.3.1"},"versions":{"0.0.0":{"name":"modern-tour","version":"0.0.0","keywords":["react","tour","onboarding","product-tour","framer-motion","animation","walkthrough","guide","tooltip","spotlight"],"author":{"name":"thangdevalone"},"license":"MIT","_id":"modern-tour@0.0.0","maintainers":[{"name":"thangdevalone","email":"quangthangvtlg@gmail.com"}],"homepage":"https://tour.modern-ui.org","bugs":{"url":"https://github.com/thangdevalone/modern-tour/issues"},"dist":{"shasum":"8a0e4d31c5b69a06c1b36977404d60302d2110fa","tarball":"https://registry.npmjs.org/modern-tour/-/modern-tour-0.0.0.tgz","fileCount":9,"integrity":"sha512-f/seK644lpCc6Vnj9edloEZy4jFezqEW3mxmEil8n+rdJ1RA/Jgg3bPAlj5RQWizPatdDhe4RqE2hm+ugk7sBA==","signatures":[{"sig":"MEUCIQDHqObXkcpWoxxaunRS/GvvTqB5qAhtA4DRP2XHIzm4CwIgQDz19S+1UCNYjQn0glFFX1PeJY+xn0Zi5Cv7I58DDT8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":95596},"main":"./dist/index.cjs","type":"module","_from":"file:modern-tour-0.0.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./styles.css":"./dist/styles.css"},"scripts":{"dev":"vite","lint":"eslint src --ext .ts,.tsx","test":"vitest","build":"tsc && vite build","release":"changeset publish","test:run":"vitest run","build:demo":"vite build --config vite.config.demo.ts"},"_npmUser":{"name":"thangdevalone","email":"quangthangvtlg@gmail.com"},"_resolved":"/tmp/ea97bb76135bab65aff9d614cad9d1a4/modern-tour-0.0.0.tgz","_integrity":"sha512-f/seK644lpCc6Vnj9edloEZy4jFezqEW3mxmEil8n+rdJ1RA/Jgg3bPAlj5RQWizPatdDhe4RqE2hm+ugk7sBA==","repository":{"url":"git+https://github.com/thangdevalone/modern-tour.git","type":"git"},"_npmVersion":"10.8.2","description":"A beautiful, animated product tour library for React powered by Framer Motion","directories":{},"sideEffects":["*.css"],"_nodeVersion":"20.20.0","dependencies":{"clsx":"^2.1.1","tailwindcss":"^4.1.18","lucide-react":"^0.563.0","tailwind-merge":"^3.4.0","@tailwindcss/vite":"^4.1.18","@floating-ui/react":"^0.27.17"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^5.1.2","jsdom":"^24.0.0","react":"^18.2.0","eslint":"^8.56.0","vitest":"^1.3.0","react-dom":"^18.2.0","typescript":"^5.3.3","@types/react":"^18.2.55","framer-motion":"^11.0.5","@changesets/cli":"^2.27.1","vite-plugin-dts":"^3.7.2","@types/react-dom":"^18.2.19","@vitejs/plugin-react":"^4.2.1","@testing-library/react":"^14.2.1","@typescript-eslint/parser":"^7.0.1","eslint-plugin-react-hooks":"^4.6.0","vite-plugin-css-injected-by-js":"^3.4.0","@typescript-eslint/eslint-plugin":"^7.0.1"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0","framer-motion":">=10.0.0"},"_npmOperationalInternal":{"tmp":"tmp/modern-tour_0.0.0_1770273580504_0.5399445745397633","host":"s3://npm-registry-packages-npm-production"}},"0.1.0":{"name":"modern-tour","version":"0.1.0","keywords":["react","tour","onboarding","product-tour","framer-motion","animation","walkthrough","guide","tooltip","spotlight"],"author":{"name":"thangdevalone"},"license":"MIT","_id":"modern-tour@0.1.0","maintainers":[{"name":"thangdevalone","email":"quangthangvtlg@gmail.com"}],"homepage":"https://tour.modern-ui.org","bugs":{"url":"https://github.com/thangdevalone/modern-tour/issues"},"dist":{"shasum":"4ebb926d7bd4598f36654b6bc0b6368370641cb7","tarball":"https://registry.npmjs.org/modern-tour/-/modern-tour-0.1.0.tgz","fileCount":9,"integrity":"sha512-H2ukTvR3FXWyvJzrfjtJAuLRdmas9j2kaNAcfhu9Qw15X82IWM+4mMAO42xQgdW3dT/mYT7rfOgdz3rKh4laCg==","signatures":[{"sig":"MEQCICNFIgHPF2JbkMMXpz3Xw1yA9gsEHd5+oHxYmOYor0T7AiBDL08eiBVedQPWhzu6Eu1sml3rZVU1FVl3bgUWtqRWHQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":95597},"main":"./dist/index.cjs","type":"module","_from":"file:modern-tour-0.1.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./styles.css":"./dist/styles.css"},"scripts":{"dev":"vite","lint":"eslint src --ext .ts,.tsx","test":"vitest","build":"tsc && vite build","release":"changeset publish","test:run":"vitest run","build:demo":"vite build --config vite.config.demo.ts"},"_npmUser":{"name":"thangdevalone","email":"quangthangvtlg@gmail.com"},"_resolved":"/tmp/07d83e67ed285333dacb1234179e8602/modern-tour-0.1.0.tgz","_integrity":"sha512-H2ukTvR3FXWyvJzrfjtJAuLRdmas9j2kaNAcfhu9Qw15X82IWM+4mMAO42xQgdW3dT/mYT7rfOgdz3rKh4laCg==","repository":{"url":"git+https://github.com/thangdevalone/modern-tour.git","type":"git"},"_npmVersion":"10.8.2","description":"A beautiful, animated product tour library for React powered by Framer Motion","directories":{},"sideEffects":["*.css"],"_nodeVersion":"20.20.0","dependencies":{"clsx":"^2.1.1","tailwindcss":"^4.1.18","lucide-react":"^0.563.0","framer-motion":"^11.0.5","tailwind-merge":"^3.4.0","@tailwindcss/vite":"^4.1.18","@floating-ui/react":"^0.27.17"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^5.1.2","jsdom":"^24.0.0","react":"^18.2.0","eslint":"^8.56.0","vitest":"^1.3.0","react-dom":"^18.2.0","typescript":"^5.3.3","@types/react":"^18.2.55","framer-motion":"^11.0.5","@changesets/cli":"^2.27.1","vite-plugin-dts":"^3.7.2","@types/react-dom":"^18.2.19","@vitejs/plugin-react":"^4.2.1","@testing-library/react":"^14.2.1","@typescript-eslint/parser":"^7.0.1","eslint-plugin-react-hooks":"^4.6.0","vite-plugin-css-injected-by-js":"^3.4.0","@typescript-eslint/eslint-plugin":"^7.0.1"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/modern-tour_0.1.0_1770282868205_0.9130228235646283","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"modern-tour","version":"0.1.1","keywords":["react","tour","onboarding","product-tour","framer-motion","animation","walkthrough","guide","tooltip","spotlight"],"author":{"name":"thangdevalone"},"license":"MIT","_id":"modern-tour@0.1.1","maintainers":[{"name":"thangdevalone","email":"quangthangvtlg@gmail.com"}],"homepage":"https://tour.modern-ui.org","bugs":{"url":"https://github.com/thangdevalone/modern-tour/issues"},"dist":{"shasum":"1be696cbf515512f4ad5f7f1595a6bed7588d6ed","tarball":"https://registry.npmjs.org/modern-tour/-/modern-tour-0.1.1.tgz","fileCount":9,"integrity":"sha512-Se6b9+PDcqPvBW44ooOInEQaEnyWLlSmz1st/FqOQPNukc+gNYSZzAsmbTezgBudynfc4Cks/UuOY86Qnc6NJw==","signatures":[{"sig":"MEQCIHJ+b4ODmlRzZ/kaHQy8P/NtckILwA0EZMe7n+Y7V0QCAiAvcNp/XhEo2p8MNFrgdqJGJfk7HabtEPG+Mm4TWYaSeQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":98598},"main":"./dist/index.cjs","type":"module","_from":"file:modern-tour-0.1.1.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./styles.css":"./dist/styles.css"},"scripts":{"dev":"vite","lint":"eslint src --ext .ts,.tsx","test":"vitest","build":"tsc && vite build","release":"changeset publish","test:run":"vitest run","build:demo":"vite build --config vite.config.demo.ts"},"_npmUser":{"name":"thangdevalone","email":"quangthangvtlg@gmail.com"},"_resolved":"/tmp/7a3bc32ace3af0b3411c2900abc007a2/modern-tour-0.1.1.tgz","_integrity":"sha512-Se6b9+PDcqPvBW44ooOInEQaEnyWLlSmz1st/FqOQPNukc+gNYSZzAsmbTezgBudynfc4Cks/UuOY86Qnc6NJw==","repository":{"url":"git+https://github.com/thangdevalone/modern-tour.git","type":"git"},"_npmVersion":"10.8.2","description":"A beautiful, animated product tour library for React powered by Framer Motion","directories":{},"sideEffects":["*.css"],"_nodeVersion":"20.20.0","dependencies":{"clsx":"^2.1.1","tailwindcss":"^4.1.18","lucide-react":"^0.563.0","framer-motion":"^11.0.5","tailwind-merge":"^3.4.0","@tailwindcss/vite":"^4.1.18","@floating-ui/react":"^0.27.17"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^5.1.2","jsdom":"^24.0.0","react":"^18.2.0","eslint":"^8.56.0","vitest":"^1.3.0","react-dom":"^18.2.0","typescript":"^5.3.3","@types/react":"^18.2.55","framer-motion":"^11.0.5","@changesets/cli":"^2.27.1","vite-plugin-dts":"^3.7.2","@types/react-dom":"^18.2.19","@vitejs/plugin-react":"^4.2.1","@testing-library/react":"^14.2.1","@typescript-eslint/parser":"^7.0.1","eslint-plugin-react-hooks":"^4.6.0","vite-plugin-css-injected-by-js":"^3.4.0","@typescript-eslint/eslint-plugin":"^7.0.1"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/modern-tour_0.1.1_1770713290076_0.9304184243551314","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"modern-tour","version":"0.1.2","keywords":["react","tour","onboarding","product-tour","framer-motion","animation","walkthrough","guide","tooltip","spotlight"],"author":{"name":"thangdevalone"},"license":"MIT","_id":"modern-tour@0.1.2","maintainers":[{"name":"thangdevalone","email":"quangthangvtlg@gmail.com"}],"homepage":"https://tour.modern-ui.org","bugs":{"url":"https://github.com/thangdevalone/modern-tour/issues"},"dist":{"shasum":"0499e4561527170baec08d22749c4530db3ae9bb","tarball":"https://registry.npmjs.org/modern-tour/-/modern-tour-0.1.2.tgz","fileCount":8,"integrity":"sha512-zYC6O33OsffX7z6kUVEl1UgSiGqlCgubL98ow//ujbtR7BQaiLl0Sa7CJNlDm3lz4+o+XMHNGi4XdlkA3E91Sg==","signatures":[{"sig":"MEQCIFXFbfonkdshrRQ7Ly75s0csCTBr3Zvzox14fnSEqKIrAiAJFOwY+KE8kfmWyPe78OrjuEkZFAtcyIgCuh5RZd1Ysw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/modern-tour@0.1.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":81949},"main":"./dist/index.cjs","type":"module","_from":"file:modern-tour-0.1.2.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"scripts":{"dev":"vite","lint":"eslint src --ext .ts,.tsx","test":"vitest","build":"tsc && vite build","release":"changeset publish","test:run":"vitest run","build:demo":"vite build --config vite.config.demo.ts"},"_npmUser":{"name":"thangdevalone","email":"quangthangvtlg@gmail.com"},"_resolved":"/tmp/0d5fed6a6df020b879bba5f02741ff24/modern-tour-0.1.2.tgz","_integrity":"sha512-zYC6O33OsffX7z6kUVEl1UgSiGqlCgubL98ow//ujbtR7BQaiLl0Sa7CJNlDm3lz4+o+XMHNGi4XdlkA3E91Sg==","repository":{"url":"git+https://github.com/thangdevalone/modern-tour.git","type":"git"},"_npmVersion":"11.12.1","description":"A beautiful, animated product tour library for React powered by Framer Motion","directories":{},"sideEffects":["*.css"],"_nodeVersion":"24.14.1","dependencies":{"lucide-react":"^0.563.0","framer-motion":"^11.0.5","@floating-ui/react":"^0.27.17"},"_hasShrinkwrap":false,"devDependencies":{"clsx":"^2.1.1","vite":"^5.1.2","jsdom":"^24.0.0","react":"^18.2.0","eslint":"^8.56.0","vitest":"^1.3.0","react-dom":"^18.2.0","typescript":"^5.3.3","tailwindcss":"^4.1.18","@types/react":"^18.2.55","framer-motion":"^11.0.5","tailwind-merge":"^3.4.0","@changesets/cli":"^2.27.1","vite-plugin-dts":"^3.7.2","@types/react-dom":"^18.2.19","@tailwindcss/vite":"^4.1.18","@vitejs/plugin-react":"^4.2.1","@testing-library/react":"^14.2.1","@typescript-eslint/parser":"^7.0.1","eslint-plugin-react-hooks":"^4.6.0","vite-plugin-css-injected-by-js":"^3.4.0","@typescript-eslint/eslint-plugin":"^7.0.1"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/modern-tour_0.1.2_1775472254036_0.2765101708444213","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"modern-tour","version":"0.1.3","keywords":["react","tour","onboarding","product-tour","framer-motion","animation","walkthrough","guide","tooltip","spotlight"],"author":{"name":"thangdevalone"},"license":"MIT","_id":"modern-tour@0.1.3","maintainers":[{"name":"thangdevalone","email":"quangthangvtlg@gmail.com"}],"homepage":"https://tour.modern-ui.org","bugs":{"url":"https://github.com/thangdevalone/modern-tour/issues"},"dist":{"shasum":"601f1ae5a8db4908b4c842a277fa20b8c3846a2a","tarball":"https://registry.npmjs.org/modern-tour/-/modern-tour-0.1.3.tgz","fileCount":8,"integrity":"sha512-OEIaJWWm+cNJ48oMomYYRbU3VlO9Fnj+1exND/xs5RawBlOu1QMNQeKHhwz6iPum7nOxh3eDSf9mlwhjEEmSeQ==","signatures":[{"sig":"MEUCIDf2gBnTgG/nOYMIo8oWyPo+lFEh2zRu++mIgFesNjw7AiEAx6Zhw+8vqEg9a6phcrVIQFBuCYdxJfwwNgy4lYZPnKo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/modern-tour@0.1.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":82741},"main":"./dist/index.cjs","type":"module","_from":"file:modern-tour-0.1.3.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"scripts":{"dev":"vite","lint":"eslint src --ext .ts,.tsx","test":"vitest","build":"tsc && vite build","release":"changeset publish","test:run":"vitest run","build:demo":"vite build --config vite.config.demo.ts"},"_npmUser":{"name":"thangdevalone","email":"quangthangvtlg@gmail.com"},"_resolved":"/tmp/f8eb6e928bc06bd2bb7a7dcb43f91f16/modern-tour-0.1.3.tgz","_integrity":"sha512-OEIaJWWm+cNJ48oMomYYRbU3VlO9Fnj+1exND/xs5RawBlOu1QMNQeKHhwz6iPum7nOxh3eDSf9mlwhjEEmSeQ==","repository":{"url":"git+https://github.com/thangdevalone/modern-tour.git","type":"git"},"_npmVersion":"11.12.1","description":"A beautiful, animated product tour library for React powered by Framer Motion","directories":{},"sideEffects":["*.css"],"_nodeVersion":"24.14.1","dependencies":{"lucide-react":"^0.563.0","framer-motion":"^11.0.5","@floating-ui/react":"^0.27.17"},"_hasShrinkwrap":false,"devDependencies":{"clsx":"^2.1.1","vite":"^5.1.2","jsdom":"^24.0.0","react":"^18.2.0","eslint":"^8.56.0","vitest":"^1.3.0","react-dom":"^18.2.0","typescript":"^5.3.3","tailwindcss":"^4.1.18","@types/react":"^18.2.55","framer-motion":"^11.0.5","tailwind-merge":"^3.4.0","@changesets/cli":"^2.27.1","vite-plugin-dts":"^3.7.2","@types/react-dom":"^18.2.19","@tailwindcss/vite":"^4.1.18","@vitejs/plugin-react":"^4.2.1","@testing-library/react":"^14.2.1","@typescript-eslint/parser":"^7.0.1","eslint-plugin-react-hooks":"^4.6.0","vite-plugin-css-injected-by-js":"^3.4.0","@typescript-eslint/eslint-plugin":"^7.0.1"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/modern-tour_0.1.3_1775808456247_0.5796136353253543","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"modern-tour","version":"0.1.4","keywords":["react","tour","onboarding","product-tour","framer-motion","animation","walkthrough","guide","tooltip","spotlight"],"author":{"name":"thangdevalone"},"license":"MIT","_id":"modern-tour@0.1.4","maintainers":[{"name":"thangdevalone","email":"quangthangvtlg@gmail.com"}],"homepage":"https://tour.modern-ui.org","bugs":{"url":"https://github.com/thangdevalone/modern-tour/issues"},"dist":{"shasum":"e5bc5374e000b77ccee5fdee23bc3620f456a2c8","tarball":"https://registry.npmjs.org/modern-tour/-/modern-tour-0.1.4.tgz","fileCount":8,"integrity":"sha512-3t0FNOnEMzUiNincPvMshzmCoBwXLqHYCBdZ5ikut1Bl5sDOsmxutO5gVToksqPfiN5J/VF+i5xbB9JUyrtvsw==","signatures":[{"sig":"MEUCIFD/tGhZyxpwOhx5souA/dWfaHTt0ebnyWAc1Fg+IRAUAiEA+r5f1V7I5+PKL1bKYg32oZMjBwuqjiBvyTmvWvUWrbU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/modern-tour@0.1.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":82656},"main":"./dist/index.cjs","type":"module","_from":"file:modern-tour-0.1.4.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"scripts":{"dev":"vite","lint":"eslint src --ext .ts,.tsx","test":"vitest","build":"tsc && vite build","release":"changeset publish","test:run":"vitest run","build:demo":"vite build --config vite.config.demo.ts"},"_npmUser":{"name":"thangdevalone","email":"quangthangvtlg@gmail.com"},"_resolved":"/tmp/f230bbfa41b3d9173c1814f5a0f40c65/modern-tour-0.1.4.tgz","_integrity":"sha512-3t0FNOnEMzUiNincPvMshzmCoBwXLqHYCBdZ5ikut1Bl5sDOsmxutO5gVToksqPfiN5J/VF+i5xbB9JUyrtvsw==","repository":{"url":"git+https://github.com/thangdevalone/modern-tour.git","type":"git"},"_npmVersion":"11.12.1","description":"A beautiful, animated product tour library for React powered by Framer Motion","directories":{},"sideEffects":["*.css"],"_nodeVersion":"24.14.1","dependencies":{"lucide-react":"^0.563.0","framer-motion":"^11.0.5","@floating-ui/react":"^0.27.17"},"_hasShrinkwrap":false,"devDependencies":{"clsx":"^2.1.1","vite":"^5.1.2","jsdom":"^24.0.0","react":"^18.2.0","eslint":"^8.56.0","vitest":"^1.3.0","react-dom":"^18.2.0","typescript":"^5.3.3","tailwindcss":"^4.1.18","@types/react":"^18.2.55","framer-motion":"^11.0.5","tailwind-merge":"^3.4.0","@changesets/cli":"^2.27.1","vite-plugin-dts":"^3.7.2","@types/react-dom":"^18.2.19","@tailwindcss/vite":"^4.1.18","@vitejs/plugin-react":"^4.2.1","@testing-library/react":"^14.2.1","@typescript-eslint/parser":"^7.0.1","eslint-plugin-react-hooks":"^4.6.0","vite-plugin-css-injected-by-js":"^3.4.0","@typescript-eslint/eslint-plugin":"^7.0.1"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/modern-tour_0.1.4_1776141452252_0.8952983860708144","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"modern-tour","version":"0.1.5","keywords":["react","tour","onboarding","product-tour","framer-motion","animation","walkthrough","guide","tooltip","spotlight"],"author":{"name":"thangdevalone"},"license":"MIT","_id":"modern-tour@0.1.5","maintainers":[{"name":"thangdevalone","email":"quangthangvtlg@gmail.com"}],"homepage":"https://tour.modern-ui.org","bugs":{"url":"https://github.com/thangdevalone/modern-tour/issues"},"dist":{"shasum":"534be53ce02c048228aced3a0d3ee799701f8e1a","tarball":"https://registry.npmjs.org/modern-tour/-/modern-tour-0.1.5.tgz","fileCount":8,"integrity":"sha512-X90vDmgSYOIEQFUsdFgQCrBdJhx84NIlvjLknu9UG8sbu/3o3c4/os2ctqP5qmWyxUec/gxKG+b4RmKSQG9uPg==","signatures":[{"sig":"MEQCIFh+c43bRerJJMEW3KOJ9+7BEUFDgKXucfnxEfNoR3UxAiBWcep5kNjBy8sbW9W/iv3KGg8H0ZflGNfu+HPuSGydeA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/modern-tour@0.1.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":82736},"main":"./dist/index.cjs","type":"module","_from":"file:modern-tour-0.1.5.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"scripts":{"dev":"vite","lint":"eslint src --ext .ts,.tsx","test":"vitest","build":"tsc && vite build","release":"changeset publish","test:run":"vitest run","build:demo":"vite build --config vite.config.demo.ts"},"_npmUser":{"name":"thangdevalone","email":"quangthangvtlg@gmail.com"},"_resolved":"/tmp/8c13ec2bd9021de78a3624b827031a2c/modern-tour-0.1.5.tgz","_integrity":"sha512-X90vDmgSYOIEQFUsdFgQCrBdJhx84NIlvjLknu9UG8sbu/3o3c4/os2ctqP5qmWyxUec/gxKG+b4RmKSQG9uPg==","repository":{"url":"git+https://github.com/thangdevalone/modern-tour.git","type":"git"},"_npmVersion":"11.12.1","description":"A beautiful, animated product tour library for React powered by Framer Motion","directories":{},"sideEffects":["*.css"],"_nodeVersion":"24.14.1","dependencies":{"lucide-react":"^0.563.0","framer-motion":"^11.0.5","@floating-ui/react":"^0.27.17"},"_hasShrinkwrap":false,"devDependencies":{"clsx":"^2.1.1","vite":"^5.1.2","jsdom":"^24.0.0","react":"^18.2.0","eslint":"^8.56.0","vitest":"^1.3.0","react-dom":"^18.2.0","typescript":"^5.3.3","tailwindcss":"^4.1.18","@types/react":"^18.2.55","framer-motion":"^11.0.5","tailwind-merge":"^3.4.0","@changesets/cli":"^2.27.1","vite-plugin-dts":"^3.7.2","@types/react-dom":"^18.2.19","@tailwindcss/vite":"^4.1.18","@vitejs/plugin-react":"^4.2.1","@testing-library/react":"^14.2.1","@typescript-eslint/parser":"^7.0.1","eslint-plugin-react-hooks":"^4.6.0","vite-plugin-css-injected-by-js":"^3.4.0","@typescript-eslint/eslint-plugin":"^7.0.1"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/modern-tour_0.1.5_1776848298634_0.02191711592179213","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"modern-tour","version":"0.2.0","keywords":["react","tour","onboarding","product-tour","framer-motion","animation","walkthrough","guide","tooltip","spotlight"],"author":{"name":"thangdevalone"},"license":"MIT","_id":"modern-tour@0.2.0","maintainers":[{"name":"thangdevalone","email":"quangthangvtlg@gmail.com"}],"homepage":"https://tour.modern-ui.org","bugs":{"url":"https://github.com/thangdevalone/modern-tour/issues"},"dist":{"shasum":"b36aa0258dfe4084889bce8cb95c43180605a591","tarball":"https://registry.npmjs.org/modern-tour/-/modern-tour-0.2.0.tgz","fileCount":8,"integrity":"sha512-BJAbypjZIv68OBOd28lc7ToT8iLMqKhxD2kvfsi6Kvsvc7FlwoVWcJpxXByg+ns8UvjfSMi3x+y5QXwxKihdlQ==","signatures":[{"sig":"MEQCIH6GtWw5AVHKVhA55c6HbthhbWelKrZ5kRSn799BSDIcAiBKDHqfAfTyGmyamYxIyrycVb0tGS0uadVg7C9b02AaLg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/modern-tour@0.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":87944},"main":"./dist/index.cjs","type":"module","_from":"file:modern-tour-0.2.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"scripts":{"dev":"vite","lint":"eslint src --ext .ts,.tsx","test":"vitest","build":"tsc && vite build","release":"changeset publish","test:run":"vitest run","build:demo":"vite build --config vite.config.demo.ts"},"_npmUser":{"name":"thangdevalone","email":"quangthangvtlg@gmail.com"},"_resolved":"/tmp/ffdbab3ac232ce9120b21aa9e2c294b5/modern-tour-0.2.0.tgz","_integrity":"sha512-BJAbypjZIv68OBOd28lc7ToT8iLMqKhxD2kvfsi6Kvsvc7FlwoVWcJpxXByg+ns8UvjfSMi3x+y5QXwxKihdlQ==","repository":{"url":"git+https://github.com/thangdevalone/modern-tour.git","type":"git"},"_npmVersion":"11.12.1","description":"A beautiful, animated product tour library for React powered by Framer Motion","directories":{},"sideEffects":["*.css"],"_nodeVersion":"24.14.1","dependencies":{"lucide-react":"^0.563.0","framer-motion":"^11.0.5"},"_hasShrinkwrap":false,"devDependencies":{"clsx":"^2.1.1","vite":"^5.1.2","jsdom":"^24.0.0","react":"^18.2.0","eslint":"^8.56.0","vitest":"^1.3.0","react-dom":"^18.2.0","typescript":"^5.3.3","tailwindcss":"^4.1.18","@types/react":"^18.2.55","framer-motion":"^11.0.5","tailwind-merge":"^3.4.0","@changesets/cli":"^2.27.1","vite-plugin-dts":"^3.7.2","@types/react-dom":"^18.2.19","@tailwindcss/vite":"^4.1.18","@vitejs/plugin-react":"^4.2.1","@testing-library/react":"^14.2.1","@typescript-eslint/parser":"^7.0.1","eslint-plugin-react-hooks":"^4.6.0","vite-plugin-css-injected-by-js":"^3.4.0","@typescript-eslint/eslint-plugin":"^7.0.1"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/modern-tour_0.2.0_1776849311936_0.11922301228668175","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"modern-tour","version":"0.2.2","keywords":["react","tour","onboarding","product-tour","framer-motion","animation","walkthrough","guide","tooltip","spotlight"],"author":{"name":"thangdevalone"},"license":"MIT","_id":"modern-tour@0.2.2","maintainers":[{"name":"thangdevalone","email":"quangthangvtlg@gmail.com"}],"homepage":"https://tour.modern-ui.org","bugs":{"url":"https://github.com/thangdevalone/modern-tour/issues"},"dist":{"shasum":"e82c5ed9ce0471a8b54223a0a44f21cafccdc686","tarball":"https://registry.npmjs.org/modern-tour/-/modern-tour-0.2.2.tgz","fileCount":8,"integrity":"sha512-pzkdG+XA+DlrDhYsdE4Me7Gsn656GcQ3E63JkX2Oa1+/vUFTfcO7LEiY232p6RMWFx2eJ7QLDaQ+BN/ppHLvHg==","signatures":[{"sig":"MEUCIADZXT8iIn3/FcmH2z0SZZR7MreLM9mTkimDPUMdWHYaAiEA88cNpdP0jwfjxVdA3kP2SdGDkwc9/zijxWVjMPWAmiE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/modern-tour@0.2.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":88203},"main":"./dist/index.cjs","type":"module","_from":"file:modern-tour-0.2.2.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"scripts":{"dev":"vite","lint":"eslint src --ext .ts,.tsx","test":"vitest","build":"tsc && vite build","release":"changeset publish","test:run":"vitest run","build:demo":"vite build --config vite.config.demo.ts"},"_npmUser":{"name":"thangdevalone","email":"quangthangvtlg@gmail.com"},"_resolved":"/tmp/c464a91ff1f00fe19c54a9a93e23b5df/modern-tour-0.2.2.tgz","_integrity":"sha512-pzkdG+XA+DlrDhYsdE4Me7Gsn656GcQ3E63JkX2Oa1+/vUFTfcO7LEiY232p6RMWFx2eJ7QLDaQ+BN/ppHLvHg==","repository":{"url":"git+https://github.com/thangdevalone/modern-tour.git","type":"git"},"_npmVersion":"11.14.1","description":"A beautiful, animated product tour library for React powered by Framer Motion","directories":{},"sideEffects":["*.css"],"_nodeVersion":"24.14.1","dependencies":{"lucide-react":"^0.563.0","framer-motion":"^11.0.5"},"_hasShrinkwrap":false,"devDependencies":{"clsx":"^2.1.1","vite":"^5.1.2","jsdom":"^24.0.0","react":"^18.2.0","eslint":"^8.56.0","vitest":"^1.3.0","react-dom":"^18.2.0","typescript":"^5.3.3","tailwindcss":"^4.1.18","@types/react":"^18.2.55","framer-motion":"^11.0.5","tailwind-merge":"^3.4.0","@changesets/cli":"^2.27.1","vite-plugin-dts":"^3.7.2","@types/react-dom":"^18.2.19","@tailwindcss/vite":"^4.1.18","@vitejs/plugin-react":"^4.2.1","@testing-library/react":"^14.2.1","@typescript-eslint/parser":"^7.0.1","eslint-plugin-react-hooks":"^4.6.0","vite-plugin-css-injected-by-js":"^3.4.0","@typescript-eslint/eslint-plugin":"^7.0.1"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/modern-tour_0.2.2_1778468727693_0.2530140962806966","host":"s3://npm-registry-packages-npm-production"}},"0.2.3":{"name":"modern-tour","version":"0.2.3","keywords":["react","tour","onboarding","product-tour","framer-motion","animation","walkthrough","guide","tooltip","spotlight"],"author":{"name":"thangdevalone"},"license":"MIT","_id":"modern-tour@0.2.3","maintainers":[{"name":"thangdevalone","email":"quangthangvtlg@gmail.com"}],"homepage":"https://tour.modern-ui.org","bugs":{"url":"https://github.com/thangdevalone/modern-tour/issues"},"dist":{"shasum":"f89590fc9e6460cbdedb421248290054e27a0093","tarball":"https://registry.npmjs.org/modern-tour/-/modern-tour-0.2.3.tgz","fileCount":8,"integrity":"sha512-UzBwy8F2qalPpK5eHBPRqnbVrvIaXd19kz65rQkVVr8GXhGeU6gJmDszYuP60E+AtLqYaQ/wMW/T3g0ws7FNnQ==","signatures":[{"sig":"MEQCIA/41tirZHVe4dZaGj1WWB6SQmQ4sKN/eCHNf1iCJAcjAiA5MbokQa6WOraDiWeZsRb/TJgE+UPHy826l4Oc4C8jpA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/modern-tour@0.2.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":88250},"main":"./dist/index.cjs","type":"module","_from":"file:modern-tour-0.2.3.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"scripts":{"dev":"vite","lint":"eslint src --ext .ts,.tsx","test":"vitest","build":"tsc && vite build","release":"changeset publish","test:run":"vitest run","build:demo":"vite build --config vite.config.demo.ts"},"_npmUser":{"name":"thangdevalone","email":"quangthangvtlg@gmail.com"},"_resolved":"/tmp/96bc9a4836cd3e2dd1a100d406c005aa/modern-tour-0.2.3.tgz","_integrity":"sha512-UzBwy8F2qalPpK5eHBPRqnbVrvIaXd19kz65rQkVVr8GXhGeU6gJmDszYuP60E+AtLqYaQ/wMW/T3g0ws7FNnQ==","repository":{"url":"git+https://github.com/thangdevalone/modern-tour.git","type":"git"},"_npmVersion":"11.14.1","description":"A beautiful, animated product tour library for React powered by Framer Motion","directories":{},"sideEffects":["*.css"],"_nodeVersion":"24.14.1","_hasShrinkwrap":false,"devDependencies":{"clsx":"^2.1.1","vite":"^5.1.2","jsdom":"^24.0.0","react":"^18.2.0","eslint":"^8.56.0","vitest":"^1.3.0","react-dom":"^18.2.0","typescript":"^5.3.3","tailwindcss":"^4.1.18","@types/react":"^18.2.55","framer-motion":"^11.0.5","tailwind-merge":"^3.4.0","@changesets/cli":"^2.27.1","vite-plugin-dts":"^3.7.2","@types/react-dom":"^18.2.19","@tailwindcss/vite":"^4.1.18","@vitejs/plugin-react":"^4.2.1","@testing-library/react":"^14.2.1","@typescript-eslint/parser":"^7.0.1","eslint-plugin-react-hooks":"^4.6.0","vite-plugin-css-injected-by-js":"^3.4.0","@typescript-eslint/eslint-plugin":"^7.0.1"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0","lucide-react":">=0.200.0","framer-motion":">=11.0.0"},"_npmOperationalInternal":{"tmp":"tmp/modern-tour_0.2.3_1778469001353_0.9209208161643778","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"modern-tour","version":"0.3.0","keywords":["react","tour","onboarding","product-tour","framer-motion","animation","walkthrough","guide","tooltip","spotlight"],"author":{"name":"thangdevalone"},"license":"MIT","_id":"modern-tour@0.3.0","maintainers":[{"name":"thangdevalone","email":"quangthangvtlg@gmail.com"}],"homepage":"https://tour.modern-ui.org","bugs":{"url":"https://github.com/thangdevalone/modern-tour/issues"},"dist":{"shasum":"be4c86b41e619880585a171899018adba04f7f5c","tarball":"https://registry.npmjs.org/modern-tour/-/modern-tour-0.3.0.tgz","fileCount":10,"integrity":"sha512-s2l+knnR600OXdPtCTN6LiX6oyLEzskKt9ata6s3+F+H0pQye7AlkcLOi4U8ykb+nJ4NmjT/FOIqng+vm+tYQA==","signatures":[{"sig":"MEQCIFqPnib9xdxYkc6RHq9mYKZxjlk8499bZtPnXtytQqbGAiAUxAsqVP9f8bl/V9oMsA5gTN2c3TK6ASMU4kev9T4c7Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/modern-tour@0.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":107565},"main":"./dist/index.cjs","type":"module","_from":"file:modern-tour-0.3.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"scripts":{"dev":"vite","lint":"eslint src --ext .ts,.tsx","test":"vitest","build":"tsc && vite build","release":"changeset publish","test:run":"vitest run","build:demo":"vite build --config vite.config.demo.ts"},"_npmUser":{"name":"thangdevalone","email":"quangthangvtlg@gmail.com"},"_resolved":"/tmp/f906c04e17b98114fbff1fb21ea5593d/modern-tour-0.3.0.tgz","_integrity":"sha512-s2l+knnR600OXdPtCTN6LiX6oyLEzskKt9ata6s3+F+H0pQye7AlkcLOi4U8ykb+nJ4NmjT/FOIqng+vm+tYQA==","repository":{"url":"git+https://github.com/thangdevalone/modern-tour.git","type":"git"},"_npmVersion":"11.17.0","description":"A beautiful, animated product tour library for React powered by Framer Motion","directories":{},"sideEffects":["*.css"],"_nodeVersion":"24.16.0","_hasShrinkwrap":false,"devDependencies":{"clsx":"^2.1.1","vite":"^5.1.2","jsdom":"^24.0.0","react":"^18.2.0","eslint":"^8.56.0","vitest":"^1.3.0","react-dom":"^18.2.0","typescript":"^5.3.3","tailwindcss":"^4.1.18","@types/react":"^18.2.55","framer-motion":"^11.0.5","tailwind-merge":"^3.4.0","@changesets/cli":"^2.27.1","vite-plugin-dts":"^3.7.2","@types/react-dom":"^18.2.19","@tailwindcss/vite":"^4.1.18","@vitejs/plugin-react":"^4.2.1","@testing-library/react":"^14.2.1","@typescript-eslint/parser":"^7.0.1","eslint-plugin-react-hooks":"^4.6.0","vite-plugin-css-injected-by-js":"^3.4.0","@typescript-eslint/eslint-plugin":"^7.0.1"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0","lucide-react":">=0.200.0","framer-motion":">=11.0.0"},"_npmOperationalInternal":{"tmp":"tmp/modern-tour_0.3.0_1781847747527_0.2581824763200673","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"modern-tour","version":"0.3.1","description":"A beautiful, animated product tour library for React powered by Framer Motion","type":"module","main":"./dist/index.cjs","module":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"sideEffects":["*.css"],"peerDependencies":{"framer-motion":">=11.0.0","lucide-react":">=0.200.0","react":">=18.0.0","react-dom":">=18.0.0"},"devDependencies":{"@changesets/cli":"^2.27.1","@tailwindcss/vite":"^4.1.18","@testing-library/react":"^14.2.1","@types/react":"^18.2.55","@types/react-dom":"^18.2.19","@typescript-eslint/eslint-plugin":"^7.0.1","@typescript-eslint/parser":"^7.0.1","@vitejs/plugin-react":"^4.2.1","clsx":"^2.1.1","eslint":"^8.56.0","eslint-plugin-react-hooks":"^4.6.0","framer-motion":"^11.0.5","jsdom":"^24.0.0","react":"^18.2.0","react-dom":"^18.2.0","tailwind-merge":"^3.4.0","tailwindcss":"^4.1.18","typescript":"^5.3.3","vite":"^5.1.2","vite-plugin-css-injected-by-js":"^3.4.0","vite-plugin-dts":"^3.7.2","vitest":"^1.3.0"},"keywords":["react","tour","onboarding","product-tour","framer-motion","animation","walkthrough","guide","tooltip","spotlight"],"author":{"name":"thangdevalone"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/thangdevalone/modern-tour.git"},"bugs":{"url":"https://github.com/thangdevalone/modern-tour/issues"},"homepage":"https://tour.modern-ui.org","scripts":{"dev":"vite","build":"tsc && vite build","build:demo":"vite build --config vite.config.demo.ts","test":"vitest","test:run":"vitest run","lint":"eslint src --ext .ts,.tsx","release":"changeset publish"},"_id":"modern-tour@0.3.1","_integrity":"sha512-smm7cJEted/k4alSymRjkYKIkHim9u6jVKIfc0a61COedbIEjHCvAPnurDB9+GNl3NIx3T/L9cIM3Vdx9iGMog==","_resolved":"/tmp/a1e739f91a551b4fa898afb47c6af9ef/modern-tour-0.3.1.tgz","_from":"file:modern-tour-0.3.1.tgz","_nodeVersion":"24.18.0","_npmVersion":"11.16.0","dist":{"integrity":"sha512-smm7cJEted/k4alSymRjkYKIkHim9u6jVKIfc0a61COedbIEjHCvAPnurDB9+GNl3NIx3T/L9cIM3Vdx9iGMog==","shasum":"5d4ae097c65621e704a16b972bcbbfe49cfba52e","tarball":"https://registry.npmjs.org/modern-tour/-/modern-tour-0.3.1.tgz","fileCount":10,"unpackedSize":107285,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/modern-tour@0.3.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCRKi2citFYZYo8lwXorAkPGS8obxEbkeQSsiK3uhuWxAIhAJ+cs9SxfBQmG5XoRoycUpC77Yve12lUSPJnBD/+PKrY"}]},"_npmUser":{"name":"thangdevalone","email":"quangthangvtlg@gmail.com"},"directories":{},"maintainers":[{"name":"thangdevalone","email":"quangthangvtlg@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/modern-tour_0.3.1_1784619038354_0.669529517960531"},"_hasShrinkwrap":false}},"time":{"created":"2026-02-05T06:39:40.434Z","modified":"2026-07-21T07:30:38.769Z","0.0.0":"2026-02-05T06:39:40.657Z","0.1.0":"2026-02-05T09:14:28.346Z","0.1.1":"2026-02-10T08:48:10.285Z","0.1.2":"2026-04-06T10:44:14.247Z","0.1.3":"2026-04-10T08:07:36.398Z","0.1.4":"2026-04-14T04:37:32.409Z","0.1.5":"2026-04-22T08:58:18.767Z","0.2.0":"2026-04-22T09:15:12.081Z","0.2.2":"2026-05-11T03:05:27.836Z","0.2.3":"2026-05-11T03:10:01.485Z","0.3.0":"2026-06-19T05:42:27.665Z","0.3.1":"2026-07-21T07:30:38.478Z"},"bugs":{"url":"https://github.com/thangdevalone/modern-tour/issues"},"author":{"name":"thangdevalone"},"license":"MIT","homepage":"https://tour.modern-ui.org","keywords":["react","tour","onboarding","product-tour","framer-motion","animation","walkthrough","guide","tooltip","spotlight"],"repository":{"type":"git","url":"git+https://github.com/thangdevalone/modern-tour.git"},"description":"A beautiful, animated product tour library for React powered by Framer Motion","maintainers":[{"name":"thangdevalone","email":"quangthangvtlg@gmail.com"}],"readme":"# Modern Tour\n\nA lightweight, animated product tour and onboarding library for React. Built with Framer Motion for buttery-smooth transitions, smart positioning, and a stellar developer experience.\n\n[![npm version](https://badge.fury.io/js/modern-tour.svg)](https://badge.fury.io/js/modern-tour)\n[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)\n\n![Modern Tour Preview](/shoes.png) <!-- Gợi ý: Bạn có thể thay đường dẫn ảnh demo thật vào đây -->\n\n## Features\n\n- **Smooth Animations:** Powered by `framer-motion` with spring physics.\n- **Smart Auto-Positioning:** Tooltip dynamically recalculates coordinates, bounds, and automatically flips if it touches viewport edges.\n- **Lazy Loading Support:** Seamlessly handles elements that are rendered asynchronously or lazy-loaded via `MutationObserver` without manual re-triggers.\n- **Headless Override:** Render your completely custom React components inside the tooltip while keeping the smart positioning.\n- **Keyboard Navigation:** Navigate seamlessly with `Arrow Keys`, `Enter` and close with `Escape`.\n- **Zero-CSS Import:** Styles are auto-injected. Just override CSS variables to theme it!\n- **Cross-Page Tours:** Continues the tour even when the route changes.\n\n---\n\n## Installation\n\n```bash\nnpm install modern-tour\n```\n\n*(Note: `framer-motion` and `lucide-react` are peer/internal dependencies, make sure you have `react` installed)*\n\n---\n\n## Quick Start\n\n1. Wrap your application with the `<TourProvider>` and define your steps.\n2. Use the `useTour` hook anywhere inside to control the tour.\n\n```tsx\nimport { TourProvider, useTour } from 'modern-tour';\n\nconst steps = [\n  { target: '#btn-1', content: 'Welcome to our platform!' },\n  { target: '#btn-2', title: 'Settings', content: 'Configure your preferences here.' },\n];\n\nfunction YourApp() {\n  const { start } = useTour();\n  \n  return (\n    <div>\n      <button id=\"btn-1\" onClick={() => start()}>Start Tour</button>\n      <button id=\"btn-2\">Settings</button>\n    </div>\n  );\n}\n\nfunction Root() {\n  return (\n    <TourProvider options={{ steps, animation: 'smooth' }}>\n      <YourApp />\n    </TourProvider>\n  );\n}\n```\n\n---\n\n## Theming & Styling\n\nModern Tour uses pure CSS variables for theming. You don't need to import any CSS files. Just override the variables in your global CSS.\n\n```css\n:root {\n  /* Default Minimal Style */\n  --tour-bg: #ffffff;\n  --tour-text: #09090b;\n  --tour-text-secondary: #71717a;\n  --tour-primary: #18181b;\n  --tour-primary-foreground: #fafafa;\n  --tour-border: #e4e4e7;\n  --tour-radius: 0.5rem;\n  --tour-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1);\n}\n\n/* Dark Mode Example */\n/* Apply this class to your root element or <body>: <body className=\"dark\"> */\n.dark {\n  --tour-bg: #09090b;\n  --tour-text: #fafafa;\n  --tour-primary: #fafafa;\n  --tour-primary-foreground: #18181b;\n  --tour-border: #27272a;\n}\n\n/* Neo-Brutalism Example */\n/* Apply this class to a wrapper or <body> to instantly transform the look: <body className=\"neo-theme\"> */\n.neo-theme {\n  --tour-bg: #fffbf0;\n  --tour-text: #000;\n  --tour-border: #000;\n  --tour-border-width: 3px;\n  --tour-radius: 0px;\n  --tour-shadow: 6px 6px 0px #000000;\n}\n```\n\n### CSS Classes Reference\n\nUse these classes to customize individual parts of the tour UI:\n\n| Element | CSS Class |\n|---------|-----------|\n| Next / \"Got it!\" button | `.framer-tour-btn-primary` |\n| Back button | `.framer-tour-btn-secondary` |\n| Close (×) button | `.framer-tour-close` |\n| All buttons (shared base) | `.framer-tour-btn` |\n| Tooltip content wrapper | `.framer-tour-content` |\n| Step title | `.framer-tour-title` |\n| Step description | `.framer-tour-description` |\n| Footer row | `.framer-tour-footer` |\n| Progress text (\"Step 1 of 3\") | `.framer-tour-progress` |\n| Navigation button group | `.framer-tour-navigation` |\n\nExample — make the Next/\"Got it!\" button blue:\n\n```css\n.framer-tour-btn-primary {\n  background: #2563eb !important;\n  color: #ffffff !important;\n}\n```\n\n---\n\n## Advanced Usage\n\n### 1. Headless Component Override\nIf tweaking CSS variables isn't enough, you can entirely override the content of the tooltip with your own React component. \n\n```tsx\nimport { TourProvider, useTour } from 'modern-tour';\n\nfunction MyCustomTooltip() {\n  // Access tour state and controls natively\n  const { step, currentStep, totalSteps, next, prev, stop } = useTour();\n\n  return (\n    <div className=\"custom-tooltip bg-black text-white p-4 rounded-xl\">\n      <h2>{step?.title}</h2>\n      <p>{step?.content}</p>\n      <div className=\"flex justify-between mt-4\">\n         <span>{currentStep + 1} / {totalSteps}</span>\n         <div className=\"space-x-2\">\n            <button onClick={prev}>Back</button>\n            <button onClick={next}>Next</button>\n            <button onClick={stop}>Close</button>\n         </div>\n      </div>\n    </div>\n  );\n}\n\n// In your root:\n<TourProvider \n  options={{ \n    steps,\n    components: { TooltipContent: MyCustomTooltip } \n  }}\n>\n  <App />\n</TourProvider>\n```\n\n### 2. Waiting for Lazy-Loaded Components\nIf your `target` element is rendered lazily (e.g., inside a tab or loaded via network), Modern Tour uses `MutationObserver` to instantly catch it when it mounts.\n\nIf your component takes longer than 3 seconds to load, increase the timeout:\n```tsx\n<TourProvider options={{ \n  steps, \n  waitForTargetTimeout: 10000 // Waits up to 10 seconds before aborting\n}}>\n```\n\n### 3. Cross-Page Tours\nTo create a tour that spans multiple routes/pages, assign a `route` to your step and handle the navigation using `onStepChange`:\n\n```tsx\n<TourProvider options={{\n  steps: [\n    { target: '#home-btn', content: 'We are on Home' },\n    { target: '#settings-btn', content: 'We are on Settings', route: '/settings' }\n  ],\n  onStepChange: (stepIndex) => {\n    const nextRoute = steps[stepIndex]?.route;\n    if (nextRoute) {\n       navigate(nextRoute); // Using React Router or Next.js router\n    }\n  }\n}}>\n```\n\n---\n\n## API Reference\n\n### `TourOptions`\n\n| Property | Type | Default | Description |\n|----------|------|---------|-------------|\n| `steps` | `TourStep[]` | `[]` | Array of steps defining your tour. |\n| `autoStart` | `boolean` | `false` | Start tour automatically when provider mounts. |\n| `animation` | `string` / `Config` | `'smooth'` | Preset (`fade`, `scale`, `slide`, `bounce`, `smooth`) or custom Framer Motion config. |\n| `components` | `Object` | `undefined` | Custom component overrides (e.g. `{ TooltipContent: MyReactComponent }`). |\n| `waitForTargetTimeout` | `number` | `3000` | Max milliseconds to wait for a lazy-loaded target element. |\n| `stepDelay` | `number` | `0` | Delay in ms before measuring target position. Useful when targets are inside animated containers (dropdowns, modals). |\n| `keyboardNavigation` | `boolean` | `true` | Allow `ArrowLeft`, `ArrowRight`, `Enter`, and `Escape` controls. |\n| `closeOnOverlayClick` | `boolean` | `true` | Close tour when user clicks the dark background. |\n| `spotlightPadding` | `number` | `8` | Pixels of padding around the highlighted target element. |\n| `labels` | `Object` | `{...}` | Override default text for buttons (`next`, `prev`, `skip`, `finish`, `close`). |\n\n### `TourStep`\n\n| Property | Type | Description |\n|----------|------|-------------|\n| `target` | `string` | **Required.** CSS Selector for the element to highlight (e.g., `#my-btn`, `.nav-item`). |\n| `content` | `ReactNode` | **Required.** Body content of the step. |\n| `title` | `ReactNode` | Optional heading text. |\n| `position` | `string` | Preferred placement (`top`, `bottom`, `left`, `right` and `-start`/`-end` variations). Defaults to `bottom`. |\n| `route` | `string` | Helpful meta-field to trigger route changes on specific steps. |\n| `delay` | `number` | Delay in ms before positioning tooltip after target is found. Overrides global `stepDelay`. Useful for animated dropdowns/modals. |\n| `spotlightPadding` | `number` | Step-specific padding, overrides the global setting. |\n| `onActive` | `() => void` | Callback triggered exactly when this step becomes visible. |\n| `onLeave` | `() => void` | Callback triggered when leaving this step. |\n\n### 4. Touring Animated UI Elements (Dropdowns, Modals)\nIf your target element is inside a dropdown, modal, or accordion that has an opening animation, the tooltip might position incorrectly because the element hasn't finished animating. Use `stepDelay` or per-step `delay` to wait:\n\n```tsx\n<TourProvider options={{\n  steps: [\n    { target: '#menu-btn', content: 'Click to open the menu' },\n    {\n      target: '#menu-item-settings',\n      content: 'Here are your settings',\n      delay: 300, // Wait 300ms for dropdown animation to finish\n    },\n  ],\n  // Or set globally for all steps:\n  // stepDelay: 300,\n  onStepChange: (stepIndex) => {\n    if (stepIndex === 1) openDropdown(); // Trigger the dropdown\n  }\n}}>\n```\n\n---\n\n## Contributing\n\nContributions, issues and feature requests are welcome!\nFeel free to check [issues page](https://github.com/thangdevalone/modern-tour/issues).\n\n## License\n\nThis project is [MIT](https://opensource.org/licenses/MIT) licensed.\n","readmeFilename":"README.md"}