{"_id":"@aperovn/funnel-sdk","_rev":"8-b3d7b8f475ff767acb189723876db76c","name":"@aperovn/funnel-sdk","dist-tags":{"latest":"1.1.0"},"versions":{"0.1.0":{"name":"@aperovn/funnel-sdk","version":"0.1.0","_id":"@aperovn/funnel-sdk@0.1.0","maintainers":[{"name":"coderhanoi","email":"longlehoang2013@gmail.com"}],"dist":{"shasum":"dc343355e5bebb6ab299e0a1feb49e5074f9f90c","tarball":"https://registry.npmjs.org/@aperovn/funnel-sdk/-/funnel-sdk-0.1.0.tgz","fileCount":8,"integrity":"sha512-1oBE7U2TsiV79YFYWI/uZNIIU4eHWZ2R4ODV+BrHY7J4czyEe9bCH1I1O96wuPTbNLGG5C7VMq9yPVKoHJyDZw==","signatures":[{"sig":"MEQCIFraLPKagnCt1bsRCxB0qZQktOMmC7tkG0zyQJ23f8LkAiACaxTOKotBEg/9ZjICNWXKk4zUmSj70g1wyfTwftZ9Qg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":391815},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./theme":"./dist/af-theme.css"},"gitHead":"8bee94181edb4fa8bbde5571dd2d8448c364563e","scripts":{"dev":"tsup --watch","test":"bun test","build":"tsup","typecheck":"tsc --noEmit"},"_npmUser":{"name":"coderhanoi","email":"longlehoang2013@gmail.com"},"_npmVersion":"11.8.0","description":"React component library for AperoFunnel - build conversion funnels with automatic analytics","directories":{},"_nodeVersion":"24.13.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.0","react":"^18.3.0","react-dom":"^18.3.0","typescript":"^5.6.0","@types/react":"^18.3.0","@types/react-dom":"^18.3.0"},"peerDependencies":{"next":">=14","react":">=18","react-dom":">=18"},"_npmOperationalInternal":{"tmp":"tmp/funnel-sdk_0.1.0_1778062430245_0.020382441482463598","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@aperovn/funnel-sdk","version":"0.1.1","_id":"@aperovn/funnel-sdk@0.1.1","maintainers":[{"name":"coderhanoi","email":"longlehoang2013@gmail.com"}],"dist":{"shasum":"40fdd683dbeaa6d6b38aeabfcf46c09ce5cc0050","tarball":"https://registry.npmjs.org/@aperovn/funnel-sdk/-/funnel-sdk-0.1.1.tgz","fileCount":8,"integrity":"sha512-RV1q5JcFLhz5cMyZhwIQTdT6M/pdQDCqPW2pAzfaBFbKx6D5wBnKlOVcoKnNYZxixv4lg53Uov3o+3MHakM5aQ==","signatures":[{"sig":"MEUCIAcSHcCPyN96C9KD+29to98U2rgNCScHC6B4qIm6Drg0AiEAvCERvOJQqFnGr867k70Vi+rAFW6nyZh5+KgEXM3wcs8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":391831},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./theme":"./dist/af-theme.css"},"gitHead":"8bee94181edb4fa8bbde5571dd2d8448c364563e","scripts":{"dev":"tsup --watch","test":"bun test","build":"tsup","typecheck":"tsc --noEmit"},"_npmUser":{"name":"coderhanoi","email":"longlehoang2013@gmail.com"},"_npmVersion":"11.8.0","description":"React component library for AperoFunnel - build conversion funnels with automatic analytics","directories":{},"_nodeVersion":"24.13.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.0","react":"^18.3.0","react-dom":"^18.3.0","typescript":"^5.6.0","@types/react":"^18.3.0","@types/react-dom":"^18.3.0"},"peerDependencies":{"next":">=14","react":">=18","react-dom":">=18"},"_npmOperationalInternal":{"tmp":"tmp/funnel-sdk_0.1.1_1778067095129_0.012698936401683625","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@aperovn/funnel-sdk","version":"0.1.2","_id":"@aperovn/funnel-sdk@0.1.2","maintainers":[{"name":"coderhanoi","email":"longlehoang2013@gmail.com"}],"dist":{"shasum":"e152a70bb5b2841d4affc9172d3cc008c10c77ae","tarball":"https://registry.npmjs.org/@aperovn/funnel-sdk/-/funnel-sdk-0.1.2.tgz","fileCount":8,"integrity":"sha512-lf19h3rNUkE2qcvhpHe8mAedppa9eMY1vWyNVkHhBD9femdP8wtwZb4swmQrI2Jd3uMPKTd5dg/0lkws+cXmvg==","signatures":[{"sig":"MEUCIAba9BYK1T7tyocngobJ/FZulsylMKYRyxFY1WaInHmaAiEApKTmALULqz3xgquOYHnhr5+YDY2M5V+MB2s/rkqWBiU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":391831},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./theme":"./dist/af-theme.css"},"gitHead":"494ad285ccdc690e4023c51af0a24f5936967c39","scripts":{"dev":"tsup --watch","test":"bun test","build":"tsup","typecheck":"tsc --noEmit"},"_npmUser":{"name":"coderhanoi","email":"longlehoang2013@gmail.com"},"_npmVersion":"11.8.0","description":"React component library for AperoFunnel - build conversion funnels with automatic analytics","directories":{},"_nodeVersion":"24.13.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.0","react":"^18.3.0","react-dom":"^18.3.0","typescript":"^5.6.0","@types/react":"^18.3.0","@types/react-dom":"^18.3.0"},"peerDependencies":{"next":">=14","react":">=18","react-dom":">=18"},"_npmOperationalInternal":{"tmp":"tmp/funnel-sdk_0.1.2_1778088042905_0.18866621316810162","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@aperovn/funnel-sdk","version":"0.1.3","_id":"@aperovn/funnel-sdk@0.1.3","maintainers":[{"name":"coderhanoi","email":"longlehoang2013@gmail.com"}],"dist":{"shasum":"3308dc0ba9456f5f0cf15007c1b75d84e7a9051a","tarball":"https://registry.npmjs.org/@aperovn/funnel-sdk/-/funnel-sdk-0.1.3.tgz","fileCount":8,"integrity":"sha512-Ltu7Ek3qkU4DXh0aMpuujIR8b/znfCM1Z04ePyHccvEeUrLIKeIQWcGAHzjF0Puia0utNbo0xmtK5N6Jh5C+QQ==","signatures":[{"sig":"MEUCIQCsC3m55EUXCoxujUrQEr6wccvnZb03xI90RXRvcTb97QIgU/aTZTGeukT5N7yhZKxMB8YQ/UQRrwf0nlxxhK4SkCE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":391831},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./theme":"./dist/af-theme.css"},"gitHead":"494ad285ccdc690e4023c51af0a24f5936967c39","scripts":{"dev":"tsup --watch","test":"bun test","build":"tsup","typecheck":"tsc --noEmit"},"_npmUser":{"name":"coderhanoi","email":"longlehoang2013@gmail.com"},"_npmVersion":"11.8.0","description":"React component library for AperoFunnel - build conversion funnels with automatic analytics","directories":{},"_nodeVersion":"24.13.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.0","react":"^18.3.0","react-dom":"^18.3.0","typescript":"^5.6.0","@types/react":"^18.3.0","@types/react-dom":"^18.3.0"},"peerDependencies":{"next":">=14","react":">=18","react-dom":">=18"},"_npmOperationalInternal":{"tmp":"tmp/funnel-sdk_0.1.3_1778088062519_0.17313077334547877","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@aperovn/funnel-sdk","version":"0.2.0","_id":"@aperovn/funnel-sdk@0.2.0","maintainers":[{"name":"coderhanoi","email":"longlehoang2013@gmail.com"}],"dist":{"shasum":"d796373b1a3fb0dfc6086b099ad074a25b03b8d1","tarball":"https://registry.npmjs.org/@aperovn/funnel-sdk/-/funnel-sdk-0.2.0.tgz","fileCount":8,"integrity":"sha512-QSWhu3iCANesVtKRCq+sWuvrTidQ4dUWV3pXADIZRwdZcm4y1x2mS0ASShjSR+OiUrZeyDgPvlbi/zQfwfiEIQ==","signatures":[{"sig":"MEQCIEIoVtRaLDuqg58fHnn0BeC+AwZ8saUlE2UG3zpVspLNAiATtBKfPNMYqtbAF1GgcioGif9gkHzKv3V4QjvnXl0ZTA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":395702},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./theme":"./dist/af-theme.css"},"gitHead":"11542db988b2e1ab0dfda0e6ddfaab7165e9b499","scripts":{"dev":"tsup --watch","test":"bun test","build":"tsup","typecheck":"tsc --noEmit"},"_npmUser":{"name":"coderhanoi","email":"longlehoang2013@gmail.com"},"_npmVersion":"11.8.0","description":"React component library for AperoFunnel - build conversion funnels with automatic analytics","directories":{},"_nodeVersion":"24.13.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.0","react":"^18.3.0","react-dom":"^18.3.0","typescript":"^5.6.0","@types/react":"^18.3.0","@types/react-dom":"^18.3.0"},"peerDependencies":{"next":">=14","react":">=18","react-dom":">=18"},"_npmOperationalInternal":{"tmp":"tmp/funnel-sdk_0.2.0_1778225832467_0.4040442396206343","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"@aperovn/funnel-sdk","version":"1.0.0","_id":"@aperovn/funnel-sdk@1.0.0","maintainers":[{"name":"coderhanoi","email":"longlehoang2013@gmail.com"}],"dist":{"shasum":"4545d4f4a7b135945d416f2a9f9885d30d78c979","tarball":"https://registry.npmjs.org/@aperovn/funnel-sdk/-/funnel-sdk-1.0.0.tgz","fileCount":9,"integrity":"sha512-HVanRcXPd6LFdlRrZE2VAs7xh9hJ1bm4r0dPq/v4O949jXjVHLcubAh8gO5p+X+4bHqOba7axPgNww832KUBOQ==","signatures":[{"sig":"MEUCIHCYukeuPHIeyCdgxI9CIjuxWe/Bc4zBlIfiDTv4RmtYAiEAhpHxVkIzCkzTIvqgHMXwJqMcQQjG0wo16fCB4bWteJI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":685443},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./theme":"./dist/af-theme.css"},"gitHead":"4f8cbf8c16628bce88f9e1bdddf84c6a69fca2cb","scripts":{"dev":"tsup --watch","test":"bun test","build":"tsup","typecheck":"tsc --noEmit"},"_npmUser":{"name":"coderhanoi","email":"longlehoang2013@gmail.com"},"_npmVersion":"11.8.0","description":"React component library for AperoFunnel - build conversion funnels with automatic analytics","directories":{},"_nodeVersion":"24.13.1","dependencies":{"class-variance-authority":"0.7.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.0","react":"^18.3.0","react-dom":"^18.3.0","typescript":"^5.6.0","@types/react":"^18.3.0","@types/react-dom":"^18.3.0","@stripe/stripe-js":"^4.5.0","@stripe/react-stripe-js":"^3.3.0"},"peerDependencies":{"next":">=14","react":">=18","react-dom":">=18","@stripe/stripe-js":"^1.54 || ^2 || ^3 || ^4","@stripe/react-stripe-js":"^2 || ^3"},"peerDependenciesMeta":{"@stripe/stripe-js":{"optional":true},"@stripe/react-stripe-js":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/funnel-sdk_1.0.0_1778496857921_0.9351499411105268","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@aperovn/funnel-sdk","version":"1.0.1","_id":"@aperovn/funnel-sdk@1.0.1","maintainers":[{"name":"coderhanoi","email":"longlehoang2013@gmail.com"}],"dist":{"shasum":"32a65092779ba3147fb71e1885ab25108668d925","tarball":"https://registry.npmjs.org/@aperovn/funnel-sdk/-/funnel-sdk-1.0.1.tgz","fileCount":10,"integrity":"sha512-4egQt64CJocC6jx28V64OJBxmKvzwvSMRQfeJuV/IuWS6D5+yLw2QMYYyhoN25WrQ94RgOxBVBZH4Xm9WOAxxg==","signatures":[{"sig":"MEYCIQDIM328IydvpnQLsq40V8m90rnngc0ba+X/2QcvwUVrKwIhAPUTgQUoRg/zrlrUTKqUg+Toiwp28ozdxs0tYeb6ldfn","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":690375},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./theme":"./dist/af-theme.css"},"gitHead":"4f8cbf8c16628bce88f9e1bdddf84c6a69fca2cb","scripts":{"dev":"tsup --watch","test":"bun test","build":"tsup","typecheck":"tsc --noEmit"},"_npmUser":{"name":"coderhanoi","email":"longlehoang2013@gmail.com"},"_npmVersion":"11.8.0","description":"React component library for AperoFunnel - build conversion funnels with automatic analytics","directories":{},"_nodeVersion":"24.13.1","dependencies":{"class-variance-authority":"0.7.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.0","react":"^18.3.0","react-dom":"^18.3.0","typescript":"^5.6.0","@types/react":"^18.3.0","@types/react-dom":"^18.3.0","@stripe/stripe-js":"^4.5.0","@stripe/react-stripe-js":"^3.3.0"},"peerDependencies":{"next":">=14","react":">=18","react-dom":">=18","@stripe/stripe-js":"^1.54 || ^2 || ^3 || ^4","@stripe/react-stripe-js":"^2 || ^3"},"peerDependenciesMeta":{"@stripe/stripe-js":{"optional":true},"@stripe/react-stripe-js":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/funnel-sdk_1.0.1_1778496996415_0.05801684542445451","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@aperovn/funnel-sdk","version":"1.1.0","description":"React component library for AperoFunnel - build conversion funnels with automatic analytics","type":"module","main":"./dist/index.cjs","module":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./theme":"./dist/af-theme.css"},"scripts":{"build":"tsup","dev":"tsup --watch","typecheck":"tsc --noEmit","test":"bun test"},"peerDependencies":{"react":">=18","react-dom":">=18","next":">=14","@stripe/stripe-js":"^1.54 || ^2 || ^3 || ^4","@stripe/react-stripe-js":"^2 || ^3"},"devDependencies":{"@stripe/react-stripe-js":"^3.3.0","@stripe/stripe-js":"^4.5.0","@types/react":"^18.3.0","@types/react-dom":"^18.3.0","react":"^18.3.0","react-dom":"^18.3.0","tsup":"^8.3.0","typescript":"^5.6.0"},"publishConfig":{"access":"public"},"peerDependenciesMeta":{"@stripe/stripe-js":{"optional":true},"@stripe/react-stripe-js":{"optional":true}},"dependencies":{"class-variance-authority":"0.7.1"},"gitHead":"8ddcf9f967c6f21a6ca581e9820587c2aa1b5d2d","_id":"@aperovn/funnel-sdk@1.1.0","_nodeVersion":"24.13.1","_npmVersion":"11.8.0","dist":{"integrity":"sha512-/fKC0kH4MZGDjjln9YUiNyYA5N0WnjVcM/0+RjDwm9TuxEmjeHcKIZQ+OY2ojlmmj5+b89Mjmp8mgPZiPpw7fQ==","shasum":"25fee3503459a28faf4e7df7e5f582ca187487be","tarball":"https://registry.npmjs.org/@aperovn/funnel-sdk/-/funnel-sdk-1.1.0.tgz","fileCount":10,"unpackedSize":699291,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDLr4Pcjj9Rb409zwXDG0ME4m/jsE023Y2Okyv8B9xLrQIhAIXWNtqJ6HSCz7vSjbCKSIDbQZG1taP8i46YGbvgYZ1r"}]},"_npmUser":{"name":"coderhanoi","email":"longlehoang2013@gmail.com"},"directories":{},"maintainers":[{"name":"coderhanoi","email":"longlehoang2013@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/funnel-sdk_1.1.0_1780665691600_0.8271699619755333"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-06T10:13:50.137Z","modified":"2026-06-05T13:21:31.897Z","0.1.0":"2026-05-06T10:13:50.394Z","0.1.1":"2026-05-06T11:31:35.282Z","0.1.2":"2026-05-06T17:20:43.074Z","0.1.3":"2026-05-06T17:21:02.697Z","0.2.0":"2026-05-08T07:37:12.618Z","1.0.0":"2026-05-11T10:54:18.103Z","1.0.1":"2026-05-11T10:56:36.544Z","1.1.0":"2026-06-05T13:21:31.758Z"},"description":"React component library for AperoFunnel - build conversion funnels with automatic analytics","maintainers":[{"name":"coderhanoi","email":"longlehoang2013@gmail.com"}],"readme":"# @aperovn/funnel-sdk\n\nReact component library for building conversion funnels with automatic analytics, screen-based routing, and a themable design system.\n\n[![npm](https://img.shields.io/npm/v/@aperovn/funnel-sdk.svg)](https://www.npmjs.com/package/@aperovn/funnel-sdk)\n\n## Features\n\n- **Screen-based router** — declarative funnel flows with built-in transitions\n- **Session tracking** — pluggable adapter pattern; default emits screen-view/answer/conversion events\n- **Design system** — 40+ components (quizzes, paywalls, forms, auth, charts, animations)\n- **Theme tokens** — colors, spacing, typography, motion, shadows, radius — runtime-swappable\n- **Stripe integration** — Payment Element + checkout flow primitives (optional peer)\n- **Zero-config animations** — transition presets, reduced-motion aware, gesture hooks\n\n## Install\n\n```bash\nnpm install @aperovn/funnel-sdk\n# or\nbun add @aperovn/funnel-sdk\n```\n\n### Peer dependencies\n\n| Peer | Required | Notes |\n|------|----------|-------|\n| `react` `>=18` | yes | |\n| `react-dom` `>=18` | yes | |\n| `next` `>=14` | yes | App Router supported |\n| `@stripe/stripe-js` `^1.54 \\|\\| ^2 \\|\\| ^3 \\|\\| ^4` | optional | only if using `CheckoutFlow` / `PaymentForm` |\n| `@stripe/react-stripe-js` `^2 \\|\\| ^3` | optional | same as above |\n\n## Quick start\n\n```tsx\nimport {\n  FunnelProvider,\n  FunnelRouter,\n  ThemeProvider,\n  Screen,\n  Text,\n  Button,\n} from \"@aperovn/funnel-sdk\";\nimport \"@aperovn/funnel-sdk/theme\";\n\nconst screens = {\n  welcome: {\n    component: () => (\n      <Screen>\n        <Text type=\"heading\">Welcome</Text>\n        <Button action={{ type: \"navigate\", to: \"quiz\" }}>Start</Button>\n      </Screen>\n    ),\n  },\n  quiz: {\n    component: () => (\n      <Screen>\n        <Text>Question 1...</Text>\n      </Screen>\n    ),\n  },\n};\n\nexport default function App() {\n  return (\n    <ThemeProvider>\n      <FunnelProvider funnelSlug=\"my-funnel\">\n        <FunnelRouter screens={screens} initialScreen=\"welcome\" />\n      </FunnelProvider>\n    </ThemeProvider>\n  );\n}\n```\n\n## Components\n\n### Layout & containers\n`Screen` · `Rows` · `Columns` · `Carousel` · `Popup`\n\n### Typography & media\n`Text` · `Image` · `Video` · `Chart` · `RawHTML`\n\n### Quiz & options\n`Options` · `QuizSimple` · `QuizMultipleChoice` · `QuizEmoji` · `QuizImagePicker` · `QuizIcons` · `QuizCoverImages` · `Rating` · `PopupQuestion`\n\n### Inputs\n`Input` · `DatePicker`\n\n### Buttons & timer\n`Button` · `PulseButton` · `CountdownButton` · `OAuthButton` · `Timer` · `CheckoutButton`\n\n### Auth\n`EmailForm` · `EmailOAuth` · `OAuthButtons`\n\n### Loaders\n`Spinner` · `Loader` · `Processing`\n\n### Paywall & checkout\n`PlanPickerSimple` · `PlanPickerComposite` · `TrialPricePicker` · `WalletButton` · `CookieConsent` · `DeeplinkHandoff` · `CheckoutFlow` · `PaymentForm`\n\n### Engagement\n`Reviews` · `CustomerCarousel` · `FAQ`\n\n## Routing\n\n```tsx\nimport { FunnelRouter, useRouter } from \"@aperovn/funnel-sdk\";\n\nfunction NextButton() {\n  const { goTo, current } = useRouter();\n  return <button onClick={() => goTo(\"next-screen\")}>Next</button>;\n}\n```\n\nFlow & transition config is declarative — see `FlowsConfig` and `TransitionsConfig` types for the full surface.\n\n## Session tracking\n\nDefault adapter emits events to your analytics endpoint. Swap it via `SessionProvider`:\n\n```tsx\nimport { SessionProvider, DefaultSessionAdapter, type SessionAdapter } from \"@aperovn/funnel-sdk\";\n\nconst myAdapter: SessionAdapter = {\n  init: async (opts) => { /* ... */ },\n  track: async (event) => { /* send to your backend */ },\n  end: async () => { /* ... */ },\n};\n\n<SessionProvider adapter={myAdapter}>\n  {/* funnel */}\n</SessionProvider>\n```\n\n## Theme\n\nImport the stylesheet once at app root:\n\n```tsx\nimport \"@aperovn/funnel-sdk/theme\";\n```\n\nUse `ThemeProvider` to switch schemes at runtime; tokens (`colors`, `spacing`, `typography`, `motion`, `shadows`, `radius`, `zIndex`) are exported for programmatic access.\n\n```tsx\nimport { ThemeProvider, useTheme } from \"@aperovn/funnel-sdk\";\n\nfunction ThemeToggle() {\n  const { scheme, setScheme } = useTheme();\n  return <button onClick={() => setScheme(scheme === \"light\" ? \"dark\" : \"light\")}>Toggle</button>;\n}\n```\n\n## Animations\n\n```tsx\nimport { ScreenTransition, transitionPresets, useReducedMotion } from \"@aperovn/funnel-sdk\";\n\n<ScreenTransition preset=\"slide-left\" duration={300}>\n  {/* screen content */}\n</ScreenTransition>\n```\n\nHooks: `usePressAnimation`, `useHoverAnimation`, `useSwipe`, `useReducedMotion`.\n\n## Bundle size\n\n| Bundle | Size |\n|--------|------|\n| ESM    | ~57 kB minified |\n| CJS    | ~60 kB minified |\n| Theme CSS | ~26 kB |\n| Tokens CSS | ~6 kB |\n\nTree-shakeable — only imported components ship.\n\n## TypeScript\n\nFirst-class TypeScript support. All component props, action types, theme tokens, and router config are typed.\n\n## License\n\nProprietary — © Apero Group. Contact the maintainer for licensing terms.\n","readmeFilename":"README.md"}