UNPKG

@progress/kendo-ui

Version:

This package is part of the [Kendo UI for jQuery](http://www.telerik.com/kendo-ui) suite.

3 lines 6.64 kB
/* @license */ (function(e,t){typeof exports==`object`&&typeof module<`u`?t(exports,require(`kendo.core.min.js`),require(`kendo.button.min.js`)):typeof define==`function`&&define.amd?define([`exports`,`kendo.core.min`,`kendo.button.min`],t):(e=typeof globalThis<`u`?globalThis:e||self,t((e.kendo=e.kendo||{},e.kendo._globals=e.kendo._globals||{},e.kendo._globals.Speechtotextbutton={}),e.kendo._globals.Core,e.kendo._globals.Button))})(this,function(e,t,n){Object.defineProperties(e,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});let r=`start`,i=`result`,a=`error`,o={lang:`en-US`,continuous:!1,interimResults:!1,maxAlternatives:1,events:{[r]:null,end:null,[i]:null,[a]:null}};function s(){return window?window.SpeechRecognition||window.webkitSpeechRecognition:void 0}var c=class{constructor(e){this.recognition=null,this.isListening=!1,this.options={...o},this.handleResult=e=>{this.triggerOnResult(e)},this.handleError=e=>{this.triggerOnError(e)},this.handleEnd=()=>{this.triggerOnEnd(),this.isListening=!1},this.handleStart=()=>{this.triggerOnStart(),this.isListening=!0},this.init(e)}init(e){let t=s();if(!t){console.error(`Speech recognition is not supported in this browser.`),this.recognition=null;return}this.recognition=new t,this.setOptions(e),this.bindEvents()}destroy(){this.unbindEvents(),this.isListening=!1}bindEvents(){this.recognition&&(this.recognition.onresult=this.handleResult,this.recognition.onerror=this.handleError,this.recognition.onend=this.handleEnd,this.recognition.onstart=this.handleStart)}unbindEvents(){this.recognition&&=(this.recognition.onresult=null,this.recognition.onerror=null,this.recognition.onend=null,this.recognition.onstart=null,this.recognition.abort(),null)}setOptions(e){if(!this.recognition)return;let t={...this.options.events,...e.events};this.options={...this.options,...e,events:t};let{lang:n,continuous:r,interimResults:i,maxAlternatives:a}=this.options;Object.assign(this.recognition,{lang:n,continuous:r,interimResults:i,maxAlternatives:a})}triggerOnStart(){this.options.events[r]&&this.options.events[r]()}triggerOnEnd(){this.options.events.end&&this.options.events.end()}triggerOnResult(e){this.options.events[i]&&this.options.events[i](e)}triggerOnError(e){this.options.events[a]&&this.options.events[a](e)}start(){this.recognition&&!this.isListening&&this.recognition.start()}stop(){this.recognition&&this.isListening&&this.recognition.stop()}abort(){this.recognition&&this.isListening&&this.recognition.abort()}isSupported(){return!!s()}isActive(){return this.isListening}};let l={id:`speechtotextbutton`,name:`SpeechToTextButton`,category:`web`,description:`The SpeechToTextButton widget is an extension of the Kendo UI Button that allows for speech-to-text input.`,depends:[`core`,`button`]};(function(e,t){let n=window.kendo,r=n.ui,i=r.Button,a=i.extend({init:function(t,n){i.fn.init.call(this,t,e.extend({icon:this.options.icon},n)),e(t).addClass(`k-speech-to-text-button`).attr(`aria-live`,`polite`),this._isListening=!1,this._initSpeechRecognition(),this._updateIcon()},_initSpeechRecognition:function(){if(this.options.integrationMode!==`webSpeech`)return;if(!c){this.enable(!1);return}let e=this;this.speechRecognition=new c({lang:this.options.lang,interimResults:this.options.interimResults,maxAlternatives:this.options.maxAlternatives,continuous:this.options.continuous,events:{start:function(){e._handleStart()},end:function(){e._handleEnd()},result:function(t){e._handleResult(t)},error:function(t){e._handleError(t)}}}),this.speechRecognition.isSupported()||(this.enable(!1),this.trigger(`error`,{error:this.options.messages.unsupported}))},_handleStart:function(){this._isListening=!0,this.element.addClass(`k-listening`),this._updateIcon(),this.trigger(`start`)},_handleEnd:function(){this._isListening=!1,this.element.removeClass(`k-listening`),this._updateIcon(),this.trigger(`end`)},_handleResult:function(e){let t=e.results,n=t[t.length-1],r=[];for(let e=0;e<n.length;e++)r.push({transcript:n[e].transcript,confidence:n[e].confidence});this.trigger(`result`,{isFinal:n.isFinal,alternatives:r})},_handleError:function(e){this._isListening=!1,this.element.removeClass(`k-listening`),this._updateIcon();let t=e&&(e.error||e.message)||`Unknown error`;this.trigger(`error`,{error:t})},options:{name:`SpeechToTextButton`,icon:`microphone-outline`,stopIcon:`stop-sm`,integrationMode:`webSpeech`,lang:`en-US`,continuous:!1,interimResults:!1,maxAlternatives:1,messages:{unsupported:`Speech recognition is not supported in this browser.`,notInitialized:`Speech recognition engine not initialized.`,start:`Start speech recognition`,stop:`Stop speech recognition`}},events:[`start`,`end`,`result`,`error`,`click`],_updateIcon:function(){let e=this.element.find(`.k-icon, .k-svg-icon`),t=this.isListening()?this.options.stopIcon:this.options.icon,r=this.isListening()?this.options.messages.stop:this.options.messages.start;e.length&&n.ui.icon(e,{icon:t}),this.element.attr(`aria-label`,r)},isListening:function(){return!!this._isListening},_click:function(e){if(i.fn._click.call(this,e),!e.isDefaultPrevented()){if(this.options.integrationMode===`webSpeech`){if(!this.speechRecognition||!this.speechRecognition.isSupported()){this.trigger(`error`,{error:this.options.messages.unsupported});return}this.isListening()?this.speechRecognition.stop():this.speechRecognition.start()}else if(this.options.integrationMode===`none`){let e=this.isListening()?`end`:`start`,t={sender:this};this.trigger(e,t),this._isListening=!this.isListening(),this._updateIcon()}}},startRecognition:function(){if(this.options.enable){if(!this.speechRecognition){this.trigger(`error`,{error:this.options.messages.notInitialized});return}if(!this.speechRecognition.isSupported()){this.trigger(`error`,{error:this.options.messages.unsupported});return}this.isListening()||this.speechRecognition.start()}},stopRecognition:function(){this.speechRecognition&&this.isListening()&&this.speechRecognition.stop()},abortRecognition:function(){this.speechRecognition&&this.isListening()&&this.speechRecognition.abort()},destroy:function(){this.speechRecognition&&=(this.speechRecognition.stop(),typeof this.speechRecognition.destroy==`function`&&this.speechRecognition.destroy(),null),e(this.element).removeClass(`k-speech-to-text-button`),i.fn.destroy.call(this)}});n.cssProperties.registerPrefix(`SpeechToTextButton`,`k-button-`),n.cssProperties.registerValues(`SpeechToTextButton`,[{prop:`rounded`,values:n.cssProperties.roundedValues.concat([[`full`,`full`]])}]),r.plugin(a)})(window.kendo.jQuery);var u=kendo;e.__meta__=l,e.default=u}); //# sourceMappingURL=kendo.speechtotextbutton.min.js.map