@progress/kendo-ui
Version:
This package is part of the [Kendo UI for jQuery](http://www.telerik.com/kendo-ui) suite.
3 lines (2 loc) • 4.76 kB
JavaScript
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("kendo.core.js"),require("kendo.button.js"),require("kendo.webspeech-common.cmn.chunk.js")):"function"==typeof define&&define.amd?define(["exports","kendo.core.min","kendo.button.min","kendo.webspeech-common.cmn.chunk.min"],t):t(((e="undefined"!=typeof globalThis?globalThis:e||self).kendo=e.kendo||{},e.kendo._globals=e.kendo._globals||{},e.kendo._globals.Speechtotextbutton={}),e.kendo._globals.Core,e.kendo._globals.Button,e.kendo._globals.WebspeechCommonCmnChunk)}(this,(function(e,t,i,n){!function(e){const t=window.kendo,i=t.ui,o=i.Button,s=o.extend({init:function(t,i){o.fn.init.call(this,t,e.extend({icon:this.options.icon},i)),e(t).addClass("k-speech-to-text-button").attr("aria-live","polite"),this._isListening=!1,this._initSpeechRecognition(),this._updateIcon()},_initSpeechRecognition:function(){if("webSpeech"!==this.options.integrationMode)return;if(!n.K)return void this.enable(!1);const e=this;this.speechRecognition=new n.K({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){const t=e.results,i=t[t.length-1],n=[];for(let e=0;e<i.length;e++)n.push({transcript:i[e].transcript,confidence:i[e].confidence});this.trigger("result",{isFinal:i.isFinal,alternatives:n})},_handleError:function(e){this._isListening=!1,this.element.removeClass("k-listening"),this._updateIcon();const 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(){const e=this.element.find(".k-icon, .k-svg-icon"),i=this.isListening()?this.options.stopIcon:this.options.icon,n=this.isListening()?this.options.messages.stop:this.options.messages.start;e.length&&t.ui.icon(e,{icon:i}),this.element.attr("aria-label",n)},isListening:function(){return!!this._isListening},_click:function(e){if(o.fn._click.call(this,e),!e.isDefaultPrevented())if("webSpeech"===this.options.integrationMode){if(!this.speechRecognition||!this.speechRecognition.isSupported())return void this.trigger("error",{error:this.options.messages.unsupported});this.isListening()?this.speechRecognition.stop():this.speechRecognition.start()}else if("none"===this.options.integrationMode){const e=this.isListening()?"end":"start",t={sender:this};this.trigger(e,t),this._isListening=!this.isListening(),this._updateIcon()}},startRecognition:function(){this.options.enable&&(this.speechRecognition?this.speechRecognition.isSupported()?this.isListening()||this.speechRecognition.start():this.trigger("error",{error:this.options.messages.unsupported}):this.trigger("error",{error:this.options.messages.notInitialized}))},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(),"function"==typeof this.speechRecognition.destroy&&this.speechRecognition.destroy(),this.speechRecognition=null),e(this.element).removeClass("k-speech-to-text-button"),o.fn.destroy.call(this)}});t.cssProperties.registerPrefix("SpeechToTextButton","k-button-"),t.cssProperties.registerValues("SpeechToTextButton",[{prop:"rounded",values:t.cssProperties.roundedValues.concat([["full","full"]])}]),i.plugin(s)}(window.kendo.jQuery);var o=kendo;e.__meta__={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","webspeech-common.cmn.chunk"]},e.default=o,Object.defineProperty(e,"__esModule",{value:!0})}));
//# sourceMappingURL=kendo.speechtotextbutton.min.js.map