UNPKG

@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) 36.2 kB
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("kendo.core.js"),require("kendo.data.js"),require("kendo.icons.js"),require("kendo.textarea.js"),require("kendo.button.js"),require("kendo.toolbar.js"),require("kendo.skeletoncontainer.js"),require("kendo.speechtotextbutton.js"),require("kendo.panelbar.js"),require("kendo.floatingactionbutton.js")):"function"==typeof define&&define.amd?define(["exports","kendo.core.min","kendo.data.min","kendo.icons.min","kendo.textarea.min","kendo.button.min","kendo.toolbar.min","kendo.skeletoncontainer.min","kendo.speechtotextbutton.min","kendo.panelbar.min","kendo.floatingactionbutton.min"],e):e(((t="undefined"!=typeof globalThis?globalThis:t||self).kendo=t.kendo||{},t.kendo._globals=t.kendo._globals||{},t.kendo._globals.Aiprompt={}))}(this,(function(t){var e;!function(t){const e="assistant";class o{constructor(t,e={}){this.aiprompt=t,this.options=e,this.buttonDefinitions=this._createButtonDefinitions()}static getBuiltInActionDefinitions(){return{copy:{command:"copy",icon:"copy",fillMode:"flat",themeColor:"primary",text:null},retry:{command:"retry",icon:"arrow-rotate-cw",fillMode:"flat",text:null},ratePositive:{command:"ratePositive",icon:"thumb-up-outline",fillMode:"flat",iconButton:!0,text:null},rateNegative:{command:"rateNegative",icon:"thumb-down-outline",fillMode:"flat",iconButton:!0,text:null},stop:{command:"stop",icon:"stop",fillMode:"flat",text:null}}}static processOutputActions(t){if(!t)return null;const e=o.getBuiltInActionDefinitions();return t.map((t=>"string"==typeof t?"rating"===t?[e.ratePositive,e.rateNegative]:"spacer"===t?{type:"spacer"}:e[t]||{command:t,type:"button"}:kendo.isPresent(t.command)&&"rating"==t.command?[e.ratePositive,e.rateNegative]:t)).flat()}_createButtonDefinitions(){const t=this,e=o.getBuiltInActionDefinitions();return{copy:{...e.copy,getMessage:()=>t.view.options.messages.copyOutput,handler:(e,o)=>t._handleCopyAction(e,o)},retry:{...e.retry,getMessage:()=>t.view.options.messages.retryGeneration,handler:(e,o)=>t._handleRetryAction(e,o)},ratePositive:{...e.ratePositive,getMessage:()=>t.view.options.messages.ratePositive,handler:(e,o)=>t._handleRatePositiveAction(e,o)},rateNegative:{...e.rateNegative,getMessage:()=>t.view.options.messages.rateNegative,handler:(e,o)=>t._handleRateNegativeAction(e,o)},stop:{...e.stop,getMessage:()=>t.view.options.messages.stopGeneration,handler:(e,o)=>t._handleStopAction(e,o)}}}initializeButtons(t,e=null){const o=this;e&&e.forEach((e=>{if("spacer"===e.type)return;const n=`[data-action-command="${e.command}"]`;o._initializeButton(t,n,e)}))}_initializeButton(t,e,o){const n=this,i=n.buttonDefinitions[o.command];t.find(e).kendoButton({icon:o.icon||i?.icon,fillMode:o.fillMode||i?.fillMode||"flat",themeColor:o.themeColor||i?.themeColor||"base",rounded:o.rounded,click:function(t){const e=n.aiprompt.outputManager.getOutputFromElement(t.target),s={command:o.command,outputId:e.id,output:e.output||e.text||e||"",prompt:e.prompt||"",button:t.sender.element};i?.handler&&!n.aiprompt.trigger("outputAction",s)?i.handler(t,e):i||n.aiprompt.trigger("outputAction",s)}})}_handleCopyAction(t,e){const o=this.aiprompt._events&&this.aiprompt._events.outputCopy&&this.aiprompt._events.outputCopy.length>0;o&&kendo.logToConsole("The outputCopy event is deprecated. Use the outputAction event instead.","warn");const n={output:e};o&&this.aiprompt.trigger("outputCopy",n)||navigator.clipboard&&"function"==typeof navigator.clipboard.writeText&&navigator.clipboard.writeText(e.output||e.text||e||"")}_handleRetryAction(t,o){const{prompt:n,output:i}=this.aiprompt.outputManager.extractOutputData(o),s=this,r={prompt:n,output:o,isRetry:!0,history:[{role:e,contents:[{$type:"text",text:i}]}]},p=s.aiprompt?._selectedView?.service;p&&(r.service=p),s.aiprompt.trigger("promptRequest",r),s.aiprompt?.options.service&&s.aiprompt?.transport?.read({prompt:n,history:r.history,isRetry:!0,service:r.service})}_handleRatePositiveAction(e,o){this.aiprompt._events&&this.aiprompt._events.outputRating&&this.aiprompt._events.outputRating.length>0&&kendo.logToConsole("The outputRating event is deprecated. Use the outputAction event instead.","warn"),this.aiprompt.trigger("outputRating",{rateType:"positive",output:o}),kendo.ui.icon(e.sender.element.find(".k-icon"),"thumb-up");const n=t(e.target).siblings("[data-action-command='rateNegative'], [ref-rate-negative]");kendo.ui.icon(n.find(".k-icon"),"thumb-down-outline")}_handleRateNegativeAction(e,o){this.aiprompt._events&&this.aiprompt._events.outputRating&&this.aiprompt._events.outputRating.length>0&&kendo.logToConsole("The outputRating event is deprecated. Use the outputAction event instead.","warn"),this.aiprompt.trigger("outputRating",{rateType:"negative",output:o}),kendo.ui.icon(e.sender.element.find(".k-icon"),"thumb-down");const n=t(e.target).siblings("[data-action-command='ratePositive'], [ref-rate-positive]");kendo.ui.icon(n.find(".k-icon"),"thumb-up-outline")}_handleStopAction(e,o){this.aiprompt.trigger("promptRequestCancel",{output:o}),t(e.target).siblings(".k-hidden").removeClass("k-hidden"),t(e.target).addClass("k-hidden")}destroy(){this.aiprompt=null,this.options=null,this.buttonDefinitions=null}}kendo.ui.AIPromptOutputActionManager=o}(window.kendo.jQuery),function(){const t="k-prompt-view",e="k-prompt-expander",o="k-suggestion-group",n="k-suggestion",i="k-card",s="k-card-list",r="k-card-header",p="k-card-title",a="k-card-subtitle",u="k-card-body",l="k-card-actions",d="k-actions k-actions-start k-actions-horizontal",c="k-spacer",m="ref-prompt-input",h="ref-prompt-suggestions-button",g="ref-generate-output-button",f="ref-output-body";class k{static createPromptView({suggestions:e,promptSuggestionItemTemplate:o,messages:n}){const i=e?.length?k._createSuggestionsSection(e,o,n):"";return`<div class="${t}">\n <textarea ${m}></textarea>\n ${i}\n </div>`}static createPromptFooter({messages:t}){return`<div class="${d} k-prompt-actions">\n <button ${g}>${t.generateOutput}</button>\n </div>`}static createSuggestionItem({suggestion:t}){return`<span role="listitem" class="${n}">${t}</span>`}static createOutputCard({output:t,showOutputRating:e,messages:o,showOutputSubtitleTooltip:n,encodedPromptOutputs:s,isStreaming:r,outputActions:p,outputTemplate:a}){const u=k._generateContentHtml({output:t,outputTemplate:a,encodedPromptOutputs:s}),l=k._generateActionsHtml({outputActions:p,showOutputRating:e,messages:o,isStreaming:r}),d=t.id?` data-id="${t.id}"`:"";return`<div role="listitem" tabindex="0" class="${i}"${d}>\n ${t.skipHeader?"":k._createCardHeader(t,o,n)}\n ${t.skipBody?"":k._createCardBody(u,t.isLoading)}\n ${t.skipActions?"":l}\n </div>`}static createOutputView({promptOutputs:e,showOutputRating:o,messages:n,showOutputSubtitleTooltip:i,encodedPromptOutputs:r,outputActions:p,outputTemplate:a}){const u=e?e.map((t=>k.createOutputCard({output:t,showOutputRating:o,messages:n,showOutputSubtitleTooltip:i,encodedPromptOutputs:r,outputActions:p,outputTemplate:a}))).join(""):"";return`<div class="${t}">\n <div role="list" class="${s}">\n ${u}\n </div>\n </div>`}static _createSuggestionsSection(t,n,i){const s=t.map((t=>n({suggestion:t}))).join("");return`<div class="${e}">\n <button ${h} aria-expanded="true">${i.promptSuggestions}</button>\n <div class="k-prompt-expander-content" role="list">\n <div class="${o}">\n ${s}\n </div>\n </div>\n </div>`}static _createCardHeader(t,e,o){const n=o?`title="${kendo.htmlEncode(t.prompt)}"`:"";return`<div class="${r}">\n <div class="${p}">${e.outputTitle}</div>\n <div class="${a}" ${n}>${kendo.htmlEncode(t.prompt)}</div>\n </div>`}static _createCardBody(t,e){return`<div class="${u}" ${f}>\n ${t}\n </div>`}static _generateContentHtml({output:t,outputTemplate:e,encodedPromptOutputs:o}){if(e&&"function"==typeof e&&!t.isLoading&&t.output)return e({output:t,content:t.output});const n=t.output||"";return`<p ref-output-content${t.isLoading?' data-loading="true"':' data-loading="false"'}>${o?kendo.htmlEncode(n):n}</p>`}static _generateActionsHtml({outputActions:t,showOutputRating:e,messages:o,isStreaming:n}){return t||(t=e?["copy","retry","spacer","rating"]:["copy","retry"]),k._createCustomActions(t,e,o,n)}static _createCustomActions(t,e,o,n){const i=t.filter((t=>"stop"!==t.command)),s=i.some((t=>"ratePositive"===t.command||"rateNegative"===t.command));let r=[...i];if(e&&!s){r.some((t=>"spacer"===t.type))||r.push({type:"spacer"}),r.push({command:"ratePositive",text:o.ratePositive,type:"button"},{command:"rateNegative",text:o.rateNegative,type:"button"})}const p=r.map((t=>k._createActionButton(t,o,n))).join("");return`<div class="${d} ${l}">\n ${p}\n </div>`}static _createActionButton(t,e,o){if("spacer"===t.type)return`<span class="${c}"></span>`;const n=t.text||k._getActionText(t.command,e),i=t.title||n;return`<button data-action-command="${t.command}" title="${i}">${t.iconButton?"":n}</button>`}static _getActionText(t,e){return{copy:e.copyOutput,retry:e.retryGeneration,ratePositive:e.ratePositive,rateNegative:e.rateNegative}[t]||t}}kendo.ui.AIPromptTemplateBuilder=k}(window.kendo.jQuery),e=window.kendo.jQuery,kendo.ui.AIPromptSpeechManager=class{constructor(t,e={}){this.view=t,this.aiprompt=t.aiprompt,this.options=this._processSettings(e),this._speechButton=null}_processSettings(t){const o={integrationMode:"webSpeech",lang:"en-US",continuous:!1,interimResults:!1,maxAlternatives:1};return!1===t||null===t?{enabled:!1,options:null}:!0===t?{enabled:!0,options:o}:"object"==typeof t?{enabled:!0,options:e.extend({},o,t)}:{enabled:!0,options:o}}isEnabled(){return this.options.enabled}getTextAreaSuffixOptions(){return this.isEnabled()?{suffixOptions:{template:function(){return'<button ref-speech-to-text-button title="Speech to Text"></button>'},separator:!1}}:{}}initialize(t){if(!this.isEnabled()||!t)return!1;const e=t.wrapper.find("button[ref-speech-to-text-button]");return 0!==e.length&&(this._speechButton=e.kendoSpeechToTextButton({...this.options.options,fillMode:"flat"}).getKendoSpeechToTextButton(),this._speechButton.bind("result",(e=>this._handleResult(e,t))),this.aiprompt.speechToTextButton=this._speechButton,!0)}_handleResult(t,e){if(t.isFinal||!this.options.options.interimResults){const o=t.alternatives[0]?.transcript||"",n=e.value();let i=n?n+" "+o:o;const s=e.options.maxlength;s&&i.length>s&&(i=i.substring(0,s)),e.value(i)}}startRecognition(){this._speechButton&&this._speechButton.startRecognition()}stopRecognition(){this._speechButton&&this._speechButton.stopRecognition()}abortRecognition(){this._speechButton&&this._speechButton.abortRecognition()}isListening(){return!!this._speechButton&&this._speechButton.isListening()}destroy(){this._speechButton&&(this._speechButton.destroy(),this._speechButton=null)}},function(t){class e{constructor(t,e){this.id=t.id,this.data=t,this._element=null,this._bodyElement=null,this._aiprompt=e.aiprompt,this._isLoading=t.isLoading||!1}get isLoading(){return this._isLoading}set isLoading(t){const e=this._isLoading;this._isLoading=t,this.data.isLoading=t,!0===t?this.showSkeleton():!1===t&&(this.hideSkeleton(),(e||this.data.output)&&this.applyFinalTemplate())}getElement(){return this._element}setElement(t){return this._element=t,this}updateContent(t){if(!this._element||0===this._element.length)return this;this.data.content=t,this.data.output=t;const e=this._element.find(".k-card-body"),o=e.find("[ref-output-content]");if(t&&t.trim()&&o.length>0){e.find(".k-skeleton").remove(),o.attr("data-loading","false").show();const n=this._aiprompt.options.encodedPromptOutputs;o.html(n?kendo.htmlEncode(t):t)}return this}showSkeleton(){return this.showHeaderSkeleton(),this.showBodySkeleton(),this.showActionSkeleton(),this}hideSkeleton(){return this.hideHeaderSkeleton(),this.hideBodySkeleton(),this.hideActionSkeleton(),this}applyFinalTemplate(){if(!this._element||0===this._element.length)return this;const t=this._element.find(".k-card-body"),e=t.find("[ref-output-content]");let o=this._aiprompt?.options?.outputTemplate;if(!o)return this;if("string"==typeof o&&(o=kendo.template(o)),o&&"function"==typeof o&&this.data.output){const e=o({output:this.data,content:this.data.output});t.html(e)}else e.length>0&&e.attr("data-loading","false").show();return this}showHeaderSkeleton(){if(!this._element||0===this._element.length)return this;const e=this._element.find(".k-card-header");if(0===e.length)return this;if(e.children().hide(),0===e.find(".k-skeleton").length){const o=t('<span class="k-skeleton k-skeleton-text k-skeleton-pulse"></span>');o.css("width","60%").css("height","24px"),e.prepend(o)}return this}hideHeaderSkeleton(){if(!this._element||0===this._element.length)return this;const t=this._element.find(".k-card-header");return 0===t.length||(t.find(".k-skeleton").remove(),t.children().removeClass("k-hidden").show()),this}showBodySkeleton(){if(!this._element||0===this._element.length)return this;const e=this._element.find(".k-card-body");if(e.find("[ref-output-content]").attr("data-loading","true").hide(),0===e.find(".k-skeleton").length){const o=t('<span class="k-skeleton k-skeleton-rect k-skeleton-pulse"></span>');o.css("height","80px"),e.prepend(o)}return this}hideBodySkeleton(){if(!this._element||0===this._element.length)return this;return this._element.find(".k-card-body").find(".k-skeleton").remove(),this.applyFinalTemplate(),this}showActionSkeleton(){if(!this._element||0===this._element.length)return this;const e=this._element.find(".k-card-actions");if(e.length>0&&(e.children().hide(),0===e.find(".k-skeleton").length)){const o=t('<span class="k-skeleton k-skeleton-text k-skeleton-pulse"></span>');o.css("width","100%").css("height","32px"),e.prepend(o)}return this}hideActionSkeleton(){if(!this._element||0===this._element.length)return this;const t=this._element.find(".k-card-actions");return t.length>0&&(t.find(".k-skeleton").remove(),t.children().removeClass("k-hidden").show()),this}toggleActionButtons(t,e){if(!this._element||0===this._element.length)return this;if(e){const e=this._element.find("[data-action-command]");t?e.addClass("k-hidden"):e.removeClass("k-hidden")}else{const e=this._element.find("[ref-copy-button], [ref-retry-button]");t?e.addClass("k-hidden"):e.removeClass("k-hidden")}return this}destroy(){this._element=null,this._bodyElement=null,this._aiprompt=null,this.data=null,this.id=null,this._isLoading=!1}}kendo.ui.AIPromptOutputObject=e,kendo.ui.AIPromptOutputManager=class{constructor(t){this.aiprompt=t}createOutputObject(t){return new e(t,this)}getLastOutputObject(){if(this.aiprompt.promptOutputs.length>0){const t=this.aiprompt.promptOutputs[0];return this.aiprompt.outputObjects.get(t.id)}return null}updatePromptOutputContent(t,e){let o;return o=e?this.aiprompt.outputObjects.get(e):this.getLastOutputObject(),o?(o.updateContent(t),o):null}stopLoading(t){let e=this.aiprompt.outputObjects.get(t);e?e.isLoading=!1:(e=this.getLastOutputObject(),e&&(e.isLoading=!1))}stopAllLoading(){this.aiprompt.outputObjects.forEach((t=>{t.isLoading=!1}))}getOutputFromElement(e){let o=t(e).closest(".k-card").data("id"),n=this.aiprompt.promptOutputs.find((t=>t.id==o));return!n&&this.aiprompt.outputObjects&&(n=this.aiprompt.outputObjects.get(o)),n}extractOutputData(t){return t?t.data?{prompt:t.data.prompt,output:t.data.output}:{prompt:t.prompt,output:t.output}:{prompt:null,output:null}}destroy(){this.aiprompt&&this.aiprompt.outputObjects&&(this.aiprompt.outputObjects.forEach((t=>{t&&(t._element=null,t._bodyElement=null,t._aiprompt=null,t.data=null)})),this.aiprompt.outputObjects.clear()),this.aiprompt=null}}}(window.kendo.jQuery),function(t){let e=kendo.ui.Widget;const o="user",n={PROMPT_VIEW:"k-prompt-view",PROMPT_EXPANDER:"k-prompt-expander",SUGGESTION_GROUP:"k-suggestion-group",SUGGESTION:"k-suggestion",CARD:"k-card",CARD_LIST:"k-card-list"},i="ref-prompt-suggestions-button",s="ref-prompt-input",r="ref-generate-output-button";let p=kendo.ui.AIPromptBaseView=e.extend({init:function(t,o){let n=this;e.fn.init.call(n,t,o),n.aiprompt=t.getKendoAIPrompt(),n.contentElement=n.options.contentElement,n.footerElement=n.options.footerElement,n.buttonText=n.options.buttonText,n.buttonIcon=n.options.buttonIcon,n.service=n.options.service},options:{name:"AIPromptBaseView",buttonText:"",buttonIcon:""},render:function(){this._renderContent(),this._renderFooter()},_renderContentElement:function(){let e=this,o=t("<div></div>").addClass("k-prompt-content");return e.contentElement=o,e.element.append(o),e.contentElement},_renderFooterElement:function(){let e=this,o=t("<div></div>").addClass("k-prompt-footer");return e.footerElement=o,e.element.append(o),e.footerElement},_ajaxRequest:function(e,o,n){let i=this,s=i.service,r=i._getAjaxData(e,o,n);const p={url:"string"==typeof s?s:s.url,type:"POST",contentType:"application/json",data:JSON.stringify(r),success:t=>i._ajaxSuccessHandler(t,o,e)};return s?.headers&&(p.headers=s.headers),kendo.ui.progress(i.contentElement,!0),t.ajax(p)},_ajaxSuccessHandler:function(t,e,o){const n=this,i=n.service?.outputGetter||n._getResponseMessageText,s={id:kendo.guid(),output:i(t),prompt:o,isRetry:e,activeView:1};if(n.aiprompt.trigger("promptResponse",{output:s.output,prompt:s.prompt,outputId:s.id,isRetry:s.isRetry,response:s.response}),n.aiprompt.addPromptOutput(s),n.aiprompt.activeView(s.activeView),!e){const t=n.footerElement?.find(`button[${r}]`);t?.removeClass("k-disabled")}kendo.ui.progress(n.contentElement,!1)},_getResponseMessageText:function(t){return t?.Message?.Text||"An error occurred while processing the request."},_getAjaxData:function(e,n,i){const s=this.service;let r=[{role:{value:o},text:e}];if(i?.length&&(r=i.concat(r)),"string"==typeof s)return r;if(kendo.isPresent(s.data)&&Object.keys(s.data).length)return s.data.messages=r,s.data;if(kendo.isFunction(s?.data))return s.data(e,n,i);if(t.isPlainObject(s)&&kendo.isPresent(s.url))return r;throw new Error("Invalid AIPrompt service configuration.")},destroy:function(){let t=this;e.fn.destroy.call(t),t.contentElement&&(t.contentElement.off(),kendo.destroy(t.contentElement),t.contentElement.remove()),t.footerElement&&(t.footerElement.off(),kendo.destroy(t.footerElement),t.footerElement.remove()),t.aiprompt.speechToTextButton=null}});kendo.ui.AIPromptPromptView=p.extend({init:function(t,e){let o=this;p.fn.init.call(o,t,e),o.promptSuggestions=o.options.promptSuggestions,o.promptSuggestionItemTemplate=o.options.promptSuggestionItemTemplate?kendo.template(o.options.promptSuggestionItemTemplate):kendo.ui.AIPromptTemplateBuilder.createSuggestionItem,o.speechManager=new kendo.ui.AIPromptSpeechManager(o,o.options.speechToText)},options:{name:"AIPromptPromptView",buttonIcon:"sparkles"},_renderContent:function(){let t,e=this,o=e.promptSuggestions,n=e.promptSuggestionItemTemplate;t=e.options.viewTemplate?kendo.template(e.options.viewTemplate)({suggestions:o,promptSuggestionItemTemplate:n,messages:e.options.messages}):kendo.ui.AIPromptTemplateBuilder.createPromptView({suggestions:o,promptSuggestionItemTemplate:n,messages:e.options.messages}),e._renderContentElement(),e.contentElement.append(t)},_renderFooter:function(){let t,e=this;t=e.options.footerTemplate?kendo.template(e.options.footerTemplate)({messages:e.options.messages}):kendo.ui.AIPromptTemplateBuilder.createPromptFooter({messages:e.options.messages}),e._renderFooterElement(),e.footerElement.append(t)},setTextAreaValue:function(t){let e=this;const o=e.contentElement.find(`textarea[${s}]`).getKendoTextArea();o?o.value(t):e.contentElement.find(`textarea[${s}]`).val(t)},_focusSuggestion(t){t&&t.length&&(this.contentElement.find(`.${n.SUGGESTION_GROUP} .${n.SUGGESTION}[tabindex=0]`).attr("tabindex","-1"),t.attr("tabindex","0").trigger("focus"))},startSpeechRecognition:function(){this.speechManager.startRecognition()},stopSpeechRecognition:function(){this.speechManager.stopRecognition()},abortSpeechRecognition:function(){this.speechManager.abortRecognition()},isSpeechListening:function(){return this.speechManager.isListening()},initializeComponents:function(){let e=this,o=e.promptSuggestions;const p=e.footerElement.find(`button[${r}]`);let a=t.extend({resize:"vertical",placeholder:e.options.messages.promptPlaceholder},e.options.promptTextArea||{});e.speechManager.isEnabled()&&(a=t.extend(!0,a,e.speechManager.getTextAreaSuffixOptions()));const u=e.contentElement.find(`textarea[${s}]`).kendoTextArea(a).getKendoTextArea();if(e.speechManager.isEnabled()&&e.speechManager.initialize(u),p.kendoButton({icon:"sparkles",themeColor:"primary",rounded:"full",click:function(t){const o=e.contentElement.find(`textarea[${s}]`).getKendoTextArea(),n={prompt:o?o.value():e.contentElement.find(`textarea[${s}]`).val(),isRetry:!1,history:[]};e.service&&(n.service=e.service),e.aiprompt.trigger("promptRequest",n),e.service&&e.aiprompt.transport.read({prompt:n.prompt,history:n.history,isRetry:!1,service:e.service})}}),o?.length){e.contentElement.find(`.${n.SUGGESTION_GROUP} .${n.SUGGESTION}`).first().attr("tabindex","0");let o=kendo.guid(),s=e.contentElement.find(`.${n.PROMPT_EXPANDER} button[${i}]`);e.contentElement.find(`.${n.PROMPT_EXPANDER} button[${i}]`).attr("aria-controls",o),s.next(`.${n.PROMPT_EXPANDER_CONTENT}`).attr("id",o),e.contentElement.find(`.${n.PROMPT_EXPANDER} button[${i}]`).kendoButton({icon:"chevron-up",fillMode:"flat",click:function(e){let o=t(e.target).closest(".k-prompt-expander").find(".k-prompt-expander-content"),n=e.sender.element.find(".k-icon");kendo.ui.icon(n,o.is(":visible")?"chevron-down":"chevron-up"),o.toggle(),e.sender.element.attr("aria-expanded",o.is(":visible"))}}),e.contentElement.on("click",".k-suggestion-group .k-suggestion",(function(o){e.setTextAreaValue(t(o.target).text())})),e.contentElement.on("keydown",".k-suggestion-group .k-suggestion",(function(o){if(40===o.keyCode||38===o.keyCode||36===o.keyCode||35===o.keyCode||13===o.keyCode||32===o.keyCode){o.preventDefault();let n,i,s=t(o.target),r=s.siblings();40===o.keyCode&&(n=s.next(),e._focusSuggestion(n)),38===o.keyCode&&(i=s.prev(),e._focusSuggestion(i)),36===o.keyCode&&(i=r.first(),e._focusSuggestion(i)),35===o.keyCode&&(n=r.last(),e._focusSuggestion(n)),13!==o.keyCode&&32!==o.keyCode||e.setTextAreaValue(t(o.target).text())}}))}kendo.isFunction(e.options.initializeComponents)&&e.options.initializeComponents({view:e})},render:function(){let t=this;t._renderContent(),t._renderFooter(),t.initializeComponents()},destroy:function(){let t=this;t.speechManager&&(t.speechManager.destroy(),t.speechManager=null),p.fn.destroy.call(t)}}),kendo.ui.AIPromptOutputView=p.extend({init:function(t,e){let o=this;p.fn.init.call(o,t,e),o.promptOutputs=o.aiprompt&&o.aiprompt.promptOutputs?o.aiprompt.promptOutputs:[],o.showOutputRating=o.options.showOutputRating,o.isStreaming=o.options.isStreaming||!1,o.outputActions=o.options.outputActions,o.outputTemplate=o.options.outputTemplate,o.outputActionManager=o.options.outputActionManager},options:{name:"AIPromptOutputView",buttonIcon:"comment",isStreaming:!1,promptOutputs:[]},startStreaming:function(){this.isStreaming=!0,this._showStopButton()},stopStreaming:function(){this.isStreaming=!1,this._hideStopButton()},_showStopButton:function(){let t=this;(t.stopGenerationButton||t._initStopGenerationButton())&&t.stopGenerationButton.show()},_hideStopButton:function(){let t=this;t.stopGenerationButton&&t.stopGenerationButton.hide()},renderPromptOutput:function(e){let o=this,n=o.options.showOutputRating,i=o.options.encodedPromptOutputs,s=o.options.messages,r=o.isStreaming||!1,p=o.outputActions;if(!(o.cardListContainer&&0!==o.cardListContainer.length||(o.outputsContainer&&(o.cardListContainer=o.outputsContainer.find(".k-card-list")),o.cardListContainer&&0!==o.cardListContainer.length)))return;r&&!o.stopGenerationButton&&o._initStopGenerationButton();const a=o.aiprompt.outputObjects.get(e.id);if(a){const u=kendo.ui.AIPromptTemplateBuilder.createOutputCard({output:e,showOutputRating:n,messages:s,showOutputSubtitleTooltip:!0,encodedPromptOutputs:i,isStreaming:r,outputActions:p,outputTemplate:o.outputTemplate}),l=t(u);a._element=l,a._bodyElement=l.find(".k-card-body"),o.cardListContainer.prepend(l),e.isLoading?a.showSkeleton():e.output&&a.applyFinalTemplate(),o.initializeComponents(l)}else{let a=t(kendo.ui.AIPromptTemplateBuilder.createOutputCard({output:e,showOutputRating:n,messages:s,showOutputSubtitleTooltip:!0,encodedPromptOutputs:i,isStreaming:r,outputActions:p,outputTemplate:o.outputTemplate}));o.cardListContainer.prepend(a),o.initializeComponents(a)}},updatePromptOutputContent:function(t,e){const o=this.aiprompt.outputObjects.get(t);o&&o.updateContent(e)},_initStopGenerationButton:function(){let e=this,o=e.contentElement;if(!o||0===o.length)return!1;if(e.stopGenerationButton)return!0;let n=t("<button class='k-prompt-stop-fab k-generating'></button>");return n.attr({"aria-label":e.options.messages.stopGeneration,title:e.options.messages.stopGeneration}),o.prepend(n),e.stopGenerationButton=n.kendoFloatingActionButton({_classNames:["k-prompt-stop-fab","k-generating"],icon:"stop-sm",positionMode:"absolute",align:"bottom end",rounded:"full",click:function(t){e.stopStreaming(),e.aiprompt.trigger("promptRequestCancel",{})}}).getKendoFloatingActionButton(),e.stopGenerationButton.hide(),!0},_renderContent:function(){let e,o=this,n=o.promptOutputs,i=o.options.showOutputRating,s=o.options.showOutputSubtitleTooltip,r=o.options.messages,p=o.options.encodedPromptOutputs,a=o.outputActions;e=o.viewTemplate?kendo.template(o.viewTemplate)({promptOutputs:n,showOutputRating:i,messages:r,showOutputSubtitleTooltip:s,encodedPromptOutputs:p,outputActions:a,outputTemplate:o.outputTemplate}):kendo.ui.AIPromptTemplateBuilder.createOutputView({promptOutputs:n,showOutputRating:i,messages:r,showOutputSubtitleTooltip:s,encodedPromptOutputs:p,outputActions:a,outputTemplate:o.outputTemplate}),o.outputsContainer=t(e),o.cardListContainer=o.outputsContainer.find(".k-card-list"),o._renderContentElement(),o.contentElement.append(o.outputsContainer),o._initStopGenerationButton()},initializeComponents:function(t){let e=this;t=t||e.contentElement,e.outputActionManager.initializeButtons(t,e.outputActions),t.find('[data-loading="true"]').hide(),t.find('[data-loading="false"]').show(),e.aiprompt&&e.aiprompt.outputObjects&&e.aiprompt.outputObjects.forEach(((o,n)=>{const i=t.find(`.k-card[data-id="${n}"]`);if(i.length>0){if(o._element=i,o._bodyElement=i.find(".k-card-body"),e.outputTemplate&&"function"==typeof e.outputTemplate&&o.data&&o.data.output&&!o.data.isLoading){const t=e.outputTemplate({output:o.data,content:o.data.output});o._bodyElement.html(t)}const t=i.find(".k-button");!(t.length>0&&t.first().data("kendoButton"))&&t.length>0&&e.outputActionManager.initializeButtons(i,e.outputActions)}}))},_initializeCardButtons:function(t){this.outputActionManager.initializeButtons(t,this.outputActions)},render:function(){let e=this;e._renderContent(),e.initializeComponents(),e.contentElement.on("keydown",".k-card",(function(o){let n=t(o.target);40!==o.keyCode&&38!==o.keyCode&&36!==o.keyCode&&35!==o.keyCode||(o.preventDefault(),40===o.keyCode&&n.next(".k-card").trigger("focus"),38===o.keyCode&&n.prev(".k-card").trigger("focus"),36===o.keyCode&&e.contentElement.find(".k-card").first().trigger("focus"),35===o.keyCode&&e.contentElement.find(".k-card").last().trigger("focus"))}))},destroy:function(){p.fn.destroy.call(this)}}),kendo.ui.AIPromptCommandsView=p.extend({options:{name:"AIPromptCommandsView",buttonText:"",buttonIcon:"more-horizontal",promptCommands:[]},initializeComponents:function(){let e=this,o=e.options.promptCommands,n=t("<div></div>").kendoPanelBar({animation:!1,dataSource:o,selectable:!1,select:function(o){let n=t(o.item),i=this.dataItem(n);i.hasChildren||e.aiprompt.trigger("commandExecute",{sender:e.aiprompt,item:i})}});const i=t("<div class='k-prompt-view'>");i.append(n),e.contentElement.append(i)},render:function(){this._renderContentElement(),this.initializeComponents()}});let a=()=>"";kendo.ui.AIPromptCustomView=p.extend({options:{name:"AIPromptCustomView",buttonText:"",buttonIcon:"",viewTemplate:a,footerTemplate:a},initializeComponents:function(){let t=this;"function"==typeof t.options.initializeComponents&&t.options.initializeComponents.call(t)},_renderContent:function(){let t=this,e=kendo.template(t.options.viewTemplate)({aiprompt:t});t._renderContentElement(),t.contentElement.append(e)},_renderFooter:function(){let t=this;if(t.options.footerTemplate===a)return;let e=kendo.template(t.options.footerTemplate)({messages:t.options.messages});t._renderFooterElement(),t.footerElement.append(e)},render:function(){let t=this;t._renderContent(),t._renderFooter(),t.initializeComponents()}})}(window.kendo.jQuery);kendo;!function(t){let e=window.kendo,o=e.ui.Widget,n=e.ui,i=t.extend,s="promptResponse",r=["copy","retry"],p="focus",a="k-prompt",u={prompt:{type:"kendo.ui.AIPromptPromptView",name:"prompt",buttonIcon:"sparkles"},output:{type:"kendo.ui.AIPromptOutputView",name:"output",buttonIcon:"comment"},commands:{type:"kendo.ui.AIPromptCommandsView",name:"commands",buttonIcon:"more-horizontal"},custom:{type:"kendo.ui.AIPromptCustomView",name:"custom"}},l=o.extend({init:function(t,n){let i=this;n=n||{},o.fn.init.call(i,t,n),0==i.options.views.length&&(i.options.views=["prompt","output"],this.options.promptCommands&&this.options.promptCommands.length&&this.options.views.push("commands")),i.options.outputActions=n.outputActions&&n.outputActions.length>0?n.outputActions:r,i.promptOutputs=i.options.promptOutputs||[],i.outputObjects=new Map,i.outputManager=new e.ui.AIPromptOutputManager(i),i.outputActions=e.ui.AIPromptOutputActionManager.processOutputActions(i.options.outputActions),i.outputActionManager=new e.ui.AIPromptOutputActionManager(i,{outputActions:i.outputActions}),Array.isArray(i.promptOutputs)&&i.promptOutputs.length>0&&i.promptOutputs.forEach((t=>{t.id||(t.id=e.guid());const o=i.outputManager.createOutputObject(t);i.outputObjects.set(t.id,o)})),i._initLayout(),i._initViews(),i._initToolbar(),i.activeView(i.options.activeView),i.options.service&&(i.transport=new e.data.AiTransport({service:i.options.service,success:i._serviceSuccess.bind(i),requestStart:()=>e.ui.progress(i.element,!0)})),e.notify(i)},options:{name:"AIPrompt",enabled:!0,toolbarItems:[],promptOutputs:[],encodedPromptOutputs:!0,activeView:0,views:[],popup:null,speechToText:!1,promptTextArea:null,messages:{promptView:"Ask AI",outputView:"Output",commandsView:"",customView:"Custom View",promptPlaceholder:"Ask or generate content with AI",promptSuggestions:"Prompt Suggestions",generateOutput:"Generate",outputTitle:"Generated with AI",outputRetryTitle:"Generated with AI",copyOutput:"Copy",retryGeneration:"Retry",ratePositive:"",rateNegative:"",stopGeneration:"Stop Generation"},showOutputRating:!0,service:null,suffixTemplate:null,outputTemplate:null,outputActions:["copy","retry","spacer","rating"]},events:["commandExecute","promptRequest",s,"promptRequestCancel","outputRating","outputCopy","outputAction"],_serviceSuccess:function(t){const o=this,n=o.viewsArray.findIndex((t=>"output"===t.name));t.activeView=n,o.trigger(s,{output:t.output,prompt:t.prompt,outputId:t.id,isRetry:t.isRetry||!1,response:t.response})||(o.addPromptOutput(t),o.activeView(t.activeView),e.ui.progress(o.element,!1))},_initializeView:function(t){let o,n=this.views[t];if(n){let t=n.type;if("string"==typeof t&&(t=e.getter(n.type)(window)),!t)throw new Error("There is no such view");o=new t(this.element,i(!0,{promptSuggestions:this.options.promptSuggestions,promptCommands:this.options.promptCommands,promptOutputs:this.promptOutputs,showOutputRating:this.showOutputRating,messages:this.options.messages,showOutputSubtitleTooltip:this.options.showOutputSubtitleTooltip,encodedPromptOutputs:this.options.encodedPromptOutputs,promptSuggestionItemTemplate:this.options.promptSuggestionItemTemplate,service:this.options.service,speechToText:this.options.speechToText,promptTextArea:this.options.promptTextArea,outputActions:this.outputActions,outputActionManager:this.outputActionManager,outputTemplate:this.options.outputTemplate},n))}return o},_unbindView:function(t){t&&t.destroy()},_initViews:function(){let t=this,e=t.options.views;t.views={},t.viewsArray=[];for(let o=0,n=e.length;o<n;o++){let n=e[o],i="object"==typeof n,s=n;i&&(n={...n},s="string"!=typeof n.type?n.name:n.type);let r=u[s];r&&(i&&(n.type=r.type),r.buttonText=t.options.messages[`${s}View`]),n=Object.assign({title:n.title,name:s,index:o},r,i?n:{}),t.viewsArray.push(n),s&&(t.views[s]=n)}},getViews:function(){return this.viewsArray},activeView:function(e){let o=this;if(void 0===e)return o._activeViewIndex;if(Number.isInteger(e)&&(e=o.viewsArray[e].name),e&&o.views[e]){o._selectedView&&o._unbindView(o._selectedView),o._selectedView=o._initializeView(e),o._activeViewIndex=o.viewsArray.findIndex((t=>t.name===e)),o._selectedView.render(),o._updateToolbarState(o._activeViewIndex);let n=t(o.toolbar._getAllItems()[o._activeViewIndex]);o.toolbar._resetTabIndex(n),n.trigger(p)}},addPromptOutput:function(t){"string"==typeof t&&(t={output:t}),t.id=t.id||e.guid();const o=this.outputManager.createOutputObject(t);this.promptOutputs.unshift(t),this.outputObjects.set(t.id,o),this._selectedView&&"function"==typeof this._selectedView.renderPromptOutput&&(this._selectedView.renderPromptOutput(t),t.isLoading&&this.startStreaming())},_updateToolbarState:function(e){let o=this.toolbar;o.element.find(".k-toolbar-toggle-button").each((function(n,i){o.toggle(t(i),n==e)}))},_initLayout:function(){let e=this,o=t("<div></div>").addClass("k-prompt-header");e.header=o,e.element.addClass(a),e.element.append(o);const n=e.element.closest(".k-popup");n.length&&t(n).addClass("k-prompt-popup")},_getViewTools:function(){let t=this;return t.viewsArray.map((e=>("commands"===e.name&&(e.buttonText?e.title=e.buttonText:e.title="More Actions"),{type:"button",text:e.buttonText,icon:e.buttonIcon,fillMode:"flat",themeColor:e.themeColor||"primary",rounded:"full",togglable:!0,attributes:{title:e.title},toggle:function(){t.activeView(e.name)}})))},_initToolbar:function(){let e=this,o=e.options.toolbarItems;o=Array.isArray(o)?o:[o];const n=o.find((t=>"x"===t.icon));n&&(n.themeColor="base");let i=t("<div></div>").kendoToolBar({resizable:!1,fillMode:"flat",items:e._getViewTools().concat(o)}).appendTo(e.header);e.toolbar=i.data("kendoToolBar")},focus:function(){this.element.trigger(p)},updatePromptOutputContent:function(t,e){return this.outputManager.updatePromptOutputContent(t,e)},startStreaming:function(){let t=this;t._selectedView&&"function"==typeof t._selectedView.startStreaming&&t._selectedView.startStreaming()},stopStreaming:function(){let t=this;t._selectedView&&"function"==typeof t._selectedView.stopStreaming&&t._selectedView.stopStreaming(),t.outputManager&&t.outputManager.stopAllLoading()},setOptions:function(o){let n=this,s=n.element,r=n.options,p=i({},r,o);e.destroy(s),t(s).empty(),n.init(s,p)},destroy:function(){let t=this;t.toolbar&&(t.toolbar.destroy(),t.toolbar=null),t._selectedView&&(t._selectedView.destroy(),t._selectedView=null),t.outputManager&&(t.outputManager.destroy(),t.outputManager=null),t.outputActionManager&&(t.outputActionManager.destroy(),t.outputActionManager=null),t.promptOutputs=null,t.outputObjects&&(t.outputObjects.clear(),t.outputObjects=null),t.transport&&(t.transport=null),t.element.off(".kendoAIPrompt"),o.fn.destroy.call(t)}});n.plugin(l)}(window.kendo.jQuery);var o=kendo;t.__meta__={id:"aiprompt",name:"AIPrompt",category:"web",description:"The AIPrompt component simplifies the incorporation of external AI services into apps.",depends:["core","icons","textarea","button","toolbar","panelbar","data","floatingactionbutton","skeletoncontainer","speechtotextbutton"]},t.default=o,Object.defineProperty(t,"__esModule",{value:!0})})); //# sourceMappingURL=kendo.aiprompt.min.js.map