-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path34a73275545a09a8511b.js
2 lines (2 loc) · 290 KB
/
34a73275545a09a8511b.js
1
2
/*! For license information please see 34a73275545a09a8511b.js.LICENSE.txt */
var _excluded=["lastSelectedPromptIndex","lastSelectedMultipromptIndices"];function ownKeys(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function _objectSpread(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?ownKeys(Object(n),!0).forEach((function(t){_defineProperty(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):ownKeys(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function _defineProperty(e,t,n){return(t=_toPropertyKey(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function _toPropertyKey(e){var t=_toPrimitive(e,"string");return"symbol"==_typeof(t)?t:t+""}function _toPrimitive(e,t){if("object"!=_typeof(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=_typeof(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}function _typeof(e){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},_typeof(e)}function _createForOfIteratorHelper(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=_unsupportedIterableToArray(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0,a=function(){};return{s:a,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,c=!0,l=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return c=e.done,e},e:function(e){l=!0,o=e},f:function(){try{c||null==n.return||n.return()}finally{if(l)throw o}}}}function _slicedToArray(e,t){return _arrayWithHoles(e)||_iterableToArrayLimit(e,t)||_unsupportedIterableToArray(e,t)||_nonIterableRest()}function _nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _unsupportedIterableToArray(e,t){if(e){if("string"==typeof e)return _arrayLikeToArray(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?_arrayLikeToArray(e,t):void 0}}function _arrayLikeToArray(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function _iterableToArrayLimit(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,o,c,l=[],s=!0,i=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=o.call(n)).done)&&(l.push(r.value),l.length!==t);s=!0);}catch(e){i=!0,a=e}finally{try{if(!s&&null!=n.return&&(c=n.return(),Object(c)!==c))return}finally{if(i)throw a}}return l}}function _arrayWithHoles(e){if(Array.isArray(e))return e}function _objectWithoutProperties(e,t){if(null==e)return{};var n,r,a=_objectWithoutPropertiesLoose(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],t.includes(n)||{}.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}function _objectWithoutPropertiesLoose(e,t){if(null==e)return{};var n={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(t.includes(r))continue;n[r]=e[r]}return n}function _regeneratorRuntime(){"use strict";_regeneratorRuntime=function(){return t};var e,t={},n=Object.prototype,r=n.hasOwnProperty,a=Object.defineProperty||function(e,t,n){e[t]=n.value},o="function"==typeof Symbol?Symbol:{},c=o.iterator||"@@iterator",l=o.asyncIterator||"@@asyncIterator",s=o.toStringTag||"@@toStringTag";function i(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{i({},"")}catch(e){i=function(e,t,n){return e[t]=n}}function m(e,t,n,r){var o=t&&t.prototype instanceof v?t:v,c=Object.create(o.prototype),l=new C(r||[]);return a(c,"_invoke",{value:P(e,n,l)}),c}function u(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}t.wrap=m;var d="suspendedStart",p="suspendedYield",g="executing",f="completed",h={};function v(){}function y(){}function b(){}var x={};i(x,c,(function(){return this}));var _=Object.getPrototypeOf,S=_&&_(_(M([])));S&&S!==n&&r.call(S,c)&&(x=S);var k=b.prototype=v.prototype=Object.create(x);function I(e){["next","throw","return"].forEach((function(t){i(e,t,(function(e){return this._invoke(t,e)}))}))}function E(e,t){function n(a,o,c,l){var s=u(e[a],e,o);if("throw"!==s.type){var i=s.arg,m=i.value;return m&&"object"==_typeof(m)&&r.call(m,"__await")?t.resolve(m.__await).then((function(e){n("next",e,c,l)}),(function(e){n("throw",e,c,l)})):t.resolve(m).then((function(e){i.value=e,c(i)}),(function(e){return n("throw",e,c,l)}))}l(s.arg)}var o;a(this,"_invoke",{value:function(e,r){function a(){return new t((function(t,a){n(e,r,t,a)}))}return o=o?o.then(a,a):a()}})}function P(t,n,r){var a=d;return function(o,c){if(a===g)throw Error("Generator is already running");if(a===f){if("throw"===o)throw c;return{value:e,done:!0}}for(r.method=o,r.arg=c;;){var l=r.delegate;if(l){var s=T(l,r);if(s){if(s===h)continue;return s}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if(a===d)throw a=f,r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);a=g;var i=u(t,n,r);if("normal"===i.type){if(a=r.done?f:p,i.arg===h)continue;return{value:i.arg,done:r.done}}"throw"===i.type&&(a=f,r.method="throw",r.arg=i.arg)}}}function T(t,n){var r=n.method,a=t.iterator[r];if(a===e)return n.delegate=null,"throw"===r&&t.iterator.return&&(n.method="return",n.arg=e,T(t,n),"throw"===n.method)||"return"!==r&&(n.method="throw",n.arg=new TypeError("The iterator does not provide a '"+r+"' method")),h;var o=u(a,t.iterator,n.arg);if("throw"===o.type)return n.method="throw",n.arg=o.arg,n.delegate=null,h;var c=o.arg;return c?c.done?(n[t.resultName]=c.value,n.next=t.nextLoc,"return"!==n.method&&(n.method="next",n.arg=e),n.delegate=null,h):c:(n.method="throw",n.arg=new TypeError("iterator result is not an object"),n.delegate=null,h)}function w(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function B(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function C(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(w,this),this.reset(!0)}function M(t){if(t||""===t){var n=t[c];if(n)return n.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var a=-1,o=function n(){for(;++a<t.length;)if(r.call(t,a))return n.value=t[a],n.done=!1,n;return n.value=e,n.done=!0,n};return o.next=o}}throw new TypeError(_typeof(t)+" is not iterable")}return y.prototype=b,a(k,"constructor",{value:b,configurable:!0}),a(b,"constructor",{value:y,configurable:!0}),y.displayName=i(b,s,"GeneratorFunction"),t.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===y||"GeneratorFunction"===(t.displayName||t.name))},t.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,b):(e.__proto__=b,i(e,s,"GeneratorFunction")),e.prototype=Object.create(k),e},t.awrap=function(e){return{__await:e}},I(E.prototype),i(E.prototype,l,(function(){return this})),t.AsyncIterator=E,t.async=function(e,n,r,a,o){void 0===o&&(o=Promise);var c=new E(m(e,n,r,a),o);return t.isGeneratorFunction(n)?c:c.next().then((function(e){return e.done?e.value:c.next()}))},I(k),i(k,s,"Generator"),i(k,c,(function(){return this})),i(k,"toString",(function(){return"[object Generator]"})),t.keys=function(e){var t=Object(e),n=[];for(var r in t)n.push(r);return n.reverse(),function e(){for(;n.length;){var r=n.pop();if(r in t)return e.value=r,e.done=!1,e}return e.done=!0,e}},t.values=M,C.prototype={constructor:C,reset:function(t){if(this.prev=0,this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method="next",this.arg=e,this.tryEntries.forEach(B),!t)for(var n in this)"t"===n.charAt(0)&&r.call(this,n)&&!isNaN(+n.slice(1))&&(this[n]=e)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var n=this;function a(r,a){return l.type="throw",l.arg=t,n.next=r,a&&(n.method="next",n.arg=e),!!a}for(var o=this.tryEntries.length-1;o>=0;--o){var c=this.tryEntries[o],l=c.completion;if("root"===c.tryLoc)return a("end");if(c.tryLoc<=this.prev){var s=r.call(c,"catchLoc"),i=r.call(c,"finallyLoc");if(s&&i){if(this.prev<c.catchLoc)return a(c.catchLoc,!0);if(this.prev<c.finallyLoc)return a(c.finallyLoc)}else if(s){if(this.prev<c.catchLoc)return a(c.catchLoc,!0)}else{if(!i)throw Error("try statement without catch or finally");if(this.prev<c.finallyLoc)return a(c.finallyLoc)}}}},abrupt:function(e,t){for(var n=this.tryEntries.length-1;n>=0;--n){var a=this.tryEntries[n];if(a.tryLoc<=this.prev&&r.call(a,"finallyLoc")&&this.prev<a.finallyLoc){var o=a;break}}o&&("break"===e||"continue"===e)&&o.tryLoc<=t&&t<=o.finallyLoc&&(o=null);var c=o?o.completion:{};return c.type=e,c.arg=t,o?(this.method="next",this.next=o.finallyLoc,h):this.complete(c)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),h},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),B(n),h}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var a=r.arg;B(n)}return a}}throw Error("illegal catch attempt")},delegateYield:function(t,n,r){return this.delegate={iterator:M(t),resultName:n,nextLoc:r},"next"===this.method&&(this.arg=e),h}},t}function asyncGeneratorStep(e,t,n,r,a,o,c){try{var l=e[o](c),s=l.value}catch(e){return void n(e)}l.done?t(s):Promise.resolve(s).then(r,a)}function _asyncToGenerator(e){return function(){var t=this,n=arguments;return new Promise((function(r,a){var o=e.apply(t,n);function c(e){asyncGeneratorStep(o,r,a,c,l,"next",e)}function l(e){asyncGeneratorStep(o,r,a,c,l,"throw",e)}c(void 0)}))}}var PREFIX="acula";function getPrompts(){return JSON.parse(localStorage.getItem("".concat(PREFIX,"prompts"))||"[]")}function savePrompts(e){localStorage.setItem("".concat(PREFIX,"prompts"),JSON.stringify(e))}function getLastSelectedPromptIndex(){return parseInt(localStorage.getItem("lastSelectedPromptIndex")||"-1",10)}function saveLastSelectedPromptIndex(e){localStorage.setItem("lastSelectedPromptIndex",e.toString())}function getLastSelectedMultipromptIndices(){var e=localStorage.getItem("lastSelectedMultipromptIndices");return e?JSON.parse(e):[]}function saveLastSelectedMultipromptIndices(e){localStorage.setItem("lastSelectedMultipromptIndices",JSON.stringify(e))}function getWordsInfo(e,t){return _getWordsInfo.apply(this,arguments)}function _getWordsInfo(){return(_getWordsInfo=_asyncToGenerator(_regeneratorRuntime().mark((function e(t,n){var r,a,o,c,l,s,i,m;return _regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return(r=n.getTextRanges([" "],!1)).load("items"),e.next=4,t.sync();case 4:a=[],console.log(r),o=_createForOfIteratorHelper(r.items),e.prev=7,o.s();case 9:if((c=o.n()).done){e.next=28;break}return(l=c.value).load("text, hyperlink"),l.font.load("bold, italic, underline, color, highlightColor, size, name"),(s=l.footnotes).load("items"),e.next=17,t.sync();case 17:if(!l.text.trim()){e.next=26;break}if(i="",!(s.items.length>0)){e.next=25;break}return(m=s.items[0]).body.load("text"),e.next=24,t.sync();case 24:i=m.body.text;case 25:a.push({text:l.text.trim(),bold:l.font.bold,italic:l.font.italic,underline:"None"!==l.font.underline,color:l.font.color||null,highlightColor:l.font.highlightColor||null,size:l.font.size||null,fontName:l.font.name||null,footnoteText:i||null,hyperlink:l.hyperlink?l.hyperlink:null});case 26:e.next=9;break;case 28:e.next=33;break;case 30:e.prev=30,e.t0=e.catch(7),o.e(e.t0);case 33:return e.prev=33,o.f(),e.finish(33);case 36:return e.abrupt("return",a);case 37:case"end":return e.stop()}}),e,null,[[7,30,33,36]])})))).apply(this,arguments)}function applyFormattedText(e,t,n,r){return _applyFormattedText.apply(this,arguments)}function _applyFormattedText(){return(_applyFormattedText=_asyncToGenerator(_regeneratorRuntime().mark((function e(t,n,r,a){var o,c,l,s,i,m,u,d,p,g;return _regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n.clear(),e.next=3,t.sync();case 3:return o=calculateDefaultFormattingFromDifferences(a),n.font.bold=o.bold,n.font.italic=o.italic,n.font.underline=o.underline?"Single":"None",n.font.color=o.color||"black",n.font.highlightColor=o.highlightColor||null,n.font.size=o.size||11,n.font.name=o.fontName||"Calibri",e.next=13,t.sync();case 13:c=r.split(/\s+/),l=new Map,Array.isArray(a)&&a.length>0?a.forEach((function(e,t){var n="".concat(e.text,"-").concat(t);l.set(n,e)})):console.warn("Нет валидных данных форматирования. Применяется только базовое форматирование."),s=0,i=0;case 18:if(!(i<c.length)){e.next=30;break}if(m=c[i],u=n.insertText(m,Word.InsertLocation.end),d="".concat(m,"-").concat(s),p=l.get(d)){for(g in p)"text"!==g&&("bold"===g&&(u.font.bold=p[g]),"italic"===g&&(u.font.italic=p[g]),"underline"===g&&(u.font.underline=p[g]?"Single":"None"),"color"===g&&(u.font.color=p[g]),"highlightColor"===g&&(u.font.highlightColor=p[g]),"size"===g&&(u.font.size=p[g]),"fontName"===g&&(u.font.name=p[g]),"hyperlink"===g&&(u.hyperlink=p[g]),"footnoteText"===g&&p[g]&&u.insertFootnote().body.insertText(p[g],Word.InsertLocation.start));s++}return i<c.length-1&&n.insertText(" ",Word.InsertLocation.end),e.next=27,t.sync();case 27:i++,e.next=18;break;case 30:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function createFormattingMap(e){var t={};return e.forEach((function(e,n){var r="".concat(e.text,"-").concat(n);t[r]=e})),t}function calculateDefaultFormattingFromDifferences(e){return{bold:!1,italic:!1,underline:!1,color:"black",highlightColor:null,size:11,fontName:"Calibri"}}function showSelectedTextInfo(){return _showSelectedTextInfo.apply(this,arguments)}function _showSelectedTextInfo(){return _showSelectedTextInfo=_asyncToGenerator(_regeneratorRuntime().mark((function e(){return _regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,Word.run(function(){var e=_asyncToGenerator(_regeneratorRuntime().mark((function e(t){var n,r,a,o,c,l,s,i,m,u,d,p,g,f,h,v,y;return _regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=t.document.getSelection(),(r=n.getTextRanges([" "],!1)).load("items"),e.next=5,t.sync();case 5:a=[],o={},c={},l={},s=0;case 10:if(!(s<r.items.length)){e.next=36;break}return(i=r.items[s]).load("text, hyperlink"),i.font.load("bold, italic, underline, color, highlightColor, name, size"),(m=i.footnotes).load("items"),e.next=18,t.sync();case 18:if(!i.text.trim()){e.next=33;break}if(u=i.font.color||"default",d=i.font.name||"default",p=i.font.size||"default",o[u]=(o[u]||0)+1,c[d]=(c[d]||0)+1,l[p]=(l[p]||0)+1,g="",!(m.items.length>0)){e.next=32;break}return(f=m.items[0]).body.load("text"),e.next=31,t.sync();case 31:g=f.body.text;case 32:a.push({text:i.text.trim(),bold:i.font.bold,italic:i.font.italic,underline:"None"!==i.font.underline,color:u,highlightColor:i.font.highlightColor,hasFootnote:m.items.length>0,footnoteText:g,fontName:d,fontSize:p,hyperlink:i.hyperlink?i.hyperlink.address:null});case 33:s++,e.next=10;break;case 36:h=getMostCommonValue(o),v=getMostCommonValue(c),y=getMostCommonValue(l),displayWordsInfo(a,h,v,y);case 40:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}());case 2:case"end":return e.stop()}}),e)}))),_showSelectedTextInfo.apply(this,arguments)}function getMostCommonValue(e){return Object.entries(e).reduce((function(e,t){return e[1]>=t[1]?e:t}))[0]}function displayWordsInfo(e,t,n,r){var a=document.getElementById("fuuga_selected-text-info"),o="<h3>Анализ выделенного текста:</h3>";e.forEach((function(e,a){o+="<h4>Слово ".concat(a+1,": ").concat(e.text,"</h4>"),o+="<p>\n ".concat(e.bold?"✅":"❌"," <strong>Жирный</strong><br>\n ").concat(e.italic?"✅":"❌"," <em>Курсив</em><br>\n ").concat(e.underline?"✅":"❌"," <u>Подчеркнутый</u><br>\n ").concat(e.color!==t&&"default"!==e.color?"✅ Особый цвет: ".concat(e.color):"❌ Основной цвет","<br>\n ").concat(e.highlightColor?"✅ Выделение: ".concat(e.highlightColor):"❌ Без выделения","<br>\n ").concat(e.footnoteText?"✅ Есть сноска: ".concat(e.footnoteText):"❌ Без сноски","<br>\n ").concat(e.fontName!==n&&"default"!==e.fontName?"✅ Особый шрифт: ".concat(e.fontName):"❌ Основной шрифт: ".concat(n),"<br>\n ").concat(e.size!=r&&"default"!==e.size?"✅ Особый размер: ".concat(e.size):"❌ Основной размер: ".concat(r),"<br>\n ").concat(e.hyperlink?'✅ Ссылка: <a href="'.concat(e.hyperlink,'" target="_blank">').concat(e.hyperlink,"</a>"):"❌ Без ссылки","\n </p>")})),a.innerHTML=o}function getSpecialFormattingWords(e,t){return e.map((function(e){var n={text:e.text},r=!1;for(var a in t)void 0!==e[a]&&e[a]!==t[a]&&(n[a]=e[a],r=!0);return r?n:null})).filter((function(e){return null!==e}))}function getUpdatedFormattingInfo(e,t,n,r,a,o,c){return _getUpdatedFormattingInfo.apply(this,arguments)}function _getUpdatedFormattingInfo(){return _getUpdatedFormattingInfo=_asyncToGenerator(_regeneratorRuntime().mark((function e(t,n,r,a,o,c,l){var s,i,m,u,d,p,g,f,h;return _regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return s=localStorage.getItem("apiKey"),i=calculateDefaultFormatting(t),m=getSpecialFormattingWords(t,i),u='\nИсходный текст: "'.concat(n,'"\nИзменённый текст: "').concat(r,'"\n\nСписок слов с уникальным форматированием из исходного текста:\n').concat(JSON.stringify(m,null,2),"\n\nБазовое форматирование (применяется ко всему тексту по умолчанию):\n").concat(JSON.stringify(i,null,2),'\n\nТвоя задача:\n1. Найди соответствия для слов с уникальным форматированием в изменённом тексте, учитывая возможные изменения слов (например, перевод).\n2. Верни список слов из изменённого текста с применимым уникальным форматированием.\n3. Если какое-то уникальное форматирование не применимо в изменённом тексте, опусти его.\n\nВерни **только** валидный JSON-массив, где каждый объект содержит:\n- text: string - слово из изменённого текста с уникальным форматированием\n- свойства форматирования, отличающиеся от базовых значений\n\nПример ответа:\n[\n { "text": "Hi", "italic": true },\n { "text": "Danil", "bold": true },\n { "text": "20", "size": 20 }\n]\n'),d={model:a,messages:[{role:"system",content:"Ты - AI помощник по форматированию текста. Твоя задача - сопоставить слова с уникальным форматированием из исходного текста с соответствующими словами в изменённом тексте, даже если слова изменились (например, при переводе). Верни список слов из изменённого текста с их уникальным форматированием."},{role:"user",content:u}],temperature:o,max_tokens:c},e.prev=6,e.next=9,fetch("https://openrouter.ai/api/v1/chat/completions",{method:"POST",headers:{Authorization:"Bearer ".concat(s),"Content-Type":"application/json","HTTP-Referer":"https://www.office.com","X-Title":"Word Text Formatter"},body:JSON.stringify(d),signal:l});case 9:if((p=e.sent).ok){e.next=12;break}throw new Error("HTTP error! status: ".concat(p.status));case 12:return e.next=14,p.json();case 14:if(g=e.sent,console.log("Ответ от сервера (форматирование):",g.choices[0].message.content.trim()),f=g.choices[0].message.content.trim(),e.prev=17,h=JSON.parse(f),Array.isArray(h)){e.next=21;break}throw new Error("Response is not an array");case 21:e.next=27;break;case 23:throw e.prev=23,e.t0=e.catch(17),console.error("Ошибка при парсинге ответа модели:",e.t0),e.t0;case 27:return e.abrupt("return",h);case 30:if(e.prev=30,e.t1=e.catch(6),"AbortError"!==e.t1.name){e.next=37;break}throw console.log("Запрос был отменен."),e.t1;case 37:throw console.error("Error in getUpdatedFormattingInfo:",e.t1),e.t1;case 39:case"end":return e.stop()}}),e,null,[[6,30],[17,23]])}))),_getUpdatedFormattingInfo.apply(this,arguments)}function calculateDefaultFormatting(e){var t={bold:{},italic:{},underline:{},color:{},highlightColor:{},size:{},fontName:{}};e.forEach((function(e){for(var n in t){var r=void 0!==e[n]?e[n]:null;t[n][r]=(t[n][r]||0)+1}}));var n={};for(var r in t)n[r]=Object.entries(t[r]).reduce((function(e,t){return e[1]>=t[1]?e:t}))[0],"true"===n[r]?n[r]=!0:"false"===n[r]?n[r]=!1:"null"===n[r]?n[r]=null:"size"===r&&null!==n[r]&&(n[r]=parseFloat(n[r]));return n}function getFormattingDifferences(e,t){return e.map((function(e){var n={text:e.text};for(var r in t)void 0!==e[r]&&e[r]!==t[r]&&(n[r]=e[r]);return n}))}var originalText="",lastSelectedPrompt=null;function initHome(){document.getElementById("home").innerHTML='\n <div class="mt-3">\n \x3c!-- Navigation Tabs --\x3e\n <ul class="nav nav-tabs" id="fuuga_homeTab" role="tablist">\n <li class="nav-item">\n <a class="nav-link active" id="fuuga_main-tab" data-toggle="tab" href="#fuuga_mainContent" role="tab" aria-controls="fuuga_mainContent" aria-selected="true">\n <i class="fas fa-home"></i> Основное\n </a>\n </li>\n <li class="nav-item">\n <a class="nav-link" id="fuuga_multiprompt-tab" data-toggle="tab" href="#fuuga_multipromptContent" role="tab" aria-controls="fuuga_multipromptContent" aria-selected="false">\n <i class="fas fa-layer-group"></i> Мультипромпт\n </a>\n </li>\n <li class="nav-item">\n <a class="nav-link" id="fuuga_settings-tab" data-toggle="tab" href="#fuuga_settingsContent" role="tab" aria-controls="fuuga_settingsContent" aria-selected="false">\n <i class="fas fa-cog"></i> Настройки\n </a>\n </li>\n <li class="nav-item">\n <a class="nav-link" id="fuuga_presets-tab" data-toggle="tab" href="#fuuga_presetsContent" role="tab" aria-controls="fuuga_presetsContent" aria-selected="false">\n <i class="fas fa-save"></i> Пресеты\n </a>\n </li>\n <li class="nav-item">\n <a class="nav-link" id="fuuga_tools-tab" data-toggle="tab" href="#fuuga_toolsContent" role="tab" aria-controls="fuuga_toolsContent" aria-selected="false">\n <i class="fas fa-tools"></i> Инструменты\n </a>\n </li>\n </ul>\n \x3c!-- Tab Contents --\x3e\n <div class="tab-content" id="fuuga_homeTabContent">\n \x3c!-- Main Content --\x3e\n <div class="tab-pane fade show active" id="fuuga_mainContent" role="tabpanel" aria-labelledby="fuuga_main-tab">\n <div class="mt-3">\n \x3c!-- Instruction --\x3e\n <div class="alert alert-info">\n <strong>Инструкция:</strong>\n <ul>\n <li>Выберите промпт, который вы хотите применить к тексту.</li>\n <li>Выделите текст, который хотите обработать.</li>\n <li>Нажмите кнопку "Обработать".</li>\n </ul>\n </div>\n \x3c!-- Prompt Selection --\x3e\n <div class="form-group">\n <label for="fuuga_prompt-select">Выберите промпт:</label>\n <select id="fuuga_prompt-select" class="form-control"></select>\n </div>\n <div id="fuuga_selected-model" class="mt-2"></div>\n \x3c!-- Process Button --\x3e\n <button id="fuuga_process-text" class="btn btn-primary mt-3" disabled><i class="fas fa-play"></i> Обработать</button>\n \x3c!-- Cancel Button --\x3e\n <button id="fuuga_cancel-process" class="btn btn-secondary mt-3" style="display: none;"><i class="fas fa-stop"></i> Отменить</button>\n \x3c!-- Loading Indicator --\x3e\n <div id="fuuga_loading" class="mt-3 text-center" style="display: none;">\n \x3c!-- Processing statuses at the top --\x3e\n <div id="fuuga_current-step-spinner" class="mt-2 font-weight-bold"></div>\n <div id="fuuga_current-step" class="mt-2 font-weight-bold"></div>\n <div id="fuuga_progress-container" style="display: none;">\n <div class="progress">\n <div id="fuuga_progress-bar" class="progress-bar" role="progressbar" style="width: 0%;">0%</div>\n </div>\n <div id="fuuga_progress-text" class="mt-2">Обработано 0 из 0 чанков</div>\n </div>\n <div id="fuuga_spinner" style="display: none;">\n <div class="spinner-border text-primary" role="status">\n <span class="sr-only">Загрузка...</span>\n </div>\n </div>\n </div>\n \x3c!-- Logger Output --\x3e\n <div id="fuuga_logger-output" class="mt-3"></div>\n \x3c!-- Results --\x3e\n <div id="fuuga_home-results" class="mt-3"></div>\n </div>\n </div>\n \x3c!-- Multiprompt Content --\x3e\n <div class="tab-pane fade" id="fuuga_multipromptContent" role="tabpanel" aria-labelledby="fuuga_multiprompt-tab">\n \x3c!-- Sub Tabs for Multiprompt --\x3e\n <ul class="nav nav-tabs mt-3" id="fuuga_multipromptSubTab" role="tablist">\n <li class="nav-item">\n <a class="nav-link active" id="fuuga_multiprompt-main-tab" data-toggle="tab" href="#fuuga_multipromptMainContent" role="tab" aria-controls="fuuga_multipromptMainContent" aria-selected="true">\n <i class="fas fa-list"></i> Основное\n </a>\n </li>\n <li class="nav-item">\n <a class="nav-link" id="fuuga_multiprompt-visualization-tab" data-toggle="tab" href="#fuuga_multipromptVisualizationContent" role="tab" aria-controls="fuuga_multipromptVisualizationContent" aria-selected="false">\n <i class="fas fa-eye"></i> Визуализация\n </a>\n </li>\n <li class="nav-item">\n <a class="nav-link" id="fuuga_multiprompt-logger-tab" data-toggle="tab" href="#fuuga_multipromptLoggerContent" role="tab" aria-controls="fuuga_multipromptLoggerContent" aria-selected="false" style="display: none;">\n <i class="fas fa-file-alt"></i> Логер\n </a>\n </li>\n </ul>\n \x3c!-- Content of Multiprompt Sub Tabs --\x3e\n <div class="tab-content" id="fuuga_multipromptSubTabContent">\n \x3c!-- Multiprompt Main Content --\x3e\n <div class="tab-pane fade show active" id="fuuga_multipromptMainContent" role="tabpanel" aria-labelledby="fuuga_multiprompt-main-tab">\n <div class="mt-3">\n \x3c!-- Instruction --\x3e\n <div class="alert alert-info">\n <strong>Мультипромпт:</strong>\n <p>Здесь вы можете выбрать последовательность промптов для обработки текста.</p>\n <ul>\n <li>Выберите один или несколько промптов из списка.</li>\n <li>Установите порядок выполнения с помощью стрелок или перетаскивания.</li>\n <li>Нажмите кнопку "Обработать с мультипромптом".</li>\n </ul>\n </div>\n \x3c!-- Multiprompt Selection --\x3e\n <div class="form-group">\n <label for="fuuga_multiprompt-select">Выберите промпты и установите порядок:</label>\n <select id="fuuga_multiprompt-select" class="form-control" multiple></select>\n <small class="form-text text-muted">Выберите промпты и используйте список ниже для управления порядком.</small>\n </div>\n \x3c!-- Selected Prompts List --\x3e\n <ul id="fuuga_selected-prompts-list" class="list-group mt-2"></ul>\n <button id="fuuga_process-multiprompt-text" class="btn btn-primary mt-3" disabled><i class="fas fa-play"></i> Обработать с мультипромптом</button>\n \x3c!-- Cancel Button --\x3e\n <button id="fuuga_cancel-multiprompt-process" class="btn btn-secondary mt-3" style="display: none;"><i class="fas fa-stop"></i> Отменить</button>\n \x3c!-- Loading Indicator --\x3e\n <div id="fuuga_multiprompt-loading" class="mt-3 text-center" style="display: none;">\n \x3c!-- Processing statuses at the top --\x3e\n <div id="fuuga_multiprompt-current-step-spinner" class="mt-2 font-weight-bold"></div>\n <div id="fuuga_multiprompt-current-step" class="mt-2 font-weight-bold"></div>\n <div id="fuuga_multiprompt-progress-container" style="display: none;">\n <div class="progress">\n <div id="fuuga_multiprompt-progress-bar" class="progress-bar" role="progressbar" style="width: 0%;">0%</div>\n </div>\n <div id="fuuga_multiprompt-progress-text" class="mt-2">Обработано 0 из 0 шагов</div>\n </div>\n <div id="fuuga_multiprompt-spinner" style="display: none;">\n <div class="spinner-border text-primary" role="status">\n <span class="sr-only">Загрузка...</span>\n </div>\n </div>\n </div>\n \x3c!-- Results --\x3e\n <div id="fuuga_multiprompt-results" class="mt-3"></div>\n </div>\n </div>\n \x3c!-- Multiprompt Visualization Content --\x3e\n <div class="tab-pane fade" id="fuuga_multipromptVisualizationContent" role="tabpanel" aria-labelledby="fuuga_multiprompt-visualization-tab">\n <div class="mt-3">\n \x3c!-- Visualization --\x3e\n <div id="fuuga_multiprompt-flow" class="mt-3"></div>\n </div>\n </div>\n \x3c!-- Multiprompt Logger Content --\x3e\n <div class="tab-pane fade" id="fuuga_multipromptLoggerContent" role="tabpanel" aria-labelledby="fuuga_multiprompt-logger-tab">\n <div class="mt-3">\n \x3c!-- Logger Output --\x3e\n <div id="fuuga_multiprompt-logger-output" class="mt-3"></div>\n </div>\n </div>\n </div>\n </div>\n \x3c!-- Settings Content --\x3e\n <div class="tab-pane fade" id="fuuga_settingsContent" role="tabpanel" aria-labelledby="fuuga_settings-tab">\n \x3c!-- Instructions for Settings --\x3e\n <div class="alert alert-info mt-3">\n <strong>Инструкция:</strong>\n <p>Здесь вы можете настроить параметры обработки текста, модели, форматирования и логирования.</p>\n </div>\n \x3c!-- Sub Tabs for Settings --\x3e\n <ul class="nav nav-tabs mt-3" id="fuuga_settingsSubTab" role="tablist">\n <li class="nav-item">\n <a class="nav-link active" id="fuuga_text-processing-tab" data-toggle="tab" href="#fuuga_textProcessingContent" role="tab" aria-controls="fuuga_textProcessingContent" aria-selected="true"><i class="fas fa-file-alt"></i> Настройки обработки текста</a>\n </li>\n <li class="nav-item">\n <a class="nav-link" id="fuuga_model-settings-tab" data-toggle="tab" href="#fuuga_modelSettingsContent" role="tab" aria-controls="fuuga_modelSettingsContent" aria-selected="false"><i class="fas fa-brain"></i> Настройки модели</a>\n </li>\n <li class="nav-item">\n <a class="nav-link" id="fuuga_formatting-settings-tab" data-toggle="tab" href="#fuuga_formattingSettingsContent" role="tab" aria-controls="fuuga_formattingSettingsContent" aria-selected="false"><i class="fas fa-font"></i> Параметры форматирования</a>\n </li>\n <li class="nav-item">\n <a class="nav-link" id="fuuga_logger-settings-tab" data-toggle="tab" href="#fuuga_loggerSettingsContent" role="tab" aria-controls="fuuga_loggerSettingsContent" aria-selected="false"><i class="fas fa-clipboard-list"></i> Настройки логера</a>\n </li>\n <li class="nav-item">\n <a class="nav-link" id="fuuga_misc-settings-tab" data-toggle="tab" href="#fuuga_miscSettingsContent" role="tab" aria-controls="fuuga_miscSettingsContent" aria-selected="false"><i class="fas fa-sliders-h"></i> Разное</a>\n </li>\n </ul>\n \x3c!-- Content of Settings Sub Tabs --\x3e\n <div class="tab-content" id="fuuga_settingsSubTabContent">\n \x3c!-- Text Processing Settings --\x3e\n <div class="tab-pane fade show active" id="fuuga_textProcessingContent" role="tabpanel" aria-labelledby="fuuga_text-processing-tab">\n <div class="alert alert-info mt-3">\n <p>Здесь вы можете настроить параметры обработки текста, такие как максимальное количество символов и разбивка на чанки.</p>\n </div>\n \x3c!-- Maximum characters --\x3e\n <div class="form-group">\n <label for="fuuga_max-chars">Максимальное количество символов для обработки (0 для без лимита):</label>\n <input type="number" id="fuuga_max-chars" class="form-control" value="2000" min="0">\n </div>\n \x3c!-- Split into chunks --\x3e\n <div class="form-check mt-2">\n <input class="form-check-input" type="checkbox" id="fuuga_split-into-chunks-checkbox">\n <label class="form-check-label" for="fuuga_split-into-chunks-checkbox" title="Разбивать текст на небольшие части для обработки">\n Разбивать текст на чанки\n </label>\n </div>\n \x3c!-- Chunk size --\x3e\n <div class="form-group mt-2">\n <label for="fuuga_chunk-size">Размер чанка (в предложениях):</label>\n <input type="number" id="fuuga_chunk-size" class="form-control" value="8" min="1">\n </div>\n </div>\n \x3c!-- Model Settings --\x3e\n <div class="tab-pane fade" id="fuuga_modelSettingsContent" role="tabpanel" aria-labelledby="fuuga_model-settings-tab">\n <div class="alert alert-info mt-3">\n <p>Здесь вы можете настроить параметры модели, такие как температура и максимальное количество токенов.</p>\n </div>\n \x3c!-- Температура --\x3e\n <div class="form-group mt-2">\n <label for="fuuga_temperature">Температура (0.0 - 1.0):</label>\n <input type="number" id="fuuga_temperature" class="form-control" value="0.5" min="0.0" max="1.0" step="0.1" title="Контролирует степень случайности модели. Низкие значения делают ответы более детерминированными">\n </div>\n \x3c!-- Максимальное количество токенов --\x3e\n <div class="form-group">\n <label for="fuuga_max-tokens">Максимальное количество токенов:</label>\n <input type="number" id="fuuga_max-tokens" class="form-control" value="4000" min="1" title="Максимальное количество токенов в ответе модели">\n </div>\n </div>\n \x3c!-- Formatting Settings --\x3e\n <div class="tab-pane fade" id="fuuga_formattingSettingsContent" role="tabpanel" aria-labelledby="fuuga_formatting-settings-tab">\n <div class="alert alert-info mt-3">\n <p>Здесь вы можете настроить параметры форматирования текста.</p>\n </div>\n \x3c!-- Apply Formatting --\x3e\n <div class="form-check mt-2">\n <input type="checkbox" class="form-check-input" id="fuuga_apply-formatting">\n <label class="form-check-label" for="fuuga_apply-formatting">Применять форматирование</label>\n </div>\n \x3c!-- Formatting Model --\x3e\n <div class="form-group mt-2">\n <label for="fuuga_formatting-model">Модель для форматирования:</label>\n <select id="fuuga_formatting-model" class="form-control"></select>\n </div>\n \x3c!-- Formatting Temperature --\x3e\n <div class="form-group mt-2">\n <label for="fuuga_formatting-temperature">Температура для форматирования (0.0 - 1.0):</label>\n <input type="number" id="fuuga_formatting-temperature" class="form-control" value="0.5" min="0.0" max="1.0" step="0.1" title="Контролирует степень случайности модели при форматировании">\n </div>\n \x3c!-- Formatting Max Tokens --\x3e\n <div class="form-group">\n <label for="fuuga_formatting-max-tokens">Максимальное количество токенов для форматирования:</label>\n <input type="number" id="fuuga_formatting-max-tokens" class="form-control" value="1000" min="1" title="Максимальное количество токенов в ответе модели при форматировании">\n </div>\n </div>\n \x3c!-- Logger Settings --\x3e\n <div class="tab-pane fade" id="fuuga_loggerSettingsContent" role="tabpanel" aria-labelledby="fuuga_logger-settings-tab">\n <div class="alert alert-info mt-3">\n <p>Здесь вы можете настроить параметры логирования.</p>\n </div>\n \x3c!-- Enable Logger --\x3e\n <div class="form-check mt-2">\n <input type="checkbox" class="form-check-input" id="fuuga_enable-logger">\n <label class="form-check-label" for="fuuga_enable-logger">Включить логирование</label>\n </div>\n \x3c!-- Logger Level --\x3e\n <div class="form-group mt-2">\n <label for="fuuga_logger-level">Уровень логирования:</label>\n <select id="fuuga_logger-level" class="form-control">\n <option value="minimal">Минимальный</option>\n <option value="medium">Средний</option>\n <option value="maximal">Максимальный</option>\n <option value="custom">Пользовательский</option>\n </select>\n </div>\n \x3c!-- Custom Logger Prompt --\x3e\n <div class="mt-2" id="fuuga_custom-logger-prompt-container" style="display: none;">\n <button class="btn btn-link" type="button" data-toggle="collapse" data-target="#fuuga_customLoggerPromptCollapse" aria-expanded="false" aria-controls="fuuga_customLoggerPromptCollapse">\n Настроить пользовательский промпт\n </button>\n <div class="collapse" id="fuuga_customLoggerPromptCollapse">\n <div class="card card-body">\n <div class="form-group">\n <label for="fuuga_custom-logger-prompt">Пользовательский промпт для логера:</label>\n <textarea id="fuuga_custom-logger-prompt" class="form-control" rows="5" placeholder="Введите ваш пользовательский промпт здесь..."></textarea>\n <small class="form-text text-muted">Используйте {{beforeText}} и {{afterText}} для вставки исходного и обработанного текста соответственно. Пример: "Проанализируй изменения между {{beforeText}} и {{afterText}}"</small>\n </div>\n </div>\n </div>\n </div>\n \x3c!-- Logger Model --\x3e\n <div class="form-group mt-2">\n <label for="fuuga_logger-model">Модель для логирования:</label>\n <select id="fuuga_logger-model" class="form-control"></select>\n </div>\n \x3c!-- Logger Temperature --\x3e\n <div class="form-group mt-2">\n <label for="fuuga_logger-temperature">Температура для логирования (0.0 - 1.0):</label>\n <input type="number" id="fuuga_logger-temperature" class="form-control" value="0.3" min="0.0" max="1.0" step="0.1" title="Контролирует степень случайности модели при логировании">\n </div>\n \x3c!-- Logger Max Tokens --\x3e\n <div class="form-group">\n <label for="fuuga_logger-max-tokens">Максимальное количество токенов для логирования:</label>\n <input type="number" id="fuuga_logger-max-tokens" class="form-control" value="500" min="1" title="Максимальное количество токенов в ответе модели при логировании">\n </div>\n \x3c!-- Logger Prompts Edit --\x3e\n <div class="form-check mt-2">\n <input type="checkbox" class="form-check-input" id="fuuga_edit-logger-prompts">\n <label class="form-check-label" for="fuuga_edit-logger-prompts">Редактировать промпты логера</label>\n </div>\n <div id="fuuga_logger-prompts-accordion" class="mt-3" style="display: none;">\n <div class="accordion" id="fuuga_loggerPromptsAccordion">\n \x3c!-- Minimal Level Prompt --\x3e\n <div class="card">\n <div class="card-header" id="fuuga_headingMinimalPrompt">\n <h2 class="mb-0">\n <button class="btn btn-link" type="button" data-toggle="collapse" data-target="#fuuga_collapseMinimalPrompt" aria-expanded="true" aria-controls="fuuga_collapseMinimalPrompt">\n Промпт для минимального уровня\n </button>\n </h2>\n </div>\n <div id="fuuga_collapseMinimalPrompt" class="collapse" aria-labelledby="fuuga_headingMinimalPrompt" data-parent="#fuuga_loggerPromptsAccordion">\n <div class="card-body">\n <textarea id="fuuga_logger-prompt-minimal" class="form-control" rows="5"></textarea>\n </div>\n </div>\n </div>\n \x3c!-- Medium Level Prompt --\x3e\n <div class="card">\n <div class="card-header" id="fuuga_headingMediumPrompt">\n <h2 class="mb-0">\n <button class="btn btn-link" type="button" data-toggle="collapse" data-target="#fuuga_collapseMediumPrompt" aria-expanded="false" aria-controls="fuuga_collapseMediumPrompt">\n Промпт для среднего уровня\n </button>\n </h2>\n </div>\n <div id="fuuga_collapseMediumPrompt" class="collapse" aria-labelledby="fuuga_headingMediumPrompt" data-parent="#fuuga_loggerPromptsAccordion">\n <div class="card-body">\n <textarea id="fuuga_logger-prompt-medium" class="form-control" rows="5"></textarea>\n </div>\n </div>\n </div>\n \x3c!-- Maximal Level Prompt --\x3e\n <div class="card">\n <div class="card-header" id="fuuga_headingMaximalPrompt">\n <h2 class="mb-0">\n <button class="btn btn-link" type="button" data-toggle="collapse" data-target="#fuuga_collapseMaximalPrompt" aria-expanded="false" aria-controls="fuuga_collapseMaximalPrompt">\n Промпт для максимального уровня\n </button>\n </h2>\n </div>\n <div id="fuuga_collapseMaximalPrompt" class="collapse" aria-labelledby="fuuga_headingMaximalPrompt" data-parent="#fuuga_loggerPromptsAccordion">\n <div class="card-body">\n <textarea id="fuuga_logger-prompt-maximal" class="form-control" rows="5"></textarea>\n </div>\n </div>\n </div>\n </div>\n \x3c!-- Reset Logger Prompts Button --\x3e\n <button id="fuuga_reset-logger-prompts" class="btn btn-secondary mt-3">Сбросить промпты логера</button>\n <div id="fuuga_logger-prompt-message" class="mt-2"></div>\n </div>\n </div>\n \x3c!-- Misc Settings --\x3e\n <div class="tab-pane fade" id="fuuga_miscSettingsContent" role="tabpanel" aria-labelledby="fuuga_misc-settings-tab">\n <div class="alert alert-info mt-3">\n <p>Здесь вы можете сбросить настройки до значений по умолчанию.</p>\n </div>\n <button id="fuuga_reset-settings" class="btn btn-danger mt-3">Сбросить до настроек по умолчанию</button>\n </div>\n </div>\n </div>\n \x3c!-- Presets Content --\x3e\n <div class="tab-pane fade" id="fuuga_presetsContent" role="tabpanel" aria-labelledby="fuuga_presets-tab">\n \x3c!-- Instructions for Presets --\x3e\n <div class="alert alert-info mt-3">\n <strong>Инструкция:</strong>\n <p>Здесь вы можете сохранять, экспортировать и импортировать ваши настройки в виде пресетов.</p>\n </div>\n \x3c!-- Presets Sub Tabs --\x3e\n <ul class="nav nav-tabs mt-3" id="fuuga_presetsSubTab" role="tablist">\n <li class="nav-item">\n <a class="nav-link active" id="fuuga_save-preset-tab" data-toggle="tab" href="#fuuga_savePresetContent" role="tab" aria-controls="fuuga_savePresetContent" aria-selected="true">Сохранить</a>\n </li>\n <li class="nav-item">\n <a class="nav-link" id="fuuga_-preset-tab" data-toggle="tab" href="#fuuga_PresetContent" role="tab" aria-controls="fuuga_PresetContent" aria-selected="false">Экспорт</a>\n </li>\n <li class="nav-item">\n <a class="nav-link" id="fuuga_import-preset-tab" data-toggle="tab" href="#fuuga_importPresetContent" role="tab" aria-controls="fuuga_importPresetContent" aria-selected="false">Импорт</a>\n </li>\n </ul>\n \x3c!-- Presets Sub Tab Content --\x3e\n <div class="tab-content" id="fuuga_presetsSubTabContent">\n \x3c!-- Save Preset --\x3e\n <div class="tab-pane fade show active" id="fuuga_savePresetContent" role="tabpanel" aria-labelledby="fuuga_save-preset-tab">\n <div class="alert alert-info mt-3">\n <p>Здесь вы можете сохранить текущие настройки как пресет.</p>\n </div>\n \x3c!-- Preset Selection --\x3e\n <div class="form-group">\n <label for="fuuga_preset-select">Выберите пресет:</label>\n <select id="fuuga_preset-select" class="form-control"></select>\n </div>\n \x3c!-- Preset Name --\x3e\n <div class="form-group">\n <label for="fuuga_preset-name">Название пресета для сохранения:</label>\n <input type="text" id="fuuga_preset-name" class="form-control" placeholder="Введите название пресета">\n </div>\n \x3c!-- Preset Buttons --\x3e\n <div class="form-group mt-3">\n <button id="fuuga_save-preset" class="btn btn-primary">Сохранить текущие настройки как пресет</button>\n <button id="fuuga_delete-preset" class="btn btn-danger">Удалить выбранный пресет</button>\n </div>\n \x3c!-- Preset Messages and Confirmation --\x3e\n <div id="fuuga_preset-confirmation" class="mt-2" style="display:none;">\n <div class="alert alert-warning">\n <p id="fuuga_preset-confirmation-message"></p>\n <button id="fuuga_preset-confirm-yes" class="btn btn-danger">Да</button>\n <button id="fuuga_preset-confirm-no" class="btn btn-secondary">Нет</button>\n </div>\n </div>\n <div id="fuuga_preset-message" class="mt-2"></div>\n </div>\n \x3c!-- Preset --\x3e\n <div class="tab-pane fade" id="fuuga_PresetContent" role="tabpanel" aria-labelledby="fuuga_-preset-tab">\n <div class="alert alert-info mt-3">\n <p>Здесь вы можете экспортировать выбранный пресет в формате JSON.</p>\n </div>\n <label for="fuuga_preset-json">Экспорт пресета (JSON):</label>\n <textarea id="fuuga_preset-json" class="form-control" rows="5" readonly></textarea>\n <button id="fuuga_copy-preset-json" class="btn btn-secondary mt-2">Скопировать JSON</button>\n </div>\n \x3c!-- Import Preset --\x3e\n <div class="tab-pane fade" id="fuuga_importPresetContent" role="tabpanel" aria-labelledby="fuuga_import-preset-tab">\n <div class="alert alert-info mt-3">\n <p>Здесь вы можете импортировать пресет из JSON.</p>\n </div>\n <label for="fuuga_preset-json-import">Импорт пресета (JSON):</label>\n <textarea id="fuuga_preset-json-import" class="form-control" rows="5"></textarea>\n <button id="fuuga_import-preset" class="btn btn-secondary mt-2">Импортировать пресет</button>\n </div>\n </div>\n </div>\n \x3c!-- Tools Content --\x3e\n <div class="tab-pane fade" id="fuuga_toolsContent" role="tabpanel" aria-labelledby="fuuga_tools-tab">\n \x3c!-- Instructions for Tools --\x3e\n <div class="alert alert-info mt-3">\n <strong>Инструменты:</strong>\n <p>Здесь вы можете получить информацию о выделенном тексте.</p>\n </div>\n <button id="fuuga_show-selected-text" class="btn btn-info mt-3"><i class="fas fa-info-circle"></i> Показать информацию о выделенном тексте</button>\n <div id="fuuga_selected-text-info" class="mt-3"></div>\n </div>\n </div>\n </div>\n ',$('#fuuga_homeTab a[data-toggle="tab"]').on("click",(function(e){e.preventDefault(),$(this).tab("show")})),$('#fuuga_settingsSubTab a[data-toggle="tab"]').on("click",(function(e){e.preventDefault(),$(this).tab("show")})),$('#fuuga_multipromptSubTab a[data-toggle="tab"]').on("click",(function(e){e.preventDefault(),$(this).tab("show")})),$('#fuuga_presetsSubTab a[data-toggle="tab"]').on("click",(function(e){e.preventDefault(),$(this).tab("show")})),$("#fuuga_prompt-select").select2({width:"100%",placeholder:"Выберите промпт",templateResult:formatPrompt,templateSelection:formatPromptSelection}),$("#fuuga_multiprompt-select").select2({width:"100%",placeholder:"Выберите промпты",multiple:!0,allowClear:!0,templateResult:formatPrompt,templateSelection:formatPromptSelection}),$("#fuuga_formatting-model").select2({width:"100%",placeholder:"Выберите модель для форматирования"}),$("#fuuga_logger-model").select2({width:"100%",placeholder:"Выберите модель для логирования"}),$("#fuuga_selected-prompts-list").sortable({update:function(e,t){updateMultipromptFlowVisualization(),saveHomeSettingsHome()}}),document.getElementById("fuuga_process-text").onclick=processSelectedTextHome,document.getElementById("fuuga_cancel-process").onclick=cancelProcess,document.getElementById("fuuga_show-selected-text").onclick=showSelectedTextInfoHome,document.getElementById("fuuga_process-multiprompt-text").onclick=processMultipromptText,document.getElementById("fuuga_cancel-multiprompt-process").onclick=cancelMultipromptProcess,document.getElementById("fuuga_reset-settings").onclick=showResetSettingsModal,document.getElementById("fuuga_logger-level").onchange=function(){var e=document.getElementById("fuuga_logger-level").value;document.getElementById("fuuga_custom-logger-prompt-container").style.display="custom"===e?"block":"none",saveHomeSettingsHome()},document.getElementById("fuuga_enable-logger").onchange=function(){var e=document.getElementById("fuuga_enable-logger").checked;document.getElementById("fuuga_multiprompt-logger-tab").style.display=e?"block":"none",saveHomeSettingsHome()},document.getElementById("fuuga_edit-logger-prompts").onchange=function(){var e=document.getElementById("fuuga_edit-logger-prompts").checked;document.getElementById("fuuga_logger-prompts-accordion").style.display=e?"block":"none",saveHomeSettingsHome()},document.getElementById("fuuga_reset-logger-prompts").onclick=function(){resetLoggerPrompts(),updatePresetJSON()},loadModelsForFormattingSelect(),loadModelsForLoggerSelectHome(),updatePromptSelect(),updateMultipromptSelect(),loadHomeSettingsHome(),initializePresetSelect(),populatePresetSelect(),setInterval(checkSelection,1e3),document.getElementById("fuuga_apply-formatting").onchange=function(){saveHomeSettingsHome()},document.getElementById("fuuga_split-into-chunks-checkbox").onchange=function(){saveHomeSettingsHome()},document.getElementById("fuuga_chunk-size").onchange=function(){saveHomeSettingsHome()},document.getElementById("fuuga_max-chars").onchange=function(){saveHomeSettingsHome()},document.getElementById("fuuga_temperature").onchange=function(){saveHomeSettingsHome()},document.getElementById("fuuga_max-tokens").onchange=function(){saveHomeSettingsHome()},document.getElementById("fuuga_formatting-temperature").onchange=function(){saveHomeSettingsHome()},document.getElementById("fuuga_formatting-max-tokens").onchange=function(){saveHomeSettingsHome()},document.getElementById("fuuga_logger-temperature").onchange=function(){saveHomeSettingsHome()},document.getElementById("fuuga_logger-max-tokens").onchange=function(){saveHomeSettingsHome()},document.getElementById("fuuga_custom-logger-prompt").onchange=function(){saveHomeSettingsHome()},document.getElementById("fuuga_logger-prompt-minimal").onchange=function(){saveLoggerPrompts(),updatePresetJSON()},document.getElementById("fuuga_logger-prompt-medium").onchange=function(){saveLoggerPrompts(),updatePresetJSON()},document.getElementById("fuuga_logger-prompt-maximal").onchange=function(){saveLoggerPrompts(),updatePresetJSON()},$("#fuuga_formatting-model").on("change",(function(){saveHomeSettingsHome()})),$("#fuuga_logger-model").on("change",(function(){saveHomeSettingsHome()})),document.getElementById("fuuga_preset-select").onchange=loadSelectedPreset,document.getElementById("fuuga_save-preset").onclick=saveCurrentSettingsAsPreset,document.getElementById("fuuga_delete-preset").onclick=deleteSelectedPreset,document.getElementById("fuuga_copy-preset-json").onclick=copyPresetJSON,document.getElementById("fuuga_import-preset").onclick=importPresetFromJSONHome,loadHomeSettingsHome()}function updatePromptSelect(){var e=$("#fuuga_prompt-select"),t=document.getElementById("fuuga_selected-model"),n=getPrompts();e.empty(),e.append(new Option("Выберите промпт","",!0,!0));var r=JSON.parse(localStorage.getItem("mainSettings")||"{}").lastSelectedPromptIndex||-1;n.forEach((function(t,n){var a=new Option(t.name,n,!1,n==r);e.append(a)})),e.trigger("change");var a=r>=0&&r<n.length?r:null;lastSelectedPrompt=null!==a?n[a]:null,t.textContent=lastSelectedPrompt?"Модель: ".concat(lastSelectedPrompt.model):"",document.getElementById("fuuga_process-text").disabled=!lastSelectedPrompt,e.on("change",(function(){var e=$(this).val();lastSelectedPrompt=e?n[e]:null;var r=JSON.parse(localStorage.getItem("mainSettings")||"{}");r.lastSelectedPromptIndex=e||-1,localStorage.setItem("mainSettings",JSON.stringify(r)),t.textContent=lastSelectedPrompt?"Модель: ".concat(lastSelectedPrompt.model):"",document.getElementById("fuuga_process-text").disabled=!lastSelectedPrompt,saveHomeSettingsHome()}))}function formatPrompt(e){if(!e.id)return e.text;var t=getPrompts()[e.id];return t?$("<span>".concat(t.name," (").concat(t.model,")</span>")):e.text}function formatPromptSelection(e){if(!e.id)return e.text;var t=getPrompts()[e.id];return t?t.name:e.text}function showResetSettingsModal(){$("body").append('\n <div class="modal fade" id="fuuga_resetSettingsModal" tabindex="-1" role="dialog" aria-labelledby="fuuga_resetSettingsModalLabel" aria-hidden="true">\n <div class="modal-dialog" role="document">\n <div class="modal-content">\n <div class="modal-header">\n <h5 class="modal-title" id="fuuga_resetSettingsModalLabel">Сброс настроек</h5>\n <button type="button" class="close" data-dismiss="modal" aria-label="Закрыть">\n <span aria-hidden="true">×</span>\n </button>\n </div>\n <div class="modal-body">\n Вы уверены, что хотите сбросить настройки до значений по умолчанию?\n </div>\n <div class="modal-footer">\n <button type="button" class="btn btn-secondary" data-dismiss="modal">Отмена</button>\n <button type="button" class="btn btn-danger" id="fuuga_confirmResetSettings">Сбросить</button>\n </div>\n </div>\n </div>\n </div>\n '),$("#fuuga_resetSettingsModal").modal("show"),$("#fuuga_confirmResetSettings").on("click",(function(){resetHomeSettings(),$("#fuuga_resetSettingsModal").modal("hide"),$("#fuuga_resetSettingsModal").remove(),showAlertHome("Настройки были сброшены до значений по умолчанию.","success")})),$("#fuuga_resetSettingsModal").on("hidden.bs.modal",(function(){$("#fuuga_resetSettingsModal").remove()}))}function showAlertHome(e,t){var n='\n <div class="alert alert-'.concat(t,' alert-dismissible fade show mt-3" role="alert">\n ').concat(e,'\n <button type="button" class="close" data-dismiss="alert" aria-label="Закрыть">\n <span aria-hidden="true">×</span>\n </button>\n </div>\n ');$("#fuuga_miscSettingsContent").prepend(n)}function loadModelsForFormattingSelect(){var e=$("#fuuga_formatting-model"),t=JSON.parse(localStorage.getItem("models")||"[]");e.empty(),t.forEach((function(t){var n=new Option(t.name,t.id,!1,!1);e.append(n)})),e.trigger("change");var n=t.find((function(e){return"openai/gpt-4"===e.id}))||t[0];n&&e.val(n.id).trigger("change");var r=JSON.parse(localStorage.getItem("mainSettings")||"{}").formattingModel;r&&t.some((function(e){return e.id===r}))&&e.val(r).trigger("change")}function loadModelsForLoggerSelectHome(){var e=$("#fuuga_logger-model"),t=JSON.parse(localStorage.getItem("models")||"[]");e.empty(),t.forEach((function(t){var n=new Option(t.name,t.id,!1,!1);e.append(n)})),e.trigger("change");var n=t.find((function(e){return"openai/gpt-4"===e.id}))||t[0];n&&e.val(n.id).trigger("change");var r=JSON.parse(localStorage.getItem("mainSettings")||"{}").loggerModel;r&&t.some((function(e){return e.id===r}))&&e.val(r).trigger("change")}function checkSelection(){Word.run(function(){var e=_asyncToGenerator(_regeneratorRuntime().mark((function e(t){var n,r,a,o;return _regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return(n=t.document.getSelection()).load("text"),e.next=4,t.sync();case 4:r=document.getElementById("fuuga_process-text"),a=document.getElementById("fuuga_process-multiprompt-text"),o=$("#fuuga_multiprompt-select").val(),n.text.trim().length>0&&lastSelectedPrompt?r.disabled=!1:r.disabled=!0,n.text.trim().length>0&&o&&o.length>0?a.disabled=!1:a.disabled=!0;case 9:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}())}function updateMultipromptSelect(){var e=$("#fuuga_multiprompt-select"),t=getPrompts();e.empty(),t.forEach((function(t,n){var r=new Option(t.name,n,!1,!1);e.append(r)}));var n=JSON.parse(localStorage.getItem("mainSettings")||"{}").lastSelectedMultipromptIndices||[];e.val(n).trigger("change"),updateSelectedPromptsList(n),e.off("change").on("change",(function(){updateSelectedPromptsList($(this).val()),saveHomeSettingsHome()}))}function updateSelectedPromptsList(e){var t=getPrompts(),n=document.getElementById("fuuga_selected-prompts-list");n.innerHTML="",Array.isArray(e)||(e=e?[e]:[]),e.forEach((function(e){if(""!==e){var r=parseInt(e,10);if(!isNaN(r)){var a=t[r];if(a){var o=document.createElement("li");o.className="list-group-item d-flex justify-content-between align-items-center",o.dataset.promptIndex=r,o.innerHTML="\n <div>\n <span>".concat(a.name,'</span>\n <span class="badge badge-secondary ml-2">').concat(a.model,'</span>\n </div>\n <div>\n <button class="btn btn-sm btn-secondary move-up"><i class="fas fa-arrow-up"></i></button>\n <button class="btn btn-sm btn-secondary move-down"><i class="fas fa-arrow-down"></i></button>\n <button class="btn btn-sm btn-danger remove-prompt"><i class="fas fa-times"></i></button>\n </div>\n '),n.appendChild(o)}}}})),n.querySelectorAll(".move-up").forEach((function(e){e.addEventListener("click",(function(){var e=this.closest("li");e.previousElementSibling&&(e.parentNode.insertBefore(e,e.previousElementSibling),updateMultipromptFlowVisualization(),saveHomeSettingsHome())}))})),n.querySelectorAll(".move-down").forEach((function(e){e.addEventListener("click",(function(){var e=this.closest("li");e.nextElementSibling&&(e.parentNode.insertBefore(e.nextElementSibling,e),updateMultipromptFlowVisualization(),saveHomeSettingsHome())}))})),n.querySelectorAll(".remove-prompt").forEach((function(e){e.addEventListener("click",(function(){var e=this.closest("li");e.parentNode.removeChild(e);var t=Array.from(n.children).map((function(e){return e.dataset.promptIndex}));$("#fuuga_multiprompt-select").val(t).trigger("change"),updateMultipromptFlowVisualization(),saveHomeSettingsHome()}))})),updateMultipromptFlowVisualization()}function updateMultipromptFlowVisualization(){var e=document.getElementById("fuuga_selected-prompts-list"),t=getPrompts(),n=e.querySelectorAll("li"),r=Array.from(n).map((function(e){return e.dataset.promptIndex})),a=document.getElementById("fuuga_multiprompt-flow");a.innerHTML="";var o="fuuga_multiprompt-flow-accordion",c='<div class="accordion" id="'.concat(o,'">');c+='\n <div class="card">\n <div class="card-header" id="'.concat(o,'-heading-original">\n <h2 class="mb-0">\n <button class="btn btn-link" type="button" data-toggle="collapse" data-target="#').concat(o,'-collapse-original" aria-expanded="true" aria-controls="').concat(o,'-collapse-original">\n <i class="fas fa-file-alt"></i> Исходный текст\n </button>\n </h2>\n </div>\n <div id="').concat(o,'-collapse-original" class="collapse" aria-labelledby="').concat(o,'-heading-original" data-parent="#').concat(o,'">\n <div class="card-body" id="fuuga_multiprompt-original-text">\n Здесь будет отображаться ваш исходный текст.\n </div>\n </div>\n </div>\n '),r.forEach((function(e,n){var r=t[e],a="".concat(o,"-collapse-").concat(n);c+='\n <div class="card">\n <div class="card-header" id="'.concat(o,"-heading-").concat(n,'">\n <h2 class="mb-0">\n <button class="btn btn-link" type="button" data-toggle="collapse" data-target="#').concat(a,'" aria-expanded="true" aria-controls="').concat(a,'">\n <i class="fas fa-bolt"></i> Шаг ').concat(n+1,": ").concat(r.name,'\n </button>\n </h2>\n </div>\n <div id="').concat(a,'" class="collapse" aria-labelledby="').concat(o,"-heading-").concat(n,'" data-parent="#').concat(o,'">\n <div class="card-body">\n <p><strong>Описание промпта:</strong> ').concat(r.text||"Нет описания","</p>\n <p><strong>Модель:</strong> ").concat(r.model,'</p>\n <p><strong>Результат после этого шага будет отображаться здесь после обработки.</strong></p>\n <div id="fuuga_multiprompt-step-result-').concat(n,'" class="mt-2"></div>\n </div>\n </div>\n </div>\n ')})),!!JSON.parse(localStorage.getItem("mainSettings")||"{}").applyFormatting&&(c+='\n <div class="card">\n <div class="card-header" id="'.concat(o,'-heading-formatting">\n <h2 class="mb-0">\n <button class="btn btn-link" type="button" data-toggle="collapse" data-target="#').concat(o,'-collapse-formatting" aria-expanded="true" aria-controls="').concat(o,'-collapse-formatting">\n <i class="fas fa-paint-brush"></i> Применение форматирования\n </button>\n </h2>\n </div>\n <div id="').concat(o,'-collapse-formatting" class="collapse" aria-labelledby="').concat(o,'-heading-formatting" data-parent="#').concat(o,'">\n <div class="card-body">\n <p>Финальный текст будет отформатирован с использованием выбранной модели форматирования.</p>\n </div>\n </div>\n </div>\n ')),c+="</div>",a.innerHTML=c,$(".collapse").collapse()}function saveHomeSettingsHome(){var e=JSON.parse(localStorage.getItem("mainSettings")||"{}");e.applyFormatting=document.getElementById("fuuga_apply-formatting").checked,e.splitIntoChunks=document.getElementById("fuuga_split-into-chunks-checkbox").checked,e.chunkSize=document.getElementById("fuuga_chunk-size").value,e.maxChars=document.getElementById("fuuga_max-chars").value,e.temperature=document.getElementById("fuuga_temperature").value,e.maxTokens=document.getElementById("fuuga_max-tokens").value,e.formattingTemperature=document.getElementById("fuuga_formatting-temperature").value,e.formattingMaxTokens=document.getElementById("fuuga_formatting-max-tokens").value,e.formattingModel=$("#fuuga_formatting-model").val(),e.enableLogger=document.getElementById("fuuga_enable-logger").checked,e.loggerLevel=document.getElementById("fuuga_logger-level").value,e.customLoggerPrompt=document.getElementById("fuuga_custom-logger-prompt").value,e.loggerTemperature=document.getElementById("fuuga_logger-temperature").value,e.loggerMaxTokens=document.getElementById("fuuga_logger-max-tokens").value,e.loggerModel=$("#fuuga_logger-model").val(),e.editLoggerPrompts=document.getElementById("fuuga_edit-logger-prompts").checked;var t={};t.minimal=document.getElementById("fuuga_logger-prompt-minimal").value,t.medium=document.getElementById("fuuga_logger-prompt-medium").value,t.maximal=document.getElementById("fuuga_logger-prompt-maximal").value,e.loggerPrompts=t,localStorage.setItem("mainSettings",JSON.stringify(e)),updatePresetJSON()}function loadHomeSettingsHome(){var e=JSON.parse(localStorage.getItem("mainSettings")||"{}"),t=e.applyFormatting||!1;document.getElementById("fuuga_apply-formatting").checked=t;var n=e.splitIntoChunks||!1;document.getElementById("fuuga_split-into-chunks-checkbox").checked=n;var r=e.chunkSize||8;document.getElementById("fuuga_chunk-size").value=r;var a=e.maxChars||2e3;document.getElementById("fuuga_max-chars").value=a;var o=e.temperature||.5;document.getElementById("fuuga_temperature").value=o;var c=e.maxTokens||4e3;document.getElementById("fuuga_max-tokens").value=c;var l=e.formattingTemperature||.5;document.getElementById("fuuga_formatting-temperature").value=l;var s=e.formattingMaxTokens||1e3;document.getElementById("fuuga_formatting-max-tokens").value=s;var i=e.formattingModel;i&&$("#fuuga_formatting-model").val(i).trigger("change");var m=e.enableLogger||!1;document.getElementById("fuuga_enable-logger").checked=m,document.getElementById("fuuga_multiprompt-logger-tab").style.display=m?"block":"none";var u=e.loggerLevel||"minimal";document.getElementById("fuuga_logger-level").value=u,document.getElementById("fuuga_custom-logger-prompt-container").style.display="custom"===u?"block":"none";var d=e.customLoggerPrompt||"";document.getElementById("fuuga_custom-logger-prompt").value=d;var p=e.loggerTemperature||.3;document.getElementById("fuuga_logger-temperature").value=p;var g=e.loggerMaxTokens||500;document.getElementById("fuuga_logger-max-tokens").value=g;var f=e.loggerModel;f&&$("#fuuga_logger-model").val(f).trigger("change");var h=e.editLoggerPrompts||!1;document.getElementById("fuuga_edit-logger-prompts").checked=h,document.getElementById("fuuga_logger-prompts-accordion").style.display=h?"block":"none";var v=getDefaultLoggerPromptsHome(),y=e.loggerPrompts||{};document.getElementById("fuuga_logger-prompt-minimal").value=y.minimal||v.minimal,document.getElementById("fuuga_logger-prompt-medium").value=y.medium||v.medium,document.getElementById("fuuga_logger-prompt-maximal").value=y.maximal||v.maximal;var b=e.lastSelectedPromptIndex;null!=b&&$("#fuuga_prompt-select").val(b).trigger("change");var x=e.lastSelectedMultipromptIndices;x&&x.length>0&&($("#fuuga_multiprompt-select").val(x).trigger("change"),updateSelectedPromptsList(x))}function processSelectedTextHome(){return _processSelectedTextHome.apply(this,arguments)}function _processSelectedTextHome(){return _processSelectedTextHome=_asyncToGenerator(_regeneratorRuntime().mark((function e(){var t,n,r,a,o,c,l,s,i,m,u,d,p,g,f,h,v,y,b,x,_,S,k,I,E,P,T,w,B,C,M,O,G,L,H,N,A,R,J;return _regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,createSelectionMarkersHome();case 3:if(t=e.sent,lastSelectedPrompt){e.next=6;break}return e.abrupt("return");case 6:if(n=document.getElementById("fuuga_split-into-chunks-checkbox").checked,r=parseInt(document.getElementById("fuuga_chunk-size").value,10)||8,document.getElementById("fuuga_home-results").innerHTML="",resetProgressBarHome(),showLoadingHome(!0,n),document.getElementById("fuuga_process-text").disabled=!0,window.abortController=new AbortController,a=parseInt(document.getElementById("fuuga_max-chars").value,10)||0,!(t.text.length>0)){e.next=85;break}if(!(!n&&a>0&&t.text.length>a)){e.next=20;break}return document.getElementById("fuuga_home-results").innerHTML='<p class="text-warning">Выделенный текст слишком длинный ('.concat(t.text.length," символов). Пожалуйста, выделите меньше ").concat(a," символов или измените ограничение в настройках.</p>"),showLoadingHome(!1),document.getElementById("fuuga_process-text").disabled=!1,e.abrupt("return");case 20:if(o=document.getElementById("fuuga_apply-formatting").checked,c=$("#fuuga_formatting-model").val(),l=parseFloat(document.getElementById("fuuga_formatting-temperature").value)||.5,s=parseInt(document.getElementById("fuuga_formatting-max-tokens").value,10)||1e3,i=parseFloat(document.getElementById("fuuga_temperature").value)||.5,m=parseInt(document.getElementById("fuuga_max-tokens").value,10)||4e3,u=document.getElementById("fuuga_enable-logger").checked,d=document.getElementById("fuuga_logger-level").value,p=$("#fuuga_logger-model").val(),g=parseFloat(document.getElementById("fuuga_logger-temperature").value)||.3,f=parseInt(document.getElementById("fuuga_logger-max-tokens").value,10)||500,h=document.getElementById("fuuga_custom-logger-prompt").value,v=document.getElementById("fuuga_logger-prompt-minimal").value,y=document.getElementById("fuuga_logger-prompt-medium").value,b=document.getElementById("fuuga_logger-prompt-maximal").value,x=[],_=[],S=[],!n){e.next=67;break}k=splitTextIntoChunksHome(t.text,r),I=k.length,E=document.getElementById("fuuga_progress-bar"),P=document.getElementById("fuuga_progress-text"),T=document.getElementById("fuuga_current-step"),P.innerText="Обработано 0 из ".concat(I," чанков"),w=0;case 46:if(!(w<k.length)){e.next=65;break}return B=k[w],T.innerText="Выполняется обработка чанка ".concat(w+1),e.next=51,processChunkWithRetryHome(B,i,m,window.abortController.signal,o,c,l,s,lastSelectedPrompt,u,d,p,g,f,h,{loggerPromptMinimal:v,loggerPromptMedium:y,loggerPromptMaximal:b},1,!0);case 51:C=e.sent,M=C.generatedText,O=C.formattingInfo,G=C.loggerOutput,x.push(M),o&&O&&(_=_.concat(O)),u&&G&&S.push(G),L=Math.round((w+1)/I*100),E.style.width="".concat(L,"%"),E.innerText="".concat(L,"%"),P.innerText="Обработано ".concat(w+1," из ").concat(I," чанков");case 62:w++,e.next=46;break;case 65:e.next=78;break;case 67:return document.getElementById("fuuga_current-step-spinner").innerText="Выполняется обработка промпта",e.next=71,processChunkWithRetryHome(t.text,i,m,window.abortController.signal,o,c,l,s,lastSelectedPrompt,u,d,p,g,f,h,{loggerPromptMinimal:v,loggerPromptMedium:y,loggerPromptMaximal:b},1,!0);case 71:H=e.sent,N=H.generatedText,A=H.formattingInfo,R=H.loggerOutput,x.push(N),o&&A&&(_=A),u&&R&&S.push(R);case 78:return J=x.join(" "),e.next=81,Word.run(function(){var e=_asyncToGenerator(_regeneratorRuntime().mark((function e(t){var n,r,a,c;return _regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=t.document.body,r=n.search("START_TIMESTAMP",{matchCase:!0}).getFirst(),a=n.search("END_TIMESTAMP",{matchCase:!0}).getFirst(),(c=r.expandTo(a)).font.size=13,c.font.color="black",e.next=8,t.sync();case 8:if(!o){e.next=13;break}return e.next=11,applyFormattedText(t,c,J,_);case 11:e.next=14;break;case 13:c.insertText(J,Word.InsertLocation.replace);case 14:return r.delete(),a.delete(),e.next=18,t.sync();case 18:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}());case 81:u&&S.length>0&&displayLoggerOutputs(S,"fuuga_logger-output"),document.getElementById("fuuga_home-results").innerHTML='<p class="text-success">Обработка завершена успешно.</p>',e.next=88;break;case 85:console.log("Текст не выделен"),document.getElementById("fuuga_home-results").innerHTML='<p class="text-warning">Пожалуйста, выделите текст для обработки.</p>',showLoadingHome(!1);case 88:e.next=93;break;case 90:e.prev=90,e.t0=e.catch(0),"AbortError"===e.t0.name?(console.log("Обработка отменена пользователем."),document.getElementById("fuuga_home-results").innerHTML='<p class="text-info">Обработка отменена.</p>'):(console.error("Error in processSelectedText:",e.t0),document.getElementById("fuuga_home-results").innerHTML='<p class="text-danger">Произошла ошибка при обработке. Пожалуйста, попробуйте еще раз.</p>');case 93:return e.prev=93,showLoadingHome(!1),window.abortController=null,document.getElementById("fuuga_process-text").disabled=!1,e.next=99,cleanAllTimestampsHome();case 99:return e.finish(93);case 100:case"end":return e.stop()}}),e,null,[[0,90,93,100]])}))),_processSelectedTextHome.apply(this,arguments)}function processMultipromptText(){return _processMultipromptText.apply(this,arguments)}function _processMultipromptText(){return _processMultipromptText=_asyncToGenerator(_regeneratorRuntime().mark((function e(){var t,n,r,a,o,c,l,s,i,m,u,d,p,g,f,h,v,y,b,x,_,S,k,I,E,P,T,w,B,C,M;return _regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,createSelectionMarkersHome();case 3:if(t=e.sent,n=$("#fuuga_selected-prompts-list").children("li"),r=getPrompts(),a=[],n.each((function(){var e=$(this).data("promptIndex");a.push(r[e])})),0!==a.length){e.next=11;break}return showModalAlert("Пожалуйста, выберите хотя бы один промпт."),e.abrupt("return");case 11:if(document.getElementById("fuuga_multiprompt-results").innerHTML="",resetMultipromptProgressBar(),showMultipromptLoading(!0),document.getElementById("fuuga_process-multiprompt-text").disabled=!0,window.abortController=new AbortController,o=parseInt(document.getElementById("fuuga_max-chars").value,10)||0,!(t.text.length>0)){e.next=70;break}if(!(o>0&&t.text.length>o)){e.next=23;break}return document.getElementById("fuuga_multiprompt-results").innerHTML='<p class="text-warning">Выделенный текст слишком длинный ('.concat(t.text.length," символов). Пожалуйста, выделите меньше ").concat(o," символов или измените ограничение в настройках.</p>"),showMultipromptLoading(!1),document.getElementById("fuuga_process-multiprompt-text").disabled=!1,e.abrupt("return");case 23:c=document.getElementById("fuuga_apply-formatting").checked,l=$("#fuuga_formatting-model").val(),s=parseFloat(document.getElementById("fuuga_formatting-temperature").value)||.5,i=parseInt(document.getElementById("fuuga_formatting-max-tokens").value,10)||1e3,m=parseFloat(document.getElementById("fuuga_temperature").value)||.5,u=parseInt(document.getElementById("fuuga_max-tokens").value,10)||4e3,d=document.getElementById("fuuga_enable-logger").checked,p=document.getElementById("fuuga_logger-level").value,g=$("#fuuga_logger-model").val(),f=parseFloat(document.getElementById("fuuga_logger-temperature").value)||.3,h=parseInt(document.getElementById("fuuga_logger-max-tokens").value,10)||500,v=document.getElementById("fuuga_custom-logger-prompt").value,y=document.getElementById("fuuga_logger-prompt-minimal").value,b=document.getElementById("fuuga_logger-prompt-medium").value,x=document.getElementById("fuuga_logger-prompt-maximal").value,_=t.text,S=[],document.getElementById("fuuga_multiprompt-original-text").innerText=_,k=0;case 42:if(!(k<a.length)){e.next=64;break}return I=a[k],document.getElementById("fuuga_multiprompt-current-step").innerText="Выполняется промпт ".concat(k+1,": ").concat(I.name),e.next=48,processChunkWithRetryHome(_,m,u,window.abortController.signal,!1,l,s,i,I,d,p,g,f,h,v,{loggerPromptMinimal:y,loggerPromptMedium:b,loggerPromptMaximal:x},1,!1);case 48:E=e.sent,P=E.generatedText,T=E.loggerOutput,_=P,document.getElementById("fuuga_multiprompt-step-result-".concat(k)).innerText=_,d&&T&&S.push(T),w=a.length,B=Math.round((k+1)/w*100),C=document.getElementById("fuuga_multiprompt-progress-bar"),M=document.getElementById("fuuga_multiprompt-progress-text"),C.style.width="".concat(B,"%"),C.innerText="".concat(B,"%"),M.innerText="Обработано ".concat(k+1," из ").concat(w," шагов");case 61:k++,e.next=42;break;case 64:return e.next=66,Word.run(function(){var e=_asyncToGenerator(_regeneratorRuntime().mark((function e(t){var n,r,a,o,m,u;return _regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=t.document.body,r=n.search("START_TIMESTAMP",{matchCase:!0}).getFirst(),a=n.search("END_TIMESTAMP",{matchCase:!0}).getFirst(),(o=r.expandTo(a)).load("text"),e.next=7,t.sync();case 7:return o.font.size=13,o.font.color="black",e.next=11,t.sync();case 11:if(!c){e.next=24;break}return document.getElementById("fuuga_multiprompt-current-step").innerText="Применяется форматирование",e.next=16,getWordsInfo(t,o);case 16:return m=e.sent,e.next=19,getUpdatedFormattingInfo(m,o.text,_,l,s,i,window.abortController.signal);case 19:return u=e.sent,e.next=22,applyFormattedText(t,o,_,u);case 22:e.next=25;break;case 24:o.insertText(_,Word.InsertLocation.replace);case 25:return r.delete(),a.delete(),e.next=29,t.sync();case 29:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}());case 66:d&&S.length>0&&displayLoggerOutputs(S,"fuuga_multiprompt-logger-output"),document.getElementById("fuuga_multiprompt-results").innerHTML='<p class="text-success">Обработка завершена успешно.</p>',e.next=74;break;case 70:console.log("Текст не выделен"),document.getElementById("fuuga_multiprompt-results").innerHTML='<p class="text-warning">Пожалуйста, выделите текст для обработки.</p>',showMultip,romptLoading(!1);case 74:e.next=79;break;case 76:e.prev=76,e.t0=e.catch(0),"AbortError"===e.t0.name?(console.log("Обработка отменена пользователем."),document.getElementById("fuuga_multiprompt-results").innerHTML='<p class="text-info">Обработка отменена.</p>'):(console.error("Error in processMultipromptText:",e.t0),document.getElementById("fuuga_multiprompt-results").innerHTML='<p class="text-danger">Произошла ошибка при обработке. Пожалуйста, попробуйте еще раз.</p>');case 79:return e.prev=79,showMultipromptLoading(!1),window.abortController=null,document.getElementById("fuuga_process-multiprompt-text").disabled=!1,e.next=85,cleanAllTimestampsHome();case 85:return e.finish(79);case 86:case"end":return e.stop()}}),e,null,[[0,76,79,86]])}))),_processMultipromptText.apply(this,arguments)}function cancelProcess(){window.abortController&&(window.abortController.abort(),showLoadingHome(!1),window.abortController=null,document.getElementById("fuuga_process-text").disabled=!1,cleanAllTimestampsHome())}function cleanAllTimestampsHome(){return _cleanAllTimestampsHome.apply(this,arguments)}function _cleanAllTimestampsHome(){return _cleanAllTimestampsHome=_asyncToGenerator(_regeneratorRuntime().mark((function e(){return _regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,Word.run(function(){var e=_asyncToGenerator(_regeneratorRuntime().mark((function e(t){var n,r,a;return _regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return a=function(){return(a=_asyncToGenerator(_regeneratorRuntime().mark((function e(r){var a,o,c,l;return _regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return a="".concat(r,"*"),(o=n.search(a,{matchWildcards:!0})).load("items"),e.next=5,t.sync();case 5:c=_createForOfIteratorHelper(o.items);try{for(c.s();!(l=c.n()).done;)l.value.delete()}catch(e){c.e(e)}finally{c.f()}return e.next=9,t.sync();case 9:case"end":return e.stop()}}),e)})))).apply(this,arguments)},r=function(e){return a.apply(this,arguments)},n=t.document.body,e.next=5,r("START_TIMESTAMP");case 5:return e.next=7,r("END_TIMESTAMP");case 7:console.log("Все маркеры timestamp успешно удалены.");case 8:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}());case 3:e.next=8;break;case 5:e.prev=5,e.t0=e.catch(0),console.error("Ошибка при удалении маркеров:",e.t0);case 8:case"end":return e.stop()}}),e,null,[[0,5]])}))),_cleanAllTimestampsHome.apply(this,arguments)}function createSelectionMarkersHome(){return _createSelectionMarkersHome.apply(this,arguments)}function _createSelectionMarkersHome(){return _createSelectionMarkersHome=_asyncToGenerator(_regeneratorRuntime().mark((function e(){return _regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,Word.run(function(){var e=_asyncToGenerator(_regeneratorRuntime().mark((function e(t){var n,r,a,o,c,l;return _regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return(n=t.document.getSelection()).load("text"),e.next=4,t.sync();case 4:if(0!==(r=n.text.trim()).length){e.next=7;break}throw new Error("Нет выделенного текста");case 7:return a="START_TIMESTAMP",o="END_TIMESTAMP",n.insertText(a,Word.InsertLocation.before),n.insertText(o,Word.InsertLocation.after),c=t.document.body.search(a,{matchCase:!0}).getFirst(),l=t.document.body.search(o,{matchCase:!0}).getFirst(),c.font.size=1,l.font.size=1,c.font.color="white",l.font.color="white",e.next=19,t.sync();case 19:return e.abrupt("return",{text:r});case 20:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}());case 3:return e.abrupt("return",e.sent);case 6:throw e.prev=6,e.t0=e.catch(0),console.error("Ошибка при создании маркеров выделения:",e.t0),e.t0;case 10:case"end":return e.stop()}}),e,null,[[0,6]])}))),_createSelectionMarkersHome.apply(this,arguments)}function cancelMultipromptProcess(){window.abortController&&(window.abortController.abort(),showMultipromptLoading(!1),window.abortController=null,document.getElementById("fuuga_process-multiprompt-text").disabled=!1)}function resetProgressBarHome(){var e=document.getElementById("fuuga_progress-bar"),t=document.getElementById("fuuga_progress-text"),n=document.getElementById("fuuga_current-step");e&&(e.style.width="0%",e.innerText="0%"),t&&(t.innerText="Обработано 0 из 0 чанков"),n&&(n.innerText="");var r=document.getElementById("fuuga_current-step-spinner");r&&(r.innerText="")}function resetMultipromptProgressBar(){var e=document.getElementById("fuuga_multiprompt-progress-bar"),t=document.getElementById("fuuga_multiprompt-progress-text"),n=document.getElementById("fuuga_multiprompt-current-step");e&&(e.style.width="0%",e.innerText="0%"),t&&(t.innerText="Обработано 0 из 0 шагов"),n&&(n.innerText="");var r=document.getElementById("fuuga_multiprompt-current-step-spinner");r&&(r.innerText="")}function splitTextIntoChunksHome(e,t){for(var n=e.match(/[^.!?]+[.!?]+(\s|$)|[^.!?]+$/g)||[e],r=[],a=0;a<n.length;a+=t){var o=n.slice(a,a+t).join(" ").trim();r.push(o)}return r}function processChunkWithRetryHome(e,t,n,r,a,o,c,l,s,i,m,u,d,p,g,f){return _processChunkWithRetryHome.apply(this,arguments)}function _processChunkWithRetryHome(){return _processChunkWithRetryHome=_asyncToGenerator(_regeneratorRuntime().mark((function e(t,n,r,a,o,c,l,s,i,m,u,d,p,g,f,h){var v,y,b,x,_=arguments;return _regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:v=_.length>16&&void 0!==_[16]?_[16]:1,y=_.length>17&&void 0!==_[17]&&_[17],b=0;case 3:if(!(b<v)){e.next=25;break}return e.prev=4,e.next=7,processChunkHome(t,n,r,a,o,c,l,s,i,m,u,d,p,g,f,h,y);case 7:return x=e.sent,e.abrupt("return",{generatedText:x.generatedText||"",formattingInfo:x.formattingInfo||[],loggerOutput:x.loggerOutput||null});case 11:if(e.prev=11,e.t0=e.catch(4),"AbortError"!==e.t0.name){e.next=17;break}throw e.t0;case 17:if(!(++b>=v)){e.next=22;break}throw e.t0;case 22:console.warn("Попытка ".concat(b," не удалась. Повторяем..."));case 23:e.next=3;break;case 25:return e.abrupt("return",{generatedText:"",formattingInfo:[],loggerOutput:null});case 26:case"end":return e.stop()}}),e,null,[[4,11]])}))),_processChunkWithRetryHome.apply(this,arguments)}function processChunkHome(e,t,n,r,a,o,c,l,s,i,m,u,d,p,g,f,h){return _processChunkHome.apply(this,arguments)}function _processChunkHome(){return _processChunkHome=_asyncToGenerator(_regeneratorRuntime().mark((function e(t,n,r,a,o,c,l,s,i,m,u,d,p,g,f,h,v){var y,b,x,_,S,k,I,E,P,T,w;return _regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return y=localStorage.getItem("apiKey"),b=i.model,x=i.text,_="".concat(x,'\n\nПользователь предоставил следующий текст: "').concat(t,'"'),S={model:b,messages:[{role:"system",content:"Ты - AI помощник по обработке текста. Твоя задача - генерировать только необходимый текст на основе пользовательского промпта. Не добавляй никаких дополнительных комментариев, пояснений или пунктуации. Возвращай только обработанный текст."},{role:"user",content:_}],temperature:n,max_tokens:r},e.prev=6,e.next=9,fetch("https://openrouter.ai/api/v1/chat/completions",{method:"POST",headers:{Authorization:"Bearer ".concat(y),"Content-Type":"application/json","HTTP-Referer":"https://www.office.com","X-Title":"Word Text Processor"},body:JSON.stringify(S),signal:a});case 9:if((k=e.sent).ok){e.next=12;break}throw new Error("HTTP error! status: ".concat(k.status));case 12:return e.next=14,k.json();case 14:if(I=e.sent,console.log("Ответ от сервера:",I.choices[0].message.content.trim()),E=I.choices[0].message.content.trim(),P=[],!o||!v){e.next=27;break}return document.getElementById("fuuga_current-step-spinner").innerText="Применяется форматирование",e.next=23,Word.run(function(){var e=_asyncToGenerator(_regeneratorRuntime().mark((function e(t){var n;return _regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=t.document.getSelection(),e.next=3,getWordsInfo(t,n);case 3:return e.abrupt("return",e.sent);case 4:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}());case 23:return T=e.sent,e.next=26,getUpdatedFormattingInfo(T,t,E,c,l,s,a);case 26:P=e.sent;case 27:if(w=null,!m){e.next=32;break}return e.next=31,processLogger(t,E,i,a,u,v?"Single Prompt":"Chunk Processing",d,p,g,f,h);case 31:w=e.sent;case 32:return e.abrupt("return",{generatedText:E,formattingInfo:P,loggerOutput:w});case 35:if(e.prev=35,e.t0=e.catch(6),"AbortError"!==e.t0.name){e.next=42;break}throw console.log("Запрос был отменен."),e.t0;case 42:throw console.error("Error in processChunkHome:",e.t0),e.t0;case 44:case"end":return e.stop()}}),e,null,[[6,35]])}))),_processChunkHome.apply(this,arguments)}function processMultipromptStep(e,t,n,r,a,o,c,l,s,i,m,u){return _processMultipromptStep.apply(this,arguments)}function _processMultipromptStep(){return(_processMultipromptStep=_asyncToGenerator(_regeneratorRuntime().mark((function e(t,n,r,a,o,c,l,s,i,m,u,d){var p,g,f,h,v,y,b,x,_;return _regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return p=localStorage.getItem("apiKey"),g=n.model,f=n.text,h="".concat(f,'\n\nПользователь предоставил следующий текст: "').concat(t,'"'),v={model:g,messages:[{role:"system",content:"Ты - AI помощник по обработке текста. Твоя задача - генерировать только необходимый текст на основе пользовательского промпта. Не добавляй никаких дополнительных комментариев, пояснений или пунктуации. Возвращай только обработанный текст."},{role:"user",content:h}],temperature:r,max_tokens:a},e.prev=6,e.next=9,fetch("https://openrouter.ai/api/v1/chat/completions",{method:"POST",headers:{Authorization:"Bearer ".concat(p),"Content-Type":"application/json","HTTP-Referer":"https://www.office.com","X-Title":"Word Text Processor"},body:JSON.stringify(v),signal:o});case 9:if((y=e.sent).ok){e.next=12;break}throw new Error("HTTP error! status: ".concat(y.status));case 12:return e.next=14,y.json();case 14:if(b=e.sent,console.log("Ответ от сервера:",b.choices[0].message.content.trim()),x=b.choices[0].message.content.trim(),_=null,!c){e.next=22;break}return e.next=21,processLogger(t,x,n,o,l,"Шаг ".concat(d),s,i,m,u);case 21:_=e.sent;case 22:return e.abrupt("return",{generatedText:x,loggerOutput:_});case 25:if(e.prev=25,e.t0=e.catch(6),"AbortError"!==e.t0.name){e.next=32;break}throw console.log("Запрос был отменен."),e.t0;case 32:throw console.error("Error in processMultipromptStep:",e.t0),e.t0;case 34:case"end":return e.stop()}}),e,null,[[6,25]])})))).apply(this,arguments)}function processLogger(e,t,n,r,a,o,c,l,s,i){return _processLogger.apply(this,arguments)}function _processLogger(){return(_processLogger=_asyncToGenerator(_regeneratorRuntime().mark((function e(t,n,r,a,o,c,l,s,i,m){var u,d,p,g,f,h,v,y,b,x;return _regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return u=localStorage.getItem("apiKey"),d=JSON.parse(localStorage.getItem("mainSettings")||"{}"),p=d.loggerPrompts||getDefaultLoggerPromptsHome(),"",g="custom"===o&&m?m.replace("{{beforeText}}",t).replace("{{afterText}}",n):p[o]||"Опишите изменения между текстом до и после обработки.",f="custom"===o&&m?g:"".concat(g,'\n\nПромпт: "').concat(r.name,'"\n\nТекст до обработки: "').concat(t,'"\n\nТекст после обработки: "').concat(n,'"'),h={model:l,messages:[{role:"system",content:'Ты - AI помощник для логирования изменений текста. Твоя задача - анализировать изменения между исходным и полученным текстами и предоставлять отчет пользователю.\n \n Примеры отчета для разных уровней детализации:\n\n 1. Минимальный уровень:\n {\n "level": "minimal",\n "message": "Текст был сокращен и упрощен."\n }\n\n 2. Средний уровень:\n {\n "level": "medium",\n "message": "Текст был сокращен, удалены лишние подробности. Улучшена структура предложений для большей ясности."\n }\n\n 3. Максимальный уровень:\n {\n "level": "maximal",\n "message": "Текст был переработан для сокращения и упрощения. Конкретно, удалены повторяющиеся идеи во втором абзаце. В третьем предложении исправлена грамматическая ошибка: \'он есть\' заменено на \'он\'. Язык стал более формальным и профессиональным.",\n "details": "Детальное описание изменений...",\n "examples": ["Пример 1", "Пример 2"]\n }\n\n Твой отчет должен соответствовать выбранному уровню детализации и включать только необходимые поля для этого уровня. Другие уровни не нужны. Ответ должен быть валидным JSON объектом без дополнительных комментариев или пояснений.\n '},{role:"user",content:f}],temperature:s,max_tokens:i},e.prev=8,e.next=11,fetch("https://openrouter.ai/api/v1/chat/completions",{method:"POST",headers:{Authorization:"Bearer ".concat(u),"Content-Type":"application/json","HTTP-Referer":"https://www.office.com","X-Title":"Word Logger"},body:JSON.stringify(h),signal:a});case 11:if((v=e.sent).ok){e.next=14;break}throw new Error("HTTP error! status: ".concat(v.status));case 14:return e.next=16,v.json();case 16:y=e.sent,console.log("Ответ от сервера (Логер):",y.choices[0].message.content.trim()),b=y.choices[0].message.content.trim(),e.prev=19,x=JSON.parse(b),e.next=27;break;case 23:return e.prev=23,e.t0=e.catch(19),console.error("Ошибка при парсинге JSON ответа логера:",e.t0),e.abrupt("return",null);case 27:if(x.level&&x.message){e.next=30;break}return console.error("Некорректный формат JSON ответа логера."),e.abrupt("return",null);case 30:return e.abrupt("return",{stepDescription:c,promptName:r.name,loggerOutput:x});case 33:if(e.prev=33,e.t1=e.catch(8),"AbortError"!==e.t1.name){e.next=40;break}return console.log("Запрос был отменен."),e.abrupt("return",null);case 40:return console.error("Error in processLogger:",e.t1),e.abrupt("return",null);case 42:case"end":return e.stop()}}),e,null,[[8,33],[19,23]])})))).apply(this,arguments)}function displayLoggerOutputs(e,t){var n=document.getElementById(t);n.innerHTML="";var r="".concat(t,"-accordion"),a='<div class="accordion" id="'.concat(r,'">');e.forEach((function(e,t){var n="".concat(r,"-collapse-").concat(t),o="".concat(r,"-heading-").concat(t),c="",l="";switch(e.loggerOutput.level){case"minimal":c="bg-info text-white",l="fas fa-info-circle";break;case"medium":c="bg-warning text-dark",l="fas fa-exclamation-triangle";break;case"maximal":c="bg-danger text-white",l="fas fa-exclamation-circle";break;default:c="bg-secondary text-white",l="fas fa-question-circle"}var s=formatLoggerOutput(e.loggerOutput);a+='\n <div class="card">\n <div class="card-header '.concat(c,'" id="').concat(o,'">\n <h2 class="mb-0">\n <button class="btn btn-link text-white" type="button" data-toggle="collapse" data-target="#').concat(n,'" aria-expanded="').concat(0===t?"true":"false",'" aria-controls="').concat(n,'">\n <i class="').concat(l,'"></i> ').concat(e.stepDescription,": ").concat(e.promptName,'\n </button>\n </h2>\n </div>\n <div id="').concat(n,'" class="collapse ').concat(0===t?"show":"",'" aria-labelledby="').concat(o,'" data-parent="#').concat(r,'">\n <div class="card-body">\n ').concat(s,"\n </div>\n </div>\n </div>\n ")})),a+="</div>",n.innerHTML=a}function formatLoggerOutput(e){var t="\n <p><strong>Уровень:</strong> ".concat(capitalizeFirstLetter(e.level),"</p>\n <p><strong>Сообщение:</strong> ").concat(e.message,"</p>\n ");return"medium"===e.level&&e.details&&(t+="<p><strong>Детали:</strong> ".concat(e.details,"</p>")),"maximal"===e.level&&(e.details&&(t+="<p><strong>Детали:</strong> ".concat(e.details,"</p>")),e.examples&&Array.isArray(e.examples)&&(t+="<p><strong>Примеры:</strong></p><ul>",e.examples.forEach((function(e){t+="<li>".concat(e,"</li>")})),t+="</ul>")),t}function capitalizeFirstLetter(e){return e.charAt(0).toUpperCase()+e.slice(1)}function showLoadingHome(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=document.getElementById("fuuga_loading"),r=document.getElementById("fuuga_process-text"),a=document.getElementById("fuuga_cancel-process"),o=document.getElementById("fuuga_progress-container"),c=document.getElementById("fuuga_spinner");e?(n.style.display="block",r.disabled=!0,a.style.display="inline-block",t?(o.style.display="block",c.style.display="none"):(o.style.display="none",c.style.display="block")):(n.style.display="none",r.disabled=!1,a.style.display="none",o.style.display="none",c.style.display="none")}function showMultipromptLoading(e){var t=document.getElementById("fuuga_multiprompt-loading"),n=document.getElementById("fuuga_process-multiprompt-text"),r=document.getElementById("fuuga_cancel-multiprompt-process"),a=document.getElementById("fuuga_multiprompt-progress-container"),o=document.getElementById("fuuga_multiprompt-spinner");e?(t.style.display="block",n.disabled=!0,r.style.display="inline-block",a.style.display="block",o.style.display="none"):(t.style.display="none",n.disabled=!1,r.style.display="none",a.style.display="none",o.style.display="none")}function showModalAlert(e){var t='\n <div class="modal fade" id="fuuga_alertModal" tabindex="-1" role="dialog" aria-labelledby="fuuga_alertModalLabel" aria-hidden="true">\n <div class="modal-dialog modal-dialog-centered" role="document">\n <div class="modal-content">\n <div class="modal-header">\n <h5 class="modal-title" id="fuuga_alertModalLabel">Внимание</h5>\n <button type="button" class="close" data-dismiss="modal" aria-label="Закрыть">\n <span aria-hidden="true">×</span>\n </button>\n </div>\n <div class="modal-body">\n '.concat(e,'\n </div>\n <div class="modal-footer">\n <button type="button" class="btn btn-primary" data-dismiss="modal">ОК</button>\n </div>\n </div>\n </div>\n </div>\n ');$("body").append(t),$("#fuuga_alertModal").modal("show"),$("#fuuga_alertModal").on("hidden.bs.modal",(function(){$("#fuuga_alertModal").remove()}))}function initializePresetSelect(){$("#fuuga_preset-select").select2({width:"100%",placeholder:"Выберите пресет"})}function populatePresetSelect(){var e=$("#fuuga_preset-select");e.empty();var t=new Option("Текущие настройки","current",!1,!1);e.append(t);var n=JSON.parse(localStorage.getItem("homePresets")||"[]"),r=localStorage.getItem("homeLastSelectedPreset")||null;n.forEach((function(t){var n=new Option(t.name,t.name,!1,!1);e.append(n)})),r&&"current"!==r?e.val(r).trigger("change"):e.val("current").trigger("change")}function loadSelectedPreset(){window.isLoadingPreset=!0;var e=$("#fuuga_preset-select").val();if(e&&"current"!==e){var t=JSON.parse(localStorage.getItem("homePresets")||"[]").find((function(t){return t.name===e}));if(t){var n=t.settings;document.getElementById("fuuga_apply-formatting").checked=n.applyFormatting,document.getElementById("fuuga_split-into-chunks-checkbox").checked=n.splitIntoChunks,document.getElementById("fuuga_chunk-size").value=n.chunkSize,document.getElementById("fuuga_max-chars").value=n.maxChars,document.getElementById("fuuga_temperature").value=n.temperature,document.getElementById("fuuga_max-tokens").value=n.maxTokens,document.getElementById("fuuga_formatting-temperature").value=n.formattingTemperature,document.getElementById("fuuga_formatting-max-tokens").value=n.formattingMaxTokens,document.getElementById("fuuga_enable-logger").checked=n.enableLogger,document.getElementById("fuuga_logger-level").value=n.loggerLevel,document.getElementById("fuuga_custom-logger-prompt").value=n.customLoggerPrompt,document.getElementById("fuuga_logger-temperature").value=n.loggerTemperature,document.getElementById("fuuga_logger-max-tokens").value=n.loggerMaxTokens,document.getElementById("fuuga_edit-logger-prompts").checked=n.editLoggerPrompts,$("#fuuga_formatting-model").val(n.formattingModel).trigger("change"),$("#fuuga_logger-model").val(n.loggerModel).trigger("change"),document.getElementById("fuuga_logger-prompt-minimal").value=n.loggerPrompts.minimal||"",document.getElementById("fuuga_logger-prompt-medium").value=n.loggerPrompts.medium||"",document.getElementById("fuuga_logger-prompt-maximal").value=n.loggerPrompts.maximal||"","custom"===n.loggerLevel?document.getElementById("fuuga_custom-logger-prompt-container").style.display="block":document.getElementById("fuuga_custom-logger-prompt-container").style.display="none";var r=document.getElementById("fuuga_edit-logger-prompts").checked;document.getElementById("fuuga_logger-prompts-accordion").style.display=r?"block":"none",saveHomeSettingsHome(),localStorage.setItem("homeLastSelectedPreset",e),updatePresetJSON(),window.isLoadingPreset=!1}else window.isLoadingPreset=!1}else window.isLoadingPreset=!1}function saveCurrentSettingsAsPreset(){var e=document.getElementById("fuuga_preset-name"),t=e.value.trim();if(t)if("current"!==t.toLowerCase()&&"Текущие настройки"!==t){var n={name:t,settings:getCurrentSettings()},r=JSON.parse(localStorage.getItem("homePresets")||"[]"),a=r.findIndex((function(e){return e.name===t}));-1!==a?showPresetConfirmation('Пресет с названием "'.concat(t,'" уже существует. Перезаписать его?'),(function(){r[a]=n,localStorage.setItem("homePresets",JSON.stringify(r)),populatePresetSelect(),$("#fuuga_preset-select").val(n.name).trigger("change"),localStorage.setItem("homeLastSelectedPreset",n.name),displayPresetMessage("Пресет сохранен.","success"),e.value="",updatePresetJSON()})):(r.push(n),localStorage.setItem("homePresets",JSON.stringify(r)),populatePresetSelect(),$("#fuuga_preset-select").val(n.name).trigger("change"),localStorage.setItem("homeLastSelectedPreset",n.name),displayPresetMessage("Пресет сохранен.","success"),e.value="",updatePresetJSON())}else displayPresetMessage('Название пресета не может быть "Текущие настройки".',"danger");else displayPresetMessage("Название пресета не может быть пустым.","danger")}function deleteSelectedPreset(){var e=$("#fuuga_preset-select").val();e&&"current"!==e?showPresetConfirmation('Вы уверены, что хотите удалить пресет "'.concat(e,'"?'),(function(){var t=JSON.parse(localStorage.getItem("homePresets")||"[]");t=t.filter((function(t){return t.name!==e})),localStorage.setItem("homePresets",JSON.stringify(t)),$("#fuuga_preset-select").val("current").trigger("change"),localStorage.removeItem("homeLastSelectedPreset"),populatePresetSelect(),displayPresetMessage("Пресет удален.","success"),document.getElementById("fuuga_preset-json").value=""})):displayPresetMessage("Нет выбранного пресета для удаления.","danger")}function updatePresetJSON(){var e=$("#fuuga_preset-select").val();if(e&&"current"!==e){var t=JSON.parse(localStorage.getItem("homePresets")||"[]").find((function(t){return t.name===e}));if(t){var n=JSON.stringify(t,null,2);document.getElementById("fuuga_preset-json").value=n}else document.getElementById("fuuga_preset-json").value=""}else document.getElementById("fuuga_preset-json").value=""}function getDefaultLoggerPromptsHome(){return{minimal:"Опишите кратко изменения между текстом до и после обработки.",medium:"Опишите изменения между текстом до и после обработки, упомяните ключевые изменения.",maximal:"Детально опишите все изменения между текстом до и после обработки, включая использование промпта."}}function copyPresetJSON(){document.getElementById("fuuga_preset-json").select(),document.execCommand("copy"),displayPresetMessage("JSON пресета скопирован в буфер обмена.","success")}function importPresetFromJSONHome(){var e=document.getElementById("fuuga_preset-json-import").value;if(e)try{var t=JSON.parse(e);if(!t.name||!t.settings)return void displayPresetMessage("Некорректный формат пресета.","danger");if("current"===t.name.toLowerCase()||"Текущие настройки"===t.name)return void displayPresetMessage('Название пресета не может быть "Текущие настройки".',"danger");var n=JSON.parse(localStorage.getItem("homePresets")||"[]"),r=n.findIndex((function(e){return e.name===t.name}));-1!==r?showPresetConfirmation('Пресет с названием "'.concat(t.name,'" уже существует. Перезаписать его?'),(function(){n[r]=t,localStorage.setItem("homePresets",JSON.stringify(n)),populatePresetSelect(),$("#fuuga_preset-select").val(t.name).trigger("change"),localStorage.setItem("homeLastSelectedPreset",t.name),displayPresetMessage("Пресет импортирован.","success"),updatePresetJSON()})):(n.push(t),localStorage.setItem("homePresets",JSON.stringify(n)),populatePresetSelect(),$("#fuuga_preset-select").val(t.name).trigger("change"),localStorage.setItem("homeLastSelectedPreset",t.name),displayPresetMessage("Пресет импортирован.","success"),updatePresetJSON())}catch(e){console.error("Ошибка при импорте пресета:",e),displayPresetMessage("Ошибка при импорте пресета. Проверьте формат JSON.","danger")}else displayPresetMessage("Поле JSON пустое.","danger")}function getCurrentSettings(){var e=JSON.parse(localStorage.getItem("mainSettings")||"{}");return e.lastSelectedPromptIndex,e.lastSelectedMultipromptIndices,_objectWithoutProperties(e,_excluded)}function displayPresetMessage(e,t){var n=document.getElementById("fuuga_preset-message");n.innerHTML='<div class="alert alert-'.concat(t,'">').concat(e,"</div>"),setTimeout((function(){n.innerHTML=""}),3e3)}function showPresetConfirmation(e,t){var n=document.getElementById("fuuga_preset-confirmation"),r=document.getElementById("fuuga_preset-confirmation-message"),a=document.getElementById("fuuga_preset-confirm-yes"),o=document.getElementById("fuuga_preset-confirm-no");r.textContent=e,n.style.display="block",a.onclick=null,o.onclick=null,a.onclick=function(){n.style.display="none",t()},o.onclick=function(){n.style.display="none"}}function showSelectedTextInfoHome(){return _showSelectedTextInfoHome.apply(this,arguments)}function _showSelectedTextInfoHome(){return _showSelectedTextInfoHome=_asyncToGenerator(_regeneratorRuntime().mark((function e(){return _regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,Word.run(function(){var e=_asyncToGenerator(_regeneratorRuntime().mark((function e(t){var n,r,a,o,c,l,s,i;return _regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=t.document.getSelection(),e.next=3,getWordsInfo(t,n);case 3:(r=e.sent).length>0?(a={},o={},c={},r.forEach((function(e){var t=e.color||"default",n=e.fontName||"default",r=e.size||"default";a[t]=(a[t]||0)+1,o[n]=(o[n]||0)+1,c[r]=(c[r]||0)+1})),l=getMostCommonValueHome(a),s=getMostCommonValueHome(o),i=getMostCommonValueHome(c),displayWordsInfo(r,l,s,i)):document.getElementById("fuuga_selected-text-info").innerHTML='<p class="text-warning">Пожалуйста, выделите текст для получения информации.</p>';case 5:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}());case 3:e.next=10;break;case 5:e.prev=5,e.t0=e.catch(0),console.error("Error in showSelectedTextInfo:",e.t0),document.getElementById("fuuga_selected-text-info").innerHTML='<p class="text-danger">Произошла ошибка при получении информации о выделенном тексте. Пожалуйста, попробуйте еще раз.</p>';case 10:case"end":return e.stop()}}),e,null,[[0,5]])}))),_showSelectedTextInfoHome.apply(this,arguments)}function getMostCommonValueHome(e){return Object.entries(e).reduce((function(e,t){return e[1]>=t[1]?e:t}))[0]}function initPrompts(){document.getElementById("prompts").innerHTML='\n <div class="mt-3">\n \x3c!-- Навигация по основным табам --\x3e\n <ul class="nav nav-tabs" id="crocodile_promptsMainTab" role="tablist">\n <li class="nav-item">\n <a class="nav-link active" id="crocodile_prompts-main-tab" data-toggle="tab" href="#crocodile_promptsMainContent" role="tab" aria-controls="crocodile_promptsMainContent" aria-selected="true">Промпты</a>\n </li>\n <li class="nav-item">\n <a class="nav-link" id="crocodile_presets-main-tab" data-toggle="tab" href="#crocodile_presetsMainContent" role="tab" aria-controls="crocodile_presetsMainContent" aria-selected="false">Пресеты</a>\n </li>\n <li class="nav-item">\n <a class="nav-link" id="crocodile_settings-main-tab" data-toggle="tab" href="#crocodile_settingsMainContent" role="tab" aria-controls="crocodile_settingsMainContent" aria-selected="false">Настройки</a>\n </li>\n </ul>\n \x3c!-- Содержимое основных табов --\x3e\n <div class="tab-content" id="crocodile_promptsMainTabContent">\n \x3c!-- Промпты --\x3e\n <div class="tab-pane fade show active" id="crocodile_promptsMainContent" role="tabpanel" aria-labelledby="crocodile_prompts-main-tab">\n \x3c!-- Навигация по подтабам в Промптах --\x3e\n <ul class="nav nav-tabs mt-3" id="crocodile_promptsSubTab" role="tablist">\n <li class="nav-item">\n <a class="nav-link active" id="crocodile_view-prompt-tab" data-toggle="tab" href="#crocodile_viewPromptTabContent" role="tab" aria-controls="crocodile_viewPromptTabContent" aria-selected="true">Просмотр</a>\n </li>\n <li class="nav-item">\n <a class="nav-link" id="crocodile_create-prompt-tab" data-toggle="tab" href="#crocodile_createPromptTabContent" role="tab" aria-controls="crocodile_createPromptTabContent" aria-selected="false">Создать</a>\n </li>\n </ul>\n \x3c!-- Содержимое подтабов в Промптах --\x3e\n <div class="tab-content" id="crocodile_promptsSubTabContent">\n \x3c!-- Просмотр Промптов --\x3e\n <div class="tab-pane fade show active" id="crocodile_viewPromptTabContent" role="tabpanel" aria-labelledby="crocodile_view-prompt-tab">\n \x3c!-- Инструкция для Просмотра Промптов --\x3e\n <div class="alert alert-info mt-3">\n <strong>Инструкция:</strong>\n <p>Просматривайте и управляйте сохранёнными промптами. Вы можете фильтровать и сортировать промпты.</p>\n </div>\n \x3c!-- Фильтр по тегам и сортировка --\x3e\n <div class="mt-3 row">\n <div class="col-md-6">\n <div class="form-group">\n <label for="crocodile_filter-tags-select">Фильтр по тегам</label>\n <select id="crocodile_filter-tags-select" class="form-control" multiple></select>\n </div>\n </div>\n <div class="col-md-6">\n <div class="form-group">\n <label for="crocodile_sort-prompts-select">Сортировка</label>\n <select id="crocodile_sort-prompts-select" class="form-control">\n <option value="name_asc">По названию (A-Z)</option>\n <option value="name_desc">По названию (Z-A)</option>\n <option value="length_asc">По длине промпта (кратчайшие)</option>\n <option value="length_desc">По длине промпта (длиннейшие)</option>\n <option value="model_asc">По модели (A-Z)</option>\n <option value="model_desc">По модели (Z-A)</option>\n </select>\n </div>\n </div>\n </div>\n \x3c!-- Список промптов --\x3e\n <div id=\'crocodile_prompt-list-container\' class=\'mt-4\'>\n \x3c!-- Здесь будет список промптов --\x3e\n <div id="crocodile_prompt-list"></div>\n </div>\n </div>\n \x3c!-- Создать Промпт --\x3e\n <div class="tab-pane fade" id="crocodile_createPromptTabContent" role="tabpanel" aria-labelledby="crocodile_create-prompt-tab">\n \x3c!-- Инструкция для Создания Промптов --\x3e\n <div class="alert alert-info mt-3">\n <strong>Инструкция:</strong>\n <p>Создавайте новые промпты, указывая название, модель, текст промпта и теги. Вы можете выбрать существующие теги или добавить новые.</p>\n </div>\n \x3c!-- Форма для добавления/редактирования промптов --\x3e\n <div class="mt-3">\n <div class="form-group">\n <label for="crocodile_prompt-name-input">Название промпта</label>\n <input type="text" id="crocodile_prompt-name-input" class="form-control" placeholder="Введите название промпта" title="Введите название промпта">\n </div>\n <div class="form-group">\n <label for="crocodile_prompt-model-select">Модель</label>\n <select id="crocodile_prompt-model-select" class="form-control mt-2 select2-init-prompt-models"></select>\n </div>\n <div class="form-group">\n <label for="crocodile_prompt-textarea-input">Текст промпта</label>\n <textarea id="crocodile_prompt-textarea-input" class="form-control mt-2" rows="5" placeholder="Текст промпта"></textarea>\n </div>\n <div class="form-group">\n <label for="crocodile_prompt-tags-input">Теги</label>\n <select id="crocodile_prompt-tags-input" class="form-control mt-2" multiple></select>\n </div>\n \x3c!-- Новые кнопки --\x3e\n <div class="mt-2">\n <button id="crocodile_save-prompt-btn" class="btn btn-primary">Сохранить промпт</button>\n <button id="crocodile_clear-input-btn" class="btn btn-secondary ml-2">Очистить ввод</button>\n <button id="crocodile_cancel-edit-btn" class="btn btn-warning ml-2" style="display: none;">Отменить редактирование</button>\n </div>\n </div>\n </div>\n </div> \x3c!-- crocodile_promptsSubTabContent --\x3e\n </div> \x3c!-- crocodile_promptsMainContent --\x3e\n \x3c!-- Пресеты --\x3e\n <div class=\'tab-pane fade\' id=\'crocodile_presetsMainContent\' role=\'tabpanel\' aria-labelledby=\'crocodile_presets-main-tab\'>\n \x3c!-- Навигация по подтабам в Пресетах --\x3e\n <ul class="nav nav-tabs mt-3" id="crocodile_presetsSubTab" role="tablist">\n <li class="nav-item">\n <a class="nav-link active" id="crocodile_view-preset-tab" data-toggle="tab" href="#crocodile_viewPresetTabContent" role="tab" aria-controls="crocodile_viewPresetTabContent" aria-selected="true">Просмотр</a>\n </li>\n <li class="nav-item">\n <a class="nav-link" id="crocodile_manage-preset-tab" data-toggle="tab" href="#crocodile_managePresetTabContent" role="tab" aria-controls="crocodile_managePresetTabContent" aria-selected="false">Управление</a>\n </li>\n </ul>\n \x3c!-- Содержимое подтабов в Пресетах --\x3e\n <div class="tab-content" id="crocodile_presetsSubTabContent">\n \x3c!-- Просмотр Пресетов --\x3e\n <div class="tab-pane fade show active" id="crocodile_viewPresetTabContent" role="tabpanel" aria-labelledby="crocodile_view-preset-tab">\n \x3c!-- Инструкция для Просмотра Пресетов --\x3e\n <div class="alert alert-info mt-3">\n <strong>Инструкция:</strong>\n <p>Управляйте пресетами ваших промптов. Вы можете просматривать содержимое пресетов и добавлять их к текущим или заменять текущие.</p>\n </div>\n <div class="mt-3">\n <div class="form-group">\n <label for="crocodile_preset-select-prompts">Выберите пресет:</label>\n <select id="crocodile_preset-select-prompts" class="form-control" title="Выберите пресет для просмотра"></select>\n </div>\n <div class="mt-2">\n <button id="crocodile_add-preset-to-prompts-btn" class="btn btn-success mr-2">Добавить к текущим промптам</button>\n <button id="crocodile_replace-prompts-with-preset-btn" class="btn btn-warning mr-2">Заменить текущие промпты</button>\n <button id="crocodile_delete-preset-btn" class="btn btn-danger">Удалить выбранный пресет</button>\n </div>\n \x3c!-- Предпросмотр пресета --\x3e\n <div class="mt-4">\n <h5>Предпросмотр пресета (<span id="crocodile_preset-count">0</span> промптов):</h5>\n <div id="crocodile_preset-preview"></div>\n </div>\n </div>\n </div>\n \x3c!-- Управление Пресетами --\x3e\n <div class="tab-pane fade" id="crocodile_managePresetTabContent" role="tabpanel" aria-labelledby="crocodile_manage-preset-tab">\n \x3c!-- Инструкция для Управления Пресетов --\x3e\n <div class="alert alert-info mt-3">\n <strong>Инструкция:</strong>\n <p>Создавайте новые пресеты, экспортируйте и импортируйте их в формате JSON.</p>\n </div>\n \x3c!-- Форма для добавления пресета --\x3e\n <div class="mt-3">\n <div class="form-group">\n <label for="crocodile_preset-name-input">Название пресета</label>\n <input type="text" id="crocodile_preset-name-input" class="form-control" placeholder="Введите название пресета">\n </div>\n <button id="crocodile_save-preset-btn" class="btn btn-primary">Сохранить текущие промпты как пресет</button>\n </div>\n \x3c!-- Выбор пресета для экспорта --\x3e\n <div class="mt-4">\n <div class="form-group">\n <label for="crocodile_preset-select-in-manage">Выберите пресет для экспорта:</label>\n <select id="crocodile_preset-select-in-manage" class="form-control" title="Выберите пресет для управления"></select>\n </div>\n </div>\n \x3c!-- Экспорт/Импорт пресета --\x3e\n <div class="mt-4">\n <div class="form-group">\n <label for="crocodile_preset-json-input">JSON Пресета</label>\n <textarea id="crocodile_preset-json-input" class="form-control" rows="5"></textarea>\n </div>\n <button id="crocodile_-preset-btn" class="btn btn-secondary mr-2">Экспортировать выбранный пресет</button>\n <button id="crocodile_clear-preset-json-btn" class="btn btn-secondary mr-2">Очистить поле JSON</button>\n <button id="crocodile_import-preset-btn" class="btn btn-secondary">Импортировать пресет из JSON</button>\n </div>\n </div>\n </div> \x3c!-- crocodile_presetsSubTabContent --\x3e\n </div> \x3c!-- crocodile_presetsMainContent --\x3e\n \x3c!-- Настройки --\x3e\n <div class=\'tab-pane fade\' id=\'crocodile_settingsMainContent\' role=\'tabpanel\' aria-labelledby=\'crocodile_settings-main-tab\'>\n <div class="mt-3">\n <h4>Настройки</h4>\n <button id="crocodile_delete-all-prompts-btn" class="btn btn-danger mt-2">Удалить все текущие промпты</button>\n <button id="crocodile_delete-all-presets-btn" class="btn btn-danger mt-2">Удалить все текущие пресеты</button>\n </div>\n </div>\n </div> \x3c!-- crocodile_promptsMainTabContent end --\x3e\n </div> \x3c!-- main container end --\x3e\n ',document.getElementById("crocodile_alertModal")||document.body.insertAdjacentHTML("beforeend",'\n \x3c!-- Alert Modal --\x3e\n <div class="modal fade" id="crocodile_alertModal" tabindex="-1" role="dialog" aria-labelledby="crocodile_alertModalTitle" aria-hidden="true">\n <div class="modal-dialog modal-dialog-centered" role="document">\n <div class="modal-content">\n <div class="modal-header">\n <h5 id="crocodile_alertModalTitle" class="modal-title">Сообщение</h5>\n <button type="button" class="close btn" data-dismiss="modal" aria-label="Закрыть">\n <span aria-hidden="true">×</span>\n </button>\n </div>\n <div id="crocodile_alertModalBody" class="modal-body">\n ...\n </div>\n <div class="modal-footer">\n <button type="button" class="btn btn-primary" data-dismiss="modal">ОК</button>\n </div>\n </div>\n </div>\n </div>\n\n \x3c!-- Confirm Modal --\x3e\n <div class="modal fade" id="crocodile_confirmModal" tabindex="-1" role="dialog" aria-labelledby="crocodile_confirmModalTitle" aria-hidden="true">\n <div class="modal-dialog modal-dialog-centered" role="document">\n <div class="modal-content">\n <div class="modal-header">\n <h5 id="crocodile_confirmModalTitle" class="modal-title">Подтверждение</h5>\n <button type="button" class="close btn" data-dismiss="modal" aria-label="Закрыть">\n <span aria-hidden="true">×</span>\n </button>\n </div>\n <div id="crocodile_confirmModalBody" class="modal-body">\n ...\n </div>\n <div class="modal-footer">\n <button id="crocodile_confirmModalCancel" type="button" class="btn btn-secondary" data-dismiss="modal">Отмена</button>\n <button id="crocodile_confirmModalOk" type="button" class="btn btn-primary">ОК</button>\n </div>\n </div>\n </div>\n </div>\n '),initializePromptsTabs(),$("#crocodile_prompt-model-select").select2({width:"100%",placeholder:"Выберите модель"}),$("#crocodile_filter-tags-select").select2({width:"100%",placeholder:"Выберите теги для фильтрации",allowClear:!0}),$("#crocodile_prompt-tags-input").select2({width:"100%",placeholder:"Выберите или введите теги",tags:!0,tokenSeparators:[","," "],createTag:function(e){return{id:e.term,text:e.term,newTag:!0}}}),$("#crocodile_sort-prompts-select").select2({width:"100%",minimumResultsForSearch:1/0}),populateModelSelectPrompt(),populateTagsFilter(),populatePresetSelectPrompts(),populatePresetSelectInManage(),document.getElementById("crocodile_save-prompt-btn").onclick=savePrompt,document.getElementById("crocodile_add-preset-to-prompts-btn").onclick=addPresetToPrompts,document.getElementById("crocodile_replace-prompts-with-preset-btn").onclick=replacePromptsWithPreset,document.getElementById("crocodile_delete-preset-btn").onclick=deleteSelectedPresetPrompts,document.getElementById("crocodile_delete-all-prompts-btn").onclick=deleteAllPrompts,document.getElementById("crocodile_delete-all-presets-btn").onclick=deleteAllPresets,document.getElementById("crocodile_save-preset-btn").onclick=saveCurrentPromptsAsPreset,document.getElementById("crocodile_-preset-btn").onclick=PresetToJSON,document.getElementById("crocodile_import-preset-btn").onclick=importPresetFromJSONPrompts,document.getElementById("crocodile_clear-preset-json-btn").onclick=clearPresetJSONField,document.getElementById("crocodile_clear-input-btn").onclick=clearInputFields,document.getElementById("crocodile_cancel-edit-btn").onclick=cancelEditPrompt,$("#crocodile_preset-select-prompts").on("change",loadSelectedPresetPrompts),initializePromptsSubTabs(),initializePresetsSubTabs(),updatePromptList()}function initializePromptsTabs(){$('#crocodile_promptsMainTab a[data-toggle="tab"]').on("click",(function(e){e.preventDefault(),$(this).tab("show")}))}function initializePromptsSubTabs(){$('#crocodile_promptsSubTab a[data-toggle="tab"]').on("click",(function(e){e.preventDefault(),$(this).tab("show")})),$("#crocodile_filter-tags-select").on("change",(function(){filterAndSortPrompts()})),$("#crocodile_sort-prompts-select").on("change",(function(){filterAndSortPrompts()}))}function initializePresetsSubTabs(){$('#crocodile_presetsSubTab a[data-toggle="tab"]').on("click",(function(e){e.preventDefault(),$(this).tab("show")}))}function showAlertPrompt(e){$("#crocodile_alertModalBody").text(e),$("#crocodile_alertModal").modal("show")}function showConfirm(e){return new Promise((function(t,n){$("#crocodile_confirmModalBody").text(e),$("#crocodile_confirmModal").modal("show"),$("#crocodile_confirmModalOk").off("click").on("click",(function(){$("#crocodile_confirmModal").modal("hide"),t(!0)})),$("#crocodile_confirmModalCancel").off("click").on("click",(function(){$("#crocodile_confirmModal").modal("hide"),t(!1)})),$("#crocodile_confirmModal").off("hidden.bs.modal").on("hidden.bs.modal",(function(){t(!1)}))}))}function populateModelSelectPrompt(){var e=$("#crocodile_prompt-model-select");e.empty(),JSON.parse(localStorage.getItem("models")||"[]").forEach((function(t){var n=new Option(t.name,t.id,!1,!1);e.append(n)})),e.trigger("change")}function populateTagsFilter(){var e=$("#crocodile_filter-tags-select"),t=$("#crocodile_prompt-tags-input");e.empty(),t.empty();var n=getPrompts(),r=new Map;n.forEach((function(e){e.tags&&e.tags.forEach((function(e){r.has(e)?r.set(e,r.get(e)+1):r.set(e,1)}))})),Array.from(r.entries()).sort().forEach((function(n){var r=_slicedToArray(n,2),a=r[0],o=r[1],c="".concat(a," (").concat(o,")"),l=new Option(c,a,!1,!1),s=new Option(a,a,!1,!1);e.append(l),t.append(s)})),e.trigger("change"),t.trigger("change")}function populatePresetSelectPrompts(){var e=$("#crocodile_preset-select-prompts");e.empty();var t=JSON.parse(localStorage.getItem("promptPresetsAkula")||"[]");0===t.length?e.append(new Option("Нет сохранённых пресетов","",!1,!1)):(e.append(new Option("Выберите пресет","",!1,!1)),t.forEach((function(t){e.append(new Option(t.name,t.name,!1,!1))}))),e.trigger("change")}function clearInputFields(){document.getElementById("crocodile_prompt-name-input").value="",$("#crocodile_prompt-model-select").val(null).trigger("change"),document.getElementById("crocodile_prompt-textarea-input").value="",$("#crocodile_prompt-tags-input").val(null).trigger("change");var e=document.getElementById("crocodile_save-prompt-btn");"Обновить промпт"===e.textContent&&(e.textContent="Сохранить промпт",e.onclick=savePrompt,document.getElementById("crocodile_cancel-edit-btn").style.display="none")}function cancelEditPrompt(){clearInputFields(),showAlertPrompt("Редактирование отменено.")}function populatePresetSelectInManage(){var e=$("#crocodile_preset-select-in-manage");e.empty();var t=JSON.parse(localStorage.getItem("promptPresetsAkula")||"[]");0===t.length?e.append(new Option("Нет сохранённых пресетов","",!1,!1)):(e.append(new Option("Выберите пресет","",!1,!1)),t.forEach((function(t){e.append(new Option(t.name,t.name,!1,!1))}))),e.trigger("change")}function savePrompt(){return _savePrompt.apply(this,arguments)}function _savePrompt(){return(_savePrompt=_asyncToGenerator(_regeneratorRuntime().mark((function e(){var t,n,r,a,o,c,l;return _regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t=document.getElementById("crocodile_prompt-name-input").value.trim(),n=$("#crocodile_prompt-model-select").val(),r=document.getElementById("crocodile_prompt-textarea-input").value.trim(),a=$("#crocodile_prompt-tags-input").val(),!(t&&n&&r)){e.next=29;break}if(o=new Date,c=getPrompts(),-1===(l=c.findIndex((function(e){return e.name===t})))){e.next=17;break}return e.next=11,showConfirm('Промпт с названием "'.concat(t,'" уже существует. Перезаписать его?'));case 11:if(e.sent){e.next=14;break}return e.abrupt("return");case 14:c[l]={name:t,model:n,text:r,tags:a,createdAt:c[l].createdAt||o.toISOString(),updatedAt:o.toISOString()},e.next=18;break;case 17:c.push({name:t,model:n,text:r,tags:a,createdAt:o.toISOString(),updatedAt:o.toISOString()});case 18:savePrompts(c),updatePromptList(),updatePromptSelect(),populateTagsFilter(),document.getElementById("crocodile_prompt-name-input").value="",$("#crocodile_prompt-model-select").val(null).trigger("change"),document.getElementById("crocodile_prompt-textarea-input").value="",$("#crocodile_prompt-tags-input").val(null).trigger("change"),showAlertPrompt("Промпт успешно сохранён."),e.next=30;break;case 29:showAlertPrompt("Пожалуйста, заполните все поля.");case 30:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function updatePromptList(){var e=document.getElementById("crocodile_prompt-list"),t=getPrompts(),n=$("#crocodile_filter-tags-select").val()||[],r=$("#crocodile_sort-prompts-select").val()||"name_asc";e.innerHTML="";var a=(new Date).toISOString();t.forEach((function(e){e.createdAt||(e.createdAt=a),e.updatedAt||(e.updatedAt=e.createdAt)})),savePrompts(t);var o=t.map((function(e,t){return{prompt:e,originalIndex:t}}));n.length>0&&(o=o.filter((function(e){var t=e.prompt;return!!(t.tags&&t.tags.length>0)&&n.every((function(e){return t.tags.includes(e)}))}))),o.sort((function(e,t){var n=e.prompt,a=t.prompt;switch(r){case"name_asc":return n.name.localeCompare(a.name);case"name_desc":return a.name.localeCompare(n.name);case"length_asc":return n.text.length-a.text.length;case"length_desc":return a.text.length-n.text.length;case"model_asc":return n.model.localeCompare(a.model);case"model_desc":return a.model.localeCompare(n.model);default:return 0}})),0!==o.length?o.forEach((function(t){var n=t.prompt,r=t.originalIndex,a=createPromptCard(n,r,{buttons:[{text:"Редактировать",className:"btn-primary edit-prompt",data:{index:r}},{text:"Дублировать",className:"btn-info duplicate-prompt",data:{index:r}},{text:"Удалить",className:"btn-danger delete-prompt",data:{index:r}}],eventHandlers:{".edit-prompt":function(e){return _editPrompt(e.target.dataset.index)},".duplicate-prompt":function(e){return _duplicatePrompt(e.target.dataset.index)},".delete-prompt":function(e){return _deletePrompt(e.target.dataset.index)}}});e.appendChild(a)})):e.innerHTML='<p class="text-muted">Промпты не найдены.</p>'}function createPromptCard(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=document.createElement("div");r.className="card mt-2";var a=e.text.length,o=new Date(e.createdAt).toLocaleString(),c=e.updatedAt?new Date(e.updatedAt).toLocaleString():o,l='<small class="text-muted">Создано: '.concat(o);e.updatedAt&&e.updatedAt!==e.createdAt&&(l+=" | Изменено: ".concat(c)),l+="</small>";var s="";return n.buttons&&n.buttons.length>0&&(s=n.buttons.map((function(e){var t=Object.entries(e.data||{}).map((function(e){var t=_slicedToArray(e,2),n=t[0],r=t[1];return"data-".concat(n,'="').concat(r,'"')})).join(" ");return'<button class="btn btn-sm '.concat(e.className,' mr-2" ').concat(t,">").concat(e.text,"</button>")})).join("")),r.innerHTML='\n <div class="card-body">\n <p><strong>Название:</strong> '.concat(e.name,"</p>\n <p><strong>Модель:</strong> ").concat(e.model,"</p>\n <p><strong>Промпт (").concat(a,"):</strong> ").concat(e.text,"</p>\n ").concat(e.tags&&e.tags.length>0?"<p><strong>Теги:</strong> ".concat(e.tags.join(", "),"</p>"):"","\n <p>").concat(l,"</p>\n ").concat(s,"\n </div>\n "),n.eventHandlers&&Object.entries(n.eventHandlers).forEach((function(e){var t=_slicedToArray(e,2),n=t[0],a=t[1];r.querySelectorAll(n).forEach((function(e){e.addEventListener("click",a)}))})),r}function _deletePrompt(e){return _deletePrompt2.apply(this,arguments)}function _deletePrompt2(){return(_deletePrompt2=_asyncToGenerator(_regeneratorRuntime().mark((function e(t){var n;return _regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,showConfirm("Вы уверены, что хотите удалить этот промпт?");case 2:if(e.sent){e.next=5;break}return e.abrupt("return");case 5:(n=getPrompts()).splice(t,1),savePrompts(n),updatePromptList(),updatePromptSelect(),populateTagsFilter(),showAlertPrompt("Промпт удалён.");case 12:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function _editPrompt(e){e=Number(e);var t=getPrompts()[e];document.getElementById("crocodile_prompt-name-input").value=t.name,$("#crocodile_prompt-model-select").val(t.model).trigger("change"),document.getElementById("crocodile_prompt-textarea-input").value=t.text,$("#crocodile_prompt-tags-input").val(t.tags).trigger("change");var n=document.getElementById("crocodile_save-prompt-btn");n.textContent="Обновить промпт",n.onclick=function(){updatePrompt(e),n.textContent="Сохранить промпт",n.onclick=savePrompt,document.getElementById("crocodile_cancel-edit-btn").style.display="none"},document.getElementById("crocodile_cancel-edit-btn").style.display="inline-block",$('#crocodile_promptsSubTab a[href="#crocodile_createPromptTabContent"]').tab("show")}function updatePrompt(e){return _updatePrompt.apply(this,arguments)}function _updatePrompt(){return(_updatePrompt=_asyncToGenerator(_regeneratorRuntime().mark((function e(t){var n,r,a,o,c,l;return _regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:n=document.getElementById("crocodile_prompt-name-input").value.trim(),r=$("#crocodile_prompt-model-select").val(),a=document.getElementById("crocodile_prompt-textarea-input").value.trim(),o=$("#crocodile_prompt-tags-input").val(),n&&r&&a?(c=new Date,(l=getPrompts())[t]={name:n,model:r,text:a,tags:o,createdAt:l[t].createdAt||c.toISOString(),updatedAt:c.toISOString()},savePrompts(l),updatePromptList(),updatePromptSelect(),populateTagsFilter(),document.getElementById("crocodile_prompt-name-input").value="",$("#crocodile_prompt-model-select").val(null).trigger("change"),document.getElementById("crocodile_prompt-textarea-input").value="",$("#crocodile_prompt-tags-input").val(null).trigger("change"),showAlertPrompt("Промпт обновлён.")):showAlertPrompt("Пожалуйста, заполните все поля.");case 5:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function _duplicatePrompt(e){var t=getPrompts()[e];document.getElementById("crocodile_prompt-name-input").value=t.name+" (копия)",$("#crocodile_prompt-model-select").val(t.model).trigger("change"),document.getElementById("crocodile_prompt-textarea-input").value=t.text,$("#crocodile_prompt-tags-input").val(t.tags).trigger("change"),document.getElementById("crocodile_save-prompt-btn").textContent="Сохранить промпт",document.getElementById("crocodile_save-prompt-btn").onclick=savePrompt,$('#crocodile_promptsSubTab a[href="#crocodile_createPromptTabContent"]').tab("show")}function filterAndSortPrompts(){updatePromptList()}function addSinglePromptFromPreset(e){var t=$("#crocodile_preset-select-prompts").val();if(t){var n=JSON.parse(localStorage.getItem("promptPresetsAkula")||"[]").find((function(e){return e.name===t}));if(n){var r=n.prompts[e],a=getPrompts();if(a.some((function(e){return e.name===r.name}))){var o=a.findIndex((function(e){return e.name===r.name}));a[o]=r}else a.push(r);savePrompts(a),updatePromptList(),updatePromptSelect(),populateTagsFilter(),showAlertPrompt('Промпт "'.concat(r.name,'" добавлен к текущим промптам.'))}}}function deleteAllPrompts(){return _deleteAllPrompts.apply(this,arguments)}function _deleteAllPrompts(){return(_deleteAllPrompts=_asyncToGenerator(_regeneratorRuntime().mark((function e(){return _regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,showConfirm("Вы уверены, что хотите удалить все текущие промпты? Это действие нельзя будет отменить.");case 2:if(e.sent){e.next=5;break}return e.abrupt("return");case 5:savePrompts([]),updatePromptList(),updatePromptSelect(),populateTagsFilter(),showAlertPrompt("Все промпты удалены.");case 10:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function deleteAllPresets(){return _deleteAllPresets.apply(this,arguments)}function _deleteAllPresets(){return(_deleteAllPresets=_asyncToGenerator(_regeneratorRuntime().mark((function e(){return _regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,showConfirm("Вы уверены, что хотите удалить все текущие пресеты? Это действие нельзя будет отменить.");case 2:if(e.sent){e.next=5;break}return e.abrupt("return");case 5:localStorage.removeItem("promptPresetsAkula"),populatePresetSelectPrompts(),populatePresetSelectInManage(),document.getElementById("crocodile_preset-preview").innerHTML="",document.getElementById("crocodile_preset-count").textContent="0",showAlertPrompt("Все пресеты удалены.");case 11:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function saveCurrentPromptsAsPreset(){return _saveCurrentPromptsAsPreset.apply(this,arguments)}function _saveCurrentPromptsAsPreset(){return(_saveCurrentPromptsAsPreset=_asyncToGenerator(_regeneratorRuntime().mark((function e(){var t,n,r,a;return _regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t=document.getElementById("crocodile_preset-name-input").value.trim()){e.next=4;break}return showAlertPrompt("Пожалуйста, введите название пресета."),e.abrupt("return");case 4:if(0!==(n=getPrompts()).length){e.next=8;break}return showAlertPrompt("Нет промптов для сохранения в пресет."),e.abrupt("return");case 8:if(r=JSON.parse(localStorage.getItem("promptPresetsAkula")||"[]"),-1===(a=r.findIndex((function(e){return e.name===t})))){e.next=19;break}return e.next=13,showConfirm('Пресет с названием "'.concat(t,'" уже существует. Перезаписать его?'));case 13:if(e.sent){e.next=16;break}return e.abrupt("return");case 16:r[a]={name:t,prompts:n},e.next=20;break;case 19:r.push({name:t,prompts:n});case 20:localStorage.setItem("promptPresetsAkula",JSON.stringify(r)),populatePresetSelectPrompts(),populatePresetSelectInManage(),$("#crocodile_preset-select-prompts").val(t).trigger("change"),$("#crocodile_preset-select-in-manage").val(t).trigger("change"),showAlertPrompt("Пресет успешно сохранён.");case 26:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function PresetToJSON(){var e=$("#crocodile_preset-select-in-manage").val();if(e){var t=JSON.parse(localStorage.getItem("promptPresetsAkula")||"[]").find((function(t){return t.name===e}));if(t){var n=JSON.stringify(t,null,2);navigator.clipboard.writeText(n).then((function(){document.getElementById("crocodile_preset-json-input").value=n,showAlertPrompt("JSON выбранного пресета скопирован в буфер обмена.")})).catch((function(e){console.error("Ошибка при копировании в буфер обмена:",e),showAlertPrompt("Ошибка при копировании в буфер обмена.")}))}else showAlertPrompt("Выбранный пресет не найден.")}else showAlertPrompt("Нет выбранного пресета для экспорта.")}function clearPresetJSONField(){document.getElementById("crocodile_preset-json-input").value=""}function importPresetFromJSONPrompts(){var e=document.getElementById("crocodile_preset-json-input").value;if(e)try{var t=JSON.parse(e);if(!t.name||!t.prompts)return void showAlertPrompt("Некорректный формат пресета.");var n=JSON.parse(localStorage.getItem("promptPresetsAkula")||"[]"),r=n.findIndex((function(e){return e.name===t.name}));-1!==r?showConfirm('Пресет с названием "'.concat(t.name,'" уже существует. Перезаписать его?')).then((function(e){e&&(n[r]=t,localStorage.setItem("promptPresetsAkula",JSON.stringify(n)),populatePresetSelectPrompts(),populatePresetSelectInManage(),$("#crocodile_preset-select-prompts").val(t.name).trigger("change"),$("#crocodile_preset-select-in-manage").val(t.name).trigger("change"),showAlertPrompt("Пресет успешно импортирован."))})):(n.push(t),localStorage.setItem("promptPresetsAkula",JSON.stringify(n)),populatePresetSelectPrompts(),populatePresetSelectInManage(),$("#crocodile_preset-select-prompts").val(t.name).trigger("change"),$("#crocodile_preset-select-in-manage").val(t.name).trigger("change"),showAlertPrompt("Пресет успешно импортирован."))}catch(e){console.error("Ошибка при импорте пресета:",e),showAlertPrompt("Ошибка при импорте пресета. Проверьте формат JSON.")}else showAlertPrompt("Поле JSON Пресета пустое.")}function addPresetToPrompts(){var e=$("#crocodile_preset-select-prompts").val();if(e){var t=JSON.parse(localStorage.getItem("promptPresetsAkula")||"[]").find((function(t){return t.name===e}));if(t){var n=getPrompts();t.prompts.forEach((function(e){if(n.some((function(t){return t.name===e.name}))){var t=n.findIndex((function(t){return t.name===e.name}));n[t]=e}else n.push(e)})),savePrompts(n),updatePromptList(),updatePromptSelect(),populateTagsFilter(),showAlertPrompt("Промпты из пресета добавлены к текущим промптам.")}}else showAlertPrompt("Нет выбранного пресета для добавления.")}function replacePromptsWithPreset(){return _replacePromptsWithPreset.apply(this,arguments)}function _replacePromptsWithPreset(){return(_replacePromptsWithPreset=_asyncToGenerator(_regeneratorRuntime().mark((function e(){var t,n,r;return _regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t=$("#crocodile_preset-select-prompts").val()){e.next=4;break}return showAlertPrompt("Нет выбранного пресета для замены."),e.abrupt("return");case 4:return e.next=6,showConfirm("Вы уверены, что хотите заменить текущие промпты на выбранный пресет? Это действие нельзя будет отменить.");case 6:if(e.sent){e.next=9;break}return e.abrupt("return");case 9:if(n=JSON.parse(localStorage.getItem("promptPresetsAkula")||"[]"),r=n.find((function(e){return e.name===t}))){e.next=13;break}return e.abrupt("return");case 13:savePrompts(r.prompts),updatePromptList(),updatePromptSelect(),populateTagsFilter(),showAlertPrompt("Текущие промпты заменены на промпты из пресета.");case 18:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function deleteSelectedPresetPrompts(){return _deleteSelectedPresetPrompts.apply(this,arguments)}function _deleteSelectedPresetPrompts(){return(_deleteSelectedPresetPrompts=_asyncToGenerator(_regeneratorRuntime().mark((function e(){var t,n;return _regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t=$("#crocodile_preset-select-prompts").val()){e.next=4;break}return showAlertPrompt("Нет выбранного пресета для удаления."),e.abrupt("return");case 4:return e.next=6,showConfirm('Вы уверены, что хотите удалить пресет "'.concat(t,'"?'));case 6:if(e.sent){e.next=9;break}return e.abrupt("return");case 9:n=(n=JSON.parse(localStorage.getItem("promptPresetsAkula")||"[]")).filter((function(e){return e.name!==t})),localStorage.setItem("promptPresetsAkula",JSON.stringify(n)),populatePresetSelectPrompts(),document.getElementById("crocodile_preset-preview").innerHTML="",document.getElementById("crocodile_preset-count").textContent="0",showAlertPrompt("Пресет удалён.");case 16:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function loadSelectedPresetPrompts(){var e=$("#crocodile_preset-select-prompts").val(),t=document.getElementById("crocodile_preset-preview"),n=document.getElementById("crocodile_preset-count");if(t.innerHTML="",n.textContent="0",e){var r=JSON.parse(localStorage.getItem("promptPresetsAkula")||"[]").find((function(t){return t.name===e}));r&&(n.textContent=r.prompts.length,0===r.prompts.length?t.innerHTML='<p class="text-muted">Пресет пуст.</p>':(t.innerHTML="",r.prompts.forEach((function(e,n){var r=createPromptCard(e,n,{buttons:[{text:"Добавить этот промпт",className:"btn-primary add-single-prompt",data:{"prompt-index":n}}],eventHandlers:{".add-single-prompt":function(e){return addSinglePromptFromPreset(e.target.dataset.promptIndex)}}});t.appendChild(r)}))))}}window.abortController=null,window.isLoadingPreset=!1;var OPENROUTER_BASE_URL="https://openrouter.ai/api/v1";function loadModels(){return _loadModels.apply(this,arguments)}function _loadModels(){return(_loadModels=_asyncToGenerator(_regeneratorRuntime().mark((function e(){var t,n;return _regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,axios.get("".concat(OPENROUTER_BASE_URL,"/models"));case 3:t=e.sent,n=t.data.data,localStorage.setItem("models",JSON.stringify(n)),populateModelSelect(n),e.next=12;break;case 9:e.prev=9,e.t0=e.catch(0),console.error("Error loading models:",e.t0);case 12:case"end":return e.stop()}}),e,null,[[0,9]])})))).apply(this,arguments)}function generateTextWithAI(e,t,n,r){return _generateTextWithAI.apply(this,arguments)}function _generateTextWithAI(){return(_generateTextWithAI=_asyncToGenerator(_regeneratorRuntime().mark((function e(t,n,r,a){var o,c,l;return _regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return o=localStorage.getItem("apiKey"),e.prev=1,e.next=4,fetch("".concat(OPENROUTER_BASE_URL,"/chat/completions"),{method:"POST",signal:a,headers:{Authorization:"Bearer ".concat(o),"Content-Type":"application/json","HTTP-Referer":"https://www.office.com","X-Title":"Word AI Assistant"},body:JSON.stringify({model:r,messages:[{role:"system",content:t},{role:"user",content:n}]})});case 4:if((c=e.sent).ok){e.next=7;break}throw new Error("HTTP error! status: ".concat(c.status));case 7:return e.next=9,c.json();case 9:return l=e.sent,e.abrupt("return",l.choices[0].message.content.trim());case 13:throw e.prev=13,e.t0=e.catch(1),console.error("Error in generateTextWithAI:",e.t0),e.t0;case 17:case"end":return e.stop()}}),e,null,[[1,13]])})))).apply(this,arguments)}function generateTextWithAIFormat(e,t,n,r){return _generateTextWithAIFormat.apply(this,arguments)}function _generateTextWithAIFormat(){return(_generateTextWithAIFormat=_asyncToGenerator(_regeneratorRuntime().mark((function e(t,n,r,a){var o,c,l;return _regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return o=localStorage.getItem("apiKey"),e.prev=1,e.next=4,fetch("".concat(OPENROUTER_BASE_URL,"/chat/completions"),{method:"POST",signal:a,headers:{Authorization:"Bearer ".concat(o),"Content-Type":"application/json","HTTP-Referer":"https://www.office.com","X-Title":"Word AI Assistant"},body:JSON.stringify({model:r,messages:[{role:"system",content:t},{role:"user",content:n}]})});case 4:if((c=e.sent).ok){e.next=7;break}throw new Error("HTTP error! status: ".concat(c.status));case 7:return e.next=9,c.json();case 9:return l=e.sent,e.abrupt("return",l.choices[0].message.content.trim());case 13:throw e.prev=13,e.t0=e.catch(1),console.error("Error in generateTextWithAI:",e.t0),e.t0;case 17:case"end":return e.stop()}}),e,null,[[1,13]])})))).apply(this,arguments)}function initSettings(){document.getElementById("settings").innerHTML='\n <div class="mt-3">\n \x3c!-- Инструкция --\x3e\n <div class="alert alert-info">\n <strong>Настройки:</strong>\n <p>Здесь вы можете ввести ваш API-ключ для доступа к сервисам OpenRouter.</p>\n </div>\n <div class="form-group">\n <label for="api-key" class="form-label">API Ключ:</label>\n <input type="password" id="api-key" class="form-control" placeholder="Введите ваш API ключ" title="Введите ваш API ключ для доступа к сервисам OpenRouter">\n </div>\n </div>\n ',document.getElementById("api-key").onchange=saveApiKey,loadSettings()}function saveApiKey(){var e=document.getElementById("api-key").value;localStorage.setItem("apiKey",e)}function loadSettings(){var e=localStorage.getItem("apiKey")||"";document.getElementById("api-key").value=e}function populateModelSelect(e){var t=$("#prompt-model"),n=$("#formatting-model");[t,n].forEach((function(t){t.empty(),e.forEach((function(e){var n=new Option(e.name,e.id,!1,!1);t.append(n)})),t.trigger("change")}));var r=e.find((function(e){return"openai/gpt-4-mini"===e.id}))||e[0];r&&n.val(r.id).trigger("change");var a=localStorage.getItem("formattingModel");a&&e.some((function(e){return e.id===a}))&&n.val(a).trigger("change")}function initTests(){document.getElementById("tests").innerHTML='\n <h2>Тесты выделения текста</h2>\n <button id="kuga_save-selection" class="btn btn-primary mb-2">Сохранить выделение</button>\n <button id="kuga_restore-selection" class="btn btn-success mb-2" style="display: none;">Восстановить выделение</button>\n <button id="kuga_delete-selection" class="btn btn-danger mb-2" style="display: none;">Удалить выделение</button>\n <button id="kuga_highlight-selection" class="btn btn-warning mb-2" style="display: none;">Покрасить текст в желтый</button>\n <div id="kuga_selection-info" class="mt-2"></div>\n <div id="kuga_full-selection" class="mt-2" style="white-space: pre-wrap;"></div>\n ';var e=null;function t(){return t=_asyncToGenerator(_regeneratorRuntime().mark((function t(){return _regeneratorRuntime().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.prev=0,t.next=3,Word.run(function(){var t=_asyncToGenerator(_regeneratorRuntime().mark((function t(n){var r,a,o,c,l,s;return _regeneratorRuntime().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return(r=n.document.getSelection()).load("text"),t.next=4,n.sync();case 4:if(!(r.text.trim().length>0)){t.next=25;break}return a=Date.now(),o="START_TIMESTAMP".concat(a),c="END_TIMESTAMP".concat(a),l=r.insertText(o,Word.InsertLocation.before),s=r.insertText(c,Word.InsertLocation.after),l.font.size=1,s.font.size=1,l.font.color="white",s.font.color="white",t.next=16,n.sync();case 16:e={timestamp:a,text:r.text},localStorage.setItem("savedSelection",JSON.stringify(e)),document.getElementById("kuga_selection-info").textContent="Выделение сохранено",document.getElementById("kuga_full-selection").textContent=r.text,document.getElementById("kuga_restore-selection").style.display="inline-block",document.getElementById("kuga_delete-selection").style.display="inline-block",document.getElementById("kuga_highlight-selection").style.display="inline-block",t.next=26;break;case 25:document.getElementById("kuga_selection-info").textContent="Ничего не выделено";case 26:case"end":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}());case 3:t.next=9;break;case 5:t.prev=5,t.t0=t.catch(0),console.error("Ошибка при сохранении выделения:",t.t0),document.getElementById("kuga_selection-info").textContent="Ошибка при сохранении выделения";case 9:case"end":return t.stop()}}),t,null,[[0,5]])}))),t.apply(this,arguments)}function n(){return n=_asyncToGenerator(_regeneratorRuntime().mark((function e(){var t,n,r;return _regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t=localStorage.getItem("savedSelection")){e.next=4;break}return document.getElementById("kuga_selection-info").textContent="Нет сохраненного выделения",e.abrupt("return");case 4:return n=JSON.parse(t),r=n.timestamp,e.prev=5,e.next=8,Word.run(function(){var e=_asyncToGenerator(_regeneratorRuntime().mark((function e(t){var n,a,o,c,l;return _regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=t.document.body,a=n.search("START_TIMESTAMP".concat(r),{matchCase:!0}),o=n.search("END_TIMESTAMP".concat(r),{matchCase:!0}),t.load(a,"items"),t.load(o,"items"),e.next=7,t.sync();case 7:a.items.length>0&&o.items.length>0?(c=a.items[0],l=o.items[0],c.expandTo(l).select(),document.getElementById("kuga_selection-info").textContent="Выделение восстановлено"):document.getElementById("kuga_selection-info").textContent="Маркеры не найдены";case 8:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}());case 8:e.next=14;break;case 10:e.prev=10,e.t0=e.catch(5),console.error("Ошибка при восстановлении выделения:",e.t0),document.getElementById("kuga_selection-info").textContent="Ошибка: ".concat(e.t0.message);case 14:case"end":return e.stop()}}),e,null,[[5,10]])}))),n.apply(this,arguments)}function r(){return r=_asyncToGenerator(_regeneratorRuntime().mark((function e(){var t,n,r;return _regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t=localStorage.getItem("savedSelection")){e.next=4;break}return document.getElementById("kuga_selection-info").textContent="Нет сохраненного выделения",e.abrupt("return");case 4:return n=JSON.parse(t),r=n.timestamp,e.prev=5,e.next=8,Word.run(function(){var e=_asyncToGenerator(_regeneratorRuntime().mark((function e(t){var n,a,o,c,l;return _regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=t.document.body,a=n.search("START_TIMESTAMP".concat(r),{matchCase:!0}),o=n.search("END_TIMESTAMP".concat(r),{matchCase:!0}),t.load(a,"items"),t.load(o,"items"),e.next=7,t.sync();case 7:if(!(a.items.length>0&&o.items.length>0)){e.next=17;break}return c=a.items[0],l=o.items[0],c.expandTo(l).font.highlightColor="yellow",e.next=14,t.sync();case 14:document.getElementById("kuga_selection-info").textContent="Текст покрашен в желтый",e.next=18;break;case 17:document.getElementById("kuga_selection-info").textContent="Маркеры не найдены";case 18:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}());case 8:e.next=14;break;case 10:e.prev=10,e.t0=e.catch(5),console.error("Ошибка при покраске текста:",e.t0),document.getElementById("kuga_selection-info").textContent="Ошибка: ".concat(e.t0.message);case 14:case"end":return e.stop()}}),e,null,[[5,10]])}))),r.apply(this,arguments)}function a(){return a=_asyncToGenerator(_regeneratorRuntime().mark((function t(){var n,r,a;return _regeneratorRuntime().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(n=localStorage.getItem("savedSelection")){t.next=4;break}return document.getElementById("kuga_selection-info").textContent="Нет сохраненного выделения для удаления",t.abrupt("return");case 4:return r=JSON.parse(n),a=r.timestamp,t.prev=5,t.next=8,Word.run(function(){var t=_asyncToGenerator(_regeneratorRuntime().mark((function t(n){var r,o,c,l,s;return _regeneratorRuntime().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return r=n.document.body,o=r.search("START_TIMESTAMP".concat(a),{matchCase:!0}),c=r.search("END_TIMESTAMP".concat(a),{matchCase:!0}),n.load(o,"items"),n.load(c,"items"),t.next=7,n.sync();case 7:if(!(o.items.length>0&&c.items.length>0)){t.next=23;break}return l=o.items[0],s=c.items[0],l.delete(),s.delete(),t.next=14,n.sync();case 14:localStorage.removeItem("savedSelection"),e=null,document.getElementById("kuga_selection-info").textContent="Выделение удалено",document.getElementById("kuga_full-selection").textContent="",document.getElementById("kuga_restore-selection").style.display="none",document.getElementById("kuga_delete-selection").style.display="none",document.getElementById("kuga_highlight-selection").style.display="none",t.next=24;break;case 23:document.getElementById("kuga_selection-info").textContent="Маркеры не найдены";case 24:case"end":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}());case 8:t.next=14;break;case 10:t.prev=10,t.t0=t.catch(5),console.error("Ошибка при удалении выделения:",t.t0),document.getElementById("kuga_selection-info").textContent="Ошибка: ".concat(t.t0.message);case 14:case"end":return t.stop()}}),t,null,[[5,10]])}))),a.apply(this,arguments)}document.getElementById("kuga_save-selection").addEventListener("click",(function(){return t.apply(this,arguments)})),document.getElementById("kuga_restore-selection").addEventListener("click",(function(){return n.apply(this,arguments)})),document.getElementById("kuga_delete-selection").addEventListener("click",(function(){return a.apply(this,arguments)})),document.getElementById("kuga_highlight-selection").addEventListener("click",(function(){return r.apply(this,arguments)}))}function initGrammar(){document.getElementById("grammar").innerHTML='\n <div class="mt-3">\n \x3c!-- Навигация по табам --\x3e\n <ul class="nav nav-tabs" id="grammarTab" role="tablist">\n <li class="nav-item">\n <a class="nav-link active" id="main-tab" data-toggle="tab" href="#mainContent" role="tab" aria-controls="mainContent" aria-selected="true">Основное</a>\n </li>\n <li class="nav-item">\n <a class="nav-link" id="settings-tab" data-toggle="tab" href="#settingsContent" role="tab" aria-controls="settingsContent" aria-selected="false">Настройки</a>\n </li>\n <li class="nav-item">\n <a class="nav-link" id="presets-tab" data-toggle="tab" href="#presetsContent" role="tab" aria-controls="presetsContent" aria-selected="false">Пресеты</a>\n </li>\n </ul>\n\n \x3c!-- Содержимое табов --\x3e\n <div class="tab-content" id="grammarTabContent">\n \x3c!-- Основное --\x3e\n <div class="tab-pane fade show active" id="mainContent" role="tabpanel" aria-labelledby="main-tab">\n \x3c!-- Инструкция по использованию --\x3e\n <div class="alert alert-info mt-3">\n <strong>Инструкция:</strong>\n <ul>\n <li>Выберите модель и типы проверок, которые вы хотите применить к тексту.</li>\n <li>Выделите текст, который хотите проверить (от 1 до 4 абзацев).</li>\n <li>Нажмите кнопку "Проверить".</li>\n </ul>\n </div>\n\n \x3c!-- Аккордеон для модели и типов проверок --\x3e\n <div class="accordion mt-3" id="mainAccordion">\n <div class="card">\n <div class="card-header" id="mainSettingsHeading">\n <h2 class="mb-0">\n <button class="btn btn-link" type="button" data-toggle="collapse" data-target="#mainSettingsCollapse" aria-expanded="true" aria-controls="mainSettingsCollapse">\n Настройки модели и проверок\n </button>\n </h2>\n </div>\n <div id="mainSettingsCollapse" class="collapse show" aria-labelledby="mainSettingsHeading" data-parent="#mainAccordion">\n <div class="card-body">\n \x3c!-- Модель для проверки --\x3e\n <div class="form-group">\n <label for="grammar-model">Модель для проверки:</label>\n <select id="grammar-model" class="form-control" title="Выберите модель нейросети для проверки текста"></select>\n </div>\n \x3c!-- Типы проверок --\x3e\n <div class="form-group">\n <label>Типы проверок:</label>\n <div class="form-check">\n <input class="form-check-input" type="checkbox" id="check-grammatical">\n <label class="form-check-label" for="check-grammatical" title="Проверка на грамматические ошибки">\n Грамматические (Beta)\n </label>\n </div>\n <div class="form-check">\n <input class="form-check-input" type="checkbox" id="check-syntactic">\n <label class="form-check-label" for="check-syntactic" title="Проверка на синтаксические ошибки">\n Синтаксические (Beta)\n </label>\n </div>\n <div class="form-check">\n <input class="form-check-input" type="checkbox" id="check-stylistic" checked>\n <label class="form-check-label" for="check-stylistic" title="Проверка на стилистические ошибки">\n Стилистические\n </label>\n </div>\n <div class="form-check">\n <input class="form-check-input" type="checkbox" id="check-logical" checked>\n <label class="form-check-label" for="check-logical" title="Проверка на логические ошибки">\n Логические\n </label>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n \x3c!-- Кнопки управления --\x3e\n <div class="form-group mt-3" id="grammar-btn-group">\n <div class="btn-group" role="group" id="buttonGroup">\n <button id="check-grammar" class="btn btn-primary">Проверить</button>\n <button id="select-current-text" class="btn btn-info" style="display: none;">Выделить текущий текст</button>\n <button id="finish-current-fragment" class="btn btn-warning" style="display: none;">Завершить работу с фрагментом</button>\n </div>\n </div>\n\n <div id="kuga_selection-info" class="mt-3" style="display: none;"></div>\n\n \x3c!-- Загрузчик и кнопка Отменить --\x3e\n <div id="loading" class="mt-3 text-center" style="display: none;">\n <div id="progress-container" style="display: none;">\n <div class="progress">\n <div id="progress-bar" class="progress-bar" role="progressbar" style="width: 0%;">0%</div>\n </div>\n <div id="progress-text" class="mt-2">Обработано 0 из 0 чанков</div>\n </div>\n <div id="spinner" style="display: none;">\n <div class="spinner-border text-primary" role="status">\n <span class="sr-only">Загрузка...</span>\n </div>\n </div>\n <div class="mt-3">\n <button id="cancel-check" class="btn btn-secondary">Отменить</button>\n </div>\n </div>\n\n \x3c!-- Фильтр результатов --\x3e\n <div id="filter-container" class="mt-3" style="display: none;">\n <label for="filter-select">Фильтр результатов:</label>\n <select id="filter-select" class="form-control">\n <option value="all">Все ошибки</option>\n <option value="can_edit">Только исправляемые</option>\n <option value="cannot_edit">Только не исправляемые</option>\n </select>\n </div>\n\n \x3c!-- Вкладки для текущих ошибок и истории исправлений --\x3e\n <ul class="nav nav-tabs mt-3" id="grammarTabs" role="tablist">\n <li class="nav-item">\n <a class="nav-link active" id="current-tab" data-toggle="tab" href="#current" role="tab">Текущие ошибки</a>\n </li>\n\n <li class="nav-item">\n <a class="nav-link" id="history-tab" data-toggle="tab" href="#history" role="tab">История исправлений</a>\n </li>\n</ul>\n<div class="tab-content" id="grammarTabContent">\n <div class="tab-pane fade show active" id="current" role="tabpanel">\n <div id="grammar-results"></div>\n </div>\n <div class="tab-pane fade" id="history" role="tabpanel">\n <div id="grammar-history"></div>\n </div>\n</div>\n </div>\n\n \x3c!-- Настройки --\x3e\n <div class="tab-pane fade" id="settingsContent" role="tabpanel" aria-labelledby="settings-tab">\n \x3c!-- Инструкция для Настроек --\x3e\n <div class="alert alert-info mt-3">\n <strong>Инструкция:</strong>\n <p>Здесь вы можете настроить параметры обработки текста, модели, ошибки и промпты.</p>\n </div>\n\n \x3c!-- Навигация по подтабам Настроек --\x3e\n <ul class="nav nav-tabs mt-3" id="settingsSubTab" role="tablist">\n <li class="nav-item">\n <a class="nav-link active" id="text-processing-tab" data-toggle="tab" href="#textProcessingContent" role="tab" aria-controls="textProcessingContent" aria-selected="true">Настройки обработки текста</a>\n </li>\n <li class="nav-item">\n <a class="nav-link" id="model-settings-tab" data-toggle="tab" href="#modelSettingsContent" role="tab" aria-controls="modelSettingsContent" aria-selected="false">Настройки модели</a>\n </li>\n <li class="nav-item">\n <a class="nav-link" id="error-settings-tab" data-toggle="tab" href="#errorSettingsContent" role="tab" aria-controls="errorSettingsContent" aria-selected="false">Настройки ошибок</a>\n </li>\n <li class="nav-item">\n <a class="nav-link" id="prompt-settings-tab" data-toggle="tab" href="#promptSettingsContent" role="tab" aria-controls="promptSettingsContent" aria-selected="false">Настройки промптов</a>\n </li>\n <li class="nav-item">\n <a class="nav-link" id="additional-options-tab" data-toggle="tab" href="#additionalOptionsContent" role="tab" aria-controls="additionalOptionsContent" aria-selected="false">Дополнительные опции</a>\n </li>\n </ul>\n\n \x3c!-- Содержимое подтабов Настроек --\x3e\n <div class="tab-content" id="settingsSubTabContent">\n \x3c!-- Настройки обработки текста --\x3e\n <div class="tab-pane fade show active" id="textProcessingContent" role="tabpanel" aria-labelledby="text-processing-tab">\n <div class="alert alert-info mt-3">\n <p>Здесь вы можете настроить параметры обработки текста, такие как максимальное количество символов и разбивка на чанки.</p>\n </div>\n \x3c!-- Максимальное количество символов --\x3e\n <div class="form-group">\n <label for="max-chars">Максимальное количество символов для проверки (0 для без лимита):</label>\n <input type="number" id="max-chars" class="form-control" value="2000" min="0">\n </div>\n \x3c!-- Опция разбивать текст на чанки --\x3e\n <div class="form-check mt-2">\n <input class="form-check-input" type="checkbox" id="split-into-chunks-checkbox">\n <label class="form-check-label" for="split-into-chunks-checkbox" title="Разбивать текст на небольшие части для обработки">\n Разбивать текст на чанки\n </label>\n </div>\n \x3c!-- Размер чанка --\x3e\n <div class="form-group mt-2">\n <label for="chunk-size">Размер чанка (в предложениях):</label>\n <input type="number" id="chunk-size" class="form-control" value="8" min="1">\n </div>\n </div>\n \x3c!-- Настройки модели --\x3e\n <div class="tab-pane fade" id="modelSettingsContent" role="tabpanel" aria-labelledby="model-settings-tab">\n <div class="alert alert-info mt-3">\n <p>Здесь вы можете настроить параметры модели, такие как температура и максимальное количество токенов.</p>\n </div>\n \x3c!-- Температура --\x3e\n <div class="form-group">\n <label for="temperature">Температура (0.0 - 1.0):</label>\n <input type="number" id="temperature" class="form-control" value="0.1" min="0.0" max="1.0" step="0.1" title="Контролирует степень случайности модели. Низкие значения делают ответы более детерминированными">\n </div>\n \x3c!-- Максимальное количество токенов --\x3e\n <div class="form-group">\n <label for="max-tokens">Максимальное количество токенов:</label>\n <input type="number" id="max-tokens" class="form-control" value="4000" min="1" title="Максимальное количество токенов в ответе модели">\n </div>\n \x3c!-- Опция включения response_format --\x3e\n <div class="form-check mt-2">\n <input class="form-check-input" type="checkbox" id="response-format-checkbox">\n <label class="form-check-label" for="response-format-checkbox" title="Использовать определенный формат ответа от модели">\n Использовать response_format: {"type": "json_object"}\n </label>\n </div>\n </div>\n \x3c!-- Настройки ошибок --\x3e\n <div class="tab-pane fade" id="errorSettingsContent" role="tabpanel" aria-labelledby="error-settings-tab">\n <div class="alert alert-info mt-3">\n <p>Здесь вы можете настроить параметры обработки ошибок, такие как повтор запроса при ошибке.</p>\n </div>\n \x3c!-- Повторить в случае ошибки --\x3e\n <div class="form-check mt-2">\n <input class="form-check-input" type="checkbox" id="retry-on-error-checkbox" checked>\n <label class="form-check-label" for="retry-on-error-checkbox" title="Автоматически повторить запрос при возникновении ошибки">\n Повторить в случае ошибки\n </label>\n </div>\n \x3c!-- Количество повторов --\x3e\n <div class="form-group mt-2">\n <label for="retry-count">Количество повторов при ошибке:</label>\n <input type="number" id="retry-count" class="form-control" value="3" min="1" title="Сколько раз повторять запрос при ошибке">\n </div>\n </div>\n \x3c!-- Настройки промптов --\x3e\n <div class="tab-pane fade" id="promptSettingsContent" role="tabpanel" aria-labelledby="prompt-settings-tab">\n <div class="alert alert-info mt-3">\n <p>Здесь вы можете настроить промпты для модели.</p>\n </div>\n \x3c!-- Опция редактирования промптов --\x3e\n <div class="form-check mt-3">\n <input class="form-check-input" type="checkbox" id="edit-prompts-checkbox" checked>\n <label class="form-check-label" for="edit-prompts-checkbox" title="Позволяет редактировать системные промпты">\n Редактировать системные промпты\n </label>\n </div>\n \x3c!-- Аккордеон для редактирования промптов --\x3e\n <div id="prompts-accordion" class="mt-3">\n <div class="accordion" id="promptsAccordion">\n \x3c!-- Промпт роли --\x3e\n <div class="card">\n <div class="card-header" id="headingRolePrompt">\n <h2 class="mb-0">\n <button class="btn btn-link" type="button" data-toggle="collapse" data-target="#collapseRolePrompt" aria-expanded="true" aria-controls="collapseRolePrompt">\n Промпт роли\n </button>\n </h2>\n </div>\n <div id="collapseRolePrompt" class="collapse" aria-labelledby="headingRolePrompt" data-parent="#promptsAccordion">\n <div class="card-body">\n <textarea id="prompt-role" class="form-control" rows="3" placeholder="Например: Ты - опытный редактор и лингвист." title="Устанавливает роль для модели"></textarea>\n </div>\n </div>\n </div>\n \x3c!-- Грамматические ошибки --\x3e\n <div class="card">\n <div class="card-header" id="headingGrammar">\n <h2 class="mb-0">\n <button class="btn btn-link collapsed" type="button" data-toggle="collapse" data-target="#collapseGrammar" aria-expanded="false" aria-controls="collapseGrammar">\n Грамматические ошибки\n </button>\n </h2>\n </div>\n <div id="collapseGrammar" class="collapse" aria-labelledby="headingGrammar" data-parent="#promptsAccordion">\n <div class="card-body"> <textarea id="prompt-grammatical" class="form-control" rows="5" title="Инструкции для поиска грамматических ошибок"></textarea>\n</div>\n </div>\n </div>\n \x3c!-- Синтаксические ошибки --\x3e\n <div class="card">\n <div class="card-header" id="headingSyntactic">\n <h2 class="mb-0">\n <button class="btn btn-link collapsed" type="button" data-toggle="collapse" data-target="#collapseSyntactic" aria-expanded="false" aria-controls="collapseSyntactic">\n Синтаксические ошибки\n </button>\n </h2>\n </div>\n <div id="collapseSyntactic" class="collapse" aria-labelledby="headingSyntactic" data-parent="#promptsAccordion">\n <div class="card-body">\n <textarea id="prompt-syntactic" class="form-control" rows="5" title="Инструкции для поиска синтаксических ошибок"></textarea>\n </div>\n </div>\n </div>\n \x3c!-- Стилистические ошибки --\x3e\n <div class="card">\n <div class="card-header" id="headingStylistic">\n <h2 class="mb-0">\n <button class="btn btn-link collapsed" type="button" data-toggle="collapse" data-target="#collapseStylistic" aria-expanded="false" aria-controls="collapseStylistic">\n Стилистические ошибки\n </button>\n </h2>\n </div>\n <div id="collapseStylistic" class="collapse" aria-labelledby="headingStylistic" data-parent="#promptsAccordion">\n <div class="card-body">\n <textarea id="prompt-stylistic" class="form-control" rows="5" title="Инструкции для поиска стилистических ошибок"></textarea>\n </div>\n </div>\n </div>\n \x3c!-- Логические ошибки --\x3e\n <div class="card">\n <div class="card-header" id="headingLogical">\n <h2 class="mb-0">\n <button class="btn btn-link collapsed" type="button" data-toggle="collapse" data-target="#collapseLogical" aria-expanded="false" aria-controls="collapseLogical">\n Логические ошибки\n </button>\n </h2>\n </div>\n <div id="collapseLogical" class="collapse" aria-labelledby="headingLogical" data-parent="#promptsAccordion">\n <div class="card-body">\n <textarea id="prompt-logical" class="form-control" rows="5" title="Инструкции для поиска логических ошибок"></textarea>\n </div>\n </div>\n </div>\n \x3c!-- Примечание о проверяемом тексте --\x3e\n <div class="card">\n <div class="card-header" id="headingTextNote">\n <h2 class="mb-0">\n <button class="btn btn-link collapsed" type="button" data-toggle="collapse" data-target="#collapseTextNote" aria-expanded="false" aria-controls="collapseTextNote">\n Примечание о проверяемом тексте\n </button>\n </h2>\n </div>\n <div id="collapseTextNote" class="collapse" aria-labelledby="headingTextNote" data-parent="#promptsAccordion">\n <div class="card-body">\n <textarea id="prompt-text-note" class="form-control" rows="3" placeholder="Например: Текст является научной статьей по физике." title="Дополнительная информация о тексте для модели"></textarea>\n </div>\n </div>\n </div>\n </div>\n \x3c!-- Кнопка сброса промптов --\x3e\n <button id="reset-prompts" class="btn btn-secondary mt-3">Сбросить промпты</button>\n <div id="prompt-message" class="mt-2"></div>\n </div>\n </div>\n \x3c!-- Дополнительные опции --\x3e\n <div class="tab-pane fade" id="additionalOptionsContent" role="tabpanel" aria-labelledby="additional-options-tab">\n <div class="alert alert-info mt-3">\n <p>Здесь вы можете настроить дополнительные опции для отображения результатов.</p>\n </div>\n \x3c!-- Выделение проблемного текста --\x3e\n <div class="form-check">\n <input class="form-check-input" type="checkbox" id="highlight-checkbox" checked>\n <label class="form-check-label" for="highlight-checkbox" title="Выделить проблемный текст в документе">\n Выделять проблемный текст\n </label>\n </div>\n \x3c!-- Добавление комментариев --\x3e\n <div class="form-check mt-2">\n <input class="form-check-input" type="checkbox" id="comment-checkbox">\n <label class="form-check-label" for="comment-checkbox" title="Добавить комментарии к проблемному тексту">\n Добавлять комментарии к проблемному тексту\n </label>\n </div>\n \x3c!-- Изменение цвета исправленного текста --\x3e\n <div class="form-check mt-2">\n <input class="form-check-input" type="checkbox" id="highlight-corrected-checkbox" checked>\n <label class="form-check-label" for="highlight-corrected-checkbox" title="Изменять цвет исправленного текста">\n Изменять цвет исправленного текста\n </label>\n </div>\n \x3c!-- Удалять подсветку при завершении работы с фрагментом --\x3e\n <div class="form-check mt-2">\n <input class="form-check-input" type="checkbox" id="remove-highlight-on-finish-checkbox">\n <label class="form-check-label" for="remove-highlight-on-finish-checkbox" title="Удалять подсветку при завершении работы с фрагментом">\n Удалять подсветку при завершении работы с фрагментом\n </label>\n </div>\n <button id="remove-all-markers" class="btn btn-danger">Удалить все маркеры из текста</button>\n \x3c!-- Message area --\x3e\n <div id="message" class="mt-3"></div>\n </div>\n </div>\n </div>\n \x3c!-- Пресеты --\x3e\n <div class="tab-pane fade" id="presetsContent" role="tabpanel" aria-labelledby="presets-tab">\n \x3c!-- Инструкция для Пресетов --\x3e\n <div class="alert alert-info mt-3">\n <strong>Инструкция:</strong>\n <p>Здесь вы можете сохранять, экспортировать и импортировать ваши настройки в виде пресетов.</p>\n </div>\n \x3c!-- Навигация по подтабам Пресетов --\x3e\n <ul class="nav nav-tabs mt-3" id="presetsSubTab" role="tablist">\n <li class="nav-item">\n <a class="nav-link active" id="save-preset-tab" data-toggle="tab" href="#savePresetContent" role="tab" aria-controls="savePresetContent" aria-selected="true">Сохранить</a>\n </li>\n <li class="nav-item">\n <a class="nav-link" id="-preset-tab" data-toggle="tab" href="#PresetContent" role="tab" aria-controls="PresetContent" aria-selected="false">Экспорт</a>\n </li>\n <li class="nav-item">\n <a class="nav-link" id="import-preset-tab" data-toggle="tab" href="#importPresetContent" role="tab" aria-controls="importPresetContent" aria-selected="false">Импорт</a>\n </li>\n </ul>\n \x3c!-- Содержимое подтабов Пресетов --\x3e\n <div class="tab-content" id="presetsSubTabContent">\n \x3c!-- Сохранить пресет --\x3e\n <div class="tab-pane fade show active" id="savePresetContent" role="tabpanel" aria-labelledby="save-preset-tab">\n <div class="alert alert-info mt-3">\n <p>Здесь вы можете сохранить текущие настройки как пресет.</p>\n </div>\n \x3c!-- Выбор пресета --\x3e\n <div class="form-group">\n <label for="preset-select">Выберите пресет:</label>\n <select id="preset-select" class="form-control" title="Выберите сохраненный пресет настроек"></select>\n </div>\n \x3c!-- Имя пресета для сохранения --\x3e\n <div class="form-group">\n <label for="preset-name">Название пресета для сохранения:</label>\n <input type="text" id="preset-name" class="form-control" placeholder="Введите название пресета" title="Введите название для сохранения текущих настроек как пресет">\n </div>\n \x3c!-- Кнопки для управления пресетами --\x3e\n <div class="form-group mt-3">\n <button id="save-preset" class="btn btn-primary">Сохранить текущие настройки как пресет</button>\n <button id="delete-preset" class="btn btn-danger">Удалить выбранный пресет</button>\n </div>\n </div>\n \x3c!-- Экспорт пресета --\x3e\n <div class="tab-pane fade" id="PresetContent" role="tabpanel" aria-labelledby="-preset-tab">\n <div class="alert alert-info mt-3">\n <p>Здесь вы можете экспортировать выбранный пресет в формате JSON.</p>\n </div>\n <label for="preset-json">Экспорт пресета (JSON):</label>\n <textarea id="preset-json" class="form-control" rows="5" readonly title="Скопируйте этот JSON для экспорта пресета"></textarea>\n <button id="copy-preset-json" class="btn btn-secondary mt-2">Скопировать JSON</button>\n </div>\n \x3c!-- Импорт пресета --\x3e\n <div class="tab-pane fade" id="importPresetContent" role="tabpanel" aria-labelledby="import-preset-tab">\n <div class="alert alert-info mt-3">\n <p>Здесь вы можете импортировать пресет из JSON.</p>\n </div>\n <label for="preset-json-import">Импорт пресета (JSON):</label>\n <textarea id="preset-json-import" class="form-control" rows="5" title="Вставьте JSON для импорта пресета"></textarea>\n <button id="import-preset" class="btn btn-secondary mt-2">Импортировать пресет</button>\n </div>\n </div>\n \x3c!-- Сообщения о действиях с пресетами --\x3e\n <div id="preset-message" class="mt-2"></div>\n <div id="preset-confirmation" class="mt-2" style="display:none;">\n <div class="alert alert-warning">\n <p id="preset-confirmation-message"></p>\n <button id="preset-confirm-yes" class="btn btn-danger">Да</button>\n <button id="preset-confirm-no" class="btn btn-secondary">Нет</button>\n </div>\n </div>\n \x3c!-- Кнопка сброса настроек --\x3e\n <button id="reset-settings" class="btn btn-secondary mt-3">Сбросить настройки</button>\n <div id="reset-message" class="mt-2"></div>\n </div>\n </div>\n </div>\n',initializeGrammarModelSelect(),initializePresetSelectGrammar(),loadGrammarSettings(),loadGrammarPrompts(),document.getElementById("check-grammar").onclick=checkGrammarGrammar,document.getElementById("highlight-checkbox").onchange=function(){saveGrammarSettings(),updatePresetJSONGrammar()},document.getElementById("comment-checkbox").onchange=function(){saveGrammarSettings(),updatePresetJSONGrammar()},document.getElementById("highlight-corrected-checkbox").onchange=function(){saveGrammarSettings(),updatePresetJSONGrammar()},document.getElementById("check-grammatical").onchange=function(){saveGrammarSettings(),updatePresetJSONGrammar()},document.getElementById("check-syntactic").onchange=function(){saveGrammarSettings(),updatePresetJSONGrammar()},document.getElementById("check-stylistic").onchange=function(){saveGrammarSettings(),updatePresetJSONGrammar()},document.getElementById("check-logical").onchange=function(){saveGrammarSettings(),updatePresetJSONGrammar()},document.getElementById("split-into-chunks-checkbox").onchange=function(){saveGrammarSettings(),updatePresetJSONGrammar()},document.getElementById("chunk-size").onchange=function(){saveGrammarSettings(),updatePresetJSONGrammar()},document.getElementById("max-chars").onchange=function(){saveGrammarSettings(),updatePresetJSONGrammar()},document.getElementById("temperature").onchange=function(){saveGrammarSettings(),updatePresetJSONGrammar()},document.getElementById("max-tokens").onchange=function(){saveGrammarSettings(),updatePresetJSONGrammar()},document.getElementById("response-format-checkbox").onchange=function(){saveGrammarSettings(),updatePresetJSONGrammar()},document.getElementById("retry-on-error-checkbox").onchange=function(){saveGrammarSettings(),updatePresetJSONGrammar()},document.getElementById("retry-count").onchange=function(){saveGrammarSettings(),updatePresetJSONGrammar()},document.getElementById("edit-prompts-checkbox").onchange=function(){togglePromptsEditorGrammar(),updatePresetJSONGrammar()},document.getElementById("prompt-role").addEventListener("input",(function(){saveGrammarPrompts(),updatePresetJSONGrammar()})),document.getElementById("prompt-grammatical").addEventListener("input",(function(){saveGrammarPrompts(),updatePresetJSONGrammar()})),document.getElementById("prompt-syntactic").addEventListener("input",(function(){saveGrammarPrompts(),updatePresetJSONGrammar()})),document.getElementById("prompt-stylistic").addEventListener("input",(function(){saveGrammarPrompts(),updatePresetJSONGrammar()})),document.getElementById("prompt-logical").addEventListener("input",(function(){saveGrammarPrompts(),updatePresetJSONGrammar()})),document.getElementById("prompt-text-note").addEventListener("input",(function(){saveGrammarPrompts(),updatePresetJSONGrammar()})),document.getElementById("reset-prompts").onclick=function(){resetGrammarPrompts(),updatePresetJSONGrammar()},document.getElementById("reset-settings").onclick=resetGrammarSettings,document.getElementById("preset-select").onchange=loadSelectedPresetGrammar,document.getElementById("save-preset").onclick=saveCurrentSettingsAsPresetGrammar,document.getElementById("delete-preset").onclick=deleteSelectedPresetGrammar,document.getElementById("copy-preset-json").onclick=copyPresetJSONGrammar,document.getElementById("import-preset").onclick=importPresetFromJSONGrammar,document.getElementById("cancel-check").onclick=cancelCheckGrammar,document.getElementById("filter-select").onchange=function(){return displayResultsGrammar(window.grammarResults)},document.getElementById("select-current-text").onclick=selectCurrentText,document.getElementById("finish-current-fragment").onclick=finishCurrentFragment,document.getElementById("remove-all-markers").onclick=cleanAllTimestampsGrammar,window.abortController=null,window.isLoadingPreset=!1,window.currentSelectionTimestamp=null,window.isGrammarCheckCompleted=!1,window.appliedCorrections=[],window.savedSelection=null,setupSettingsChangeHandlersGrammar()}function selectCurrentText(){return _selectCurrentText.apply(this,arguments)}function _selectCurrentText(){return _selectCurrentText=_asyncToGenerator(_regeneratorRuntime().mark((function e(){return _regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,Word.run(function(){var e=_asyncToGenerator(_regeneratorRuntime().mark((function e(t){var n,r,a,o,c;return _regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=t.document.body,(r=n.search("START_TIMESTAMP",{matchCase:!0})).load("items"),e.next=5,t.sync();case 5:return(a=n.search("END_TIMESTAMP",{matchCase:!0})).load("items"),e.next=9,t.sync();case 9:console.log(r,a),r.items.length>0&&a.items.length>0?(o=r.items[0],c=a.items[0],o.expandTo(c).select(),console.log("Текущий текст выделен"),document.getElementById("kuga_selection-info").textContent="Текст между маркерами выделен"):(console.log("Маркеры не найдены"),document.getElementById("kuga_selection-info").textContent="Маркеры не найдены");case 11:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}());case 3:e.next=9;break;case 5:e.prev=5,e.t0=e.catch(0),console.error("Ошибка при выделении текущего текста:",e.t0),document.getElementById("kuga_selection-info").textContent="Ошибка: ".concat(e.t0.message);case 9:case"end":return e.stop()}}),e,null,[[0,5]])}))),_selectCurrentText.apply(this,arguments)}function markSelectedText(e){return _markSelectedText.apply(this,arguments)}function _markSelectedText(){return _markSelectedText=_asyncToGenerator(_regeneratorRuntime().mark((function e(t){return _regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,Word.run(function(){var e=_asyncToGenerator(_regeneratorRuntime().mark((function e(t){var n,r,a,o,c;return _regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=t.document.getSelection(),currentSelectionTimestamp=Date.now(),r="START_TIMESTAMP",a="END_TIMESTAMP",n.insertText(r,Word.InsertLocation.before),n.insertText(a,Word.InsertLocation.after),o=t.document.body.search(r,{matchCase:!0}).getFirst(),c=t.document.body.search(a,{matchCase:!0}).getFirst(),o.font.size=1,c.font.size=1,o.font.color="white",c.font.color="white",e.next=14,t.sync();case 14:localStorage.setItem("currentSelectionTimestamp",currentSelectionTimestamp);case 15:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}());case 3:e.next=8;break;case 5:e.prev=5,e.t0=e.catch(0),console.error("Ошибка при маркировке выделенного текста:",e.t0);case 8:case"end":return e.stop()}}),e,null,[[0,5]])}))),_markSelectedText.apply(this,arguments)}function getSavedSelectionRange(e){return _getSavedSelectionRange.apply(this,arguments)}function _getSavedSelectionRange(){return(_getSavedSelectionRange=_asyncToGenerator(_regeneratorRuntime().mark((function e(t){var n,r,a,o,c,l;return _regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=t.document.body,r=n.search("START_TIMESTAMP",{matchCase:!0}),a=n.search("END_TIMESTAMP",{matchCase:!0}),t.load(r,"items"),t.load(a,"items"),e.next=9,t.sync();case 9:if(!(r.items.length>0&&a.items.length>0)){e.next=16;break}return o=r.items[0],c=a.items[0],l=o.expandTo(c),e.abrupt("return",l);case 16:return e.abrupt("return",null);case 17:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function finishCurrentFragment(){return _finishCurrentFragment.apply(this,arguments)}function _finishCurrentFragment(){return(_finishCurrentFragment=_asyncToGenerator(_regeneratorRuntime().mark((function e(){return _regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,cleanAllTimestampsGrammar();case 3:if(!settings.removeHighlightOnFinish){e.next=6;break}return e.next=6,removeAllHighlights();case 6:window.appliedCorrections=[],window.grammarResults=[],document.getElementById("grammar-results").innerHTML="",document.getElementById("grammar-history").innerHTML="",document.getElementById("filter-container").style.display="none",document.getElementById("select-current-text").style.display="none",document.getElementById("finish-current-fragment").style.display="none",console.log("Работа с текущим фрагментом завершена"),e.next=19;break;case 16:e.prev=16,e.t0=e.catch(0),console.error("Ошибка при завершении работы с фрагментом:",e.t0);case 19:case"end":return e.stop()}}),e,null,[[0,16]])})))).apply(this,arguments)}function removeAllHighlights(){return _removeAllHighlights.apply(this,arguments)}function _removeAllHighlights(){return _removeAllHighlights=_asyncToGenerator(_regeneratorRuntime().mark((function e(){return _regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,Word.run(function(){var e=_asyncToGenerator(_regeneratorRuntime().mark((function e(t){var n,r,a,o,c,l,s,i,m;return _regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return(n=t.document.body.getRange()).load("text"),e.next=4,t.sync();case 4:r=splitLongText(n.text,250),a=_createForOfIteratorHelper(r),e.prev=6,a.s();case 8:if((o=a.n()).done){e.next=39;break}return c=o.value,(l=n.search(c,{matchCase:!0,matchWholeWord:!1})).load("items"),e.next=14,t.sync();case 14:s=_createForOfIteratorHelper(l.items),e.prev=15,s.s();case 17:if((i=s.n()).done){e.next=27;break}return(m=i.value).font.load("highlightColor"),e.next=22,t.sync();case 22:console.log(m.font.highlightColor),m.font.highlightColor=null,"yellow"!==m.font.highlightColor&&"green"!==m.font.highlightColor&&"lightGreen"!==m.font.highlightColor||(m.font.highlightColor="noHighlight");case 25:e.next=17;break;case 27:e.next=32;break;case 29:e.prev=29,e.t0=e.catch(15),s.e(e.t0);case 32:return e.prev=32,s.f(),e.finish(32);case 35:return e.next=37,t.sync();case 37:e.next=8;break;case 39:e.next=44;break;case 41:e.prev=41,e.t1=e.catch(6),a.e(e.t1);case 44:return e.prev=44,a.f(),e.finish(44);case 47:console.log("Все выделения удалены");case 48:case"end":return e.stop()}}),e,null,[[6,41,44,47],[15,29,32,35]])})));return function(t){return e.apply(this,arguments)}}());case 3:e.next=8;break;case 5:e.prev=5,e.t0=e.catch(0),console.error("Ошибка при удалении выделений:",e.t0);case 8:case"end":return e.stop()}}),e,null,[[0,5]])}))),_removeAllHighlights.apply(this,arguments)}function addToHistory(e){e.resolvedManually=!e.can_edit,appliedCorrections.push(e)}function markAsResolved(e,t,n){var r=t[e];r&&(addToHistory(r),t.splice(e,1),displayResultsGrammar(t),displayCorrectionHistory(),checkIfNoErrorsLeft())}function initializeGrammarModelSelect(){$("#grammar-model").select2({width:"100%",placeholder:"Выберите модель для проверки"}).on("select2:opening",(function(){setTimeout((function(){$(".select2-search__field").get(0).focus()}),0)})).on("change",(function(){var e=$(this).val();localStorage.setItem("grammarModel",e),updatePresetJSONGrammar()})),populateGrammarModelSelect()}function populateGrammarModelSelect(){var e=$("#grammar-model"),t=JSON.parse(localStorage.getItem("models")||"[]");console.log("Loaded models:",t),e.empty();var n=null;t.forEach((function(t,r){var a=new Option(t.name,t.id,!1,!1);e.append(a),n||(n=t.id),"anthropic/claude-3.5-sonnet:beta"===t.id&&(n=t.id)})),console.log("Default model ID:",n);var r=localStorage.getItem("grammarModel");console.log("Saved model:",r),r&&t.some((function(e){return e.id===r}))?(e.val(r).trigger("change"),console.log("Selected saved model: ".concat(r))):n?(e.val(n).trigger("change"),console.log("Selected default model: ".concat(n))):console.log("No models available to select")}function initializePresetSelectGrammar(){populatePresetSelectGrammar(),$("#preset-select").select2({width:"100%",placeholder:"Выберите пресет"}).on("select2:opening",(function(){setTimeout((function(){$(".select2-search__field").get(0).focus()}),0)}))}function populatePresetSelectGrammar(){var e=$("#preset-select");e.empty();var t=new Option("Текущие настройки","current",!1,!1);e.append(t);var n=JSON.parse(localStorage.getItem("grammarPresets")||"[]"),r=localStorage.getItem("lastSelectedPreset")||null;n.forEach((function(t){var n=new Option(t.name,t.name,!1,!1);e.append(n)})),r&&"current"!==r?e.val(r).trigger("change"):e.val("current").trigger("change")}function getBooleanSettingGrammar(e,t){var n=localStorage.getItem(e);return null==n?t:"true"===n}function getNumericSettingGrammar(e,t){var n=localStorage.getItem(e);if(null==n)return t;var r=parseFloat(n);return isNaN(r)?t:r}function loadGrammarSettings(){var e=localStorage.getItem("lastSelectedPreset");if(e&&"current"!==e){var t=JSON.parse(localStorage.getItem("grammarPresets")||"[]").find((function(t){return t.name===e}));if(t)return $("#preset-select").val(t.name).trigger("change"),void loadSelectedPresetGrammar();localStorage.removeItem("lastSelectedPreset"),$("#preset-select").val("current").trigger("change")}else $("#preset-select").val("current").trigger("change");var n=getBooleanSettingGrammar("highlightErrors",!0);document.getElementById("highlight-checkbox").checked=n;var r=getBooleanSettingGrammar("addComments",!1);document.getElementById("comment-checkbox").checked=r;var a=getBooleanSettingGrammar("highlightCorrected",!0);document.getElementById("highlight-corrected-checkbox").checked=a;var o=getBooleanSettingGrammar("checkGrammatical",!1),c=getBooleanSettingGrammar("checkSyntactic",!1),l=getBooleanSettingGrammar("checkStylistic",!0),s=getBooleanSettingGrammar("checkLogical",!0);document.getElementById("check-grammatical").checked=o,document.getElementById("check-syntactic").checked=c,document.getElementById("check-stylistic").checked=l,document.getElementById("check-logical").checked=s;var i=getBooleanSettingGrammar("splitIntoChunks",!1);document.getElementById("split-into-chunks-checkbox").checked=i;var m=getNumericSettingGrammar("chunkSize",8);document.getElementById("chunk-size").value=m;var u=getNumericSettingGrammar("maxChars",2e3);document.getElementById("max-chars").value=u;var d=getNumericSettingGrammar("temperature",.1);document.getElementById("temperature").value=d;var p=getNumericSettingGrammar("maxTokens",4e3);document.getElementById("max-tokens").value=p;var g=getBooleanSettingGrammar("responseFormat",!1);document.getElementById("response-format-checkbox").checked=g;var f=getBooleanSettingGrammar("retryOnError",!0);document.getElementById("retry-on-error-checkbox").checked=f;var h=getNumericSettingGrammar("retryCount",3);document.getElementById("retry-count").value=h;var v=getBooleanSettingGrammar("editPrompts",!0);document.getElementById("edit-prompts-checkbox").checked=v;var y=getBooleanSettingGrammar("removeHighlightOnFinish",!1);document.getElementById("remove-highlight-on-finish-checkbox").checked=y,togglePromptsEditorGrammar()}function saveGrammarSettings(){var e=document.getElementById("highlight-checkbox").checked;localStorage.setItem("highlightErrors",e);var t=document.getElementById("comment-checkbox").checked;localStorage.setItem("addComments",t);var n=document.getElementById("highlight-corrected-checkbox").checked;localStorage.setItem("highlightCorrected",n);var r=document.getElementById("check-grammatical").checked,a=document.getElementById("check-syntactic").checked,o=document.getElementById("check-stylistic").checked,c=document.getElementById("check-logical").checked;localStorage.setItem("checkGrammatical",r),localStorage.setItem("checkSyntactic",a),localStorage.setItem("checkStylistic",o),localStorage.setItem("checkLogical",c);var l=document.getElementById("split-into-chunks-checkbox").checked;localStorage.setItem("splitIntoChunks",l);var s=document.getElementById("chunk-size").value;localStorage.setItem("chunkSize",s);var i=document.getElementById("max-chars").value;localStorage.setItem("maxChars",i);var m=parseFloat(document.getElementById("temperature").value);localStorage.setItem("temperature",m);var u=parseInt(document.getElementById("max-tokens").value,10);localStorage.setItem("maxTokens",u);var d=document.getElementById("response-format-checkbox").checked;localStorage.setItem("responseFormat",d);var p=document.getElementById("retry-on-error-checkbox").checked;localStorage.setItem("retryOnError",p);var g=parseInt(document.getElementById("retry-count").value,10);localStorage.setItem("retryCount",g);var f=document.getElementById("edit-prompts-checkbox").checked;localStorage.setItem("editPrompts",f);var h=document.getElementById("remove-highlight-on-finish-checkbox").checked;localStorage.setItem("removeHighlightOnFinish",h),togglePromptsEditorGrammar()}function resetGrammarSettings(){localStorage.removeItem("highlightErrors"),localStorage.removeItem("addComments"),localStorage.removeItem("highlightCorrected"),localStorage.removeItem("checkGrammatical"),localStorage.removeItem("checkSyntactic"),localStorage.removeItem("checkStylistic"),localStorage.removeItem("checkLogical"),localStorage.removeItem("splitIntoChunks"),localStorage.removeItem("chunkSize"),localStorage.removeItem("maxChars"),localStorage.removeItem("temperature"),localStorage.removeItem("maxTokens"),localStorage.removeItem("responseFormat"),localStorage.removeItem("retryOnError"),localStorage.removeItem("retryCount"),localStorage.removeItem("editPrompts"),localStorage.removeItem("promptRole"),localStorage.removeItem("promptGrammatical"),localStorage.removeItem("promptSyntactic"),localStorage.removeItem("promptStylistic"),localStorage.removeItem("promptLogical"),localStorage.removeItem("promptTextNote"),localStorage.removeItem("grammarModel"),localStorage.removeItem("lastSelectedPreset"),$("#preset-select").val(null).trigger("change"),loadGrammarSettings(),loadGrammarPrompts(),populateGrammarModelSelect(),document.getElementById("preset-json").value="",displayResetMessageGrammar("Настройки сброшены к значениям по умолчанию.")}function displayResetMessageGrammar(e){var t=document.getElementById("reset-message");t.innerHTML='<div class="alert alert-info">'.concat(e,"</div>"),setTimeout((function(){t.innerHTML=""}),3e3)}function togglePromptsEditorGrammar(){var e=document.getElementById("edit-prompts-checkbox").checked;document.getElementById("prompts-accordion").style.display=e?"block":"none"}function loadGrammarPrompts(){var e=getDefaultPromptsGrammar(),t=localStorage.getItem("promptRole")||e.role,n=localStorage.getItem("promptGrammatical")||e["грамматическая"],r=localStorage.getItem("promptSyntactic")||e["синтаксическая"],a=localStorage.getItem("promptStylistic")||e["стилистическая"],o=localStorage.getItem("promptLogical")||e["логическая"],c=localStorage.getItem("promptTextNote")||"";document.getElementById("prompt-role").value=t,document.getElementById("prompt-grammatical").value=n,document.getElementById("prompt-syntactic").value=r,document.getElementById("prompt-stylistic").value=a,document.getElementById("prompt-logical").value=o,document.getElementById("prompt-text-note").value=c}function saveGrammarPrompts(){var e=document.getElementById("prompt-role").value,t=document.getElementById("prompt-grammatical").value,n=document.getElementById("prompt-syntactic").value,r=document.getElementById("prompt-stylistic").value,a=document.getElementById("prompt-logical").value,o=document.getElementById("prompt-text-note").value;localStorage.setItem("promptRole",e),localStorage.setItem("promptGrammatical",t),localStorage.setItem("promptSyntactic",n),localStorage.setItem("promptStylistic",r),localStorage.setItem("promptLogical",a),localStorage.setItem("promptTextNote",o),displayPromptMessageGrammar("Промпты сохранены и будут применены при следующей проверке.")}function resetGrammarPrompts(){var e=getDefaultPromptsGrammar();document.getElementById("prompt-role").value=e.role,document.getElementById("prompt-grammatical").value=e["грамматическая"],document.getElementById("prompt-syntactic").value=e["синтаксическая"],document.getElementById("prompt-stylistic").value=e["стилистическая"],document.getElementById("prompt-logical").value=e["логическая"],document.getElementById("prompt-text-note").value="",saveGrammarPrompts(),displayPromptMessageGrammar("Промпты сброшены к значениям по умолчанию.")}function displayPromptMessageGrammar(e){var t=document.getElementById("prompt-message");t.innerHTML='<div class="alert alert-info">'.concat(e,"</div>"),setTimeout((function(){t.innerHTML=""}),3e3)}function getCurrentSettingsGrammar(){return{highlightErrors:document.getElementById("highlight-checkbox").checked,addComments:document.getElementById("comment-checkbox").checked,highlightCorrected:document.getElementById("highlight-corrected-checkbox").checked,checkGrammatical:document.getElementById("check-grammatical").checked,checkSyntactic:document.getElementById("check-syntactic").checked,checkStylistic:document.getElementById("check-stylistic").checked,checkLogical:document.getElementById("check-logical").checked,splitIntoChunks:document.getElementById("split-into-chunks-checkbox").checked,chunkSize:document.getElementById("chunk-size").value,maxChars:document.getElementById("max-chars").value,temperature:document.getElementById("temperature").value,maxTokens:document.getElementById("max-tokens").value,responseFormat:document.getElementById("response-format-checkbox").checked,retryOnError:document.getElementById("retry-on-error-checkbox").checked,retryCount:document.getElementById("retry-count").value,editPrompts:document.getElementById("edit-prompts-checkbox").checked,removeHighlightOnFinish:document.getElementById("remove-highlight-on-finish-checkbox").checked,grammarModel:$("#grammar-model").val()}}function getCurrentPromptsGrammar(){return{promptRole:document.getElementById("prompt-role").value,promptGrammatical:document.getElementById("prompt-grammatical").value,promptSyntactic:document.getElementById("prompt-syntactic").value,promptStylistic:document.getElementById("prompt-stylistic").value,promptLogical:document.getElementById("prompt-logical").value,promptTextNote:document.getElementById("prompt-text-note").value}}function saveCurrentSettingsAsPresetGrammar(){var e=document.getElementById("preset-name"),t=e.value.trim();if(t)if("current"!==t.toLowerCase()&&"Текущие настройки"!==t){var n={name:t,settings:getCurrentSettingsGrammar(),prompts:getCurrentPromptsGrammar()},r=JSON.parse(localStorage.getItem("grammarPresets")||"[]"),a=r.findIndex((function(e){return e.name===t}));-1!==a?showPresetConfirmationGrammar('Пресет с названием "'.concat(t,'" уже существует. Перезаписать его?'),(function(){r[a]=n,localStorage.setItem("grammarPresets",JSON.stringify(r)),populatePresetSelectGrammar(),$("#preset-select").val(n.name).trigger("change"),localStorage.setItem("lastSelectedPreset",n.name),displayPresetMessageGrammar("Пресет сохранен.","success"),e.value="",updatePresetJSONGrammar()})):(r.push(n),localStorage.setItem("grammarPresets",JSON.stringify(r)),populatePresetSelectGrammar(),$("#preset-select").val(n.name).trigger("change"),localStorage.setItem("lastSelectedPreset",n.name),displayPresetMessageGrammar("Пресет сохранен.","success"),e.value="",updatePresetJSONGrammar())}else displayPresetMessageGrammar('Название пресета не может быть "Текущие настройки".',"danger");else displayPresetMessageGrammar("Название пресета не может быть пустым.","danger")}function showPresetConfirmationGrammar(e,t){var n=document.getElementById("preset-confirmation"),r=document.getElementById("preset-confirmation-message"),a=document.getElementById("preset-confirm-yes"),o=document.getElementById("preset-confirm-no");r.textContent=e,n.style.display="block",a.onclick=null,o.onclick=null,a.onclick=function(){n.style.display="none",t()},o.onclick=function(){n.style.display="none"}}function setupSettingsChangeHandlersGrammar(){function e(){if(!window.isLoadingPreset){saveGrammarSettings(),saveGrammarPrompts();var e,t=getCurrentSettingsGrammar(),n=getCurrentPromptsGrammar(),r=null,a=_createForOfIteratorHelper(JSON.parse(localStorage.getItem("grammarPresets")||"[]"));try{for(a.s();!(e=a.n()).done;){var o=e.value;if(areSettingsEqual(o.settings,t)&&areSettingsEqual(o.prompts,n)){r=o.name;break}}}catch(e){a.e(e)}finally{a.f()}r?($("#preset-select").val(r).trigger("change"),localStorage.setItem("lastSelectedPreset",r)):($("#preset-select").val("current").trigger("change"),localStorage.removeItem("lastSelectedPreset")),updatePresetJSONGrammar()}}["highlight-checkbox","comment-checkbox","highlight-corrected-checkbox","check-grammatical","check-syntactic","check-stylistic","check-logical","split-into-chunks-checkbox","chunk-size","max-chars","temperature","max-tokens","response-format-checkbox","retry-on-error-checkbox","retry-count","edit-prompts-checkbox"].forEach((function(t){var n=document.getElementById(t);n&&n.addEventListener("change",e)})),["prompt-role","prompt-grammatical","prompt-syntactic","prompt-stylistic","prompt-logical","prompt-text-note"].forEach((function(t){var n=document.getElementById(t);n&&n.addEventListener("input",e)})),$("#grammar-model").on("change",e)}function areSettingsEqual(e,t){var n=Object.keys(e).sort(),r=Object.keys(t).sort();if(n.length!==r.length)return!1;for(var a=0;a<n.length;a++){var o=n[a];if(o!==r[a])return!1;var c=e[o],l=t[o];if("object"===_typeof(c)&&"object"===_typeof(l)){if(!areSettingsEqual(c,l))return!1}else if(c!==l)return!1}return!0}function loadSelectedPresetGrammar(){window.isLoadingPreset=!0;var e=$("#preset-select").val();if(e&&"current"!==e){var t=JSON.parse(localStorage.getItem("grammarPresets")||"[]").find((function(t){return t.name===e}));if(t){var n=t.settings;document.getElementById("highlight-checkbox").checked=n.highlightErrors,document.getElementById("comment-checkbox").checked=n.addComments,document.getElementById("highlight-corrected-checkbox").checked=n.highlightCorrected,document.getElementById("check-grammatical").checked=n.checkGrammatical,document.getElementById("check-syntactic").checked=n.checkSyntactic,document.getElementById("check-stylistic").checked=n.checkStylistic,document.getElementById("check-logical").checked=n.checkLogical,document.getElementById("split-into-chunks-checkbox").checked=n.splitIntoChunks,document.getElementById("chunk-size").value=n.chunkSize,document.getElementById("max-chars").value=n.maxChars,document.getElementById("temperature").value=n.temperature,document.getElementById("max-tokens").value=n.maxTokens,document.getElementById("response-format-checkbox").checked=n.responseFormat,document.getElementById("retry-on-error-checkbox").checked=n.retryOnError,document.getElementById("retry-count").value=n.retryCount,document.getElementById("edit-prompts-checkbox").checked=n.editPrompts,document.getElementById("remove-highlight-on-finish-checkbox").checked=n.removeHighlightOnFinish,togglePromptsEditorGrammar();var r=t.prompts;document.getElementById("prompt-role").value=r.promptRole,document.getElementById("prompt-grammatical").value=r.promptGrammatical,document.getElementById("prompt-syntactic").value=r.promptSyntactic,document.getElementById("prompt-stylistic").value=r.promptStylistic,document.getElementById("prompt-logical").value=r.promptLogical,document.getElementById("prompt-text-note").value=r.promptTextNote,n.grammarModel&&($("#grammar-model").val(n.grammarModel).trigger("change"),populateGrammarModelSelect()),localStorage.setItem("lastSelectedPreset",e),saveGrammarSettings(),saveGrammarPrompts(),displayPresetMessageGrammar("Пресет загружен.","success"),updatePresetJSONGrammar(),window.isLoadingPreset=!1}else window.isLoadingPreset=!1}else window.isLoadingPreset=!1}function deleteSelectedPresetGrammar(){var e=$("#preset-select").val();e&&"current"!==e?showPresetConfirmationGrammar('Вы уверены, что хотите удалить пресет "'.concat(e,'"?'),(function(){var t=JSON.parse(localStorage.getItem("grammarPresets")||"[]");t=t.filter((function(t){return t.name!==e})),localStorage.setItem("grammarPresets",JSON.stringify(t)),$("#preset-select").val("current").trigger("change"),localStorage.removeItem("lastSelectedPreset"),populatePresetSelectGrammar(),displayPresetMessageGrammar("Пресет удален.","success"),document.getElementById("preset-json").value=""})):displayPresetMessageGrammar("Нет выбранного пресета для удаления.","danger")}function updatePresetJSONGrammar(){var e=$("#preset-select").val();if(e&&"current"!==e){var t=JSON.parse(localStorage.getItem("grammarPresets")||"[]").find((function(t){return t.name===e}));if(t){var n=JSON.stringify(t,null,2);document.getElementById("preset-json").value=n}else document.getElementById("preset-json").value=""}else document.getElementById("preset-json").value=""}function copyPresetJSONGrammar(){document.getElementById("preset-json").select(),document.execCommand("copy"),displayPresetMessageGrammar("JSON пресета скопирован в буфер обмена.","success")}function displayPresetMessageGrammar(e,t){var n=document.getElementById("preset-message");n.innerHTML='<div class="alert alert-'.concat(t,'">').concat(e,"</div>"),setTimeout((function(){n.innerHTML=""}),5e3)}function getDefaultSettingsGrammar(){return{highlightErrors:!0,addComments:!1,highlightCorrected:!0,checkGrammatical:!1,checkSyntactic:!1,checkStylistic:!0,checkLogical:!0,splitIntoChunks:!1,chunkSize:8,maxChars:2e3,temperature:.1,maxTokens:4e3,responseFormat:!1,retryOnError:!0,retryCount:3,editPrompts:!0,grammarModel:"anthropic/claude-3.5-sonnet:beta",removeHighlightOnFinish:!1}}function getDefaultPromptsGrammar(){return{role:"Ты - опытный редактор и лингвист.","грамматическая":"- Ищи грамматические ошибки, связанные с неправильным употреблением частей речи, склонений и спряжений.","синтаксическая":"- Ищи синтаксические ошибки, связанные с неправильным построением предложений.","стилистическая":"- Ищи стилистические ошибки, связанные с использованием некорректных или неуместных выражений.","логическая":"- Ищи логические ошибки, связанные с противоречиями и несоответствиями в тексте."}}function cleanAllTimestampsGrammar(){return _cleanAllTimestampsGrammar.apply(this,arguments)}function _cleanAllTimestampsGrammar(){return _cleanAllTimestampsGrammar=_asyncToGenerator(_regeneratorRuntime().mark((function e(){return _regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,Word.run(function(){var e=_asyncToGenerator(_regeneratorRuntime().mark((function e(t){var n,r,a;return _regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return a=function(){return(a=_asyncToGenerator(_regeneratorRuntime().mark((function e(r){var a,o,c,l;return _regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return a="".concat(r,"*"),(o=n.search(a,{matchWildcards:!0})).load("items"),e.next=5,t.sync();case 5:c=_createForOfIteratorHelper(o.items);try{for(c.s();!(l=c.n()).done;)l.value.insertText("",Word.InsertLocation.replace)}catch(e){c.e(e)}finally{c.f()}return e.next=9,t.sync();case 9:case"end":return e.stop()}}),e)})))).apply(this,arguments)},r=function(e){return a.apply(this,arguments)},n=t.document.body,e.next=5,r("START_TIMESTAMP");case 5:return e.next=7,r("END_TIMESTAMP");case 7:console.log("Все маркеры timestamp и связанные с ними цифры успешно удалены."),document.getElementById("message").innerHTML='<div class="alert alert-success">Все маркеры удалены</div>',setTimeout((function(){document.getElementById("message").innerHTML=""}),3e3);case 10:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}());case 3:e.next=9;break;case 5:e.prev=5,e.t0=e.catch(0),console.error("Ошибка при удалении маркеров:",e.t0),document.getElementById("message").innerHTML='<div class="alert alert-danger">Ошибка: '.concat(e.t0.message,"</div>");case 9:case"end":return e.stop()}}),e,null,[[0,5]])}))),_cleanAllTimestampsGrammar.apply(this,arguments)}function checkGrammarGrammar(){return _checkGrammarGrammar.apply(this,arguments)}function _checkGrammarGrammar(){return(_checkGrammarGrammar=_asyncToGenerator(_regeneratorRuntime().mark((function e(){var t,n,r,a,o,c,l,s,i,m,u,d,p,g;return _regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,cleanAllTimestampsGrammar();case 3:return e.next=5,createSelectionMarkersGrammar();case 5:if(t=e.sent,n=document.getElementById("split-into-chunks-checkbox").checked,r=parseInt(document.getElementById("chunk-size").value,10)||5,document.getElementById("grammar-results").innerHTML="",resetProgressBarGrammar(),window.appliedCorrections=[],displayCorrectionHistory(),showLoadingGrammar(!0,n),document.getElementById("filter-container").style.display="none",window.abortController=new AbortController,a=parseInt(document.getElementById("max-chars").value,10)||100,!(t.text.length>0)){e.next=60;break}if(!(!n&&a>0&&t.text.length>a)){e.next=23;break}return document.getElementById("grammar-results").innerHTML='<p class="text-warning">Выделенный текст слишком длинный ('.concat(t.text.length," символов). Пожалуйста, выделите меньше ").concat(a," символов или измените ограничение в настройках.</p>"),showLoadingGrammar(!1),document.getElementById("select-current-text").style.display="inline-block",document.getElementById("finish-current-fragment").style.display="inline-block",e.abrupt("return");case 23:if(o=$("#grammar-model").val(),c=[],!n){e.next=46;break}l=splitTextIntoChunksGrammar(t.text,r),s=l.length,i=document.getElementById("progress-bar"),(m=document.getElementById("progress-text")).innerText="Обработано 0 из ".concat(s," чанков"),u=0;case 32:if(!(u<l.length)){e.next=44;break}return e.next=35,analyzeTextWithRetryGrammar(l[u],o,window.abortController.signal);case 35:d=e.sent,c=c.concat(d),p=Math.round((u+1)/s*100),i.style.width="".concat(p,"%"),i.innerText="".concat(p,"%"),m.innerText="Обработано ".concat(u+1," из ").concat(s," чанков");case 41:u++,e.next=32;break;case 44:e.next=50;break;case 46:return e.next=48,analyzeTextWithRetryGrammar(t.text,o,window.abortController.signal);case 48:g=e.sent,c=c.concat(g);case 50:return window.grammarResults=c,displayResultsGrammar(c),e.next=54,highlightTextGrammar(c,t);case 54:c.length>0&&(document.getElementById("filter-container").style.display="block"),isGrammarCheckCompleted=!0,document.getElementById("select-current-text").style.display="inline-block",document.getElementById("finish-current-fragment").style.display="inline-block",e.next=63;break;case 60:console.log("Текст не выделен"),document.getElementById("grammar-results").innerHTML='<p class="text-warning">Пожалуйста, выделите текст для проверки.</p>',showLoadingGrammar(!1);case 63:e.next=68;break;case 65:e.prev=65,e.t0=e.catch(0),"AbortError"===e.t0.name?(console.log("Проверка отменена пользователем."),document.getElementById("grammar-results").innerHTML='<p class="text-info">Проверка отменена.</p>'):(console.error("Error in checkGrammarGrammar:",e.t0),document.getElementById("grammar-results").innerHTML='<p class="text-danger">Произошла ошибка при проверке. Пожалуйста, попробуйте еще раз.</p>');case 68:return e.prev=68,showLoadingGrammar(!1),window.abortController=null,e.finish(68);case 72:case"end":return e.stop()}}),e,null,[[0,65,68,72]])})))).apply(this,arguments)}function cancelCheckGrammar(){return _cancelCheckGrammar.apply(this,arguments)}function _cancelCheckGrammar(){return(_cancelCheckGrammar=_asyncToGenerator(_regeneratorRuntime().mark((function e(){return _regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!window.abortController){e.next=8;break}return window.abortController.abort(),showLoadingGrammar(!1),window.abortController=null,e.next=6,resetProgressBarGrammar();case 6:return e.next=8,cleanAllTimestampsGrammar();case 8:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function resetProgressBarGrammar(){var e=document.getElementById("progress-bar"),t=document.getElementById("progress-text");e&&(e.style.width="0%",e.innerText="0%"),t&&(t.innerText="Обработано 0 из 0 чанков")}function splitTextIntoChunksGrammar(e,t){for(var n=e.match(/[^.!?]+[.!?]+(\s|$)|[^.!?]+$/g)||[e],r=[],a=0;a<n.length;a+=t){var o=n.slice(a,a+t).join(" ").trim();r.push(o)}return r}function analyzeTextWithRetryGrammar(e,t,n){return _analyzeTextWithRetryGrammar.apply(this,arguments)}function _analyzeTextWithRetryGrammar(){return(_analyzeTextWithRetryGrammar=_asyncToGenerator(_regeneratorRuntime().mark((function e(t,n,r){var a,o,c,l,s;return _regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:a=document.getElementById("retry-on-error-checkbox").checked,o=parseInt(document.getElementById("retry-count").value,10)||1,c=0,l=null;case 4:if(!(c<o)){e.next=23;break}return e.prev=5,e.next=8,analyzeTextGrammar(t,n,r);case 8:return s=e.sent,e.abrupt("return",s);case 12:if(e.prev=12,e.t0=e.catch(5),l=e.t0,c++,a&&!(c>=o)){e.next=20;break}throw e.t0;case 20:console.warn("Попытка ".concat(c," не удалась. Повторяем..."));case 21:e.next=4;break;case 23:throw l;case 24:case"end":return e.stop()}}),e,null,[[5,12]])})))).apply(this,arguments)}function analyzeTextGrammar(e,t,n){return _analyzeTextGrammar.apply(this,arguments)}function _analyzeTextGrammar(){return(_analyzeTextGrammar=_asyncToGenerator(_regeneratorRuntime().mark((function e(t,n,r){var a,o,c,l,s,i,m,u,d,p,g,f,h,v,y,b,x;return _regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(a=localStorage.getItem("apiKey"),o=[],c={},l={},s=getDefaultPromptsGrammar(),document.getElementById("check-grammatical").checked&&(o.push("грамматические"),c["грамматическая"]=!0,l["грамматическая"]=document.getElementById("prompt-grammatical").value||s["грамматическая"]),document.getElementById("check-syntactic").checked&&(o.push("синтаксические"),c["синтаксическая"]=!0,l["синтаксическая"]=document.getElementById("prompt-syntactic").value||s["синтаксическая"]),document.getElementById("check-stylistic").checked&&(o.push("стилистические"),c["стилистическая"]=!0,l["стилистическая"]=document.getElementById("prompt-stylistic").value||s["стилистическая"]),document.getElementById("check-logical").checked&&(o.push("логические"),c["логическая"]=!0,l["логическая"]=document.getElementById("prompt-logical").value||s["логическая"]),0!==o.length){e.next=11;break}throw new Error("Не выбраны типы проверок");case 11:return i=o.join(", "),m=document.getElementById("prompt-text-note").value||"",u=document.getElementById("prompt-role").value||s.role,d=parseFloat(document.getElementById("temperature").value)||.1,p=parseInt(document.getElementById("max-tokens").value,10)||8e3,g=document.getElementById("response-format-checkbox").checked,f="".concat(u," Твоя задача - проанализировать предоставленный текст и найти только следующие типы ошибок: ").concat(i,".\n\n").concat(m?"Дополнительная информация о тексте: ".concat(m,"\n"):"","\n\n").concat(Object.keys(l).map((function(e){return'Инструкция для "'.concat(e,'" ошибок:\n').concat(l[e],"\n")})).join("\n"),'\n\nТвои инструкции:\n\n- Анализируй текст на уровне предложений и отдельных слов.\n\n- Ищи только указанные типы ошибок.\n\n- Игнорируй другие типы ошибок.\n\n- Если исправление можно внести напрямую в текст и оно не добавляет новой информации, установи "can_edit": true и предоставь поле "text_to_change" с исправленным текстом.\n\n- Если исправление невозможно внести напрямую в текст или добавляет новую информацию, установи "can_edit": false, предоставь поле "suggestion" с рекомендациями по улучшению и добавь поле "example" с примером улучшенного текста.\n\n- Возвращай результат в формате JSON-массива, где каждый элемент содержит:\n 1. "text": проблемный фрагмент текста (слово, фраза или предложение).\n 2. "comment": объяснение проблемы.\n 3. "errorType": тип ошибки (').concat(Object.keys(c).map((function(e){return'"'.concat(e,'"')})).join(", "),').\n 4. "can_edit": true или false (указывает, можно ли внести исправление напрямую в текст).\n 5. Если "can_edit" равно true, добавь поле "text_to_change" с исправленным текстом.\n 6. Если "can_edit" равно false, добавь поле "suggestion" с рекомендациями по улучшению и поле "example" с примером улучшенного текста.\n\nПример ответа:\n\n').concat(getExampleErrorsGrammar(Object.keys(c)),'\n\nВажно:\n\n- Возвращай *только* JSON-массив без дополнительных пояснений или предисловий.\n\n- Если ошибок нет, верни пустой массив: [];\n\n- Убедись, что все строки в JSON корректно экранированы. В частности, любые двойные кавычки внутри значений строк должны быть экранированы обратным слешем (\\"").\n'),h='Пожалуйста, проанализируй следующий текст:\n\n"'.concat(t,'";\n'),e.prev=19,v={model:n,messages:[{role:"system",content:f},{role:"user",content:h}],temperature:d,max_tokens:p},g&&(v.response_format={type:"json_object"}),e.next=24,fetch("https://openrouter.ai/api/v1/chat/completions",{method:"POST",headers:{Authorization:"Bearer ".concat(a),"Content-Type":"application/json","HTTP-Referer":"https://www.office.com","X-Title":"Word Grammar Checker"},body:JSON.stringify(v),signal:r});case 24:if((y=e.sent).ok){e.next=27;break}throw new Error("HTTP error! status: ".concat(y.status));case 27:return e.next=29,y.json();case 29:return b=e.sent,console.log("Ответ от сервера:",b.choices[0].message.content.trim()),x=safeJsonParseGrammar(b.choices[0].message.content.trim()),e.abrupt("return",x);case 35:if(e.prev=35,e.t0=e.catch(19),"AbortError"!==e.t0.name){e.next=42;break}throw console.log("Запрос был отменен."),e.t0;case 42:throw console.error("Error in analyzeTextGrammar:",e.t0),e.t0;case 44:case"end":return e.stop()}}),e,null,[[19,35]])})))).apply(this,arguments)}function safeJsonParseGrammar(e){return _safeJsonParseGrammar.apply(this,arguments)}function _safeJsonParseGrammar(){return(_safeJsonParseGrammar=_asyncToGenerator(_regeneratorRuntime().mark((function e(t){var n,r,a,o,c;return _regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.abrupt("return",JSON.parse(t));case 4:return e.prev=4,e.t0=e.catch(0),console.warn("Первая попытка парсинга не удалась:",e.t0),n=localStorage.getItem("apiKey"),r='\nИсправь этот JSON и верни только исправленную версию. Следуй этим правилам:\n1. Все строковые значения должны быть в двойных кавычках.\n2. Все ключи объектов должны быть в двойных кавычках.\n3. Внутри строковых значений двойные кавычки должны быть экранированы обратным слешем.\n4. Не должно быть лишних запятых в конце массивов или объектов.\n5. Верни только исправленный JSON, без дополнительных комментариев.\n\nПример входных данных:\n[\n {\n text: \'Пример текста с "кавычками"\',\n errorType: \'синтаксическая\',\n can_edit: true,\n },\n]\n\nПример ожидаемого вывода:\n[\n {\n "text": "Пример текста с \\"кавычками\\"",\n "errorType": "синтаксическая",\n "can_edit": true\n }\n]\n\nИсправь следующий JSON:\n'.concat(t,"\n"),e.next=11,fetch("https://openrouter.ai/api/v1/chat/completions",{method:"POST",headers:{Authorization:"Bearer ".concat(n),"Content-Type":"application/json"},body:JSON.stringify({model:"openai/gpt-4o-mini",messages:[{role:"user",content:r}],max_tokens:16e3,temperature:.2})});case 11:return a=e.sent,e.next=14,a.json();case 14:return o=e.sent,c=o.choices[0].message.content.trim(),e.prev=16,e.abrupt("return",JSON.parse(c));case 20:throw e.prev=20,e.t1=e.catch(16),console.error("Не удалось распарсить JSON даже после исправления GPT:",e.t1),e.t1;case 24:case"end":return e.stop()}}),e,null,[[0,4],[16,20]])})))).apply(this,arguments)}function getExampleErrorsGrammar(e){var t=[];return e.includes("грамматическая")&&(t.push('{\n "text": "Она сказал",\n "comment": "Неправильное согласование рода в глаголе.",\n "errorType": "грамматическая",\n "can_edit": true,\n "text_to_change": "Она сказала"\n}'),t.push('{\n "text": "Я иду в школу завтра.",\n "comment": "Неправильное использование времени глагола.",\n "errorType": "грамматическая",\n "can_edit": true,\n "text_to_change": "Я пойду в школу завтра."\n}'),t.push('{\n "text": "У него есть две собаки и три кошка.",\n "comment": "Неправильное согласование числительного и существительного.",\n "errorType": "грамматическая",\n "can_edit": true,\n "text_to_change": "У него есть две собаки и три кошки."\n}'),t.push('{\n "text": "Бегу по дороге быстро.",\n "comment": "Отсутствует подлежащее в предложении.",\n "errorType": "грамматическая",\n "can_edit": false,\n "suggestion": "Добавить подлежащее для ясности.",\n "example": "Я бегу по дороге быстро."\n}'),t.push('{\n "text": "Придя домой, было тихо.",\n "comment": "Неправильное употребление деепричастного оборота без подлежащего.",\n "errorType": "грамматическая",\n "can_edit": false,\n "suggestion": "Переписать предложение, указав, кто пришел домой.",\n "example": "Когда я пришёл домой, было тихо."\n}'),t.push('{\n "text": "Книга, которую я читаю интересная.",\n "comment": "Отсутствует запятая перед придаточным предложением.",\n "errorType": "грамматическая",\n "can_edit": false,\n "suggestion": "Добавить запятую для правильной пунктуации.",\n "example": "Книга, которую я читаю, интересная."\n}')),e.includes("синтаксическая")&&(t.push('{\n "text": "Я люблю читать книги смотреть фильмы.",\n "comment": "Отсутствует союз между однородными членами предложения.",\n "errorType": "синтаксическая",\n "can_edit": true,\n "text_to_change": "Я люблю читать книги и смотреть фильмы."\n}'),t.push('{\n "text": "Она сказала что придет позже.",\n "comment": "Отсутствует запятая перед придаточным предложением.",\n "errorType": "синтаксическая",\n "can_edit": true,\n "text_to_change": "Она сказала, что придет позже."\n}'),t.push('{\n "text": "После дождя дорога была скользкая она упала.",\n "comment": "Отсутствует разделение на предложения или союз.",\n "errorType": "синтаксическая",\n "can_edit": true,\n "text_to_change": "После дождя дорога была скользкая, и она упала."\n}'),t.push('{\n "text": "Мы приносим свои искренние извинения всем,кого могли забыть упомянуть здесь.",\n "comment": "Синтаксическая ошибка: отсутствует пробел после запятой.",\n "errorType": "синтаксическая",\n "can_edit": false,\n "suggestion": "Добавить пробел после запятой.",\n "example": "Мы приносим свои искренние извинения всем, кого могли забыть упомянуть здесь."\n}'),t.push('{\n "text": "Из-за того что шел дождь.",\n "comment": "Неполное предложение: отсутствует главная часть.",\n "errorType": "синтаксическая",\n "can_edit": false,\n "suggestion": "Добавить главную часть предложения для завершенности.",\n "example": "Из-за того что шел дождь, мы остались дома."\n}'),t.push('{\n "text": "Планируя поездку, была куплена карта.",\n "comment": "Неясно, кто планировал поездку; неправильно построен деепричастный оборот.",\n "errorType": "синтаксическая",\n "can_edit": false,\n "suggestion": "Переписать предложение для ясности.",\n "example": "Планируя поездку, мы купили карту."\n}')),e.includes("стилистическая")&&(t.push('{\n "text": "Он встал рано утром, чтобы пойти на работку.",\n "comment": "Нежелательное использование уменьшительно-ласкательного суффикса.",\n "errorType": "стилистическая",\n "can_edit": true,\n "text_to_change": "Он встал рано утром, чтобы пойти на работу."\n}'),t.push('{\n "text": "Она сказала ему, что это офигенно.",\n "comment": "Нежелательное использование разговорного выражения.",\n "errorType": "стилистическая",\n "can_edit": true,\n "text_to_change": "Она сказала ему, что это великолепно."\n}'),t.push('{\n "text": "В результате он потерпел фиаско.",\n "comment": "Стилистическая неточность: использование заимствованного слова, которое может быть заменено более подходящим.",\n "errorType": "стилистическая",\n "can_edit": true,\n "text_to_change": "В результате он потерпел неудачу."\n}'),t.push('{\n "text": "Нам повезло, что мы получили отличную поддержку.",\n "comment": "Стилистическая неточность: слово \'повезло\' может преуменьшать усилия тех, кто оказал поддержку.",\n "errorType": "стилистическая",\n "can_edit": false,\n "suggestion": "Заменить выражение на более признательное.",\n "example": "Мы благодарны за отличную поддержку, которую получили."\n}'),t.push('{\n "text": "Доклад был ничего так, слушатели остались довольны.",\n "comment": "Неофициальный стиль изложения в формальном контексте.",\n "errorType": "стилистическая",\n "can_edit": false,\n "suggestion": "Исправить выражение на более формальное.",\n "example": "Доклад был информативным, и слушатели остались довольны."\n}'),t.push('{\n "text": "Он сделал это быстрее всех, потому что он крутой.",\n "comment": "Использование жаргонного слова в официальном тексте.",\n "errorType": "стилистическая",\n "can_edit": false,\n "suggestion": "Заменить жаргонное слово на более подходящее.",\n "example": "Он сделал это быстрее всех благодаря своим навыкам."\n}')),e.includes("логическая")&&(t.push('{\n "text": "Она родилась в 2000 году и в 1990 году окончила университет.",\n "comment": "Логическая ошибка: невозможно окончить университет до рождения.",\n "errorType": "логическая",\n "can_edit": true,\n "text_to_change": "Она родилась в 1970 году и в 1990 году окончила университет."\n}'),t.push('{\n "text": "Он съел обед перед завтраком.",\n "comment": "Логическая несостыковка во времени приема пищи.",\n "errorType": "логическая",\n "can_edit": true,\n "text_to_change": "Он съел завтрак перед обедом."\n}'),t.push('{\n "text": "Вода замерзает при 100 градусах Цельсия.",\n "comment": "Неправильная температура замерзания воды.",\n "errorType": "логическая",\n "can_edit": true,\n "text_to_change": "Вода замерзает при 0 градусах Цельсия."\n}'),t.push('{\n "text": "Этот квадрат имеет три стороны.",\n "comment": "Логическое противоречие: квадрат не может иметь три стороны.",\n "errorType": "логическая",\n "can_edit": false,\n "suggestion": "Уточнить форму или количество сторон фигуры.",\n "example": "Этот треугольник имеет три стороны."\n}'),t.push('{\n "text": "Он продал больше книг, чем любой другой автор, включая себя.",\n "comment": "Логическая ошибка: некорректное сравнение с самим собой.",\n "errorType": "логическая",\n "can_edit": false,\n "suggestion": "Пересмотреть формулировку сравнения.",\n "example": "Он продал больше книг, чем любой другой автор."\n}'),t.push('{\n "text": "Она всегда говорит правду, но ей нельзя доверять.",\n "comment": "Логическое противоречие в характеристике.",\n "errorType": "логическая",\n "can_edit": false,\n "suggestion": "Уточнить описание для устранения противоречия.",\n "example": "Она часто обманывает, поэтому ей нельзя доверять."\n}')),"[\n ".concat(t.join(",\n "),"\n]")}function displayResultsGrammar(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=document.getElementById("grammar-results");if(n.innerHTML="",0!==e.length){0===t&&(t=window.pageYOffset);var r=document.getElementById("filter-select").value,a={};if(e.forEach((function(e,t){var n=e.errorType||"Другие";a[n]||(a[n]=[]),e.index=t,("can_edit"!==r||e.can_edit)&&("cannot_edit"===r&&e.can_edit||a[n].push(e))})),Object.keys(a).forEach((function(e){0===a[e].length&&delete a[e]})),0!==Object.keys(a).length){var o="grammarAccordion",c='<div class="accordion" id="'.concat(o,'">');Object.keys(a).forEach((function(e,t){var n=a[e],r="collapse".concat(t);c+='\n <div class="card">\n <div class="card-header" id="heading'.concat(t,'">\n <h2 class="mb-0">\n <button class="btn btn-link" type="button" data-toggle="collapse" data-target="#').concat(r,'" aria-expanded="true" aria-controls="').concat(r,'">\n ').concat(e.charAt(0).toUpperCase()+e.slice(1),' ошибки (<span class="error-count">').concat(n.length,'</span>)\n </button>\n </h2>\n </div>\n <div id="').concat(r,'" class="collapse show" aria-labelledby="heading').concat(t,'" data-parent="#').concat(o,'">\n <div class="card-body">\n ').concat(n.map((function(t,r){return'\n <div class="mb-3 p-3 border error-card '.concat(r<n.length-1?"border-bottom":"",'" data-error-index="').concat(t.index,'" data-error-type="').concat(e,'">\n <p><strong>Проблемный текст:</strong> <span class="text-danger">').concat(t.text,"</span></p>\n <p><strong>Комментарий:</strong> ").concat(t.comment,"</p>\n ").concat(t.can_edit?'<p><strong>Исправление:</strong> <span class="text-success">'.concat(t.text_to_change,'</span></p>\n <div class="btn-group" role="group">\n <button class="btn btn-sm btn-primary apply-suggestion" data-error-index="').concat(t.index,'">Применить исправление</button>\n <button class="btn btn-sm btn-secondary mark-as-resolved" data-error-index="').concat(t.index,'">Отметить как решенную</button>\n </div>'):"<p><strong>Рекомендации:</strong> ".concat(t.originalComment||t.suggestion,'</p>\n <p><strong>Пример улучшенного текста:</strong> <span class="text-info">').concat(t.example||"","</span></p>\n ").concat(t.originalComment?'<p class="text-warning"><em>Исправление невозможно, т.к. исходный текст был изменен другим исправлением.</em></p>':"<p><em>Исправление невозможно применить напрямую.</em></p>",'\n <button class="btn btn-sm btn-secondary mark-as-resolved" data-error-index="').concat(t.index,'">Отметить как решенную</button>'),"\n </div>\n ")})).join(""),"\n </div>\n </div>\n </div>\n ")})),c+="</div>",n.innerHTML=c;var l,s=_createForOfIteratorHelper(document.getElementsByClassName("apply-suggestion"));try{for(s.s();!(l=s.n()).done;)l.value.addEventListener("click",(function(){applySuggestion(parseInt(this.dataset.errorIndex,10),e,this)}))}catch(e){s.e(e)}finally{s.f()}var i,m=_createForOfIteratorHelper(document.getElementsByClassName("mark-as-resolved"));try{for(m.s();!(i=m.n()).done;)i.value.addEventListener("click",(function(){markAsResolved(parseInt(this.dataset.errorIndex,10),e,this)}))}catch(e){m.e(e)}finally{m.f()}var u=document.querySelector(".error-card:last-child");u&&u.scrollIntoView({behavior:"smooth",block:"center"})}else n.innerHTML='<p class="text-info">Нет ошибок для отображения по выбранному фильтру.</p>'}else n.innerHTML='<p class="text-success">Ошибок не найдено. Текст выглядит хорошо!</p>'}function highlightTextGrammar(e,t){return _highlightTextGrammar.apply(this,arguments)}function _highlightTextGrammar(){return _highlightTextGrammar=_asyncToGenerator(_regeneratorRuntime().mark((function e(t,n){var r,a;return _regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(r=document.getElementById("highlight-checkbox").checked,a=document.getElementById("comment-checkbox").checked,r||a){e.next=4;break}return e.abrupt("return");case 4:return e.next=6,Word.run(function(){var e=_asyncToGenerator(_regeneratorRuntime().mark((function e(o){var c,l,s,i,m,u,d,p,g,f,h,v,y;return _regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,getSavedSelectionRange(o,n.timestamp);case 2:if(c=e.sent){e.next=6;break}return console.error("Не удалось найти выделенный текст"),e.abrupt("return");case 6:l=_createForOfIteratorHelper(t),e.prev=7,l.s();case 9:if((s=l.n()).done){e.next=44;break}i=s.value,e.prev=11,m=splitLongText(i.text,250),u=_createForOfIteratorHelper(m),e.prev=14,u.s();case 16:if((d=u.n()).done){e.next=25;break}return p=d.value,(g=c.search(p,{matchCase:!0,matchWholeWord:!1})).load("items"),e.next=22,o.sync();case 22:if(g.items.length>0){f=_createForOfIteratorHelper(g.items);try{for(f.s();!(h=f.n()).done;)v=h.value,r&&(v.font.highlightColor="yellow"),a&&p===m[0]&&(y="Тип ошибки: ".concat(i.errorType,"\nКомментарий: ").concat(i.comment),i.can_edit?y+="\nИсправление: ".concat(i.text_to_change):y+="\nРекомендации: ".concat(i.suggestion,"\nПример улучшенного текста: ").concat(i.example),v.insertComment(y))}catch(e){f.e(e)}finally{f.f()}}case 23:e.next=16;break;case 25:e.next=30;break;case 27:e.prev=27,e.t0=e.catch(14),u.e(e.t0);case 30:return e.prev=30,u.f(),e.finish(30);case 33:return e.next=35,o.sync();case 35:e.next=40;break;case 37:e.prev=37,e.t1=e.catch(11),console.log("Error processing result: ".concat(i.text),e.t1);case 40:return e.next=42,new Promise((function(e){return setTimeout(e,100)}));case 42:e.next=9;break;case 44:e.next=49;break;case 46:e.prev=46,e.t2=e.catch(7),l.e(e.t2);case 49:return e.prev=49,l.f(),e.finish(49);case 52:case"end":return e.stop()}}),e,null,[[7,46,49,52],[11,37],[14,27,30,33]])})));return function(t){return e.apply(this,arguments)}}()).catch((function(e){console.log("Error in highlightTextGrammar:",e)}));case 6:case"end":return e.stop()}}),e)}))),_highlightTextGrammar.apply(this,arguments)}function createSelectionMarkersGrammar(){return _createSelectionMarkersGrammar.apply(this,arguments)}function _createSelectionMarkersGrammar(){return _createSelectionMarkersGrammar=_asyncToGenerator(_regeneratorRuntime().mark((function e(){return _regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,Word.run(function(){var e=_asyncToGenerator(_regeneratorRuntime().mark((function e(t){var n,r,a,o,c,l;return _regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return(n=t.document.getSelection()).load("text"),e.next=4,t.sync();case 4:if(0!==(r=n.text.trim()).length){e.next=7;break}throw new Error("Нет выделенного текста");case 7:return a="START_TIMESTAMP",o="END_TIMESTAMP",n.insertText(a,Word.InsertLocation.before),n.insertText(o,Word.InsertLocation.after),c=t.document.body.search(a,{matchCase:!0}).getFirst(),l=t.document.body.search(o,{matchCase:!0}).getFirst(),c.font.size=1,l.font.size=1,c.font.color="white",l.font.color="white",e.next=19,t.sync();case 19:return e.abrupt("return",{text:r});case 20:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}());case 3:return e.abrupt("return",e.sent);case 6:throw e.prev=6,e.t0=e.catch(0),console.error("Ошибка при создании маркеров выделения:",e.t0),e.t0;case 10:case"end":return e.stop()}}),e,null,[[0,6]])}))),_createSelectionMarkersGrammar.apply(this,arguments)}function splitLongText(e,t){var n,r=[],a="",o=_createForOfIteratorHelper(e.split(" "));try{for(o.s();!(n=o.n()).done;){var c=n.value;(a+" "+c).length>t&&a.length>0&&(r.push(a.trim()),a=""),a+=(a?" ":"")+c}}catch(e){o.e(e)}finally{o.f()}return a.length>0&&r.push(a.trim()),r}function showLoadingGrammar(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=document.getElementById("loading"),r=document.getElementById("check-grammar"),a=document.getElementById("progress-container"),o=document.getElementById("spinner");e?(n.style.display="block",r.disabled=!0,t?(a.style.display="block",o.style.display="none"):(a.style.display="none",o.style.display="block")):(n.style.display="none",r.disabled=!1,a.style.display="none",o.style.display="none")}function loadLoggerPrompts(){var e=getDefaultLoggerPromptsGrammar(),t=localStorage.getItem("loggerPromptMinimal")||e.minimal,n=localStorage.getItem("loggerPromptMedium")||e.medium,r=localStorage.getItem("loggerPromptMaximal")||e.maximal,a=localStorage.getItem("loggerPromptCustom")||"";document.getElementById("fuuga_logger-prompt-minimal").value=t,document.getElementById("fuuga_logger-prompt-medium").value=n,document.getElementById("fuuga_logger-prompt-maximal").value=r,document.getElementById("fuuga_custom-logger-prompt").value=a}function saveLoggerPrompts(){var e=document.getElementById("fuuga_logger-prompt-minimal").value,t=document.getElementById("fuuga_logger-prompt-medium").value,n=document.getElementById("fuuga_logger-prompt-maximal").value,r=document.getElementById("fuuga_custom-logger-prompt").value;localStorage.setItem("loggerPromptMinimal",e),localStorage.setItem("loggerPromptMedium",t),localStorage.setItem("loggerPromptMaximal",n),localStorage.setItem("loggerPromptCustom",r),displayPromptMessage("Промпты логера сохранены.")}function getDefaultLoggerPromptsGrammar(){return{minimal:"Опишите кратко изменения между текстом до и после обработки.",medium:"Опишите изменения между текстом до и после обработки, упомяните ключевые изменения.",maximal:"Детально опишите все изменения между текстом до и после обработки, включая использование промпта.",custom:""}}function resetLoggerPrompts(){var e=getDefaultLoggerPromptsGrammar();document.getElementById("fuuga_logger-prompt-minimal").value=e.minimal,document.getElementById("fuuga_logger-prompt-medium").value=e.medium,document.getElementById("fuuga_logger-prompt-maximal").value=e.maximal,document.getElementById("fuuga_custom-logger-prompt").value=e.custom,saveLoggerPrompts(),displayPromptMessage("Промпты логера сброшены к значениям по умолчанию.")}function displayPromptMessage(e){var t=document.getElementById("fuuga_logger-prompt-message");t.innerHTML='<div class="alert alert-info">'.concat(e,"</div>"),setTimeout((function(){t.innerHTML=""}),3e3)}function saveHomeSettingsGrammar(){var e=JSON.parse(localStorage.getItem("mainSettings")||"{}");e.applyFormatting=document.getElementById("fuuga_apply-formatting").checked,e.splitIntoChunks=document.getElementById("fuuga_split-into-chunks-checkbox").checked,e.chunkSize=document.getElementById("fuuga_chunk-size").value,e.maxChars=document.getElementById("fuuga_max-chars").value,e.temperature=document.getElementById("fuuga_temperature").value,e.maxTokens=document.getElementById("fuuga_max-tokens").value,e.formattingTemperature=document.getElementById("fuuga_formatting-temperature").value,e.formattingMaxTokens=document.getElementById("fuuga_formatting-max-tokens").value,e.formattingModel=$("#fuuga_formatting-model").val(),e.enableLogger=document.getElementById("fuuga_enable-logger").checked,e.loggerLevel=document.getElementById("fuuga_logger-level").value,e.loggerTemperature=document.getElementById("fuuga_logger-temperature").value,e.loggerMaxTokens=document.getElementById("fuuga_logger-max-tokens").value,e.loggerModel=$("#fuuga_logger-model").val();var t=$("#fuuga_prompt-select").val();e.lastSelectedPromptIndex=t||-1;var n=$("#fuuga_multiprompt-select").val();e.lastSelectedMultipromptIndices=n||[],localStorage.setItem("mainSettings",JSON.stringify(e)),saveLoggerPrompts()}function initializePresetSelectHome(){populatePresetSelectHome(),$("#fuuga_preset-select").select2({width:"100%",placeholder:"Выберите пресет"}).on("select2:opening",(function(){setTimeout((function(){$(".select2-search__field").get(0).focus()}),0)}))}function populatePresetSelectHome(){var e=$("#fuuga_preset-select");e.empty();var t=new Option("Текущие настройки","current",!1,!1);e.append(t);var n=JSON.parse(localStorage.getItem("homePresets")||"[]"),r=localStorage.getItem("lastSelectedPresetHome")||null;n.forEach((function(t){var n=new Option(t.name,t.name,!1,!1);e.append(n)})),r&&"current"!==r?e.val(r).trigger("change"):e.val("current").trigger("change")}function getCurrentSettingsHome(){return{settings:JSON.parse(localStorage.getItem("mainSettings")||"{}"),prompts:{loggerPromptMinimal:document.getElementById("fuuga_logger-prompt-minimal").value,loggerPromptMedium:document.getElementById("fuuga_logger-prompt-medium").value,loggerPromptMaximal:document.getElementById("fuuga_logger-prompt-maximal").value,loggerPromptCustom:document.getElementById("fuuga_custom-logger-prompt").value}}}function saveCurrentSettingsAsPresetHome(){var e=document.getElementById("fuuga_preset-name"),t=e.value.trim();if(t)if("current"!==t.toLowerCase()&&"Текущие настройки"!==t){var n=getCurrentSettingsHome(),r={name:t,settings:n.settings,prompts:n.prompts},a=JSON.parse(localStorage.getItem("homePresets")||"[]"),o=a.findIndex((function(e){return e.name===t}));-1!==o?showPresetConfirmationHome('Пресет с названием "'.concat(t,'" уже существует. Перезаписать его?'),(function(){a[o]=r,localStorage.setItem("homePresets",JSON.stringify(a)),populatePresetSelectHome(),$("#fuuga_preset-select").val(r.name).trigger("change"),localStorage.setItem("lastSelectedPresetHome",r.name),displayPresetMessageHome("Пресет сохранен.","success"),e.value="",updatePresetJSONHome()})):(a.push(r),localStorage.setItem("homePresets",JSON.stringify(a)),populatePresetSelectHome(),$("#fuuga_preset-select").val(r.name).trigger("change"),localStorage.setItem("lastSelectedPresetHome",r.name),displayPresetMessageHome("Пресет сохранен.","success"),e.value="",updatePresetJSONHome())}else displayPresetMessageHome('Название пресета не может быть "Текущие настройки".',"danger");else displayPresetMessageHome("Название пресета не может быть пустым.","danger")}function showPresetConfirmationHome(e,t){var n=document.getElementById("fuuga_preset-confirmation"),r=document.getElementById("fuuga_preset-confirmation-message"),a=document.getElementById("fuuga_preset-confirm-yes"),o=document.getElementById("fuuga_preset-confirm-no");r.textContent=e,n.style.display="block",a.onclick=null,o.onclick=null,a.onclick=function(){n.style.display="none",t()},o.onclick=function(){n.style.display="none"}}function deleteSelectedPresetHome(){var e=$("#fuuga_preset-select").val();e&&"current"!==e?showPresetConfirmationHome('Вы уверены, что хотите удалить пресет "'.concat(e,'"?'),(function(){var t=JSON.parse(localStorage.getItem("homePresets")||"[]");t=t.filter((function(t){return t.name!==e})),localStorage.setItem("homePresets",JSON.stringify(t)),$("#fuuga_preset-select").val("current").trigger("change"),localStorage.removeItem("lastSelectedPresetHome"),populatePresetSelectHome(),displayPresetMessageHome("Пресет удален.","success"),document.getElementById("fuuga_preset-json").value=""})):displayPresetMessageHome("Нет выбранного пресета для удаления.","danger")}function loadSelectedPresetHome(){window.isLoadingPreset=!0;var e=$("#fuuga_preset-select").val();if(e&&"current"!==e){var t=JSON.parse(localStorage.getItem("homePresets")||"[]").find((function(t){return t.name===e}));if(t){var n=t.settings;document.getElementById("fuuga_apply-formatting").checked=n.applyFormatting,document.getElementById("fuuga_split-into-chunks-checkbox").checked=n.splitIntoChunks,document.getElementById("fuuga_chunk-size").value=n.chunkSize,document.getElementById("fuuga_max-chars").value=n.maxChars,document.getElementById("fuuga_temperature").value=n.temperature,document.getElementById("fuuga_max-tokens").value=n.maxTokens,document.getElementById("fuuga_formatting-temperature").value=n.formattingTemperature,document.getElementById("fuuga_formatting-max-tokens").value=n.formattingMaxTokens,document.getElementById("fuuga_enable-logger").checked=n.enableLogger,document.getElementById("fuuga_logger-level").value=n.loggerLevel,document.getElementById("fuuga_logger-temperature").value=n.loggerTemperature,document.getElementById("fuuga_logger-max-tokens").value=n.loggerMaxTokens,n.formattingModel&&$("#fuuga_formatting-model").val(n.formattingModel).trigger("change"),n.loggerModel&&$("#fuuga_logger-model").val(n.loggerModel).trigger("change");var r=t.prompts;document.getElementById("fuuga_logger-prompt-minimal").value=r.loggerPromptMinimal,document.getElementById("fuuga_logger-prompt-medium").value=r.loggerPromptMedium,document.getElementById("fuuga_logger-prompt-maximal").value=r.loggerPromptMaximal,document.getElementById("fuuga_custom-logger-prompt").value=r.loggerPromptCustom,localStorage.setItem("lastSelectedPresetHome",e),saveHomeSettingsGrammar(),displayPresetMessageHome("Пресет загружен.","success"),updatePresetJSONHome(),window.isLoadingPreset=!1}else window.isLoadingPreset=!1}else window.isLoadingPreset=!1}function updatePresetJSONHome(){var e=$("#fuuga_preset-select").val();if(e&&"current"!==e){var t=JSON.parse(localStorage.getItem("homePresets")||"[]").find((function(t){return t.name===e}));if(t){var n=JSON.stringify(t,null,2);document.getElementById("fuuga_preset-json").value=n}else document.getElementById("fuuga_preset-json").value=""}else document.getElementById("fuuga_preset-json").value=""}function copyPresetJSONHome(){document.getElementById("fuuga_preset-json").select(),document.execCommand("copy"),displayPresetMessageHome("JSON пресета скопирован в буфер обмена.","success")}function importPresetFromJSONGrammar(){var e=document.getElementById("preset-json-import").value;if(e)try{var t=JSON.parse(e);if(!t.name||!t.settings||!t.prompts)return void displayPresetMessageGrammar("Некорректный формат пресета.","danger");if("current"===t.name.toLowerCase()||"Текущие настройки"===t.name)return void displayPresetMessageGrammar('Название пресета не может быть "Текущие настройки".',"danger");t.settings=_objectSpread(_objectSpread({},getDefaultSettingsGrammar()),t.settings),t.prompts=_objectSpread(_objectSpread({},getDefaultPromptsGrammar()),t.prompts);var n=JSON.parse(localStorage.getItem("grammarPresets")||"[]"),r=n.findIndex((function(e){return e.name===t.name}));-1!==r?showPresetConfirmationGrammar('Пресет с названием "'.concat(t.name,'" уже существует. Перезаписать его?'),(function(){n[r]=t,localStorage.setItem("grammarPresets",JSON.stringify(n)),populatePresetSelectGrammar(),$("#preset-select").val(t.name).trigger("change"),localStorage.setItem("lastSelectedPreset",t.name),displayPresetMessageGrammar("Пресет импортирован.","success"),updatePresetJSONGrammar()})):(n.push(t),localStorage.setItem("grammarPresets",JSON.stringify(n)),populatePresetSelectGrammar(),$("#preset-select").val(t.name).trigger("change"),localStorage.setItem("lastSelectedPreset",t.name),displayPresetMessageGrammar("Пресет импортирован.","success"),updatePresetJSONGrammar())}catch(e){console.error("Ошибка при импорте пресета:",e),displayPresetMessageGrammar("Ошибка при импорте пресета. Проверьте формат JSON.","danger")}else displayPresetMessageGrammar("Поле JSON пустое.","danger")}function displayPresetMessageHome(e,t){var n=document.getElementById("fuuga_preset-message");n.innerHTML='<div class="alert alert-'.concat(t,'">').concat(e,"</div>"),setTimeout((function(){n.innerHTML=""}),3e3)}function applySuggestion(e,t,n){return _applySuggestion.apply(this,arguments)}function _applySuggestion(){return _applySuggestion=_asyncToGenerator(_regeneratorRuntime().mark((function e(t,n,r){var a;return _regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(a=n[t]){e.next=3;break}return e.abrupt("return");case 3:if(a.can_edit){e.next=6;break}return displayErrorMessage(r,"Это исправление не может быть применено напрямую."),e.abrupt("return");case 6:return e.next=8,Word.run(function(){var e=_asyncToGenerator(_regeneratorRuntime().mark((function e(o){var c,l,s,i,m;return _regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return c=o.document.body,(l=c.search(a.text,{matchCase:!0,matchWholeWord:!1})).load("items"),e.next=5,o.sync();case 5:if(!(l.items.length>0)){e.next=19;break}s=_createForOfIteratorHelper(l.items);try{for(s.s();!(i=s.n()).done;)(m=i.value).insertText(a.text_to_change,Word.InsertLocation.replace),document.getElementById("highlight-corrected-checkbox").checked&&(m.font.highlightColor="lightgreen")}catch(e){s.e(e)}finally{s.f()}return e.next=10,o.sync();case 10:return addToHistory(a),n.splice(t,1),displayResultsGrammar(n),displayCorrectionHistory(),e.next=16,checkRemainingCorrections(n);case 16:checkIfNoErrorsLeft(),e.next=20;break;case 19:displayErrorMessage(r,"Не удалось найти текст для замены. Убедитесь, что текст не был изменен.");case 20:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}()).catch((function(e){console.log("Error:",e),displayErrorMessage(r,"Произошла ошибка при применении исправления. Пожалуйста, попробуйте еще раз.")}));case 8:case"end":return e.stop()}}),e)}))),_applySuggestion.apply(this,arguments)}function checkRemainingCorrections(e){return _checkRemainingCorrections.apply(this,arguments)}function _checkRemainingCorrections(){return _checkRemainingCorrections=_asyncToGenerator(_regeneratorRuntime().mark((function e(t){return _regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,Word.run(function(){var e=_asyncToGenerator(_regeneratorRuntime().mark((function e(n){var r,a,o,c,l;return _regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return(r=n.document.body).load("text"),e.next=4,n.sync();case 4:r.text,a=_createForOfIteratorHelper(t),e.prev=6,a.s();case 8:if((o=a.n()).done){e.next=18;break}if(!(c=o.value).can_edit){e.next=16;break}return(l=r.search(c.text,{matchCase:!0,matchWholeWord:!1})).load("items"),e.next=15,n.sync();case 15:0===l.items.length&&(c.can_edit=!1,c.originalComment||(c.originalComment=c.comment,c.originalSuggestion=c.suggestion,c.originalExample=c.example),c.comment="Исправление невозможно, так как исходный текст был изменен другим исправлением.");case 16:e.next=8;break;case 18:e.next=23;break;case 20:e.prev=20,e.t0=e.catch(6),a.e(e.t0);case 23:return e.prev=23,a.f(),e.finish(23);case 26:displayResultsGrammar(t);case 27:case"end":return e.stop()}}),e,null,[[6,20,23,26]])})));return function(t){return e.apply(this,arguments)}}());case 2:case"end":return e.stop()}}),e)}))),_checkRemainingCorrections.apply(this,arguments)}function displayCorrectionHistory(){var e=document.getElementById("grammar-history");if(e.innerHTML="",0!==appliedCorrections.length){var t=appliedCorrections.reduce((function(e,t){var n=t.errorType||"Другие";return e[n]||(e[n]=[]),e[n].push(t),e}),{}),n='<div class="accordion" id="historyAccordion">';Object.keys(t).forEach((function(e,r){var a=t[e],o="historyCollapse".concat(r);n+='\n <div class="card">\n <div class="card-header" id="historyHeading'.concat(r,'">\n <h2 class="mb-0">\n <button class="btn btn-link" type="button" data-toggle="collapse" data-target="#').concat(o,'" aria-expanded="true" aria-controls="').concat(o,'">\n ').concat(e.charAt(0).toUpperCase()+e.slice(1),' исправления (<span class="correction-count">').concat(a.length,'</span>)\n </button>\n </h2>\n </div>\n <div id="').concat(o,'" class="collapse show" aria-labelledby="historyHeading').concat(r,'" data-parent="#historyAccordion">\n <div class="card-body">\n ').concat(a.map((function(e,t){return'\n <div class="mb-3 p-3 border correction-card '.concat(t<a.length-1?"border-bottom":"",'">\n <p><strong>Проблемный текст:</strong> <span class="text-danger">').concat(e.text,"</span></p>\n <p><strong>Комментарий:</strong> ").concat(e.comment,"</p>\n ").concat(e.can_edit?'<p><strong>Исправление:</strong> <span class="text-success">'.concat(e.text_to_change,"</span></p>"):"<p><strong>Рекомендации:</strong> ".concat(e.suggestion,'</p>\n <p><strong>Пример улучшенного текста:</strong> <span class="text-info">').concat(e.example,"</span></p>"),"\n ").concat(e.resolvedManually?'<p class="text-info"><em>Отмечено как решенное вручную</em></p>':'<p class="text-success"><em>Применено автоматически</em></p>',"\n </div>\n ")})).join(""),"\n </div>\n </div>\n </div>\n ")})),n+="</div>",e.innerHTML=n;var r=document.querySelector(".correction-card:last-child");r&&r.scrollIntoView({behavior:"smooth",block:"center"})}else e.innerHTML='<p class="text-info">История исправлений пуста.</p>'}function checkIfNoErrorsLeft(){var e=document.getElementById("grammarAccordion");e&&e.children.length||(document.getElementById("grammar-results").innerHTML='<p class="text-success">Все ошибки исправлены!</p>',document.getElementById("filter-container").style.display="none")}function isSimpleReplacement(e,t){var n=(e.match(/[.!?]/g)||[]).length;return!((t.match(/[.!?]/g)||[]).length>n+1||t.length>2*e.length)}function displayErrorMessage(e,t){if(e){var n=e.parentElement.querySelector(".error-message");n&&n.remove();var r=document.createElement("div");r.className="error-message text-danger mt-2",r.textContent=t,e.parentElement.insertBefore(r,e.nextSibling)}}Office.onReady((function(e){e.host===Office.HostType.Word&&(initHome(),initPrompts(),initSettings(),initGrammar())})),document.addEventListener("DOMContentLoaded",(function(){initHome(),initPrompts(),initSettings(),initGrammar()}));