{"_id":"@akshatbuilds/sonix","_rev":"5-7420082f673481587e3fcb6018a4e7a8","name":"@akshatbuilds/sonix","dist-tags":{"latest":"1.0.4"},"versions":{"1.0.0":{"name":"@akshatbuilds/sonix","version":"1.0.0","keywords":["sound","audio","ui","ux","web-audio","sound-effects","react","nextjs"],"license":"MIT","_id":"@akshatbuilds/sonix@1.0.0","maintainers":[{"name":"akshatbuilds","email":"akshatsing11@gmail.com"}],"homepage":"https://github.com/abhi-yo/sound-library#readme","bugs":{"url":"https://github.com/abhi-yo/sound-library/issues"},"bin":{"sonix":"cli/index.mjs"},"dist":{"shasum":"3389a71f39ba0d6f1a4e15a0cda184fbb82f639f","tarball":"https://registry.npmjs.org/@akshatbuilds/sonix/-/sonix-1.0.0.tgz","fileCount":44,"integrity":"sha512-pM90ediqAxMIPQ+U6s/40Z1y2GNEYFXB8OmqBvuhZa8wLutyb0NWtVIJq78JwgJLQ9TTUNESnuViMSRIJ9SBag==","signatures":[{"sig":"MEQCIBrpQRAgjxa0B+RtmZ5T0ey3qTxNXd+YexDf3X2boeocAiBNlQ2ddn5F6qNTDUfkzpBFgmkEck1R8RYBru5gJSTBqQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":123220},"pnpm":{"overrides":{"@types/react":"19.2.7","@types/react-dom":"19.2.3"}},"gitHead":"1b8eb2a0df67b8bfb24e1b3120f33821eb3b3236","scripts":{"dev":"next dev --turbo","lint":"next lint","build":"next build","start":"next start"},"_npmUser":{"name":"akshatbuilds","email":"akshatsing11@gmail.com"},"repository":{"url":"git+https://github.com/abhi-yo/sound-library.git","type":"git"},"_npmVersion":"10.9.4","description":"Micro UX sound effects for interactive web applications. Zero dependencies, copy-paste ready.","directories":{},"_nodeVersion":"22.22.0","dependencies":{"zod":"^3.24.1","clsx":"^2.1.1","cmdk":"1.1.1","next":"16.1.6","vaul":"^1.1.2","react":"19.2.3","sonner":"^1.7.1","date-fns":"4.1.0","recharts":"2.15.0","input-otp":"1.4.1","react-dom":"19.2.3","next-themes":"^0.4.6","autoprefixer":"^10.4.20","lucide-react":"^0.544.0","tailwind-merge":"^2.5.5","react-hook-form":"^7.54.1","react-day-picker":"8.10.1","@vercel/analytics":"^1.6.1","@hookform/resolvers":"^3.9.1","tailwindcss-animate":"^1.0.7","@radix-ui/react-slot":"1.1.1","@radix-ui/react-tabs":"1.1.2","embla-carousel-react":"8.5.1","@radix-ui/react-label":"2.1.1","@radix-ui/react-toast":"1.2.4","@radix-ui/react-avatar":"1.1.2","@radix-ui/react-dialog":"1.1.4","@radix-ui/react-select":"2.1.4","@radix-ui/react-slider":"1.2.2","@radix-ui/react-switch":"1.1.2","@radix-ui/react-toggle":"1.1.1","react-resizable-panels":"^2.1.7","@radix-ui/react-menubar":"1.1.4","@radix-ui/react-popover":"1.1.4","@radix-ui/react-tooltip":"1.1.6","@radix-ui/react-checkbox":"1.1.3","@radix-ui/react-progress":"1.1.1","class-variance-authority":"^0.7.1","@radix-ui/react-accordion":"1.2.2","@radix-ui/react-separator":"1.1.1","@radix-ui/react-hover-card":"1.1.4","@radix-ui/react-collapsible":"1.1.2","@radix-ui/react-radio-group":"1.2.2","@radix-ui/react-scroll-area":"1.2.2","@radix-ui/react-alert-dialog":"1.1.4","@radix-ui/react-aspect-ratio":"1.1.1","@radix-ui/react-context-menu":"2.2.4","@radix-ui/react-toggle-group":"1.1.1","@radix-ui/react-dropdown-menu":"2.1.4","@radix-ui/react-navigation-menu":"1.2.3"},"_hasShrinkwrap":false,"devDependencies":{"postcss":"^8.5","typescript":"5.7.3","@types/node":"^22","tailwindcss":"^3.4.17","@types/react":"19.2.7","@types/react-dom":"19.2.3","@tailwindcss/postcss":"^4.1.13"},"_npmOperationalInternal":{"tmp":"tmp/sonix_1.0.0_1771103075425_0.602206087199771","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@akshatbuilds/sonix","version":"1.0.1","keywords":["sound","audio","ui","ux","web-audio","sound-effects","react","nextjs"],"license":"MIT","_id":"@akshatbuilds/sonix@1.0.1","maintainers":[{"name":"akshatbuilds","email":"akshatsing11@gmail.com"}],"homepage":"https://github.com/abhi-yo/sound-library#readme","bugs":{"url":"https://github.com/abhi-yo/sound-library/issues"},"bin":{"sonix":"cli/index.mjs"},"dist":{"shasum":"e8b4a3f50f58a56d2b0ba9b55146388d033aef96","tarball":"https://registry.npmjs.org/@akshatbuilds/sonix/-/sonix-1.0.1.tgz","fileCount":44,"integrity":"sha512-kLIwe6UM36U8HcPbBJDQhU6YpMCrKqJ05BFxr24ZsJ2AfxWRcVPNXDjVza9uRy0mfxQ5VOkl2mTuWgjhxE8y8w==","signatures":[{"sig":"MEUCIDyUo25BE0HwysqlCCW6Lqgy2qZx6Q3FyU1T60jZr4EzAiEAoxWYhkvGbLY51nbB/P74E5ziUokY86p7+PR0toDEhW0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":123236},"pnpm":{"overrides":{"@types/react":"19.2.7","@types/react-dom":"19.2.3"}},"gitHead":"1b8eb2a0df67b8bfb24e1b3120f33821eb3b3236","scripts":{"dev":"next dev --turbo","lint":"next lint","build":"next build","start":"next start"},"_npmUser":{"name":"akshatbuilds","email":"akshatsing11@gmail.com"},"repository":{"url":"git+https://github.com/abhi-yo/sound-library.git","type":"git"},"_npmVersion":"10.9.4","description":"Micro UX sound effects for interactive web applications. Zero dependencies, copy-paste ready.","directories":{},"_nodeVersion":"22.22.0","dependencies":{"zod":"^3.24.1","clsx":"^2.1.1","cmdk":"1.1.1","next":"16.1.6","vaul":"^1.1.2","react":"19.2.3","sonner":"^1.7.1","date-fns":"4.1.0","recharts":"2.15.0","input-otp":"1.4.1","react-dom":"19.2.3","next-themes":"^0.4.6","autoprefixer":"^10.4.20","lucide-react":"^0.544.0","tailwind-merge":"^2.5.5","react-hook-form":"^7.54.1","react-day-picker":"8.10.1","@vercel/analytics":"^1.6.1","@hookform/resolvers":"^3.9.1","tailwindcss-animate":"^1.0.7","@radix-ui/react-slot":"1.1.1","@radix-ui/react-tabs":"1.1.2","embla-carousel-react":"8.5.1","@radix-ui/react-label":"2.1.1","@radix-ui/react-toast":"1.2.4","@radix-ui/react-avatar":"1.1.2","@radix-ui/react-dialog":"1.1.4","@radix-ui/react-select":"2.1.4","@radix-ui/react-slider":"1.2.2","@radix-ui/react-switch":"1.1.2","@radix-ui/react-toggle":"1.1.1","react-resizable-panels":"^2.1.7","@radix-ui/react-menubar":"1.1.4","@radix-ui/react-popover":"1.1.4","@radix-ui/react-tooltip":"1.1.6","@radix-ui/react-checkbox":"1.1.3","@radix-ui/react-progress":"1.1.1","class-variance-authority":"^0.7.1","@radix-ui/react-accordion":"1.2.2","@radix-ui/react-separator":"1.1.1","@radix-ui/react-hover-card":"1.1.4","@radix-ui/react-collapsible":"1.1.2","@radix-ui/react-radio-group":"1.2.2","@radix-ui/react-scroll-area":"1.2.2","@radix-ui/react-alert-dialog":"1.1.4","@radix-ui/react-aspect-ratio":"1.1.1","@radix-ui/react-context-menu":"2.2.4","@radix-ui/react-toggle-group":"1.1.1","@radix-ui/react-dropdown-menu":"2.1.4","@radix-ui/react-navigation-menu":"1.2.3"},"_hasShrinkwrap":false,"devDependencies":{"postcss":"^8.5","typescript":"5.7.3","@types/node":"^22","tailwindcss":"^3.4.17","@types/react":"19.2.7","@types/react-dom":"19.2.3","@tailwindcss/postcss":"^4.1.13"},"_npmOperationalInternal":{"tmp":"tmp/sonix_1.0.1_1771103158173_0.5309977373278492","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@akshatbuilds/sonix","version":"1.0.2","keywords":["sound","audio","ui","ux","web-audio","sound-effects","react","nextjs"],"license":"MIT","_id":"@akshatbuilds/sonix@1.0.2","maintainers":[{"name":"akshatbuilds","email":"akshatsing11@gmail.com"}],"homepage":"https://github.com/abhi-yo/sound-library#readme","bugs":{"url":"https://github.com/abhi-yo/sound-library/issues"},"bin":{"sonix":"cli/index.mjs"},"dist":{"shasum":"74530fccd719e0e88e107f22a8ae9245a4fa5fdc","tarball":"https://registry.npmjs.org/@akshatbuilds/sonix/-/sonix-1.0.2.tgz","fileCount":44,"integrity":"sha512-utYz5bHwbuI5bC6JfM4LndcnZjsWVs1yZ8z4UtbZumo0jSpNSRz79AXhhJtiJ6L4KKlKqjc7xpYDxSEnMXTlQQ==","signatures":[{"sig":"MEUCIQDv3Zo8QVvdgcVt34PGZtbI7uR92+4icbScv/UlbbTbSgIgPRB6NBSNQ5whXtUyWnNMkGZPRbWQevvNllePaFpXCD4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":123268},"pnpm":{"overrides":{"@types/react":"19.2.7","@types/react-dom":"19.2.3"}},"gitHead":"1b8eb2a0df67b8bfb24e1b3120f33821eb3b3236","scripts":{"dev":"next dev --turbo","lint":"next lint","build":"next build","start":"next start"},"_npmUser":{"name":"akshatbuilds","email":"akshatsing11@gmail.com"},"repository":{"url":"git+https://github.com/abhi-yo/sound-library.git","type":"git"},"_npmVersion":"10.9.4","description":"Micro UX sound effects for interactive web applications. Zero dependencies, copy-paste ready.","directories":{},"_nodeVersion":"22.22.0","dependencies":{"zod":"^3.24.1","clsx":"^2.1.1","cmdk":"1.1.1","next":"16.1.6","vaul":"^1.1.2","react":"19.2.3","sonner":"^1.7.1","date-fns":"4.1.0","recharts":"2.15.0","input-otp":"1.4.1","react-dom":"19.2.3","next-themes":"^0.4.6","autoprefixer":"^10.4.20","lucide-react":"^0.544.0","tailwind-merge":"^2.5.5","react-hook-form":"^7.54.1","react-day-picker":"8.10.1","@vercel/analytics":"^1.6.1","@hookform/resolvers":"^3.9.1","tailwindcss-animate":"^1.0.7","@radix-ui/react-slot":"1.1.1","@radix-ui/react-tabs":"1.1.2","embla-carousel-react":"8.5.1","@radix-ui/react-label":"2.1.1","@radix-ui/react-toast":"1.2.4","@radix-ui/react-avatar":"1.1.2","@radix-ui/react-dialog":"1.1.4","@radix-ui/react-select":"2.1.4","@radix-ui/react-slider":"1.2.2","@radix-ui/react-switch":"1.1.2","@radix-ui/react-toggle":"1.1.1","react-resizable-panels":"^2.1.7","@radix-ui/react-menubar":"1.1.4","@radix-ui/react-popover":"1.1.4","@radix-ui/react-tooltip":"1.1.6","@radix-ui/react-checkbox":"1.1.3","@radix-ui/react-progress":"1.1.1","class-variance-authority":"^0.7.1","@radix-ui/react-accordion":"1.2.2","@radix-ui/react-separator":"1.1.1","@radix-ui/react-hover-card":"1.1.4","@radix-ui/react-collapsible":"1.1.2","@radix-ui/react-radio-group":"1.2.2","@radix-ui/react-scroll-area":"1.2.2","@radix-ui/react-alert-dialog":"1.1.4","@radix-ui/react-aspect-ratio":"1.1.1","@radix-ui/react-context-menu":"2.2.4","@radix-ui/react-toggle-group":"1.1.1","@radix-ui/react-dropdown-menu":"2.1.4","@radix-ui/react-navigation-menu":"1.2.3"},"_hasShrinkwrap":false,"devDependencies":{"postcss":"^8.5","typescript":"5.7.3","@types/node":"^22","tailwindcss":"^3.4.17","@types/react":"19.2.7","@types/react-dom":"19.2.3","@tailwindcss/postcss":"^4.1.13"},"_npmOperationalInternal":{"tmp":"tmp/sonix_1.0.2_1771103771400_0.7811833577243212","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@akshatbuilds/sonix","version":"1.0.3","keywords":["sound","audio","ui","ux","web-audio","sound-effects","react","nextjs"],"license":"MIT","_id":"@akshatbuilds/sonix@1.0.3","maintainers":[{"name":"akshatbuilds","email":"akshatsing11@gmail.com"}],"homepage":"https://github.com/abhi-yo/sound-library#readme","bugs":{"url":"https://github.com/abhi-yo/sound-library/issues"},"bin":{"sonix":"cli/index.mjs"},"dist":{"shasum":"036eec03404013688e859114a8e76b79388df9f5","tarball":"https://registry.npmjs.org/@akshatbuilds/sonix/-/sonix-1.0.3.tgz","fileCount":44,"integrity":"sha512-1XGykYeLN/bLNFFHWvurxfnbXWqonQv7WPgz1Fd+pNIH6hKuA9Rf9zM3h2lPwH5cCdcBdbOmbAMdHef/zuJZew==","signatures":[{"sig":"MEQCIEZny4P04GPvrQsXFGhSzEo0j14qNVcjJGa/pbm3+PBlAiAeVBRbq0JUAF5OksZyRic/OMO6ouNzw9Qll4zFmpa86A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":121961},"pnpm":{"overrides":{"@types/react":"19.2.7","@types/react-dom":"19.2.3"}},"gitHead":"1b8eb2a0df67b8bfb24e1b3120f33821eb3b3236","scripts":{"dev":"next dev --turbo","lint":"next lint","build":"next build","start":"next start"},"_npmUser":{"name":"akshatbuilds","email":"akshatsing11@gmail.com"},"repository":{"url":"git+https://github.com/abhi-yo/sound-library.git","type":"git"},"_npmVersion":"10.9.4","description":"Micro UX sound effects for interactive web applications. Zero dependencies, copy-paste ready.","directories":{},"_nodeVersion":"22.22.0","dependencies":{"clsx":"^2.1.1","next":"16.1.6","react":"19.2.3","react-dom":"19.2.3","next-themes":"^0.4.6","lucide-react":"^0.544.0","tailwind-merge":"^2.5.5","@vercel/analytics":"^1.6.1","tailwindcss-animate":"^1.0.7","@radix-ui/react-slot":"1.1.1","@radix-ui/react-slider":"1.2.2","@radix-ui/react-switch":"1.1.2","@radix-ui/react-tooltip":"1.1.6","@radix-ui/react-checkbox":"1.1.3","class-variance-authority":"^0.7.1"},"_hasShrinkwrap":false,"devDependencies":{"postcss":"^8.5","typescript":"5.7.3","@types/node":"^22","tailwindcss":"^3.4.17","@types/react":"19.2.7","@types/react-dom":"19.2.3","@tailwindcss/postcss":"^4.1.13"},"_npmOperationalInternal":{"tmp":"tmp/sonix_1.0.3_1771104363549_0.29205604503662697","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@akshatbuilds/sonix","version":"1.0.4","description":"Micro UX sound effects for interactive web applications. Zero dependencies, copy-paste ready.","license":"MIT","repository":{"type":"git","url":"git+https://github.com/abhi-yo/sound-library.git"},"keywords":["sound","audio","ui","ux","web-audio","sound-effects","react","nextjs"],"bin":{"sonix":"cli/index.mjs"},"scripts":{"dev":"next dev --turbo","build":"next build","start":"next start","lint":"next lint","build:registry":"node scripts/build-registry.mjs"},"dependencies":{"@radix-ui/react-checkbox":"1.1.3","@radix-ui/react-slider":"1.2.2","@radix-ui/react-slot":"1.1.1","@radix-ui/react-switch":"1.1.2","@radix-ui/react-tooltip":"1.1.6","@vercel/analytics":"^1.6.1","class-variance-authority":"^0.7.1","clsx":"^2.1.1","lucide-react":"^0.544.0","next":"16.1.6","next-themes":"^0.4.6","react":"19.2.3","react-dom":"19.2.3","tailwind-merge":"^2.5.5","tailwindcss-animate":"^1.0.7"},"devDependencies":{"@tailwindcss/postcss":"^4.1.13","@types/node":"^22","@types/react":"19.2.7","@types/react-dom":"19.2.3","postcss":"^8.5","tailwindcss":"^3.4.17","typescript":"5.7.3"},"pnpm":{"overrides":{"@types/react":"19.2.7","@types/react-dom":"19.2.3"}},"_id":"@akshatbuilds/sonix@1.0.4","gitHead":"1b8eb2a0df67b8bfb24e1b3120f33821eb3b3236","bugs":{"url":"https://github.com/abhi-yo/sound-library/issues"},"homepage":"https://github.com/abhi-yo/sound-library#readme","_nodeVersion":"22.22.0","_npmVersion":"10.9.4","dist":{"integrity":"sha512-ny8F6rQNjVtCQipnf+fAl6pPwG5YAUKLbrGgy4FUI+PaX2gOrbW/iv1pkw+HjFqQgr0Ey8uCgOA0x5kbYQ1vIw==","shasum":"badc137389dd8e079de844de765a64235fe1a78c","tarball":"https://registry.npmjs.org/@akshatbuilds/sonix/-/sonix-1.0.4.tgz","fileCount":4,"unpackedSize":12976,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIA6+0ZK6xuWn1sMbMAHfwEtG5lpVaX9amtuYW7FYwQYAAiEAlHph91E9zTpGmpSsDtT+JfKalMejuKuUrLtc0bqeDBk="}]},"_npmUser":{"name":"akshatbuilds","email":"akshatsing11@gmail.com"},"directories":{},"maintainers":[{"name":"akshatbuilds","email":"akshatsing11@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/sonix_1.0.4_1771202697501_0.719593274081644"},"_hasShrinkwrap":false}},"time":{"created":"2026-02-14T21:04:35.361Z","modified":"2026-02-16T00:44:57.748Z","1.0.0":"2026-02-14T21:04:35.560Z","1.0.1":"2026-02-14T21:05:58.334Z","1.0.2":"2026-02-14T21:16:11.576Z","1.0.3":"2026-02-14T21:26:03.696Z","1.0.4":"2026-02-16T00:44:57.639Z"},"bugs":{"url":"https://github.com/abhi-yo/sound-library/issues"},"license":"MIT","homepage":"https://github.com/abhi-yo/sound-library#readme","keywords":["sound","audio","ui","ux","web-audio","sound-effects","react","nextjs"],"repository":{"type":"git","url":"git+https://github.com/abhi-yo/sound-library.git"},"description":"Micro UX sound effects for interactive web applications. Zero dependencies, copy-paste ready.","maintainers":[{"name":"akshatbuilds","email":"akshatsing11@gmail.com"}],"readme":"# Sonix — UI Sound Effects Library\n\nMicro UX audio for interactive web applications. Zero dependencies. Copy-paste ready.\n\n[Live Demo](https://soundcomponents.vercel.app) · [Browse Sounds](#available-sounds) · [CLI](#cli)\n\n---\n\n## Features\n\n- **14 sounds** — clicks, hovers, success, error, notifications, transitions, and more\n- **Zero dependencies** — every snippet is standalone Web Audio API code\n- **Copy & paste** — hit the copy button on any card to get production-ready code\n- **CLI** — `npx @akshatbuilds/sonix add pop` to scaffold sounds into your project\n- **Framework agnostic** — works with React, Vue, Svelte, vanilla JS, anything\n- **Dark mode** — with cinematic circular reveal transition\n- **`prefers-reduced-motion`** — respects user accessibility preferences\n\n## Quick Start\n\n### Web Audio (no files needed)\n\n```js\nconst ctx = new AudioContext();\nconst osc = ctx.createOscillator();\nconst gain = ctx.createGain();\nosc.type = 'sine';\nosc.frequency.setValueAtTime(800, ctx.currentTime);\ngain.gain.setValueAtTime(0.25, ctx.currentTime);\ngain.gain.exponentialRampToValueAtTime(0.001, ctx.currentTime + 0.15);\nosc.connect(gain).connect(ctx.destination);\nosc.start();\nosc.stop(ctx.currentTime + 0.15);\n```\n\n### MP3 (for button clicks)\n\n```js\nconst audio = new Audio('/sonix/click1.mp3');\naudio.volume = 0.5;\naudio.play();\n```\n\n### React Hook\n\n```tsx\nimport { playPop } from '@/components/sonix';\n\nfunction MyButton() {\n  return <button onClick={playPop}>Click</button>;\n}\n```\n\n## CLI\n\nAdd sounds to any project with the CLI:\n\n```bash\nnpx @akshatbuilds/sonix list              # List all available sounds\nnpx @akshatbuilds/sonix add pop           # Add a single sound\nnpx @akshatbuilds/sonix add pop swoosh    # Add multiple sounds\n```\n\nSounds are written to `components/sonix/` as standalone files — no runtime dependency.\nMP3 assets are downloaded automatically to `public/sonix/`.\n\n## Available Sounds\n\n| Name | Category | Source | Use Case |\n|------|----------|--------|----------|\n| `button-click` | Interaction | MP3 | Primary button presses |\n| `button-click-secondary` | Interaction | MP3 | Secondary / ghost buttons |\n| `hover-blip` | Feedback | Web Audio | Hovering over interactive elements |\n| `hover-soft` | Feedback | Web Audio | Subtle hover feedback |\n| `success-chime` | Notification | Web Audio | Form submissions, saves |\n| `success-bell` | Notification | Web Audio | Achievements, milestones |\n| `error-buzz` | Alert | Web Audio | Validation errors, failed actions |\n| `error-beep` | Alert | Web Audio | Warnings, blocked actions |\n| `notification-ping` | Alert | Web Audio | New messages, alerts |\n| `notification-subtle` | Alert | Web Audio | Background updates |\n| `swoosh` | Transition | Web Audio | Page transitions, panel slides |\n| `pop` | Interaction | Web Audio | Tooltips, popovers, reveals |\n| `slider-tick` | Interaction | Web Audio | Sliders, range inputs |\n| `key-press` | Interaction | Web Audio | Text inputs, keyboards |\n\n## Accessibility\n\nAll sounds respect `prefers-reduced-motion: reduce`. When the user has requested reduced motion, sounds are automatically silenced.\n\nTo manually control sound:\n\n```js\n// Check user preference\nconst prefersReducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n\nif (!prefersReducedMotion) {\n  playPop();\n}\n```\n\n## Development\n\n```bash\npnpm install\npnpm dev\n```\n\n## Build\n\n```bash\npnpm build\n```\n\n## Registry\n\nThe project includes a shadcn-style registry at `public/registry/`. To rebuild:\n\n```bash\nnode scripts/build-registry.mjs\n```\n\n## License\n\nMIT — see [LICENSE](./LICENSE).\n","readmeFilename":"README.md"}