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) 7.48 kB
!function(n,t){"object"==typeof exports&&"undefined"!=typeof module?t(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.popup.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.popup.min"],t):t(((n="undefined"!=typeof globalThis?globalThis:n||self).kendo=n.kendo||{},n.kendo._globals=n.kendo._globals||{},n.kendo._globals.Inlineaiprompt={}))}(this,(function(n){!function(n){let t=window.kendo,e=t.ui.Widget,o=t.ui,i="promptRequest",s="promptResponse",r="promptAction",p=e.extend({init:function(n,o){let i=this;o=o||{},i.options.systemPrompt=o.systemPrompt||i.options.systemPrompt,e.fn.init.call(i,n,o),o.commands&&(i.options.commands=o.commands),i.transport=new t.data.AiTransport({service:i.options.service,success:i._serviceSuccess.bind(i),requestStart:()=>t.ui.progress(i._popup.element,!0)}),i._initPopup(),i._initContextMenu(),i._bindEvents(),t.notify(i)},options:{name:"InlineAIPrompt",systemPrompt:(n,t)=>`You are an advanced AI language assistant.\n A user has selected a portion of their text and provided a query regarding how they want it modified.\n Your task is to accurately respond to their request while preserving the original intent of the text.\n Follow the instructions strictly and provide only the requested output unless explicitly asked to explain your changes.\n\n Selected Text:\n ${n}\n\n User's Request:\n ${t}\n\n Response:`,commands:[]},events:[i,s,r],open:function(n,t){this._popup.open(n,t)},_serviceSuccess:function(n){const e=this;e._popup.element.find(".k-card-body").html(n.output),e._popup.element.find(".k-card").show(),e.trigger(s,{output:n}),t.ui.progress(e._popup.element,!1)},_initPopup:function(){const e=this,o=n(e._template()).width(e.options.width);o.css({"max-width":"98vw"}),e._popup=new t.ui.Popup(o,{anchor:e.element,animation:{open:{effects:"zoom:in",duration:200},close:{effects:"zoom:out",duration:200}},open:function(){this.element.find(".k-card").hide(),this.element.find(".k-card-body").empty(),this.element.find(".k-input-inner").val("")},close:function(){t.ui.progress(e._popup.element,!1),e._aiContextMenu?.close()}})},_template:function(){return`<div class="k-child-animation-container">\n <div class="k-prompt-popup k-popup">\n <div class="k-prompt">\n <div class="k-prompt-content">\n <div class="k-prompt-view">\n <div class="k-card">\n <div class="k-card-body" style="max-height: 150px; overflow-y: auto;"></div>\n <div class="k-actions k-actions-start k-actions-horizontal k-card-actions">\n ${t.html.renderButton(`<button ${t.attr("action")}='insert'>Insert</button>`,{icon:"insert-bottom",fillMode:"flat"})}\n ${t.html.renderButton(`<button ${t.attr("action")}='replace'>Replace</button>`,{icon:"check",fillMode:"flat"})}\n ${t.html.renderButton(`<button ${t.attr("action")}='cancel'>Discard</button>`,{icon:"cancel-outline",fillMode:"flat"})}\n </div>\n </div>\n <span class="k-textbox k-input k-input-md k-input-solid k-rounded-md">\n <span class="k-input-prefix k-input-prefix-horizontal">\n ${t.html.renderButton("<button></button>",{icon:"sparkles",fillMode:"flat"})}\n </span>\n <input type="text" class="k-input-inner" placeholder="Edit, generate or explain ..." autocomplete="off" value="">\n <span class="k-input-suffix k-input-suffix-horizontal">\n ${t.html.renderButton("<button></button>",{icon:"paper-plane",fillMode:"flat"})}\n </span>\n </span>\n </div>\n </div>\n </div>\n </div>\n </div>`},_initContextMenu:function(){const t=this;if(!t.options.commands||0===t.options.commands?.length)return void t._popup.element.find(".k-input-prefix button").addClass("k-disabled");const e=t.options.commands.map((n=>t._createCommandHtml(n))).join(""),o=n(`<ul>\n ${e}\n </ul>`);n("body").append(o),t._aiContextMenu=o.kendoContextMenu({target:t._popup.element,anchor:t._popup.element,showOn:"click",appendTo:n(document.body),filter:".invalid",select:t._executeCommand.bind(t),close:()=>{t._popup.element.find(".k-input-inner").focus()}}).data("kendoContextMenu")},_createCommandHtml:function(n){const e=this,o=t.html.renderIcon({icon:n.icon}),i=n.text,s=(n.items||[]).map((n=>e._createCommandHtml(n))).join("");return`<li ${t.attr("name")}=${n.id}>${o} ${i}${s?"<ul>"+s+"</ul>":""}</li>`},_executeCommand:function(n){const e=this,o=e._findCommand(e.options.commands,n.item.getAttribute(t.attr("name"))),s={query:o.id,selection:""};e.trigger(i,s);const r=s.selection||s.context,p=o.prompt(r);e._aiContextMenu?.close(),e.transport.read({prompt:p,history:[],isRetry:!1})},_findCommand:function(n,t){const e=this;for(const o of n){if(o.id===t)return o;if(o.items){const n=e._findCommand(o.items,t);if(n)return n}}},_bindEvents:function(){const e=this;e._popup.element.find(".k-input-prefix button").on("click",(function(){e._aiContextMenu?.open()})),e._popup.element.find(".k-input-suffix button").on("click",(function(){const n=e._popup.element.find(".k-input-inner").val();e._requestService(n)})),e._popup.element.find(".k-input-inner").on("keypress",(function(t){if(13===t.keyCode){const o=n(t.currentTarget).val();e._requestService(o)}})),e._popup.element.find(".k-card-actions button").on("click",(function(o){const i=n(o.currentTarget).attr(t.attr("action")),s=e._popup.element.find(".k-card-body").text();e.trigger(r,{action:i,content:s}),e._popup.close()}))},_requestService:function(n){const t=this,e={query:n,context:""};if(!n.trim())return;t.trigger(i,e);const o=e.context,s=t.options.systemPrompt(o,n);t.transport.read({prompt:s,history:[],isRetry:!1})},focus:function(){this.element.trigger("focus")},destroy:function(){let n=this;n.toolbar?.destroy(),n._selectedView?.destroy(),n.element.off(".kendoInlineAIPrompt"),e.fn.destroy.call(n)}});o.plugin(p)}(window.kendo.jQuery);var t=kendo;n.__meta__={id:"inlineaiprompt",name:"InlineAIPrompt",category:"web",description:"The InlineAIPrompt component simplifies the incorporation of external AI services into apps.",depends:["core","icons","textarea","button","toolbar","popup","data"]},n.default=t,Object.defineProperty(n,"__esModule",{value:!0})})); //# sourceMappingURL=kendo.inlineaiprompt.min.js.map