{"_id":"jsvoice","_rev":"10-e172e9a1ba4a3535513e55223f6f134e","name":"jsvoice","dist-tags":{"latest":"1.1.1"},"versions":{"0.1.1":{"name":"jsvoice","version":"0.1.1","keywords":["voice","ui","speech","recognition","synthesis","web speech api","javascript","accessibility"],"author":{"name":"Your Name","email":"your.email@example.com"},"license":"MIT","_id":"jsvoice@0.1.1","maintainers":[{"name":"rasikarakhewar","email":"rasikarakhewar30102004@gmail.com"}],"dist":{"shasum":"f7e340802f8a5516daec51e2a838efc3c7155857","tarball":"https://registry.npmjs.org/jsvoice/-/jsvoice-0.1.1.tgz","fileCount":26,"integrity":"sha512-2224OrXuEqufGIX7vC8qcj8JzS/nZopIPF8729Ecy5yVi9Tlx7kn+Uzomu5gbtdaJFR6TcGvI/ndBPNMfMulMw==","signatures":[{"sig":"MEYCIQD/BUl7Mghy32/mr263TPCtqsE7ktC0PUU+htdARU4hDwIhAM1iLD2BA6k19xHGpi2MxeBmfTqHDf/UQKHQ8WaTxU44","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":401347},"main":"dist/voice-ui.cjs.js","type":"module","unpkg":"dist/voice-ui.umd.min.js","module":"dist/voice-ui.esm.js","browser":"dist/voice-ui.umd.js","exports":{".":{"import":"./dist/voice-ui.esm.js","browser":"./dist/voice-ui.umd.js","require":"./dist/voice-ui.cjs.js"}},"gitHead":"0f0802079c5cbab2b370fdfcf21f88c2f87efb41","scripts":{"dev":"rollup -c -w","lint":"eslint src/","test":"jest","build":"rollup -c","prepare":"npm run build"},"_npmUser":{"name":"rasikarakhewar","email":"rasikarakhewar30102004@gmail.com"},"_npmVersion":"11.4.1","description":"A lightweight JavaScript library for adding voice command and synthesis capabilities to web applications using the Web Speech API.","directories":{},"_nodeVersion":"22.18.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","eslint":"^8.56.0","rollup":"^4.9.6","babel-jest":"^30.1.2","@babel/core":"^7.23.9","@babel/preset-env":"^7.28.3","@rollup/plugin-babel":"^6.0.4","@rollup/plugin-terser":"^0.4.4","jest-environment-jsdom":"^29.7.0","@rollup/plugin-commonjs":"^25.0.7","@rollup/plugin-node-resolve":"^15.2.3"},"_npmOperationalInternal":{"tmp":"tmp/jsvoice_0.1.1_1759250835338_0.1457389893800778","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"jsvoice","version":"0.2.0","keywords":["voice","ui","speech","recognition","synthesis","web speech api","javascript","accessibility"],"author":{"name":"JSVoice Contributors"},"license":"MIT","_id":"jsvoice@0.2.0","maintainers":[{"name":"rasikarakhewar","email":"rasikarakhewar30102004@gmail.com"},{"name":"p0saurabh","email":"saurabhsp0402@gmail.com"}],"dist":{"shasum":"1c89caec720168ad295aee0ce6ef717f5471c395","tarball":"https://registry.npmjs.org/jsvoice/-/jsvoice-0.2.0.tgz","fileCount":21,"integrity":"sha512-dMV5kcuko+6xSC+VH8nGAM3et2OObrtvOHq1NgH87q8a9Ivh2ATywiP1pkHDAafNt0sY2SyHbvgekZdqqr9vYA==","signatures":[{"sig":"MEUCIGSbiu5fxq89hvXpI8xXDg1JMOBjqfxEkcB1DhVt3YzpAiEAu2c89hn4ReMV7mtXMwVrCaYapDMJIACWRxxyxYe9wII=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":785168},"main":"dist/voice-ui.cjs.js","type":"module","types":"dist/index.d.ts","unpkg":"dist/voice-ui.umd.min.js","module":"dist/voice-ui.esm.js","browser":"dist/voice-ui.umd.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/voice-ui.esm.js","browser":"./dist/voice-ui.umd.js","require":"./dist/voice-ui.cjs.js"}},"gitHead":"82c47852cfbbbd214c8453756e56b8d3540662ae","scripts":{"dev":"rollup -c -w","lint":"eslint src/","test":"jest","build":"rollup -c","prepare":"npm run build","test:watch":"jest --watch","test:coverage":"jest --coverage"},"_npmUser":{"name":"rasikarakhewar","email":"rasikarakhewar30102004@gmail.com"},"_npmVersion":"11.4.1","description":"A lightweight JavaScript library for adding voice command and synthesis capabilities to web applications using the Web Speech API.","directories":{},"_nodeVersion":"22.18.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","eslint":"^8.56.0","rollup":"^4.9.6","babel-jest":"^30.1.2","@babel/core":"^7.23.9","@babel/preset-env":"^7.28.3","@rollup/plugin-babel":"^6.0.4","@rollup/plugin-terser":"^0.4.4","jest-environment-jsdom":"^29.7.0","@rollup/plugin-commonjs":"^25.0.7","@rollup/plugin-node-resolve":"^15.2.3"},"_npmOperationalInternal":{"tmp":"tmp/jsvoice_0.2.0_1761672977543_0.7167723190143098","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"jsvoice","version":"0.2.1","keywords":["voice","ui","speech","recognition","synthesis","web speech api","javascript","accessibility"],"author":{"name":"JSVoice Contributors"},"license":"MIT","_id":"jsvoice@0.2.1","maintainers":[{"name":"rasikarakhewar","email":"rasikarakhewar30102004@gmail.com"},{"name":"p0saurabh","email":"saurabhsp0402@gmail.com"}],"dist":{"shasum":"20536e9450a69138077315b1c8ce8f1759b78d02","tarball":"https://registry.npmjs.org/jsvoice/-/jsvoice-0.2.1.tgz","fileCount":21,"integrity":"sha512-zXjUZ4w2wbuREWADZ4K/YJG3RjAxW5g6Kq6bcGYyio5ZbeKdo0RIfy3e0L12LyNgDqFmU4J3zh75W41ihegB1Q==","signatures":[{"sig":"MEQCIGhYduMA6s44oqFrviT8kZK+Xc1xcgL68X6uFvNMtjpIAiBNoESR1A30MjSzafWIAXJsOfPChQRqSpqrip4odGz5KQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":777415},"main":"dist/voice-ui.cjs.js","type":"module","types":"dist/index.d.ts","unpkg":"dist/voice-ui.umd.min.js","module":"dist/voice-ui.esm.js","browser":"dist/voice-ui.umd.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/voice-ui.esm.js","browser":"./dist/voice-ui.umd.js","require":"./dist/voice-ui.cjs.js"}},"gitHead":"17928c87857f8cba6c9f929d009a8d0dbefbf3cf","scripts":{"dev":"rollup -c -w","lint":"eslint src/","test":"jest","build":"rollup -c","prepare":"npm run build","test:watch":"jest --watch","test:coverage":"jest --coverage"},"_npmUser":{"name":"rasikarakhewar","email":"rasikarakhewar30102004@gmail.com"},"_npmVersion":"11.4.1","description":"A lightweight JavaScript library for adding voice command and synthesis capabilities to web applications using the Web Speech API.","directories":{},"_nodeVersion":"22.18.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","eslint":"^8.56.0","rollup":"^4.9.6","babel-jest":"^30.1.2","@babel/core":"^7.23.9","@babel/preset-env":"^7.28.3","@rollup/plugin-babel":"^6.0.4","@rollup/plugin-terser":"^0.4.4","jest-environment-jsdom":"^29.7.0","@rollup/plugin-commonjs":"^25.0.7","@rollup/plugin-node-resolve":"^15.2.3"},"_npmOperationalInternal":{"tmp":"tmp/jsvoice_0.2.1_1761673887213_0.014534632879391829","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"jsvoice","version":"0.2.2","keywords":["voice","voice-commands","voice-control","voice-recognition","speech","speech-recognition","speech-synthesis","text-to-speech","tts","stt","web-speech-api","voice-ui","voice-interface","accessibility","a11y","hands-free","wake-word","pattern-matching","audio-visualization","waveform","amplitude","javascript","typescript","browser","web","frontend","ui","ux","pwa","progressive-web-app","zero-dependencies","lightweight"],"author":{"name":"JSVoice Contributors"},"license":"MIT","_id":"jsvoice@0.2.2","maintainers":[{"name":"rasikarakhewar","email":"rasikarakhewar30102004@gmail.com"},{"name":"p0saurabh","email":"saurabhsp0402@gmail.com"}],"homepage":"https://github.com/VoiceUI-js/VoiceUI#readme","bugs":{"url":"https://github.com/VoiceUI-js/VoiceUI/issues"},"dist":{"shasum":"bd7004f3a3a58291b25f62ead2047b85388fa2c8","tarball":"https://registry.npmjs.org/jsvoice/-/jsvoice-0.2.2.tgz","fileCount":35,"integrity":"sha512-k3PQMloZ+6VbckJ1tSrRXHR8vLUlbGs3rpD3i2nsRAdQwOB6Xajp6fxxB+Ej35XYiI09N5gt/blSuFJRQAN0Qg==","signatures":[{"sig":"MEUCIQDCE8E+kOy7Qmz7sWDW7QqeEDuOSV8/OrC3NqXS+gJ+rwIgavgZwBgoushANERl+i4I3ygGm9T9ZpFhI6l4rvQ32ww=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":861699},"main":"dist/voice-ui.cjs.js","type":"module","types":"src/index.d.ts","unpkg":"dist/voice-ui.umd.min.js","module":"dist/voice-ui.esm.js","browser":"dist/voice-ui.umd.js","exports":{".":{"types":"./src/index.d.ts","import":"./dist/voice-ui.esm.js","browser":"./dist/voice-ui.umd.js","require":"./dist/voice-ui.cjs.js"}},"gitHead":"678062b5aabaffff502f747b48486c665cf847c3","scripts":{"dev":"rollup -c -w","lint":"eslint src/ test/","test":"jest","build":"rollup -c","format":"prettier --write \"src/**/*.js\" \"test/**/*.js\" \"examples/**/*.{html,js}\"","prepare":"npm run build","lint:fix":"eslint src/ test/ --fix","test:watch":"jest --watch","format:check":"prettier --check \"src/**/*.js\" \"test/**/*.js\"","test:coverage":"jest --coverage"},"_npmUser":{"name":"rasikarakhewar","email":"rasikarakhewar30102004@gmail.com"},"repository":{"url":"git+https://github.com/VoiceUI-js/VoiceUI.git","type":"git"},"_npmVersion":"11.4.1","description":"Modern JavaScript voice command library with speech recognition, synthesis, pattern matching, wake word detection, and real-time audio visualization. Zero dependencies, TypeScript ready, perfect for accessibility and voice-first UIs.","directories":{},"_nodeVersion":"22.18.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","eslint":"^8.56.0","rollup":"^4.9.6","prettier":"^3.7.4","babel-jest":"^30.1.2","@babel/core":"^7.23.9","@babel/preset-env":"^7.28.3","@rollup/plugin-babel":"^6.0.4","@rollup/plugin-terser":"^0.4.4","jest-environment-jsdom":"^29.7.0","@rollup/plugin-commonjs":"^25.0.7","@rollup/plugin-node-resolve":"^15.2.3"},"_npmOperationalInternal":{"tmp":"tmp/jsvoice_0.2.2_1766838310136_0.7850461251727014","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"jsvoice","version":"1.0.2","keywords":["voice","voice-commands","voice-control","voice-recognition","speech","speech-recognition","speech-synthesis","text-to-speech","tts","stt","web-speech-api","voice-ui","voice-interface","accessibility","a11y","hands-free","wake-word","pattern-matching","audio-visualization","waveform","amplitude","javascript","typescript","browser","web","frontend","ui","ux","pwa","progressive-web-app","zero-dependencies","lightweight"],"author":{"name":"JSVoice Contributors"},"license":"MIT","_id":"jsvoice@1.0.2","maintainers":[{"name":"rasikarakhewar","email":"rasikarakhewar30102004@gmail.com"},{"name":"p0saurabh","email":"saurabhsp0402@gmail.com"}],"homepage":"https://github.com/VoiceUI-js/VoiceUI#readme","bugs":{"url":"https://github.com/VoiceUI-js/VoiceUI/issues"},"dist":{"shasum":"abc248c8a999a8f14274282c9674afeb84eab92a","tarball":"https://registry.npmjs.org/jsvoice/-/jsvoice-1.0.2.tgz","fileCount":37,"integrity":"sha512-l/5t2I0432kPc6nn2eCpAY9x06jMF9XfxhqeDoctx3CJZqr0CDwNJhWV/JU6nK6tjHakXAIz+fxrV17GDMPahw==","signatures":[{"sig":"MEUCIFYtGnhpVwvMu7B3W4rCes6CIpQckGZxk/daxQVth6ReAiEA5N0Nid3Yclk2bVuMCxK4fUSd7sKAOmUIqMEKzYzMaww=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":986054},"main":"dist/voice-ui.cjs.js","type":"module","types":"src/index.d.ts","unpkg":"dist/voice-ui.umd.min.js","module":"dist/voice-ui.esm.js","browser":"dist/voice-ui.umd.js","exports":{".":{"types":"./src/index.d.ts","import":"./dist/voice-ui.esm.js","browser":"./dist/voice-ui.umd.js","require":"./dist/voice-ui.cjs.js"}},"gitHead":"9dad03d6ce3dae6632633622013cc348fcb8b35d","scripts":{"dev":"rollup -c -w","lint":"eslint src/ test/","test":"jest","build":"rollup -c","format":"prettier --write \"src/**/*.js\" \"test/**/*.js\" \"examples/**/*.{html,js}\"","prepare":"npm run build","lint:fix":"eslint src/ test/ --fix","test:watch":"jest --watch","format:check":"prettier --check \"src/**/*.js\" \"test/**/*.js\"","test:coverage":"jest --coverage"},"_npmUser":{"name":"rasikarakhewar","email":"rasikarakhewar30102004@gmail.com"},"repository":{"url":"git+https://github.com/VoiceUI-js/VoiceUI.git","type":"git"},"_npmVersion":"11.6.2","description":"Modern JavaScript voice command library with speech recognition, synthesis, pattern matching, wake word detection, and real-time audio visualization. Zero dependencies, TypeScript ready, perfect for accessibility and voice-first UIs.","directories":{},"_nodeVersion":"24.8.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","eslint":"^8.56.0","rollup":"^4.9.6","prettier":"^3.7.4","babel-jest":"^30.1.2","@babel/core":"^7.23.9","@babel/preset-env":"^7.28.3","@rollup/plugin-babel":"^6.0.4","@rollup/plugin-terser":"^0.4.4","jest-environment-jsdom":"^29.7.0","@rollup/plugin-commonjs":"^25.0.7","@rollup/plugin-node-resolve":"^15.2.3"},"_npmOperationalInternal":{"tmp":"tmp/jsvoice_1.0.2_1768900033784_0.1348085686626479","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"jsvoice","version":"1.1.0","keywords":["voice","voice-commands","voice-control","voice-recognition","speech","speech-recognition","speech-synthesis","text-to-speech","tts","stt","web-speech-api","voice-ui","voice-interface","accessibility","a11y","hands-free","wake-word","pattern-matching","audio-visualization","waveform","amplitude","javascript","typescript","browser","web","frontend","ui","ux","pwa","progressive-web-app","zero-dependencies","lightweight"],"author":{"name":"JSVoice Contributors"},"license":"MIT","_id":"jsvoice@1.1.0","maintainers":[{"name":"rasikarakhewar","email":"rasikarakhewar30102004@gmail.com"},{"name":"p0saurabh","email":"saurabhsp0402@gmail.com"}],"homepage":"https://github.com/VoiceUI-js/VoiceUI#readme","bugs":{"url":"https://github.com/VoiceUI-js/VoiceUI/issues"},"dist":{"shasum":"89b638f10d55fd714f0097f557b2dc379b5d0886","tarball":"https://registry.npmjs.org/jsvoice/-/jsvoice-1.1.0.tgz","fileCount":43,"integrity":"sha512-Mjb5vCN5mYsZUixfsYAGnItgHe8DtOnZ0TgUTi1/RbjIgNrkumEUhf/9+SdXKFhu8XgXUw423cEcKoO6NxBtfw==","signatures":[{"sig":"MEUCIC3DMiYROUO0Sy4vMMaWsA2Q5Fkp4qIs3P744QffCCsTAiEAhZk8k+maId0wmAOiSLfdrT2Gbtp9QRDAetVUBWd8KmQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":789323},"main":"dist/voice-ui.cjs.js","type":"module","types":"src/index.d.ts","unpkg":"dist/voice-ui.umd.min.js","module":"dist/voice-ui.esm.js","browser":"dist/voice-ui.umd.js","exports":{".":{"types":"./src/index.d.ts","import":"./src/index.js","require":"./dist/voice-ui.cjs.js"},"./core":{"types":"./src/index.d.ts","import":"./src/JSVoice.js"},"./engines/native":{"types":"./src/index.d.ts","import":"./src/engines/NativeSpeechEngine.js"},"./engines/whisper":{"types":"./src/index.d.ts","import":"./src/engines/WhisperSpeechEngine.js"},"./plugins/visualizer":{"types":"./src/index.d.ts","import":"./src/modules/AudioVisualizer.js"}},"gitHead":"2fbddf4bd2c2b708eb110c986a048e725c039d28","scripts":{"dev":"rollup -c -w","lint":"eslint src/ test/","test":"jest","build":"rollup -c","format":"prettier --write \"src/**/*.js\" \"test/**/*.js\" \"examples/**/*.{html,js}\"","prepare":"npm run build","lint:fix":"eslint src/ test/ --fix","test:watch":"jest --watch","format:check":"prettier --check \"src/**/*.js\" \"test/**/*.js\"","test:coverage":"jest --coverage"},"_npmUser":{"name":"rasikarakhewar","email":"rasikarakhewar30102004@gmail.com"},"repository":{"url":"git+https://github.com/VoiceUI-js/VoiceUI.git","type":"git"},"_npmVersion":"11.6.2","description":"Modern JavaScript voice command library with speech recognition, synthesis, pattern matching, wake word detection, and real-time audio visualization. Zero dependencies, TypeScript ready, perfect for accessibility and voice-first UIs.","directories":{},"_nodeVersion":"24.8.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","eslint":"^8.56.0","rollup":"^4.55.2","prettier":"^3.7.4","babel-jest":"^30.1.2","@babel/core":"^7.23.9","@babel/preset-env":"^7.28.3","@rollup/plugin-babel":"^6.0.4","@rollup/plugin-terser":"^0.4.4","jest-environment-jsdom":"^29.7.0","@rollup/plugin-commonjs":"^25.0.7","@rollup/plugin-node-resolve":"^15.2.3"},"_npmOperationalInternal":{"tmp":"tmp/jsvoice_1.1.0_1768923628176_0.7773812643208957","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"jsvoice","version":"1.1.1","description":"Modern JavaScript voice command library with speech recognition, synthesis, pattern matching, wake word detection, and real-time audio visualization. Zero dependencies, TypeScript ready, perfect for accessibility and voice-first UIs.","main":"dist/voice-ui.cjs.js","module":"dist/voice-ui.esm.js","unpkg":"dist/voice-ui.umd.min.js","browser":"dist/voice-ui.umd.js","types":"src/index.d.ts","type":"module","exports":{".":{"import":"./dist/voice-ui.esm.js","require":"./dist/voice-ui.cjs.js","types":"./src/index.d.ts","default":"./dist/voice-ui.esm.js"},"./src":{"import":"./src/index.js","types":"./src/index.d.ts"},"./core":{"import":"./src/JSVoice.js","types":"./src/index.d.ts"},"./engines/native":{"import":"./src/engines/NativeSpeechEngine.js","types":"./src/index.d.ts"},"./engines/whisper":{"import":"./src/engines/WhisperSpeechEngine.js","types":"./src/index.d.ts"},"./engines/porcupine-wake":{"import":"./dist/engines/PorcupineWakeAdapter.esm.js","require":"./dist/engines/PorcupineWakeAdapter.cjs.js","default":"./src/engines/PorcupineWakeAdapter.js"},"./plugins/visualizer":{"import":"./src/modules/AudioVisualizer.js","types":"./src/index.d.ts"},"./react":{"import":"./dist/react/index.esm.js","require":"./dist/react/index.cjs.js","types":"./src/react/index.d.ts","default":"./src/react/index.js"},"./react/components":{"import":"./src/react/components.js"},"./react/kit":{"import":"./dist/react/kit/index.esm.js","require":"./dist/react/kit/index.cjs.js","types":"./src/react/kit/index.d.ts","default":"./src/react/kit/index.js"},"./react/kit/store":{"import":"./src/react/kit/store.js"},"./react/kit/components":{"import":"./src/react/kit/components.js","types":"./src/react/kit/components.d.ts"},"./react/kit/themes":{"import":"./src/react/kit/themes/index.js"},"./react/kit/widgets":{"import":"./src/react/kit/widgets.js"},"./react/kit/workflows":{"import":"./src/react/kit/workflows.js"},"./react/kit/debug":{"import":"./src/react/kit/debug.js"},"./react/kit/assistant":{"import":"./src/react/kit/assistant.js"},"./packs/kit":{"import":"./src/packs/kit.js"},"./plugins/kit":{"import":"./src/plugins/kit/index.js","types":"./src/plugins/kit/index.d.ts"},"./packs/basic":{"import":"./src/packs/basic.js"},"./ui-kit":{"import":"./dist/ui-kit/index.esm.js","require":"./dist/ui-kit/index.cjs.js","types":"./src/ui-kit/index.d.ts","default":"./src/ui-kit/index.js"},"./ui-kit/core/store":{"import":"./src/ui-kit/core/store.js","types":"./src/ui-kit/core/store.d.ts"},"./ui-kit/core/useUiKitState":{"import":"./src/ui-kit/core/useUiKitState.js"},"./ui-kit/core/controller":{"import":"./src/ui-kit/core/controller.js","types":"./src/ui-kit/core/controller.d.ts"},"./ui-kit/modules/widgets":{"import":"./src/ui-kit/modules/widgets/index.js"},"./ui-kit/modules/widgets/components":{"import":"./src/ui-kit/modules/widgets/components.js"},"./ui-kit/modules/rules":{"import":"./src/ui-kit/modules/rules/index.js"},"./ui-kit/modules/links":{"import":"./src/ui-kit/modules/links/index.js"},"./ui-kit/modules/constraints":{"import":"./src/ui-kit/modules/constraints/index.js"},"./ui-kit/modules/bookmarks":{"import":"./src/ui-kit/modules/bookmarks/index.js"},"./ui-kit/modules/summaries":{"import":"./src/ui-kit/modules/summaries/index.js"},"./ui-kit/modules/voice-mode":{"import":"./src/ui-kit/modules/voice-mode/index.js"},"./ui-kit/modules/voice-mode/components":{"import":"./src/ui-kit/modules/voice-mode/components.js"},"./ui-kit/modules/undo":{"import":"./src/ui-kit/modules/undo/index.js"},"./ui-kit/modules/repair":{"import":"./src/ui-kit/modules/repair/index.js"}},"scripts":{"build":"rollup -c","dev":"rollup -c -w","test":"jest","test:watch":"jest --watch","test:coverage":"jest --coverage","test:e2e":"playwright test","test:e2e:ui":"playwright test --ui","storybook":"storybook dev -p 6006","build-storybook":"storybook build -o storybook-static","lint":"eslint src/ test/","lint:fix":"eslint src/ test/ --fix","format":"prettier --write \"src/**/*.js\" \"test/**/*.js\" \"examples/**/*.{html,js}\"","format:check":"prettier --check \"src/**/*.js\" \"test/**/*.js\"","prepare":"npm run build"},"keywords":["voice","voice-commands","voice-control","voice-recognition","speech","speech-recognition","speech-synthesis","text-to-speech","tts","stt","web-speech-api","voice-ui","voice-interface","accessibility","a11y","hands-free","wake-word","pattern-matching","audio-visualization","waveform","amplitude","javascript","typescript","browser","web","frontend","ui","ux","pwa","progressive-web-app","zero-dependencies","lightweight"],"repository":{"type":"git","url":"git+https://github.com/VoiceUI-js/VoiceUI.git"},"homepage":"https://github.com/VoiceUI-js/VoiceUI#readme","bugs":{"url":"https://github.com/VoiceUI-js/VoiceUI/issues"},"author":{"name":"JSVoice Contributors"},"license":"MIT","peerDependencies":{"react":">=17","react-dom":">=17","@picovoice/porcupine-web":">=3","@picovoice/web-voice-processor":">=4"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true},"@picovoice/porcupine-web":{"optional":true},"@picovoice/web-voice-processor":{"optional":true}},"devDependencies":{"@babel/core":"^7.23.9","@babel/preset-env":"^7.28.3","@playwright/test":"^1.49.1","@rollup/plugin-babel":"^6.0.4","@rollup/plugin-commonjs":"^25.0.7","@rollup/plugin-node-resolve":"^15.2.3","@rollup/plugin-terser":"^0.4.4","@storybook/react":"^8.4.7","@storybook/react-vite":"^8.4.7","@xenova/transformers":"^2.17.2","babel-jest":"^30.1.2","eslint":"^8.56.0","jest":"^29.7.0","jest-environment-jsdom":"^29.7.0","prettier":"^3.7.4","react":"^18.3.1","react-dom":"^18.3.1","rollup":"^4.9.6","serve":"^14.2.4","storybook":"^8.4.7","vite":"^5.4.11"},"gitHead":"a599f9d07f2f443d6776af276e24b6f6b532825b","_id":"jsvoice@1.1.1","_nodeVersion":"24.8.0","_npmVersion":"11.6.2","dist":{"integrity":"sha512-wAXOhQFuSmu68gdMipC0RP9MCW+xeBOhGQi8pRYYiOLVXqY7oVMNXiNvvCG7NzlY8gvKyTOe1cOeHOb2J+irfQ==","shasum":"1a00da62e52aad4b9842d57a9aa50fb80b42e143","tarball":"https://registry.npmjs.org/jsvoice/-/jsvoice-1.1.1.tgz","fileCount":156,"unpackedSize":5245912,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIAHteKbCYB2EeZoBV2YwuNCR/IvlRn2IsB5/XYf91tb/AiBkc7cHQpRnWPWl2U/b3Mzmr8Z0CPIYZv2N0bIcYhaJ8g=="}]},"_npmUser":{"name":"rasikarakhewar","email":"rasikarakhewar30102004@gmail.com"},"directories":{},"maintainers":[{"name":"rasikarakhewar","email":"rasikarakhewar30102004@gmail.com"},{"name":"p0saurabh","email":"saurabhsp0402@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/jsvoice_1.1.1_1783588107145_0.007363281912224906"},"_hasShrinkwrap":false}},"time":{"created":"2025-09-30T16:47:15.337Z","modified":"2026-07-09T09:08:27.528Z","0.1.0":"2025-09-26T16:38:00.115Z","0.1.1":"2025-09-30T16:47:15.527Z","0.2.0":"2025-10-28T17:36:17.737Z","0.2.1":"2025-10-28T17:51:27.432Z","0.2.2":"2025-12-27T12:25:10.375Z","1.0.2":"2026-01-20T09:07:14.002Z","1.1.0":"2026-01-20T15:40:28.347Z","1.1.1":"2026-07-09T09:08:27.429Z"},"bugs":{"url":"https://github.com/VoiceUI-js/VoiceUI/issues"},"author":{"name":"JSVoice Contributors"},"license":"MIT","homepage":"https://github.com/VoiceUI-js/VoiceUI#readme","keywords":["voice","voice-commands","voice-control","voice-recognition","speech","speech-recognition","speech-synthesis","text-to-speech","tts","stt","web-speech-api","voice-ui","voice-interface","accessibility","a11y","hands-free","wake-word","pattern-matching","audio-visualization","waveform","amplitude","javascript","typescript","browser","web","frontend","ui","ux","pwa","progressive-web-app","zero-dependencies","lightweight"],"repository":{"type":"git","url":"git+https://github.com/VoiceUI-js/VoiceUI.git"},"description":"Modern JavaScript voice command library with speech recognition, synthesis, pattern matching, wake word detection, and real-time audio visualization. Zero dependencies, TypeScript ready, perfect for accessibility and voice-first UIs.","maintainers":[{"name":"rasikarakhewar","email":"rasikarakhewar30102004@gmail.com"},{"name":"p0saurabh","email":"saurabhsp0402@gmail.com"}],"readme":"# JSVoice\r\n\r\n<div align=\"center\">\r\n\r\n### Modern JavaScript Voice Command Library\r\n\r\n**Add voice control to your web application. Zero dependencies. TypeScript ready.**\r\n\r\n[![npm version](https://img.shields.io/npm/v/jsvoice?style=for-the-badge&logo=npm&logoColor=white&color=CB3837)](https://www.npmjs.com/package/jsvoice)\r\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg?style=for-the-badge)](https://opensource.org/licenses/MIT)\r\n[![Downloads](https://img.shields.io/npm/dm/jsvoice?style=for-the-badge&logo=npm&logoColor=white&color=00C853)](https://www.npmjs.com/package/jsvoice)\r\n[![Bundle Size](https://img.shields.io/bundlephobia/minzip/jsvoice?style=for-the-badge&logo=webpack&logoColor=white&color=FF6F00)](https://bundlephobia.com/package/jsvoice)\r\n\r\n[Full Docs](DOCUMENTATION.md) • [User Guide](docs/USER_GUIDE.md) • [API Reference](docs/API_REFERENCE.md) • [Security](docs/SECURITY_AND_PRIVACY.md) • [Contributing](CONTRIBUTING.md)\r\n\r\n</div>\r\n\r\n---\r\n\r\n## What is JSVoice?\r\n\r\nJSVoice is a **production-ready JavaScript library** for adding voice commands and speech synthesis to web applications. Built on the Web Speech API, it provides an intuitive interface for creating voice-enabled experiences with zero dependencies.\r\n\r\n**Perfect for:**\r\n\r\n- **Accessibility** - Enable hands-free navigation for all users\r\n- **Voice-First Interfaces** - Build modern conversational UIs\r\n- **Productivity Tools** - Create voice-controlled applications\r\n- **Smart Home Dashboards** - Control IoT devices with voice\r\n- **Gaming** - Add voice command integration to games\r\n\r\n---\r\n\r\n## Why Choose JSVoice?\r\n\r\n### Zero runtime dependencies (core)\r\nThe core voice engine has **no runtime npm dependencies**. React is an **optional peer** for the UI kit only.\r\n\r\n### Three entry paths\r\n| Path | Import | Use when |\r\n|------|--------|----------|\r\n| **Core** | `createVoice` / `JSVoice` | Commands + TTS only |\r\n| **React** | `jsvoice/react` | Provider + hooks + HUD |\r\n| **Hyper Kit** | `jsvoice/react/kit` | Dock, palette, assistant, devtools |\r\n\r\n### TypeScript Support\r\nType definitions included (`src/index.d.ts` + kit types).\r\n\r\n### Feature Rich\r\nBuilt-in DOM actions, pattern matching, wake word, hybrid engines, plugins, packs, and a full voice UI kit.\r\n\r\n---\r\n\r\n## Installation\r\n\r\n**Using NPM:**\r\n```bash\r\nnpm install jsvoice\r\n```\r\n\r\n**Using Yarn:**\r\n```bash\r\nyarn add jsvoice\r\n```\r\n\r\n**Using CDN:**\r\n```html\r\n<script src=\"https://unpkg.com/jsvoice/dist/voice-ui.umd.min.js\"></script>\r\n```\r\n\r\n---\r\n\r\n## Quick Start\r\n\r\n### 1) Core (recommended factory)\r\n\r\n```javascript\r\nimport { createVoice } from 'jsvoice';\r\n\r\n// Hybrid by default: Native Web Speech → local fallback when needed\r\nconst voice = createVoice({\r\n  onStatusChange: (message) => console.log('Status:', message),\r\n});\r\n\r\nvoice.addCommand('hello world', () => {\r\n  voice.speak('Hello! How can I help you?');\r\n});\r\n\r\n// Test without mic\r\n// await voice.processText('hello world');\r\n\r\ndocument.getElementById('mic-button').addEventListener('click', () => {\r\n  voice.toggle();\r\n});\r\n```\r\n\r\n### 2) React Hyper Kit\r\n\r\n```jsx\r\nimport { createVoice } from 'jsvoice';\r\nimport { VoiceKitProvider, VoiceDock, VoiceCommandPalette } from 'jsvoice/react/kit';\r\n\r\nconst voice = createVoice();\r\nvoice.addCommand('hello', () => voice.speak('Hello'));\r\n\r\nexport function App() {\r\n  return (\r\n    <VoiceKitProvider voice={voice} theme=\"glassDark\" enableKitCommands>\r\n      <YourApp />\r\n      <VoiceDock />\r\n      <VoiceCommandPalette />\r\n    </VoiceKitProvider>\r\n  );\r\n}\r\n```\r\n\r\n**Current package version:** see `package.json` (`1.1.0`).  \r\n**Security:** see [docs/SECURITY_AND_PRIVACY.md](docs/SECURITY_AND_PRIVACY.md) before enabling voice→DOM automation in production.\r\n\r\n### Tooling\r\n\r\n```bash\r\nnpm test                 # Jest unit/integration (FakeSpeechEngine)\r\nnpm run test:e2e         # Playwright harness\r\nnpm run storybook        # Hyper Kit component stories\r\nnpm run build            # dist: core + react + kit + ui-kit + porcupine adapter\r\n```\r\n\r\nOptional on-device wake word (Picovoice Porcupine peers): [docs/PORCUPINE_WAKE.md](docs/PORCUPINE_WAKE.md)\r\n\r\n---\r\n\r\n## Key Features\r\n\r\n### Voice Recognition\r\nReal-time speech-to-text conversion with continuous listening mode, automatic restart on failure, and support for 50+ languages including English, Spanish, French, German, Japanese, Chinese, and more.\r\n\r\n### Speech Synthesis\r\nText-to-speech output with multiple voices, customizable speech parameters including rate, pitch, and volume, plus intelligent queue management for sequential speech.\r\n\r\n### Custom Commands\r\nEasy registration of exact phrase commands and pattern-based commands with automatic variable extraction for dynamic command handling.\r\n\r\n### Wake Word Detection\r\nHands-free activation with configurable wake words like \"Hey Assistant\".\r\n*Note: Currently uses cloud-based recognition APIs. On-device WASM detection is on the roadmap.*\r\n\r\n### Pattern Matching\r\nExtract variables from voice commands automatically using simple pattern syntax like `{variable}` for dynamic command processing.\r\n\r\n\r\n\r\n### Pluggable Engines & Hybrid Mode\r\nJSVoice now uses a smart **Hybrid Engine** by default. It prioritizes the browser's Native Web Speech API for zero-latency performance but automatically falls back to a local, private Transformers.js (Whisper) model if the native API is unsupported (e.g., Firefox) or unreliable.\r\n\r\n### Hyper Voice UI Kit\r\nPremium voice-first React UI system: dock, orb, HUD, command palette, transcript, debug lab, onboarding, rule/widget builders, and theming.\r\n\r\n```js\r\nimport { createVoice } from 'jsvoice';\r\nimport { VoiceKitProvider, VoiceDock, VoiceCommandPalette } from 'jsvoice/react/kit';\r\n\r\nconst voice = createVoice();\r\n// <VoiceKitProvider voice={voice} theme=\"glassDark\"><VoiceDock /><VoiceCommandPalette /></VoiceKitProvider>\r\n```\r\n\r\nSee [docs/HYPER_VOICE_UI_KIT.md](docs/HYPER_VOICE_UI_KIT.md). Demo: `demo-app` → `/ui/hyper`.\r\n\r\n### Plugins & Extensions (New in v2.4)\r\nJSVoice features a modular plugin system to keep the core lightweight. Import only what you need:\r\n\r\n- **VAD Plugin:** Auto-stop listening when silence is detected. `import VadPlugin from 'jsvoice/plugins/VadPlugin'`\r\n- **Hotkeys Plugin:** Add Push-to-Talk (Spacebar) and Toggle shortcuts. `import HotkeysPlugin from 'jsvoice/plugins/HotkeysPlugin'`\r\n- **Fuzzy Match:** Support synonyms and \"close enough\" phrases. `import FuzzyMatchPlugin from 'jsvoice/plugins/FuzzyMatchPlugin'`\r\n- **Session Recorder:** Debug, replay, and analyze sessions. `import SessionRecorderPlugin from 'jsvoice/plugins/SessionRecorderPlugin'`\r\n- **Command Packs:** Pre-built commands for Navigation, Forms, and Media. `import { NavigationPack } from 'jsvoice/packs/basic'`\r\n\r\n## Advanced Commands (New in v2.4)\r\nJSVoice v2.4 supports **Typed Entities** and Confidence Checks.\r\n```javascript\r\n// Register a command with types\r\nvoice.registerCommand('set volume to {level:int}', ({ level }) => {\r\n    // level is automatically parsed as an Integer\r\n    player.setVolume(level);\r\n});\r\n\r\n// Register with confidence threshold (0.0 - 1.0)\r\nvoice.registerCommand('delete account', deleteFn, { \r\n    minConfidence: 0.95 \r\n// Register with confidence threshold (0.0 - 1.0)\r\nvoice.registerCommand('delete account', deleteFn, { \r\n    minConfidence: 0.95 \r\n});\r\n```\r\n\r\n## React Integration (New in v2.4)\r\nJSVoice v2.4 includes a dedicated React package for seamless integration.\r\n\r\n### Setup\r\n```javascript\r\n// _app.js or RootLayout\r\nimport { VoiceProvider } from 'jsvoice/react';\r\nimport { createVoice } from 'jsvoice';\r\n\r\nconst voice = createVoice();\r\n\r\nexport default function App({ Component, pageProps }) {\r\n  return (\r\n    <VoiceProvider voice={voice}>\r\n      <Component {...pageProps} />\r\n    </VoiceProvider>\r\n  );\r\n}\r\n```\r\n\r\n### Hooks & Components\r\n```javascript\r\nimport { useVoice, useVoiceStatus } from 'jsvoice/react';\r\nimport { PushToTalkButton } from 'jsvoice/react/components';\r\n\r\nfunction Microphone() {\r\n  const voice = useVoice();\r\n  const status = useVoiceStatus(s => s.status);\r\n  const transcript = useVoiceStatus(s => s.transcript);\r\n\r\n  return (\r\n    <div>\r\n      <p>Status: {status}</p>\r\n      <p>{transcript.partial}</p>\r\n      <PushToTalkButton />\r\n    </div>\r\n  );\r\n}\r\n```\r\n\r\n## Voice UI Kit (New in v2.4)\r\nA modular system of 15+ voice-native UI patterns ready to drop into your app.\r\nIncludes:\r\n- **Intent Badges:** Visualize user state (\"Urgent\", \"Calm\").\r\n- **Focus Mode:** Time-boxed interaction guards.\r\n- **Confirmation Overlays:** Safety layer for dangerous commands.\r\n- **Tour Mode:** Voice-driven onboarding.\r\n- And 10+ more modules.\r\n\r\nImport the plugin and components:\r\n```javascript\r\nimport VoiceKitPlugin from 'jsvoice/plugins/kit';\r\nimport { IntentBadge, ConfirmationOverlay } from 'jsvoice/react/kit/components';\r\n\r\n// 1. Install Plugin\r\nvoice.use(VoiceKitPlugin);\r\n\r\n// 2. Use Components\r\nfunction App() {\r\n  return (\r\n    <>\r\n      <ConfirmationOverlay />\r\n      <Header>\r\n         <IntentBadge />\r\n      </Header>\r\n    </>\r\n  )\r\n}\r\n```\r\n\r\n### Advanced UI Kit Modules (New)\r\nFor complex applications, JSVoice provides specialized modules for dynamic layouts, constraints, and data binding.\r\n\r\n```javascript\r\nimport { createVoice } from 'jsvoice';\r\nimport WidgetPlugin from 'jsvoice/ui-kit/modules/widgets';\r\nimport UndoPlugin from 'jsvoice/ui-kit/modules/undo';\r\n\r\n// 1. Initialize\r\nconst voice = createVoice();\r\nvoice.use(WidgetPlugin);\r\nvoice.use(UndoPlugin);\r\n\r\n// 2. React Components\r\nimport { WidgetCanvas } from 'jsvoice/ui-kit/modules/widgets/components';\r\n\r\nfunction App() {\r\n  return <WidgetCanvas />;\r\n}\r\n```\r\n\r\n### UI Kit Modules Reference\r\n\r\nEach module comes with pre-built voice commands and React components.\r\n\r\n**1. Widgets (`jsvoice/ui-kit/modules/widgets`)**\r\n*   **Purpose:** Dynamic layout management.\r\n*   **Commands:**\r\n    *   `\"create panel for {name}\"` -> Adds a new widget.\r\n    *   `\"remove widget {name}\"` -> Deletes a widget.\r\n    *   `\"rename widget {old} to {new}\"` -> Renames a widget.\r\n*   **Component:** `<WidgetCanvas />`\r\n\r\n**2. Rules (`jsvoice/ui-kit/modules/rules`)**\r\n*   **Purpose:** User-defined behavior rules.\r\n*   **Commands:**\r\n    *   `\"always show errors\"` / `\"never hide warnings\"` -> Adds a rule.\r\n    *   `\"remove rule {description}\"`\r\n    *   `\"list rules\"`\r\n*   **Component:** `<RulesPanel />`\r\n\r\n**3. Links (`jsvoice/ui-kit/modules/links`)**\r\n*   **Purpose:** Data binding between widgets.\r\n*   **Commands:**\r\n    *   `\"link {source} to {target}\"` -> Syncs data between widgets.\r\n    *   `\"filter {widget} by {value}\"` -> Propagates filter to linked widgets.\r\n*   **Component:** `<LinksPanel />`\r\n\r\n**4. Constraints (`jsvoice/ui-kit/modules/constraints`)**\r\n*   **Purpose:** Layout locking.\r\n*   **Commands:**\r\n    *   `\"pin {widget}\"` / `\"keep {widget} always visible\"`\r\n    *   `\"unpin {widget}\"`\r\n*   **Component:** `<ConstraintsPanel />`\r\n\r\n**5. Bookmarks (`jsvoice/ui-kit/modules/bookmarks`)**\r\n*   **Purpose:** Save/restore state.\r\n*   **Commands:**\r\n    *   `\"bookmark this as {name}\"`\r\n    *   `\"save this state\"`\r\n    *   `\"jump to bookmark {name}\"`\r\n*   **Component:** `<BookmarkList />`\r\n\r\n**6. Summaries (`jsvoice/ui-kit/modules/summaries`)**\r\n*   **Purpose:** Heuristic event logs and insights.\r\n*   **Commands:**\r\n    *   `\"summarize usage\"` / `\"what happened\"`\r\n    *   `\"summarize last {n} events\"`\r\n*   **Component:** `<SummaryPanel />`\r\n\r\n**7. Voice Mode (`jsvoice/ui-kit/modules/voice-mode`)**\r\n*   **Purpose:** Eyes-free accessibility layer with screen reading.\r\n*   **Commands:**\r\n    *   `\"voice only mode\"` -> Activates full-screen overlay.\r\n    *   `\"exit voice mode\"`\r\n    *   `\"read current state\"` / `\"next item\"`\r\n*   **Component:** `<VoiceModeOverlay />`\r\n\r\n**8. Undo (`jsvoice/ui-kit/modules/undo`)**\r\n*   **Purpose:** Granular history management by category.\r\n*   **Commands:**\r\n    *   `\"undo last action\"`\r\n    *   `\"undo only filters\"`\r\n    *   `\"revert layout\"`\r\n*   **Component:** `<UndoStackViewer />`\r\n\r\n**9. Repair (`jsvoice/ui-kit/modules/repair`)**\r\n*   **Purpose:** Smart error correction interactions.\r\n*   **Commands:**\r\n    *   `\"that's not what I meant\"` -> Opens suggestion modal.\r\n    *   `\"fix this\"`\r\n    *   `\"apply option {number}\"`\r\n*   **Component:** `<RepairSuggestionModal />`\r\n\r\nAll modules are zero-rupee, strictly local, and SSR-safe.\r\n\r\n### \"Free Mode\" (Private & Offline)\r\nYou can force JSVoice to run entirely offline using the `engineMode: 'local'` option. This uses [Transformers.js](https://huggingface.co/docs/transformers.js) to run OpenAI's Whisper model directly in the browser via WebAssembly/WebGPU. No data leaves the device.\r\n\r\n---\r\n\r\n## Native vs. Local Engine\r\n\r\n| Feature | Native (Web Speech API) | Local (Transformers.js) |\r\n| :--- | :--- | :--- |\r\n| **Speed** | Instant (Cloud-assisted) | Fast (Device dependent) |\r\n| **Accuracy** | High (Google/Apple Cloud) | Good (Whisper Tiny/Base) |\r\n| **Privacy** | Data sent to Big Tech | **100% Private / Offline** |\r\n| **Cost** | Free (Unlimited) | Free (Zero Rupee) |\r\n| **Browser Support** | Chrome, Safari, Edge | **All Browsers** (Firefox included) |\r\n| **Setup** | Zero setup | First-load model download (~30MB) |\r\n\r\n---\r\n\r\n## Auto Mode & Fallback Policy\r\nJSVoice v2.2 introduces an explicit `HybridPolicy`. By default (`native`), the browser's Web Speech API is used. If this fails due to network issues or browser incompatibility (e.g., Firefox), the system checks the `CircuitBreaker`. If the breaker opens (3 faults/60s), JSVoice automatically activates the **Local Engine** (Transformers.js/Whisper) to ensure voice commands continue to work offline.\r\n\r\n## Permission Denied Behavior\r\n**Security Note:** If a user explicitly denies Microphone permission (`NotAllowedError`), JSVoice will **NOT** attempt to fall back or bypass this. The stream manager enters a `stopped` state and requires user intervention (UI button click) to re-request access.\r\n\r\n## Local Engine Performance\r\nThe Local Engine runs `whisper-tiny` (approx 30MB) in a Web Worker.\r\n*   **First Load:** Downloads model from CDN (cached via Cache API).\r\n*   **Privacy:** All audio processing happens on-device.\r\n*   **Mobile Data:** Uses `navigator.connection.saveData` to avoid downloading on restricted networks unless overridden.\r\n\r\n---\r\n\r\n### Built-in Commands\r\nSeven categories of pre-built commands including scrolling, zooming, clicking, form filling, content reading, theme control, and navigation.\r\n\r\n### Multi-language Support\r\nSupport for 50+ languages through the Web Speech API including en-US, es-ES, fr-FR, de-DE, ja-JP, zh-CN, and many more.\r\n\r\n---\r\n\r\n## Built-in Commands\r\n\r\nJSVoice includes pre-built voice commands for common web interactions:\r\n\r\n**Scrolling Commands:**\r\n- `scroll down` - Scroll down 500 pixels\r\n- `scroll up` - Scroll up 500 pixels\r\n- `scroll to bottom` - Jump to page bottom\r\n- `scroll to top` - Jump to page top\r\n\r\n**Zoom Control:**\r\n- `zoom in` - Increase zoom by 10%\r\n- `zoom out` - Decrease zoom by 10%\r\n- `reset zoom` - Reset to 100%\r\n\r\n**Element Interaction:**\r\n- `click [text]` - Click element containing text\r\n- `click button [text]` - Click specific button\r\n\r\n**Form Filling:**\r\n- `type [value] in [field]` - Fill input field\r\n- `fill [value] in [field]` - Alternative syntax\r\n\r\n**Content Reading:**\r\n- `read this page` - Read entire page aloud\r\n- `read this paragraph` - Read nearest text block\r\n- `read section [text]` - Read specific section\r\n\r\n**Theme Control:**\r\n- `toggle dark mode` - Switch between light and dark themes\r\n- `dark mode on` - Enable dark mode\r\n- `dark mode off` - Enable light mode\r\n\r\n**Navigation:**\r\n- `open new tab` - Open blank tab\r\n- `go to [website]` - Open website (supports Google, YouTube, GitHub, etc.)\r\n\r\n---\r\n\r\n## Advanced Features\r\n\r\n### Pattern Commands with Variables\r\n\r\nExtract variables from voice commands for dynamic functionality:\r\n\r\n```javascript\r\nvoice.addPatternCommand('set volume to {level}', (args) => {\r\n  const volume = parseInt(args.level);\r\n  audioElement.volume = volume / 100;\r\n  voice.speak(`Volume set to ${volume} percent`);\r\n});\r\n\r\n// User says: \"set volume to 75\"\r\n// System extracts: { level: \"75\" }\r\n// Result: Volume set to 75%\r\n```\r\n\r\n### Wake Word Detection (Text-Stream Based)\r\n\r\n**⚠️ PRIVACY WARNING:**\r\nThis feature currently relies on **continuous text streaming**. Even if you are only waiting for \"Hey Computer\", the audio is being sent to the speech recognition provider (e.g., Google, OpenAI) to be transcribed into text *before* JSVoice checks for the keyword.\r\n*   **Do not use this** if you require strictly offline privacy (unless using a local engine).\r\n*   **Do not use this** with paid APIs (like Whisper) for \"always on\" listening, as it will incur massive costs.\r\n\r\nTo enable wake word:\r\n\r\n> ⚠️ **Privacy Notice:** This feature currently relies on the browser's speech recognition engine (Web Speech API). In Chrome, this means audio is streamed to Google servers effectively continuously to detect the phrase. For strictly private/offline environments, this is not yet recommended.\r\n\r\n```javascript\r\nconst voice = new JSVoice({\r\n  wakeWord: 'hey assistant',\r\n  wakeWordTimeout: 5000,\r\n  onWakeWordDetected: (word) => {\r\n    console.log('Wake word detected:', word);\r\n  }\r\n});\r\n\r\n// User says: \"hey assistant\"\r\n// System activates and listens\r\n// User says: \"scroll down\"\r\n// System executes command\r\n```\r\n\r\n\r\n\r\n---\r\n\r\n## API Reference\r\n\r\n### Core Methods\r\n\r\n**start()**  \r\nStart speech recognition and return a promise.\r\n\r\n```javascript\r\nawait voice.start();\r\n```\r\n\r\n**stop()**  \r\nStop speech recognition immediately.\r\n\r\n```javascript\r\nvoice.stop();\r\n```\r\n\r\n**toggle()**  \r\nToggle speech recognition on or off.\r\n\r\n```javascript\r\nvoice.toggle();\r\n```\r\n\r\n**speak(text, lang)**  \r\nConvert text to speech with optional language parameter.\r\n\r\n```javascript\r\nvoice.speak('Hello world');\r\nvoice.speak('Bonjour', 'fr-FR');\r\n```\r\n\r\n### Command Methods\r\n\r\n**addCommand(phrase, callback)**  \r\nRegister an exact phrase command.\r\n\r\n```javascript\r\nvoice.addCommand('hello', () => {\r\n  console.log('Hello command executed');\r\n});\r\n```\r\n\r\n**removeCommand(phrase)**  \r\nRemove a registered command.\r\n\r\n```javascript\r\nvoice.removeCommand('hello');\r\n```\r\n\r\n**addPatternCommand(pattern, callback)** (Deprecated) \r\n Use `addCommand` with `{ type: 'pattern' }` instead.\r\n *Register a pattern-based command with variable extraction.*\r\n\r\n```javascript\r\n// Old (Deprecated):\r\n// voice.addPatternCommand('search for {query}', (args) => { ... });\r\n\r\n// New Standard (v2.4+):\r\nvoice.addCommand('search for {query}', (args) => {\r\n  console.log('Searching for:', args.query);\r\n}, { isPattern: true });\r\n```\r\n\r\n**removePatternCommand(pattern)** (Deprecated) \r\nUse `removeCommand` instead.\r\n*Remove a pattern command.*\r\n\r\n```javascript\r\nvoice.removeCommand('search for {query}');\r\n```\r\n\r\n### Debugging\r\n\r\nJSVoice v2.4+ is silent by default. To see internal logs, enable debug mode:\r\n\r\n```javascript\r\nconst voice = new JSVoice({\r\n  debug: true, // Enables verbose logging\r\n  onStatusChange: (msg) => console.log(msg)\r\n});\r\n```\r\n\r\n\r\n\r\n### Properties\r\n\r\n**isListening**  \r\nReturns true if currently listening for voice commands.\r\n\r\n```javascript\r\nif (voice.isListening) {\r\n  console.log('Listening for commands...');\r\n}\r\n```\r\n\r\n**microphoneAllowed**  \r\nReturns true if microphone permission has been granted.\r\n\r\n```javascript\r\nif (voice.microphoneAllowed) {\r\n  console.log('Microphone access granted');\r\n}\r\n```\r\n\r\n**isApiSupported**  \r\nStatic property that returns true if Web Speech API is supported.\r\n\r\n```javascript\r\nif (JSVoice.isApiSupported) {\r\n  const voice = new JSVoice();\r\n}\r\n```\r\n\r\n**voiceFeedback**  \r\nReturns the latest status message.\r\n\r\n```javascript\r\nconsole.log(voice.voiceFeedback);\r\n```\r\n\r\n---\r\n\r\n## Configuration Options\r\n\r\n```javascript\r\nconst voice = new JSVoice({\r\n  // Recognition settings\r\n  continuous: true,              // Keep listening continuously\r\n  interimResults: true,          // Show interim recognition results\r\n  lang: 'en-US',                // Recognition language\r\n  autoRestart: true,            // Auto-restart on error\r\n  restartDelay: 500,            // Restart delay in milliseconds\r\n  engines: [],                  // Custom engine classes (try first)\r\n  engine: null,                 // Specific engine instance\r\n  \r\n  // Wake word settings\r\n  wakeWord: null,               // Wake word phrase (e.g., 'hey assistant')\r\n  wakeWordTimeout: 5000,        // Timeout after wake word in milliseconds\r\n  \r\n  // Initial commands\r\n  commands: {},                 // Object of exact phrase commands\r\n  patternCommands: [],          // Array of pattern commands\r\n  \r\n  // Event callbacks\r\n  onSpeechStart: () => {},\r\n  onSpeechEnd: () => {},\r\n  onCommandRecognized: (phrase, raw, result) => {},\r\n  onCommandNotRecognized: (raw) => {},\r\n  onActionPerformed: (action, payload) => {},\r\n  onMicrophonePermissionGranted: () => {},\r\n  onMicrophonePermissionDenied: (error) => {},\r\n  onWakeWordDetected: (word) => {},\r\n  onError: (error) => {},\r\n  onStatusChange: (message) => {}\r\n});\r\n```\r\n\r\n---\r\n\r\n## Browser Support\r\n\r\n**Fully Supported:**\r\n- Google Chrome 25+\r\n- Microsoft Edge 79+\r\n- Opera 27+\r\n\r\n**Partially Supported:**\r\n- Safari 14.1+ (iOS 14.5+ required)\r\n\r\n**Not Supported:**\r\n- Mozilla Firefox (Web Speech API not implemented)\r\n\r\n**Requirements:**\r\n- HTTPS connection (required for microphone access)\r\n- User gesture to initiate (click or tap)\r\n- Microphone permission granted by user\r\n\r\n**Browser Detection:**\r\n\r\n```javascript\r\nif (JSVoice.isApiSupported) {\r\n  // Initialize voice features\r\n  const voice = new JSVoice();\r\n} else {\r\n  // Show fallback message\r\n  console.warn('Voice commands not supported in this browser');\r\n  alert('Please use Chrome, Edge, or Safari for voice features');\r\n}\r\n```\r\n\r\n---\r\n\r\n## Examples\r\n\r\n### React Integration\r\n\r\n```jsx\r\nimport { useEffect, useRef } from 'react';\r\nimport JSVoice from 'jsvoice';\r\n\r\nfunction VoiceComponent() {\r\n  const voiceRef = useRef(null);\r\n\r\n  useEffect(() => {\r\n    voiceRef.current = new JSVoice({\r\n      onStatusChange: (msg) => console.log(msg)\r\n    });\r\n\r\n    return () => voiceRef.current?.stop();\r\n  }, []);\r\n\r\n  return (\r\n    <button onClick={() => voiceRef.current?.toggle()}>\r\n      Toggle Voice Control\r\n    </button>\r\n  );\r\n}\r\n```\r\n\r\n### Vue Integration\r\n\r\n```vue\r\n<template>\r\n  <button @click=\"toggleVoice\">Toggle Voice Control</button>\r\n</template>\r\n\r\n<script>\r\nimport JSVoice from 'jsvoice';\r\n\r\nexport default {\r\n  data() {\r\n    return { voice: null };\r\n  },\r\n  mounted() {\r\n    this.voice = new JSVoice({\r\n      onStatusChange: (msg) => console.log(msg)\r\n    });\r\n  },\r\n  methods: {\r\n    toggleVoice() {\r\n      this.voice.toggle();\r\n    }\r\n  },\r\n  beforeUnmount() {\r\n    this.voice?.stop();\r\n  }\r\n}\r\n</script>\r\n```\r\n\r\n### TypeScript\r\n\r\n```typescript\r\nimport JSVoice, { JSVoiceOptions } from 'jsvoice';\r\n\r\nconst options: JSVoiceOptions = {\r\n  lang: 'en-US',\r\n  continuous: true,\r\n  onCommandRecognized: (phrase, raw, result) => {\r\n    console.log(`Recognized: ${phrase}`);\r\n  }\r\n};\r\n\r\nconst voice = new JSVoice(options);\r\n```\r\n\r\n---\r\n\r\n## Use Cases\r\n\r\n### Accessibility\r\n\r\nEnable hands-free navigation for users with disabilities:\r\n\r\n```javascript\r\nvoice.addCommand('next page', () => {\r\n  window.location.href = getNextPageUrl();\r\n});\r\n\r\nvoice.addCommand('previous page', () => {\r\n  window.history.back();\r\n});\r\n\r\nvoice.addCommand('read content', () => {\r\n  const text = document.body.innerText;\r\n  voice.speak(text);\r\n});\r\n```\r\n\r\n### E-Commerce\r\n\r\nCreate voice-controlled shopping experiences:\r\n\r\n```javascript\r\nvoice.addPatternCommand('add {quantity} {product} to cart', (args) => {\r\n  addToCart(args.product, parseInt(args.quantity));\r\n  voice.speak(`Added ${args.quantity} ${args.product} to your cart`);\r\n});\r\n\r\nvoice.addCommand('checkout', () => {\r\n  navigateToCheckout();\r\n  voice.speak('Proceeding to checkout');\r\n});\r\n```\r\n\r\n### Smart Home Dashboard\r\n\r\nControl IoT devices with voice commands:\r\n\r\n```javascript\r\nvoice.addPatternCommand('turn {device} {state}', (args) => {\r\n  controlDevice(args.device, args.state);\r\n  voice.speak(`Turning ${args.device} ${args.state}`);\r\n});\r\n\r\nvoice.addPatternCommand('set {device} to {value}', (args) => {\r\n  setDeviceValue(args.device, args.value);\r\n  voice.speak(`Setting ${args.device} to ${args.value}`);\r\n});\r\n```\r\n\r\n### Gaming\r\n\r\nAdd voice commands to games:\r\n\r\n```javascript\r\nvoice.addCommand('attack', () => player.attack());\r\nvoice.addCommand('defend', () => player.defend());\r\nvoice.addCommand('use potion', () => player.usePotion());\r\nvoice.addCommand('open inventory', () => ui.showInventory());\r\n```\r\n\r\n---\r\n\r\n## Documentation\r\n\r\n**Complete Guides:**\r\n- [Full API Documentation](DETAILED_DOCUMENTATION.md) - Comprehensive reference with all methods and options\r\n- [Quick Start Guide](#quick-start) - Get started in minutes\r\n- [Examples](examples/) - Working code samples and demonstrations\r\n- [Configuration Options](DETAILED_DOCUMENTATION.md#configuration-options) - All settings explained\r\n- [Troubleshooting](DETAILED_DOCUMENTATION.md#troubleshooting) - Common issues and solutions\r\n\r\n**Additional Resources:**\r\n- [Contributing Guide](CONTRIBUTING.md) - How to contribute to the project\r\n- [Changelog](CHANGELOG.md) - Version history and release notes\r\n- [Code of Conduct](CODE_OF_CONDUCT.md) - Community guidelines\r\n\r\n---\r\n\r\n## Performance & Scaling\r\n\r\n**Bundle Size:** 32KB minified and gzipped\r\n**Dependencies:** Zero external libraries\r\n**Initialization:** Under 50ms startup time\r\n\r\n**Scaling (New in v2.4):**\r\n*   **O(1) Command Matching:** Exact phrase matching now uses Hash Maps, maintaining instant response times even with 10,000+ commands.\r\n*   **Scope Optimization:** Only commands in the current scope are evaluated, further reducing latency in complex apps.\r\n\r\n**Microphone Handling:**\r\n*   Smart stream management ensures the microphone is released immediately when not in use or when permissions differ from needs.\r\n\r\n**Optimization:**\r\n- Tree-shaking compatible for smaller bundles\r\n- Source maps included for debugging\r\n- Multiple build formats (ESM, CJS, UMD)\r\n- Lazy loading support\r\n\r\n---\r\n\r\n## Security and Privacy\r\n\r\n**Data Handling:**\r\n- All processing happens in the browser\r\n- No data sent to external servers\r\n- No data collection or storage\r\n- No tracking or analytics\r\n\r\n**Permissions:**\r\n- Explicit user consent required for microphone\r\n- HTTPS required for security\r\n- Permissions revocable anytime\r\n- Transparent permission requests\r\n\r\n---\r\n\r\n## Contributing\r\n\r\nWe welcome contributions from the community!\r\n\r\n**How to Contribute:**\r\n\r\n1. Fork the repository\r\n2. Create a feature branch\r\n3. Make your changes\r\n4. Add tests if applicable\r\n5. Submit a pull request\r\n\r\n**Guidelines:**\r\n- Follow existing code style\r\n- Add documentation for new features\r\n- Include examples where helpful\r\n- Write clear commit messages\r\n\r\nSee [CONTRIBUTING.md](CONTRIBUTING.md) for detailed guidelines.\r\n\r\n---\r\n\r\n## Developer Suite (Dev Suite)\r\nJSVoice v2.4 includes a built-in Developer Suite to inspect and debug voice interactions.\r\n*   **/dev/console**: Shows real-time engine state, circuit breaker status, fallback events, model progress, processing time, and transcript stream.\r\n*   **/dev/inspector**: Traces command evaluation, showing match scores, rejected reasons (e.g., cooldown, scope mismatch), and execution latency.\r\n*   **/dev/builder**: A \"Simulate Transcript\" tool to test command matching without speaking, including a collision tester.\r\n*   **/dev/hud**: A heads-up display showing recording/processing states, active engine name, and fallback notices.\r\n\r\n---\r\n\r\n## Running the Demo App (Next.js)\r\n\r\nTo see the **Voice UI Kit** in action:\r\n\r\n1.  Navigate to the demo folder:\r\n    ```bash\r\n    cd demo-app\r\n    ```\r\n2.  Install dependencies:\r\n    ```bash\r\n    npm install\r\n    ```\r\n3.  Run the development server:\r\n    ```bash\r\n    npm run dev\r\n    ```\r\n4.  Open [http://localhost:3000](http://localhost:3000) and click **\"Launch Demo Hub\"**.\r\n\r\n---\r\n\r\n## Support\r\n\r\n**Get Help:**\r\n- [Full Documentation](DETAILED_DOCUMENTATION.md)\r\n- [GitHub Issues](https://github.com/VoiceUI-js/VoiceUI/issues)\r\n- [GitHub Discussions](https://github.com/VoiceUI-js/VoiceUI/discussions)\r\n\r\n**Report Issues:**\r\n- Bug reports via GitHub Issues\r\n- Feature requests via GitHub Discussions\r\n- Security issues via email\r\n\r\n---\r\n\r\n## License\r\n\r\nMIT License - see [LICENSE](LICENSE) file for details.\r\n\r\nFree for commercial and personal use.\r\n\r\n---\r\n\r\n## Links\r\n\r\n- [NPM Package](https://www.npmjs.com/package/jsvoice)\r\n- [GitHub Repository](https://github.com/VoiceUI-js/VoiceUI)\r\n- [Full Documentation](DETAILED_DOCUMENTATION.md)\r\n- [Live Examples](examples/)\r\n- [Issue Tracker](https://github.com/VoiceUI-js/VoiceUI/issues)\r\n\r\n---\r\n\r\n## Acknowledgments\r\n\r\nBuilt by the open-source community.\r\n\r\nThanks to all [contributors](https://github.com/VoiceUI-js/VoiceUI/graphs/contributors) who helped improve JSVoice.\r\n\r\n---\r\n\r\n<div align=\"center\">\r\n\r\n**Made for the JavaScript community**\r\n\r\n[⬆ Back to Top](#jsvoice)\r\n\r\n</div>\r\n","readmeFilename":"README.md"}