@ckeditor/ckeditor5-find-and-replace 39.0.2 → 40.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["webpack://CKEditor5.findAndReplace/./theme/findandreplace.css","webpack://CKEditor5.findAndReplace/./theme/findandreplaceform.css","webpack://CKEditor5.findAndReplace/../ckeditor5-ui/theme/components/responsive-form/responsiveform.css","webpack://CKEditor5.findAndReplace/../node_modules/css-loader/dist/runtime/api.js","webpack://CKEditor5.findAndReplace/../node_modules/css-loader/dist/runtime/cssWithMappingToString.js","webpack://CKEditor5.findAndReplace/./theme/icons/find-replace.svg","webpack://CKEditor5.findAndReplace/../ckeditor5-ui/theme/icons/previous-arrow.svg","webpack://CKEditor5.findAndReplace/./theme/findandreplace.css?72d5","webpack://CKEditor5.findAndReplace/./theme/findandreplaceform.css?0194","webpack://CKEditor5.findAndReplace/../ckeditor5-ui/theme/components/responsive-form/responsiveform.css?643e","webpack://CKEditor5.findAndReplace/../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js","webpack://CKEditor5.findAndReplace/../ckeditor5-utils/src/dom/getborderwidths.ts","webpack://CKEditor5.findAndReplace/../ckeditor5-utils/src/dom/isrange.ts","webpack://CKEditor5.findAndReplace/../ckeditor5-utils/src/dom/istext.ts","webpack://CKEditor5.findAndReplace/../ckeditor5-utils/src/dom/iswindow.ts","webpack://CKEditor5.findAndReplace/../ckeditor5-utils/src/dom/rect.ts","webpack://CKEditor5.findAndReplace/../ckeditor5-utils/src/dom/scroll.ts","webpack://CKEditor5.findAndReplace/./src/findandreplace.js","webpack://CKEditor5.findAndReplace/./src/findandreplaceediting.js","webpack://CKEditor5.findAndReplace/./src/findandreplacestate.js","webpack://CKEditor5.findAndReplace/./src/findandreplaceui.js","webpack://CKEditor5.findAndReplace/./src/findcommand.js","webpack://CKEditor5.findAndReplace/./src/findnextcommand.js","webpack://CKEditor5.findAndReplace/./src/findpreviouscommand.js","webpack://CKEditor5.findAndReplace/./src/replaceallcommand.js","webpack://CKEditor5.findAndReplace/./src/replacecommand.js","webpack://CKEditor5.findAndReplace/./src/ui/findandreplaceformview.js","webpack://CKEditor5.findAndReplace/./src/utils.js","webpack://CKEditor5.findAndReplace/delegated \"./src/core.js\" from dll-reference CKEditor5.dll","webpack://CKEditor5.findAndReplace/delegated \"./src/ui.js\" from dll-reference CKEditor5.dll","webpack://CKEditor5.findAndReplace/delegated \"./src/utils.js\" from dll-reference CKEditor5.dll","webpack://CKEditor5.findAndReplace/external var \"CKEditor5.dll\"","webpack://CKEditor5.findAndReplace/javascript/node_modules/lodash-es/_Symbol.js","webpack://CKEditor5.findAndReplace/javascript/node_modules/lodash-es/_arrayMap.js","webpack://CKEditor5.findAndReplace/javascript/node_modules/lodash-es/_baseGetTag.js","webpack://CKEditor5.findAndReplace/javascript/node_modules/lodash-es/_baseToString.js","webpack://CKEditor5.findAndReplace/javascript/node_modules/lodash-es/_baseTrim.js","webpack://CKEditor5.findAndReplace/javascript/node_modules/lodash-es/_freeGlobal.js","webpack://CKEditor5.findAndReplace/javascript/node_modules/lodash-es/_getRawTag.js","webpack://CKEditor5.findAndReplace/javascript/node_modules/lodash-es/_objectToString.js","webpack://CKEditor5.findAndReplace/javascript/node_modules/lodash-es/_root.js","webpack://CKEditor5.findAndReplace/javascript/node_modules/lodash-es/_trimmedEndIndex.js","webpack://CKEditor5.findAndReplace/javascript/node_modules/lodash-es/debounce.js","webpack://CKEditor5.findAndReplace/javascript/node_modules/lodash-es/escapeRegExp.js","webpack://CKEditor5.findAndReplace/javascript/node_modules/lodash-es/isArray.js","webpack://CKEditor5.findAndReplace/javascript/node_modules/lodash-es/isObject.js","webpack://CKEditor5.findAndReplace/javascript/node_modules/lodash-es/isObjectLike.js","webpack://CKEditor5.findAndReplace/javascript/node_modules/lodash-es/isSymbol.js","webpack://CKEditor5.findAndReplace/javascript/node_modules/lodash-es/now.js","webpack://CKEditor5.findAndReplace/javascript/node_modules/lodash-es/toNumber.js","webpack://CKEditor5.findAndReplace/javascript/node_modules/lodash-es/toString.js","webpack://CKEditor5.findAndReplace/webpack/bootstrap","webpack://CKEditor5.findAndReplace/webpack/runtime/compat get default export","webpack://CKEditor5.findAndReplace/webpack/runtime/define property getters","webpack://CKEditor5.findAndReplace/webpack/runtime/hasOwnProperty shorthand","webpack://CKEditor5.findAndReplace/webpack/runtime/make namespace object","webpack://CKEditor5.findAndReplace/webpack/runtime/nonce","webpack://CKEditor5.findAndReplace/./src/index.js"],"names":[],"mappings":"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AAEA;AACA,IAAI;AACJ,GAAG;;AAEH;AACA;AACA,EAAE,iEAAyB;AAC3B,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACe,oCAAoC,sDAAM;AACzD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,oCAAoC;AAClD;AACA;;AAEA;AACA;AACA;AACA,cAAc,iEAAiE;AAC/E;AACA,mBAAmB,4DAAmB;;AAEtC;AACA;;AAEA;AACA,WAAW,QAAQ;;AAEnB;AACA;AACA;AACA,oEAAoE,YAAY;;AAEhF;AACA;AACA;AACA;;AAEA;AACA;AACA,iDAAiD,YAAY;AAC7D;AACA;AACA;AACA,OAAO;AACP;AACA,KAAK;AACL,IAAI;;AAEJ,kCAAkC,sDAAQ;AAC1C;AACA,oFAAoF,kBAAkB;;AAEtG;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,IAAI,oGAA0B;AAC9B;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,iBAAiB;AAC7B,cAAc;AACd;AACA;AACA,UAAU,SAAS;AACnB,UAAU,QAAQ;;AAElB,UAAU,wBAAwB;;AAElC;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,oDAAW;AACnD,4CAA4C,wDAAe;AAC3D,gDAAgD,4DAAmB;AACnE,2CAA2C,uDAAc;AACzD,8CAA8C,0DAAiB;AAC/D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,SAAS;;AAEnB;AACA;AACA;AACA,aAAa,aAAa;AAC1B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;;AAEJ;AACA;AACA,aAAa,aAAa;AAC1B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;;;;;;;;;;;;;;;;;AC7PA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEuE;;AAEvE;AACA;AACA;AACA;AACA;AACe;AACf;AACA;AACA;AACA,YAAY,iCAAiC;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,oCAAoC;AAClD;AACA,2BAA2B,2DAAU;;AAErC;AACA,6CAA6C,+BAA+B;AAC5E;AACA;AACA;AACA,cAAc,aAAa;AAC3B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAc,QAAQ;AACtB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAc,QAAQ;AACtB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAc,SAAS;AACvB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAc,SAAS;AACvB;AACA;;AAEA,4CAA4C,iBAAiB;AAC7D;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;;AAEN;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;;AAEA;AACA;AACA;AACA,YAAY,iCAAiC;AAC7C;AACA;AACA;;AAEA;AACA;AACA;AACA,mEAAmE,YAAY;;AAE/E;AACA;AACA;AACA;;AAEA,oCAAoC,SAAS;AAC7C;AACA,KAAK;AACL,IAAI;;AAEJ;AACA;AACA;;AAEA,wDAAG,uBAAuB,gEAAe;;;;;;;;;;;;;;;;;;;;AClIzC;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAE4C;AACM;AACe;;AAET;;AAExD;AACA;AACA;AACA,kEAAkE,oEAAoE;AACtI,kBAAkB,4EAA4E;AAC9F;AACA;AACA;AACe,+BAA+B,sDAAM;AACpD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc,0EAA0E;AACxF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,gEAAc;AAClC,wCAAwC,kEAAsB;;AAE9D;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,MAAM;AACN;AACA;AACA,IAAI,IAAI,kBAAkB;;AAE1B;AACA;;AAEA;AACA,IAAI;AACJ;;AAEA;AACA;AACA;AACA;AACA,YAAY,8CAA8C;AAC1D;AACA;AACA;AACA;;AAEA;AACA,SAAS,qEAAS;AAClB;AACA;AACA;AACA,IAAI;;AAEJ;AACA;AACA;AACA,IAAI;AACJ;;AAEA;AACA;AACA;AACA;AACA,YAAY,0EAA0E;AACtF;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;;AAExB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;;AAEJ;AACA;AACA;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,8CAA8C;AACxG;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;ACtMA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAE6C;AAC2B;;AAExE;AACA,wCAAwC,qFAAqF;AAC7H;AACA;AACA;AACe,0BAA0B,uDAAO;AAChD;AACA;AACA;AACA,YAAY,kCAAkC;AAC9C,YAAY,iEAAiE;AAC7E;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc,iEAAiE;AAC/E;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,iBAAiB;AAC7B,YAAY,QAAQ;AACpB,YAAY,SAAS;AACrB,YAAY,SAAS;AACrB;AACA;AACA;AACA,4BAA4B,wBAAwB,KAAK;AACzD,UAAU,SAAS;AACnB,UAAU,QAAQ;;AAElB;;AAEA;AACA;AACA,kBAAkB,0DAAkB,oBAAoB,wBAAwB;;AAEhF;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA,8CAA8C,iEAAyB;AACvE;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;AC5FA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAE6C;;AAE7C;AACA;AACA;AACA,sBAAsB,qFAAqF;AAC3G;AACA;AACA;AACe,8BAA8B,uDAAO;AACpD;AACA;AACA;AACA,YAAY,kCAAkC;AAC9C,YAAY,iEAAiE;AAC7E;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc,iEAAiE;AAC/E;AACA;;AAEA;;AAEA;AACA;AACA,IAAI;AACJ;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;;;;;;;;AChEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEgD;;AAEhD;AACA;AACA;AACA,sBAAsB,qFAAqF;AAC3G;AACA;AACA;AACe,kCAAkC,wDAAe;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;;;;;;;;;;AC9BA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEwE;AACvB;AACH;;AAE9C;AACA,+CAA+C,qFAAqF;AACpI;AACA;AACA;AACe,gCAAgC,uDAAc;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,QAAQ;AACpB,YAAY,2CAA2C;AACvD;AACA;AACA;AACA;AACA;AACA,UAAU,SAAS;AACnB,UAAU,QAAQ;;AAElB,2CAA2C,2DAAU;AACrD;AACA,+CAA+C,iEAAyB;AACxE;AACA;AACA,KAAK,0DAAkB;AACvB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,KAAK;AACL;AACA;AACA;;;;;;;;;;;;;;;;;AC5DA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAE6C;;AAE7C;AACA,2CAA2C,qFAAqF;AAChI;AACA;AACA;AACe,6BAA6B,uDAAO;AACnD;AACA;AACA;AACA,YAAY,kCAAkC;AAC9C,YAAY,iEAAiE;AAC7E;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc,iEAAiE;AAC/E;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA,UAAU,QAAQ;;AAElB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;;;;;;;;;;;;;;;;;;;;;;AC3EA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAiB0B;;AAQG;;AAE7B;AACA;AACoF;AACxC;;AAE5C;AACkF;AACvC;;AAE3C;AACA;AACA;AACA,QAAQ,+EAA+E;AACvF;AACA;AACA;AACe,qCAAqC,kDAAI;AACxD;AACA;AACA;AACA,YAAY,4BAA4B;AACxC;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAc,QAAQ;AACtB;AACA;;AAEA;AACA,2DAA2D,kCAAkC;AAC7F;AACA;AACA;AACA,cAAc,aAAa;AAC3B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,SAAS;AACvB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,QAAQ;AACtB;AACA,sCAAsC;;AAEtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,QAAQ;AACtB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,SAAS;AACvB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,SAAS;AACvB;AACA;;AAEA;AACA;AACA;AACA,8CAA8C,kBAAkB,uCAAuC,eAAe;AACtH;AACA,oFAAoF;AACpF;AACA;AACA;AACA;AACA;AACA,cAAc,SAAS;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA,SAAS,6FAAa;AACtB;AACA;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA,SAAS,6FAAa;AACtB;AACA;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA,2BAA2B,6DAAY;;AAEvC;AACA,yBAAyB,qDAAqD;AAC9E;AACA;AACA;AACA,cAAc;AACd;AACA,yBAAyB,iEAAgB;;AAEzC;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA,yBAAyB,4DAAc;;AAEvC;AACA,yBAAyB,oBAAoB;AAC7C;AACA;AACA;AACA,cAAc;AACd;AACA,0BAA0B,yDAAW;AACrC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAI;AACJ;AACA,QAAQ,4DAAc;AACtB;AACA,MAAM;AACN;AACA;AACA;AACA,IAAI;;AAEJ,EAAE,6EAA2B;AAC7B;;AAEA;AACA;AACA;AACA;AACA;;AAEA,EAAE,+DAAa,IAAI,aAAa;;AAEhC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,sBAAsB,oBAAoB;AAC1C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA,2BAA2B,kDAAI;;AAE/B;AACA;AACA;AACA,IAAI;;AAEJ;;AAEA;AACA;AACA;;AAEA;AACA,oFAAoF,eAAe;AACnG,oFAAoF,WAAW;;AAE/F;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;;AAEJ;AACA;;AAEA;AACA,mCAAmC,wBAAwB;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;;AAEA;AACA,uFAAuF,sBAAsB;AAC7G;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,kDAAI;;AAErC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA;;AAEA;AACA,0BAA0B,8DAAS;AACnC;AACA;;AAEA,4BAA4B,qDAAI;AAChC;;AAEA;AACA;AACA,KAAK;AACL,2FAA2F,cAAc;AACzG;AACA;;AAEA;AACA;AACA,mEAAmE,kBAAkB;;AAErF;AACA;AACA;AACA,uDAAuD,kBAAkB;;AAEzE;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA,2BAA2B,kDAAI;;AAE/B;AACA;AACA;AACA,OAAO,SAAS;;AAEhB;AACA;AACA;AACA,OAAO,YAAY;;AAEnB;AACA;AACA;AACA,OAAO,SAAS;;AAEhB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,KAAK;AACL,IAAI;;AAEJ;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;;AAEJ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA,uBAAuB,gEAAc;;AAErC;;AAEA;AACA;AACA;AACA,SAAS,yDAAS;AAClB;AACA,IAAI;;AAEJ,6BAA6B,mDAAK;AAClC;AACA;;AAEA;AACA;AACA,IAAI;;AAEJ,kCAAkC,mDAAK;AACvC;AACA;AACA,IAAI;;AAEJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,IAAI;;AAEJ,EAAE,mEAAiB,oBAAoB,2DAAU;AACjD,KAAK,6CAA6C;AAClD,KAAK;AACL;;AAEA;AACA;;AAEA;AACA,qBAAqB,oBAAoB,KAAK,sBAAsB;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,IAAI;;AAEJ;AACA;AACA;;AAEA;AACA,IAAI;;AAEJ;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,IAAI;;AAEJ;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG,IAAI,mBAAmB;;AAE1B;AACA;AACA,GAAG,IAAI,mBAAmB;AAC1B;;AAEA;AACA;AACA;AACA;AACA,YAAY,QAAQ;AACpB,cAAc,wCAAwC;AACtD;AACA;AACA,qBAAqB,wDAAU;;AAE/B;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAY,QAAQ;AACpB,cAAc,0DAA0D;AACxE;AACA;AACA,2BAA2B,8DAAgB,eAAe,oEAAsB;;AAEhF;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB;;;;;;;;;;;;;;;;;;;;ACr0BA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEsD;AACb;;AAEzC;AACA;AACA;AACA,WAAW,iCAAiC;AAC5C,WAAW,iCAAiC;AAC5C,WAAW,UAAU;AACrB,WAAW,oCAAoC;AAC/C;AACA,aAAa,oCAAoC;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP,qCAAqC,2DAAU;;AAE/C;AACA,4BAA4B,aAAa;AACzC;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;;AAEA;AACA,sCAAsC,wDAAG,IAAI;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;;AAER;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,OAAO;AACP;AACA;AACA,IAAI;AACJ,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,iCAAiC;AAC5C,aAAa,QAAQ;AACrB;AACO;AACP;AACA;AACA;AACA;AACA;AACA,cAAc,WAAW;AACzB;;AAEA;AACA,EAAE;AACF;;AAEA;AACA;AACA,sCAAsC,SAAS;AAC/C;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,aAAa;AACb;AACO;AACP;;AAEA;AACA;AACA;;AAEA,wBAAwB,qDAAY,gBAAgB;;AAEpD;AACA;;AAEA;AACA,wBAAwB,gBAAgB,MAAM,aAAa;AAC3D;;AAEA;AACA,qBAAqB,aAAa,QAAQ,gBAAgB;AAC1D;AACA;;AAEA;;AAEA,0BAA0B,OAAO;AACjC;;AAEA;AACA;;AAEA;AACA;;;;;;;;;;;ACrKA;;;;;;;;;;ACAA;;;;;;;;;;ACAA;;;;;;;;;;;ACAA;;;;;;;;;;;;;;;;ACA8B;;AAE9B;AACA,aAAa,uDAAW;;AAExB,iEAAe,MAAM,EAAC;;;;;;;;;;;;;;;;ACLtB;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,UAAU;AACrB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,iEAAe,QAAQ,EAAC;;;;;;;;;;;;;;;;;;;ACpBU;AACM;AACU;;AAElD;AACA;AACA;;AAEA;AACA,qBAAqB,kDAAM,GAAG,8DAAkB;;AAEhD;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,yDAAS;AACf,MAAM,8DAAc;AACpB;;AAEA,iEAAe,UAAU,EAAC;;;;;;;;;;;;;;;;;;;;AC3BQ;AACI;AACH;AACE;;AAErC;AACA;;AAEA;AACA,kBAAkB,kDAAM,GAAG,4DAAgB;AAC3C;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,uDAAO;AACb;AACA,WAAW,wDAAQ;AACnB;AACA,MAAM,wDAAQ;AACd;AACA;AACA;AACA;AACA;;AAEA,iEAAe,YAAY,EAAC;;;;;;;;;;;;;;;;;ACpCwB;;AAEpD;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB;AACA;AACA;AACA,sBAAsB,+DAAe;AACrC;AACA;;AAEA,iEAAe,QAAQ,EAAC;;;;;;;;;;;;;;;;AClBxB;AACA;;AAEA,iEAAe,UAAU,EAAC;;;;;;;;;;;;;;;;;ACHQ;;AAElC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,qBAAqB,kDAAM,GAAG,8DAAkB;;AAEhD;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA,iEAAe,SAAS,EAAC;;;;;;;;;;;;;;;;AC7CzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA,iEAAe,cAAc,EAAC;;;;;;;;;;;;;;;;;ACrBY;;AAE1C;AACA;;AAEA;AACA,WAAW,sDAAU;;AAErB,iEAAe,IAAI,EAAC;;;;;;;;;;;;;;;;ACRpB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB;AACA;AACA;;AAEA;AACA;AACA;;AAEA,iEAAe,eAAe,EAAC;;;;;;;;;;;;;;;;;;;AClBM;AACV;AACU;;AAErC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,UAAU;AACrB,WAAW,QAAQ;AACnB,WAAW,QAAQ,WAAW;AAC9B,WAAW,SAAS;AACpB;AACA,WAAW,QAAQ;AACnB;AACA,WAAW,SAAS;AACpB;AACA,aAAa,UAAU;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,+CAA+C,iBAAiB;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS,wDAAQ;AACjB,MAAM,wDAAQ;AACd;AACA;AACA,iCAAiC,wDAAQ;AACzC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,eAAe,mDAAG;AAClB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,yDAAyD,mDAAG;AAC5D;;AAEA;AACA,eAAe,mDAAG;AAClB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iEAAe,QAAQ,EAAC;;;;;;;;;;;;;;;;;AC9La;;AAErC;AACA;AACA;AACA;AACA,oCAAoC;AACpC;;AAEA;AACA;AACA,8BAA8B,KAAK;AACnC;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,wDAAQ;AACnB;AACA;AACA;AACA;;AAEA,iEAAe,YAAY,EAAC;;;;;;;;;;;;;;;;AC/B5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iEAAe,OAAO,EAAC;;;;;;;;;;;;;;;;ACzBvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,SAAS;AACtB;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iEAAe,QAAQ,EAAC;;;;;;;;;;;;;;;;AC9BxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,SAAS;AACtB;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iEAAe,YAAY,EAAC;;;;;;;;;;;;;;;;;;AC5Bc;AACG;;AAE7C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,4DAAY,WAAW,0DAAU;AACtC;;AAEA,iEAAe,QAAQ,EAAC;;;;;;;;;;;;;;;;;AC5BM;;AAE9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,SAAS,yDAAa;AACtB;;AAEA,iEAAe,GAAG,EAAC;;;;;;;;;;;;;;;;;;;ACtBmB;AACD;AACA;;AAErC;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,wDAAQ;AACd;AACA;AACA,MAAM,wDAAQ;AACd;AACA,YAAY,wDAAQ;AACpB;AACA;AACA;AACA;AACA,UAAU,wDAAQ;AAClB;AACA;AACA;AACA;AACA;;AAEA,iEAAe,QAAQ,EAAC;;;;;;;;;;;;;;;;;AC/DsB;;AAE9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,4DAAY;AAC1C;;AAEA,iEAAe,QAAQ,EAAC;;;;;;;UC3BxB;UACA;;UAEA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;UACA;;UAEA;UACA;UACA;;;;;WCtBA;WACA;WACA;WACA;WACA;WACA,iCAAiC,WAAW;WAC5C;WACA;;;;;WCPA;WACA;WACA;WACA;WACA,yCAAyC,wCAAwC;WACjF;WACA;WACA;;;;;WCPA;;;;;WCAA;WACA;WACA;WACA,uDAAuD,iBAAiB;WACxE;WACA,gDAAgD,aAAa;WAC7D;;;;;WCNA;;;;;;;;;;;;;;;;ACAA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAE6D","file":"find-and-replace.js","sourcesContent":["// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".ck-find-result{background:var(--ck-color-highlight-background);color:var(--ck-color-text)}.ck-find-result_selected{background:#ff9633}\", \"\",{\"version\":3,\"sources\":[\"webpack://./theme/findandreplace.css\"],\"names\":[],\"mappings\":\"AAKA,gBACC,+CAAgD,CAChD,0BACD,CAEA,yBACC,kBACD\",\"sourcesContent\":[\"/*\\n * Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.\\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\\n */\\n\\n.ck-find-result {\\n\\tbackground: var(--ck-color-highlight-background);\\n\\tcolor: var(--ck-color-text);\\n}\\n\\n.ck-find-result_selected {\\n\\tbackground: hsl(29, 100%, 60%);\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".ck.ck-find-and-replace-form{max-width:100%}.ck.ck-find-and-replace-form fieldset{display:flex}.ck.ck-find-and-replace-form fieldset.ck-find-and-replace-form__find .ck-results-counter{position:absolute}.ck.ck-find-and-replace-form{width:400px}.ck.ck-find-and-replace-form:focus{outline:none}.ck.ck-find-and-replace-form fieldset{align-content:stretch;align-items:center;border:0;flex-direction:row;flex-wrap:nowrap;margin:0;padding:var(--ck-spacing-large)}.ck.ck-find-and-replace-form fieldset>.ck-button{flex:0 0 auto}[dir=ltr] .ck.ck-find-and-replace-form fieldset>*+*{margin-left:var(--ck-spacing-standard)}[dir=rtl] .ck.ck-find-and-replace-form fieldset>*+*{margin-right:var(--ck-spacing-standard)}.ck.ck-find-and-replace-form fieldset .ck-labeled-field-view{flex:1 1 auto}.ck.ck-find-and-replace-form fieldset .ck-labeled-field-view .ck-input{min-width:50px;width:100%}.ck.ck-find-and-replace-form fieldset.ck-find-and-replace-form__find{align-items:flex-start}.ck.ck-find-and-replace-form fieldset.ck-find-and-replace-form__find>.ck-button-find{font-weight:700}.ck.ck-find-and-replace-form fieldset.ck-find-and-replace-form__find>.ck-button-find .ck-button__label{padding-left:var(--ck-spacing-large);padding-right:var(--ck-spacing-large)}.ck.ck-find-and-replace-form fieldset.ck-find-and-replace-form__find>.ck-button-prev>.ck-icon{transform:rotate(90deg)}.ck.ck-find-and-replace-form fieldset.ck-find-and-replace-form__find>.ck-button-next>.ck-icon{transform:rotate(-90deg)}.ck.ck-find-and-replace-form fieldset.ck-find-and-replace-form__find .ck-results-counter{top:50%;transform:translateY(-50%)}[dir=ltr] .ck.ck-find-and-replace-form fieldset.ck-find-and-replace-form__find .ck-results-counter{right:var(--ck-spacing-standard)}[dir=rtl] .ck.ck-find-and-replace-form fieldset.ck-find-and-replace-form__find .ck-results-counter{left:var(--ck-spacing-standard)}.ck.ck-find-and-replace-form fieldset.ck-find-and-replace-form__find .ck-results-counter{color:var(--ck-color-base-border)}.ck.ck-find-and-replace-form fieldset.ck-find-and-replace-form__replace{flex-wrap:wrap;justify-content:flex-end;margin-top:calc(var(--ck-spacing-large)*-1)}.ck.ck-find-and-replace-form fieldset.ck-find-and-replace-form__replace>.ck-labeled-field-view{margin-bottom:var(--ck-spacing-large)}.ck.ck-find-and-replace-form fieldset.ck-find-and-replace-form__replace>.ck-options-dropdown{margin-left:0;margin-right:auto}.ck.ck-find-and-replace-form fieldset.ck-find-and-replace-form__replace>.ck-labeled-field-view,.ck.ck-find-and-replace-form fieldset.ck-find-and-replace-form__replace>.ck-labeled-field-view .ck-input{width:100%}@media screen and (max-width:600px){.ck.ck-find-and-replace-form{width:300px}.ck.ck-find-and-replace-form fieldset{flex-wrap:wrap}.ck.ck-find-and-replace-form fieldset.ck-find-and-replace-form__find .ck-labeled-field-view{flex:1 0 auto;margin-bottom:var(--ck-spacing-standard);width:100%}.ck.ck-find-and-replace-form fieldset.ck-find-and-replace-form__find>.ck-button{text-align:center}.ck.ck-find-and-replace-form fieldset.ck-find-and-replace-form__find>.ck-button:first-of-type{flex:1 1 auto}[dir=ltr] .ck.ck-find-and-replace-form fieldset.ck-find-and-replace-form__find>.ck-button:first-of-type{margin-left:0}[dir=rtl] .ck.ck-find-and-replace-form fieldset.ck-find-and-replace-form__find>.ck-button:first-of-type{margin-right:0}.ck.ck-find-and-replace-form fieldset.ck-find-and-replace-form__find>.ck-button:first-of-type .ck-button__label{text-align:center;width:100%}.ck.ck-find-and-replace-form fieldset.ck-find-and-replace-form__replace>:not(.ck-labeled-field-view){flex:1 1 auto}.ck.ck-find-and-replace-form fieldset.ck-find-and-replace-form__replace>.ck-dropdown:not(.ck-labeled-field-view){flex-grow:0}.ck.ck-find-and-replace-form fieldset.ck-find-and-replace-form__replace>.ck-button:not(.ck-labeled-field-view)>.ck-button__label{text-align:center;width:100%}}\", \"\",{\"version\":3,\"sources\":[\"webpack://./theme/findandreplaceform.css\",\"webpack://./../ckeditor5-theme-lark/theme/ckeditor5-find-and-replace/findandreplaceform.css\",\"webpack://./../ckeditor5-ui/theme/mixins/_rwd.css\"],\"names\":[],\"mappings\":\"AAKA,6BACC,cAUD,CARC,sCACC,YAMD,CAHC,yFACC,iBACD,CCNF,6BACC,WAyGD,CAnGC,mCACC,YACD,CAEA,sCAIC,qBAAsB,CADtB,kBAAmB,CAInB,QAAS,CANT,kBAAmB,CACnB,gBAAiB,CAMjB,QAAS,CAFT,+BAwFD,CApFC,iDACC,aACD,CAGC,oDACC,sCACD,CAIA,oDACC,uCACD,CAGD,6DACC,aAMD,CAJC,uEAEC,cAAe,CADf,UAED,CAID,qEAEC,sBAkCD,CAhCC,qFACC,eAOD,CAJC,uGACC,oCAAqC,CACrC,qCACD,CAGD,8FACC,uBACD,CAEA,8FACC,wBACD,CAEA,yFACC,OAAQ,CACR,0BAWD,CAbA,mGAKE,gCAQF,CAbA,mGASE,+BAIF,CAbA,yFAYC,iCACD,CAID,wEACC,cAAe,CACf,wBAAyB,CACzB,2CAeD,CAbC,+FACC,qCACD,CAEA,6FAEC,aAAc,CADd,iBAED,CAEA,wMAEC,UACD,CCzGF,oCD+GA,6BACC,WAiDD,CA/CC,sCACC,cA6CD,CAzCE,4FACC,aAAc,CAEd,wCAAyC,CADzC,UAED,CAEA,gFACC,iBAkBD,CAhBC,8FACC,aAcD,CAfA,wGAIE,aAWF,CAfA,wGAQE,cAOF,CAJC,gHAEC,iBAAkB,CADlB,UAED,CAMH,qGACC,aAUD,CARC,iHACC,WACD,CAEA,iIAEC,iBAAkB,CADlB,UAED,CC5JH\",\"sourcesContent\":[\"/*\\n * Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.\\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\\n */\\n\\n.ck.ck-find-and-replace-form {\\n\\tmax-width: 100%;\\n\\n\\t& fieldset {\\n\\t\\tdisplay: flex;\\n\\n\\t\\t/* The find fieldset */\\n\\t\\t&.ck-find-and-replace-form__find .ck-results-counter {\\n\\t\\t\\tposition: absolute;\\n\\t\\t}\\n\\t}\\n}\\n\",\"/*\\n * Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.\\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\\n */\\n\\n@import \\\"@ckeditor/ckeditor5-ui/theme/mixins/_rwd.css\\\";\\n@import \\\"@ckeditor/ckeditor5-ui/theme/mixins/_dir.css\\\";\\n\\n.ck.ck-find-and-replace-form {\\n\\twidth: 400px;\\n\\n\\t/*\\n\\t * The <form> needs tabindex=\\\"-1\\\" for proper Esc handling after being clicked\\n\\t * but the side effect is that this creates a nasty focus outline in some browsers.\\n\\t */\\n\\t&:focus {\\n\\t\\toutline: none;\\n\\t}\\n\\n\\t& fieldset {\\n\\t\\tflex-direction: row;\\n\\t\\tflex-wrap: nowrap;\\n\\t\\talign-items: center;\\n\\t\\talign-content: stretch;\\n\\n\\t\\tpadding: var(--ck-spacing-large);\\n\\t\\tborder: 0;\\n\\t\\tmargin: 0;\\n\\n\\t\\t& > .ck-button {\\n\\t\\t\\tflex: 0 0 auto;\\n\\t\\t}\\n\\n\\t\\t@mixin ck-dir ltr {\\n\\t\\t\\t& > * + * {\\n\\t\\t\\t\\tmargin-left: var(--ck-spacing-standard);\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t@mixin ck-dir rtl {\\n\\t\\t\\t& > * + * {\\n\\t\\t\\t\\tmargin-right: var(--ck-spacing-standard);\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t& .ck-labeled-field-view {\\n\\t\\t\\tflex: 1 1 auto;\\n\\n\\t\\t\\t& .ck-input {\\n\\t\\t\\t\\twidth: 100%;\\n\\t\\t\\t\\tmin-width: 50px;\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t/* The find fieldset */\\n\\t\\t&.ck-find-and-replace-form__find {\\n\\t\\t\\t/* To display all controls in line when there's an error under the input */\\n\\t\\t\\talign-items: flex-start;\\n\\n\\t\\t\\t& > .ck-button-find {\\n\\t\\t\\t\\tfont-weight: bold;\\n\\n\\t\\t\\t\\t/* Beef the find button up a little. It's the main action button in the form */\\n\\t\\t\\t\\t& .ck-button__label {\\n\\t\\t\\t\\t\\tpadding-left: var(--ck-spacing-large);\\n\\t\\t\\t\\t\\tpadding-right: var(--ck-spacing-large);\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\n\\t\\t\\t& > .ck-button-prev > .ck-icon {\\n\\t\\t\\t\\ttransform: rotate(90deg);\\n\\t\\t\\t}\\n\\n\\t\\t\\t& > .ck-button-next > .ck-icon {\\n\\t\\t\\t\\ttransform: rotate(-90deg);\\n\\t\\t\\t}\\n\\n\\t\\t\\t& .ck-results-counter {\\n\\t\\t\\t\\ttop: 50%;\\n\\t\\t\\t\\ttransform: translateY(-50%);\\n\\n\\t\\t\\t\\t@mixin ck-dir ltr {\\n\\t\\t\\t\\t\\tright: var(--ck-spacing-standard);\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t@mixin ck-dir rtl {\\n\\t\\t\\t\\t\\tleft: var(--ck-spacing-standard);\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\tcolor: var(--ck-color-base-border);\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t/* The replace fieldset */\\n\\t\\t&.ck-find-and-replace-form__replace {\\n\\t\\t\\tflex-wrap: wrap;\\n\\t\\t\\tjustify-content: flex-end;\\n\\t\\t\\tmargin-top: calc( -1 * var(--ck-spacing-large) );\\n\\n\\t\\t\\t& > .ck-labeled-field-view {\\n\\t\\t\\t\\tmargin-bottom: var(--ck-spacing-large);\\n\\t\\t\\t}\\n\\n\\t\\t\\t& > .ck-options-dropdown {\\n\\t\\t\\t\\tmargin-right: auto;\\n\\t\\t\\t\\tmargin-left: 0;\\n\\t\\t\\t}\\n\\n\\t\\t\\t& > .ck-labeled-field-view,\\n\\t\\t\\t& > .ck-labeled-field-view .ck-input {\\n\\t\\t\\t\\twidth: 100%;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n}\\n\\n@mixin ck-media-phone {\\n\\t.ck.ck-find-and-replace-form {\\n\\t\\twidth: 300px;\\n\\n\\t\\t& fieldset {\\n\\t\\t\\tflex-wrap: wrap;\\n\\n\\t\\t\\t/* The find fieldset */\\n\\t\\t\\t&.ck-find-and-replace-form__find {\\n\\t\\t\\t\\t& .ck-labeled-field-view {\\n\\t\\t\\t\\t\\tflex: 1 0 auto;\\n\\t\\t\\t\\t\\twidth: 100%;\\n\\t\\t\\t\\t\\tmargin-bottom: var(--ck-spacing-standard);\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t& > .ck-button {\\n\\t\\t\\t\\t\\ttext-align: center;\\n\\n\\t\\t\\t\\t\\t&:first-of-type {\\n\\t\\t\\t\\t\\t\\tflex: 1 1 auto;\\n\\n\\t\\t\\t\\t\\t\\t@mixin ck-dir ltr {\\n\\t\\t\\t\\t\\t\\t\\tmargin-left: 0;\\n\\t\\t\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t\\t\\t@mixin ck-dir rtl {\\n\\t\\t\\t\\t\\t\\t\\tmargin-right: 0;\\n\\t\\t\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t\\t\\t& .ck-button__label {\\n\\t\\t\\t\\t\\t\\t\\twidth: 100%;\\n\\t\\t\\t\\t\\t\\t\\ttext-align: center;\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\n\\t\\t\\t/* The replace fieldset */\\n\\t\\t\\t&.ck-find-and-replace-form__replace > :not(.ck-labeled-field-view) {\\n\\t\\t\\t\\tflex: 1 1 auto;\\n\\n\\t\\t\\t\\t&.ck-dropdown {\\n\\t\\t\\t\\t\\tflex-grow: 0;\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t&.ck-button > .ck-button__label {\\n\\t\\t\\t\\t\\twidth: 100%;\\n\\t\\t\\t\\t\\ttext-align: center;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n}\\n\",\"/*\\n * Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.\\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\\n */\\n\\n@define-mixin ck-media-phone {\\n\\t@media screen and (max-width: 600px) {\\n\\t\\t@mixin-content;\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".ck-vertical-form .ck-button:after{bottom:-1px;content:\\\"\\\";position:absolute;right:-1px;top:-1px;width:0;z-index:1}.ck-vertical-form .ck-button:focus:after{display:none}@media screen and (max-width:600px){.ck.ck-responsive-form .ck-button:after{bottom:-1px;content:\\\"\\\";position:absolute;right:-1px;top:-1px;width:0;z-index:1}.ck.ck-responsive-form .ck-button:focus:after{display:none}}.ck-vertical-form>.ck-button:nth-last-child(2):after{border-right:1px solid var(--ck-color-base-border)}.ck.ck-responsive-form{padding:var(--ck-spacing-large)}.ck.ck-responsive-form:focus{outline:none}[dir=ltr] .ck.ck-responsive-form>:not(:first-child),[dir=rtl] .ck.ck-responsive-form>:not(:last-child){margin-left:var(--ck-spacing-standard)}@media screen and (max-width:600px){.ck.ck-responsive-form{padding:0;width:calc(var(--ck-input-width)*.8)}.ck.ck-responsive-form .ck-labeled-field-view{margin:var(--ck-spacing-large) var(--ck-spacing-large) 0}.ck.ck-responsive-form .ck-labeled-field-view .ck-input-text{min-width:0;width:100%}.ck.ck-responsive-form .ck-labeled-field-view .ck-labeled-field-view__error{white-space:normal}.ck.ck-responsive-form>.ck-button:nth-last-child(2):after{border-right:1px solid var(--ck-color-base-border)}.ck.ck-responsive-form>.ck-button:last-child,.ck.ck-responsive-form>.ck-button:nth-last-child(2){border-radius:0;margin-top:var(--ck-spacing-large);padding:var(--ck-spacing-standard)}.ck.ck-responsive-form>.ck-button:last-child:not(:focus),.ck.ck-responsive-form>.ck-button:nth-last-child(2):not(:focus){border-top:1px solid var(--ck-color-base-border)}[dir=ltr] .ck.ck-responsive-form>.ck-button:last-child,[dir=ltr] .ck.ck-responsive-form>.ck-button:nth-last-child(2),[dir=rtl] .ck.ck-responsive-form>.ck-button:last-child,[dir=rtl] .ck.ck-responsive-form>.ck-button:nth-last-child(2){margin-left:0}[dir=rtl] .ck.ck-responsive-form>.ck-button:last-child:last-of-type,[dir=rtl] .ck.ck-responsive-form>.ck-button:nth-last-child(2):last-of-type{border-right:1px solid var(--ck-color-base-border)}}\", \"\",{\"version\":3,\"sources\":[\"webpack://./../ckeditor5-ui/theme/components/responsive-form/responsiveform.css\",\"webpack://./../ckeditor5-ui/theme/mixins/_rwd.css\",\"webpack://./../ckeditor5-theme-lark/theme/ckeditor5-ui/components/responsive-form/responsiveform.css\"],\"names\":[],\"mappings\":\"AAQC,mCAMC,WAAY,CALZ,UAAW,CAEX,iBAAkB,CAClB,UAAW,CACX,QAAS,CAHT,OAAQ,CAKR,SACD,CAEA,yCACC,YACD,CCdA,oCDoBE,wCAMC,WAAY,CALZ,UAAW,CAEX,iBAAkB,CAClB,UAAW,CACX,QAAS,CAHT,OAAQ,CAKR,SACD,CAEA,8CACC,YACD,CC9BF,CCAD,qDACC,kDACD,CAEA,uBACC,+BAmED,CAjEC,6BAEC,YACD,CASC,uGACC,sCACD,CDvBD,oCCMD,uBAqBE,SAAU,CACV,oCA8CF,CA5CE,8CACC,wDAWD,CATC,6DACC,WAAY,CACZ,UACD,CAGA,4EACC,kBACD,CAKA,0DACC,kDACD,CAGD,iGAIC,eAAgB,CADhB,kCAAmC,CADnC,kCAmBD,CAfC,yHACC,gDACD,CARD,0OAeE,aAMF,CAJE,+IACC,kDACD,CDpEH\",\"sourcesContent\":[\"/*\\n * Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.\\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\\n */\\n\\n@import \\\"@ckeditor/ckeditor5-ui/theme/mixins/_rwd.css\\\";\\n\\n.ck-vertical-form .ck-button {\\n\\t&::after {\\n\\t\\tcontent: \\\"\\\";\\n\\t\\twidth: 0;\\n\\t\\tposition: absolute;\\n\\t\\tright: -1px;\\n\\t\\ttop: -1px;\\n\\t\\tbottom: -1px;\\n\\t\\tz-index: 1;\\n\\t}\\n\\n\\t&:focus::after {\\n\\t\\tdisplay: none;\\n\\t}\\n}\\n\\n.ck.ck-responsive-form {\\n\\t@mixin ck-media-phone {\\n\\t\\t& .ck-button {\\n\\t\\t\\t&::after {\\n\\t\\t\\t\\tcontent: \\\"\\\";\\n\\t\\t\\t\\twidth: 0;\\n\\t\\t\\t\\tposition: absolute;\\n\\t\\t\\t\\tright: -1px;\\n\\t\\t\\t\\ttop: -1px;\\n\\t\\t\\t\\tbottom: -1px;\\n\\t\\t\\t\\tz-index: 1;\\n\\t\\t\\t}\\n\\n\\t\\t\\t&:focus::after {\\n\\t\\t\\t\\tdisplay: none;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n}\\n\",\"/*\\n * Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.\\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\\n */\\n\\n@define-mixin ck-media-phone {\\n\\t@media screen and (max-width: 600px) {\\n\\t\\t@mixin-content;\\n\\t}\\n}\\n\",\"/*\\n * Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.\\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\\n */\\n\\n@import \\\"@ckeditor/ckeditor5-ui/theme/mixins/_rwd.css\\\";\\n@import \\\"@ckeditor/ckeditor5-ui/theme/mixins/_dir.css\\\";\\n\\n.ck-vertical-form > .ck-button:nth-last-child(2)::after {\\n\\tborder-right: 1px solid var(--ck-color-base-border);\\n}\\n\\n.ck.ck-responsive-form {\\n\\tpadding: var(--ck-spacing-large);\\n\\n\\t&:focus {\\n\\t\\t/* See: https://github.com/ckeditor/ckeditor5/issues/4773 */\\n\\t\\toutline: none;\\n\\t}\\n\\n\\t@mixin ck-dir ltr {\\n\\t\\t& > :not(:first-child) {\\n\\t\\t\\tmargin-left: var(--ck-spacing-standard);\\n\\t\\t}\\n\\t}\\n\\n\\t@mixin ck-dir rtl {\\n\\t\\t& > :not(:last-child) {\\n\\t\\t\\tmargin-left: var(--ck-spacing-standard);\\n\\t\\t}\\n\\t}\\n\\n\\t@mixin ck-media-phone {\\n\\t\\tpadding: 0;\\n\\t\\twidth: calc(.8 * var(--ck-input-width));\\n\\n\\t\\t& .ck-labeled-field-view {\\n\\t\\t\\tmargin: var(--ck-spacing-large) var(--ck-spacing-large) 0;\\n\\n\\t\\t\\t& .ck-input-text {\\n\\t\\t\\t\\tmin-width: 0;\\n\\t\\t\\t\\twidth: 100%;\\n\\t\\t\\t}\\n\\n\\t\\t\\t/* Let the long error messages wrap in the narrow form. */\\n\\t\\t\\t& .ck-labeled-field-view__error {\\n\\t\\t\\t\\twhite-space: normal;\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t/* Styles for two last buttons in the form (save&cancel, edit&unlink, etc.). */\\n\\t\\t& > .ck-button:nth-last-child(2) {\\n\\t\\t\\t&::after {\\n\\t\\t\\t\\tborder-right: 1px solid var(--ck-color-base-border);\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t& > .ck-button:nth-last-child(1),\\n\\t\\t& > .ck-button:nth-last-child(2) {\\n\\t\\t\\tpadding: var(--ck-spacing-standard);\\n\\t\\t\\tmargin-top: var(--ck-spacing-large);\\n\\t\\t\\tborder-radius: 0;\\n\\n\\t\\t\\t&:not(:focus) {\\n\\t\\t\\t\\tborder-top: 1px solid var(--ck-color-base-border);\\n\\t\\t\\t}\\n\\n\\t\\t\\t@mixin ck-dir ltr {\\n\\t\\t\\t\\tmargin-left: 0;\\n\\t\\t\\t}\\n\\n\\t\\t\\t@mixin ck-dir rtl {\\n\\t\\t\\t\\tmargin-left: 0;\\n\\n\\t\\t\\t\\t&:last-of-type {\\n\\t\\t\\t\\t\\tborder-right: 1px solid var(--ck-color-base-border);\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","\"use strict\";\n\n/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n Author Tobias Koppers @sokra\n*/\n// css base code, injected by the css-loader\n// eslint-disable-next-line func-names\nmodule.exports = function (cssWithMappingToString) {\n var list = []; // return the list of modules as css string\n\n list.toString = function toString() {\n return this.map(function (item) {\n var content = cssWithMappingToString(item);\n\n if (item[2]) {\n return \"@media \".concat(item[2], \" {\").concat(content, \"}\");\n }\n\n return content;\n }).join(\"\");\n }; // import a list of modules into the list\n // eslint-disable-next-line func-names\n\n\n list.i = function (modules, mediaQuery, dedupe) {\n if (typeof modules === \"string\") {\n // eslint-disable-next-line no-param-reassign\n modules = [[null, modules, \"\"]];\n }\n\n var alreadyImportedModules = {};\n\n if (dedupe) {\n for (var i = 0; i < this.length; i++) {\n // eslint-disable-next-line prefer-destructuring\n var id = this[i][0];\n\n if (id != null) {\n alreadyImportedModules[id] = true;\n }\n }\n }\n\n for (var _i = 0; _i < modules.length; _i++) {\n var item = [].concat(modules[_i]);\n\n if (dedupe && alreadyImportedModules[item[0]]) {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n if (mediaQuery) {\n if (!item[2]) {\n item[2] = mediaQuery;\n } else {\n item[2] = \"\".concat(mediaQuery, \" and \").concat(item[2]);\n }\n }\n\n list.push(item);\n }\n };\n\n return list;\n};","\"use strict\";\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _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.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr && (typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]); if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nmodule.exports = function cssWithMappingToString(item) {\n var _item = _slicedToArray(item, 4),\n content = _item[1],\n cssMapping = _item[3];\n\n if (!cssMapping) {\n return content;\n }\n\n if (typeof btoa === \"function\") {\n // eslint-disable-next-line no-undef\n var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(cssMapping))));\n var data = \"sourceMappingURL=data:application/json;charset=utf-8;base64,\".concat(base64);\n var sourceMapping = \"/*# \".concat(data, \" */\");\n var sourceURLs = cssMapping.sources.map(function (source) {\n return \"/*# sourceURL=\".concat(cssMapping.sourceRoot || \"\").concat(source, \" */\");\n });\n return [content].concat(sourceURLs).concat([sourceMapping]).join(\"\\n\");\n }\n\n return [content].join(\"\\n\");\n};","export default \"<svg viewBox=\\\"0 0 20 20\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"m12.87 13.786 1.532-1.286 3.857 4.596a1 1 0 1 1-1.532 1.286l-3.857-4.596z\\\"/><path d=\\\"M16.004 8.5a6.5 6.5 0 0 1-9.216 5.905c-1.154-.53-.863-1.415-.663-1.615.194-.194.564-.592 1.635-.141a4.5 4.5 0 0 0 5.89-5.904l-.104-.227 1.332-1.331c.045-.046.196-.041.224.007a6.47 6.47 0 0 1 .902 3.306zm-3.4-5.715c.562.305.742 1.106.354 1.494-.388.388-.995.414-1.476.178a4.5 4.5 0 0 0-6.086 5.882l.114.236-1.348 1.349c-.038.037-.17.022-.198-.023a6.5 6.5 0 0 1 5.54-9.9 6.469 6.469 0 0 1 3.1.784z\\\"/><path d=\\\"M4.001 11.93.948 8.877a.2.2 0 0 1 .141-.341h6.106a.2.2 0 0 1 .141.341L4.283 11.93a.2.2 0 0 1-.282 0zm11.083-6.789 3.053 3.053a.2.2 0 0 1-.14.342H11.89a.2.2 0 0 1-.14-.342l3.052-3.053a.2.2 0 0 1 .282 0z\\\"/></svg>\";","export default \"<svg viewBox=\\\"0 0 20 20\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M11.463 5.187a.888.888 0 1 1 1.254 1.255L9.16 10l3.557 3.557a.888.888 0 1 1-1.254 1.255L7.26 10.61a.888.888 0 0 1 .16-1.382l4.043-4.042z\\\"/></svg>\";","import api from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[1].use[2]!./findandreplace.css\";\n\nvar options = {\"injectType\":\"singletonStyleTag\",\"attributes\":{\"data-cke\":true}};\n\noptions.insert = \"head\";\noptions.singleton = true;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import api from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[1].use[2]!./findandreplaceform.css\";\n\nvar options = {\"injectType\":\"singletonStyleTag\",\"attributes\":{\"data-cke\":true}};\n\noptions.insert = \"head\";\noptions.singleton = true;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import api from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[1].use[2]!./responsiveform.css\";\n\nvar options = {\"injectType\":\"singletonStyleTag\",\"attributes\":{\"data-cke\":true}};\n\noptions.insert = \"head\";\noptions.singleton = true;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","\"use strict\";\n\nvar isOldIE = function isOldIE() {\n var memo;\n return function memorize() {\n if (typeof memo === 'undefined') {\n // Test for IE <= 9 as proposed by Browserhacks\n // @see http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805\n // Tests for existence of standard globals is to allow style-loader\n // to operate correctly into non-standard environments\n // @see https://github.com/webpack-contrib/style-loader/issues/177\n memo = Boolean(window && document && document.all && !window.atob);\n }\n\n return memo;\n };\n}();\n\nvar getTarget = function getTarget() {\n var memo = {};\n return function memorize(target) {\n if (typeof memo[target] === 'undefined') {\n var styleTarget = document.querySelector(target); // Special case to return head of iframe instead of iframe itself\n\n if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {\n try {\n // This will throw an exception if access to iframe is blocked\n // due to cross-origin restrictions\n styleTarget = styleTarget.contentDocument.head;\n } catch (e) {\n // istanbul ignore next\n styleTarget = null;\n }\n }\n\n memo[target] = styleTarget;\n }\n\n return memo[target];\n };\n}();\n\nvar stylesInDom = [];\n\nfunction getIndexByIdentifier(identifier) {\n var result = -1;\n\n for (var i = 0; i < stylesInDom.length; i++) {\n if (stylesInDom[i].identifier === identifier) {\n result = i;\n break;\n }\n }\n\n return result;\n}\n\nfunction modulesToDom(list, options) {\n var idCountMap = {};\n var identifiers = [];\n\n for (var i = 0; i < list.length; i++) {\n var item = list[i];\n var id = options.base ? item[0] + options.base : item[0];\n var count = idCountMap[id] || 0;\n var identifier = \"\".concat(id, \" \").concat(count);\n idCountMap[id] = count + 1;\n var index = getIndexByIdentifier(identifier);\n var obj = {\n css: item[1],\n media: item[2],\n sourceMap: item[3]\n };\n\n if (index !== -1) {\n stylesInDom[index].references++;\n stylesInDom[index].updater(obj);\n } else {\n stylesInDom.push({\n identifier: identifier,\n updater: addStyle(obj, options),\n references: 1\n });\n }\n\n identifiers.push(identifier);\n }\n\n return identifiers;\n}\n\nfunction insertStyleElement(options) {\n var style = document.createElement('style');\n var attributes = options.attributes || {};\n\n if (typeof attributes.nonce === 'undefined') {\n var nonce = typeof __webpack_nonce__ !== 'undefined' ? __webpack_nonce__ : null;\n\n if (nonce) {\n attributes.nonce = nonce;\n }\n }\n\n Object.keys(attributes).forEach(function (key) {\n style.setAttribute(key, attributes[key]);\n });\n\n if (typeof options.insert === 'function') {\n options.insert(style);\n } else {\n var target = getTarget(options.insert || 'head');\n\n if (!target) {\n throw new Error(\"Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.\");\n }\n\n target.appendChild(style);\n }\n\n return style;\n}\n\nfunction removeStyleElement(style) {\n // istanbul ignore if\n if (style.parentNode === null) {\n return false;\n }\n\n style.parentNode.removeChild(style);\n}\n/* istanbul ignore next */\n\n\nvar replaceText = function replaceText() {\n var textStore = [];\n return function replace(index, replacement) {\n textStore[index] = replacement;\n return textStore.filter(Boolean).join('\\n');\n };\n}();\n\nfunction applyToSingletonTag(style, index, remove, obj) {\n var css = remove ? '' : obj.media ? \"@media \".concat(obj.media, \" {\").concat(obj.css, \"}\") : obj.css; // For old IE\n\n /* istanbul ignore if */\n\n if (style.styleSheet) {\n style.styleSheet.cssText = replaceText(index, css);\n } else {\n var cssNode = document.createTextNode(css);\n var childNodes = style.childNodes;\n\n if (childNodes[index]) {\n style.removeChild(childNodes[index]);\n }\n\n if (childNodes.length) {\n style.insertBefore(cssNode, childNodes[index]);\n } else {\n style.appendChild(cssNode);\n }\n }\n}\n\nfunction applyToTag(style, options, obj) {\n var css = obj.css;\n var media = obj.media;\n var sourceMap = obj.sourceMap;\n\n if (media) {\n style.setAttribute('media', media);\n } else {\n style.removeAttribute('media');\n }\n\n if (sourceMap && typeof btoa !== 'undefined') {\n css += \"\\n/*# sourceMappingURL=data:application/json;base64,\".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), \" */\");\n } // For old IE\n\n /* istanbul ignore if */\n\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n while (style.firstChild) {\n style.removeChild(style.firstChild);\n }\n\n style.appendChild(document.createTextNode(css));\n }\n}\n\nvar singleton = null;\nvar singletonCounter = 0;\n\nfunction addStyle(obj, options) {\n var style;\n var update;\n var remove;\n\n if (options.singleton) {\n var styleIndex = singletonCounter++;\n style = singleton || (singleton = insertStyleElement(options));\n update = applyToSingletonTag.bind(null, style, styleIndex, false);\n remove = applyToSingletonTag.bind(null, style, styleIndex, true);\n } else {\n style = insertStyleElement(options);\n update = applyToTag.bind(null, style, options);\n\n remove = function remove() {\n removeStyleElement(style);\n };\n }\n\n update(obj);\n return function updateStyle(newObj) {\n if (newObj) {\n if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap) {\n return;\n }\n\n update(obj = newObj);\n } else {\n remove();\n }\n };\n}\n\nmodule.exports = function (list, options) {\n options = options || {}; // Force single-tag solution on IE6-9, which has a hard limit on the # of <style>\n // tags it will allow on a page\n\n if (!options.singleton && typeof options.singleton !== 'boolean') {\n options.singleton = isOldIE();\n }\n\n list = list || [];\n var lastIdentifiers = modulesToDom(list, options);\n return function update(newList) {\n newList = newList || [];\n\n if (Object.prototype.toString.call(newList) !== '[object Array]') {\n return;\n }\n\n for (var i = 0; i < lastIdentifiers.length; i++) {\n var identifier = lastIdentifiers[i];\n var index = getIndexByIdentifier(identifier);\n stylesInDom[index].references--;\n }\n\n var newLastIdentifiers = modulesToDom(newList, options);\n\n for (var _i = 0; _i < lastIdentifiers.length; _i++) {\n var _identifier = lastIdentifiers[_i];\n\n var _index = getIndexByIdentifier(_identifier);\n\n if (stylesInDom[_index].references === 0) {\n stylesInDom[_index].updater();\n\n stylesInDom.splice(_index, 1);\n }\n }\n\n lastIdentifiers = newLastIdentifiers;\n };\n};","/**\n * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module utils/dom/getborderwidths\n */\n\n/**\n * Returns an object containing CSS border widths of a specified HTML element.\n *\n * @param {HTMLElement} element An element which has CSS borders.\n * @returns {module:utils/dom/getborderwidths~BorderWidths} An object containing `top`, `left`, `right` and `bottom` properties\n * with numerical values of the `border-[top,left,right,bottom]-width` CSS styles.\n */\nexport default function getBorderWidths( element: HTMLElement ): BorderWidths {\n\t// Call getComputedStyle on the window the element document belongs to.\n\tconst style = element.ownerDocument.defaultView!.getComputedStyle( element );\n\n\treturn {\n\t\ttop: parseInt( style.borderTopWidth, 10 ),\n\t\tright: parseInt( style.borderRightWidth, 10 ),\n\t\tbottom: parseInt( style.borderBottomWidth, 10 ),\n\t\tleft: parseInt( style.borderLeftWidth, 10 )\n\t};\n}\n\n/**\n * An object describing widths of `HTMLElement` borders.\n *\n * @typedef {Object} module:utils/dom/getborderwidths~BorderWidths\n * @property {Number} top\n * @property {Number} right\n * @property {Number} bottom\n * @property {Number} left\n*/\nexport interface BorderWidths {\n\ttop: number;\n\tright: number;\n\tbottom: number;\n\tleft: number;\n}\n","/**\n * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module utils/dom/isrange\n */\n\n/**\n * Checks if the object is a native DOM Range.\n *\n * @param {*} obj\n * @returns {Boolean}\n */\nexport default function isRange( obj: unknown ): obj is Range {\n\treturn Object.prototype.toString.apply( obj ) == '[object Range]';\n}\n","/**\n * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module utils/dom/istext\n */\n\n/**\n * Checks if the object is a native DOM Text node.\n *\n * @param {*} obj\n * @returns {Boolean}\n */\nexport default function isText( obj: unknown ): obj is Text {\n\treturn Object.prototype.toString.call( obj ) == '[object Text]';\n}\n","/**\n * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module utils/dom/iswindow\n */\n\n/**\n * Checks if the object is a native DOM Window.\n *\n * @param {*} obj\n * @returns {Boolean}\n */\nexport default function isWindow( obj: unknown ): obj is Window {\n\tconst stringifiedObject = Object.prototype.toString.apply( obj );\n\n\t// Returns `true` for the `window` object in browser environments.\n\tif ( stringifiedObject == '[object Window]' ) {\n\t\treturn true;\n\t}\n\n\t// Returns `true` for the `window` object in the Electron environment.\n\tif ( stringifiedObject == '[object global]' ) {\n\t\treturn true;\n\t}\n\n\treturn false;\n}\n","/**\n * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module utils/dom/rect\n */\n\nimport isRange from './isrange';\nimport isWindow from './iswindow';\nimport getBorderWidths from './getborderwidths';\nimport isText from './istext';\n\nconst rectProperties: Array<keyof RectLike> = [ 'top', 'right', 'bottom', 'left', 'width', 'height' ];\n\n/**\n * A helper class representing a `ClientRect` object, e.g. value returned by\n * the native `object.getBoundingClientRect()` method. Provides a set of methods\n * to manipulate the rect and compare it against other rect instances.\n */\nexport default class Rect {\n\t/**\n\t * The \"top\" value of the rect.\n\t *\n\t * @readonly\n\t * @member {Number}\n\t */\n\tdeclare public top: number;\n\n\t/**\n\t * The \"right\" value of the rect.\n\t *\n\t * @readonly\n\t * @member {Number}\n\t */\n\tdeclare public right: number;\n\n\t/**\n\t * The \"bottom\" value of the rect.\n\t *\n\t * @readonly\n\t * @member {Number}\n\t */\n\tdeclare public bottom: number;\n\n\t/**\n\t * The \"left\" value of the rect.\n\t *\n\t * @readonly\n\t * @member {Number}\n\t */\n\tdeclare public left: number;\n\n\t/**\n\t * The \"width\" value of the rect.\n\t *\n\t * @readonly\n\t * @member {Number}\n\t */\n\tdeclare public width: number;\n\n\t/**\n\t * The \"height\" value of the rect.\n\t *\n\t * @readonly\n\t * @member {Number}\n\t */\n\tdeclare public height: number;\n\n\t/**\n\t * The object this rect is for.\n\t *\n\t * @protected\n\t * @readonly\n\t * @member {module:utils/dom/rect~RectSource}\n\t */\n\tprivate _source!: RectSource;\n\n\t/**\n\t * Creates an instance of rect.\n\t *\n\t *\t\t// Rect of an HTMLElement.\n\t *\t\tconst rectA = new Rect( document.body );\n\t *\n\t *\t\t// Rect of a DOM Range.\n\t *\t\tconst rectB = new Rect( document.getSelection().getRangeAt( 0 ) );\n\t *\n\t *\t\t// Rect of a window (web browser viewport).\n\t *\t\tconst rectC = new Rect( window );\n\t *\n\t *\t\t// Rect out of an object.\n\t *\t\tconst rectD = new Rect( { top: 0, right: 10, bottom: 10, left: 0, width: 10, height: 10 } );\n\t *\n\t *\t\t// Rect out of another Rect instance.\n\t *\t\tconst rectE = new Rect( rectD );\n\t *\n\t *\t\t// Rect out of a ClientRect.\n\t *\t\tconst rectF = new Rect( document.body.getClientRects().item( 0 ) );\n\t *\n\t * **Note**: By default a rect of an HTML element includes its CSS borders and scrollbars (if any)\n\t * ant the rect of a `window` includes scrollbars too. Use {@link #excludeScrollbarsAndBorders}\n\t * to get the inner part of the rect.\n\t *\n\t * @param {module:utils/dom/rect~RectSource} source A source object to create the rect.\n\t */\n\tconstructor( source: RectSource ) {\n\t\tconst isSourceRange = isRange( source );\n\n\t\tObject.defineProperty( this, '_source', {\n\t\t\t// If the source is a Rect instance, copy it's #_source.\n\t\t\tvalue: ( source as any )._source || source,\n\t\t\twritable: true,\n\t\t\tenumerable: false\n\t\t} );\n\n\t\tif ( isDomElement( source ) || isSourceRange ) {\n\t\t\t// The `Rect` class depends on `getBoundingClientRect` and `getClientRects` DOM methods. If the source\n\t\t\t// of a rect in an HTML element or a DOM range but it does not belong to any rendered DOM tree, these methods\n\t\t\t// will fail to obtain the geometry and the rect instance makes little sense to the features using it.\n\t\t\t// To get rid of this warning make sure the source passed to the constructor is a descendant of `window.document.body`.\n\t\t\t// @if CK_DEBUG // const sourceNode = isSourceRange ? source.startContainer : source;\n\t\t\t// @if CK_DEBUG // if ( !sourceNode.ownerDocument || !sourceNode.ownerDocument.body.contains( sourceNode ) ) {\n\t\t\t// @if CK_DEBUG // \tconsole.warn(\n\t\t\t// @if CK_DEBUG // \t\t'rect-source-not-in-dom: The source of this rect does not belong to any rendered DOM tree.',\n\t\t\t// @if CK_DEBUG // \t\t{ source } );\n\t\t\t// @if CK_DEBUG // }\n\n\t\t\tif ( isSourceRange ) {\n\t\t\t\tconst rangeRects = Rect.getDomRangeRects( source );\n\t\t\t\tcopyRectProperties( this, Rect.getBoundingRect( rangeRects )! );\n\t\t\t} else {\n\t\t\t\tcopyRectProperties( this, source.getBoundingClientRect() );\n\t\t\t}\n\t\t} else if ( isWindow( source ) ) {\n\t\t\tconst { innerWidth, innerHeight } = source;\n\n\t\t\tcopyRectProperties( this, {\n\t\t\t\ttop: 0,\n\t\t\t\tright: innerWidth,\n\t\t\t\tbottom: innerHeight,\n\t\t\t\tleft: 0,\n\t\t\t\twidth: innerWidth,\n\t\t\t\theight: innerHeight\n\t\t\t} );\n\t\t} else {\n\t\t\tcopyRectProperties( this, source );\n\t\t}\n\t}\n\n\t/**\n\t * Returns a clone of the rect.\n\t *\n\t * @returns {module:utils/dom/rect~Rect} A cloned rect.\n\t */\n\tpublic clone(): Rect {\n\t\treturn new Rect( this );\n\t}\n\n\t/**\n\t * Moves the rect so that its upper–left corner lands in desired `[ x, y ]` location.\n\t *\n\t * @param {Number} x Desired horizontal location.\n\t * @param {Number} y Desired vertical location.\n\t * @returns {module:utils/dom/rect~Rect} A rect which has been moved.\n\t */\n\tpublic moveTo( x: number, y: number ): this {\n\t\tthis.top = y;\n\t\tthis.right = x + this.width;\n\t\tthis.bottom = y + this.height;\n\t\tthis.left = x;\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Moves the rect in–place by a dedicated offset.\n\t *\n\t * @param {Number} x A horizontal offset.\n\t * @param {Number} y A vertical offset\n\t * @returns {module:utils/dom/rect~Rect} A rect which has been moved.\n\t */\n\tpublic moveBy( x: number, y: number ): this {\n\t\tthis.top += y;\n\t\tthis.right += x;\n\t\tthis.left += x;\n\t\tthis.bottom += y;\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Returns a new rect a a result of intersection with another rect.\n\t *\n\t * @param {module:utils/dom/rect~Rect} anotherRect\n\t * @returns {module:utils/dom/rect~Rect|null}\n\t */\n\tpublic getIntersection( anotherRect: Rect ): Rect | null {\n\t\tconst rect = {\n\t\t\ttop: Math.max( this.top, anotherRect.top ),\n\t\t\tright: Math.min( this.right, anotherRect.right ),\n\t\t\tbottom: Math.min( this.bottom, anotherRect.bottom ),\n\t\t\tleft: Math.max( this.left, anotherRect.left ),\n\t\t\twidth: 0,\n\t\t\theight: 0\n\t\t};\n\n\t\trect.width = rect.right - rect.left;\n\t\trect.height = rect.bottom - rect.top;\n\n\t\tif ( rect.width < 0 || rect.height < 0 ) {\n\t\t\treturn null;\n\t\t} else {\n\t\t\treturn new Rect( rect );\n\t\t}\n\t}\n\n\t/**\n\t * Returns the area of intersection with another rect.\n\t *\n\t * @param {module:utils/dom/rect~Rect} anotherRect\n\t * @returns {Number} Area of intersection.\n\t */\n\tpublic getIntersectionArea( anotherRect: Rect ): number {\n\t\tconst rect = this.getIntersection( anotherRect );\n\n\t\tif ( rect ) {\n\t\t\treturn rect.getArea();\n\t\t} else {\n\t\t\treturn 0;\n\t\t}\n\t}\n\n\t/**\n\t * Returns the area of the rect.\n\t *\n\t * @returns {Number}\n\t */\n\tpublic getArea(): number {\n\t\treturn this.width * this.height;\n\t}\n\n\t/**\n\t * Returns a new rect, a part of the original rect, which is actually visible to the user,\n\t * e.g. an original rect cropped by parent element rects which have `overflow` set in CSS\n\t * other than `\"visible\"`.\n\t *\n\t * If there's no such visible rect, which is when the rect is limited by one or many of\n\t * the ancestors, `null` is returned.\n\t *\n\t * @returns {module:utils/dom/rect~Rect|null} A visible rect instance or `null`, if there's none.\n\t */\n\tpublic getVisible(): Rect | null {\n\t\tconst source: RectSource & { parentNode?: Node | null; commonAncestorContainer?: Node | null } = this._source;\n\t\tlet visibleRect = this.clone();\n\n\t\t// There's no ancestor to crop <body> with the overflow.\n\t\tif ( !isBody( source ) ) {\n\t\t\tlet parent = source.parentNode || source.commonAncestorContainer;\n\n\t\t\t// Check the ancestors all the way up to the <body>.\n\t\t\twhile ( parent && !isBody( parent ) ) {\n\t\t\t\tconst parentRect = new Rect( parent as HTMLElement );\n\t\t\t\tconst intersectionRect = visibleRect.getIntersection( parentRect );\n\n\t\t\t\tif ( intersectionRect ) {\n\t\t\t\t\tif ( intersectionRect.getArea() < visibleRect.getArea() ) {\n\t\t\t\t\t\t// Reduce the visible rect to the intersection.\n\t\t\t\t\t\tvisibleRect = intersectionRect;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// There's no intersection, the rect is completely invisible.\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\tparent = parent.parentNode;\n\t\t\t}\n\t\t}\n\n\t\treturn visibleRect;\n\t}\n\n\t/**\n\t * Checks if all property values ({@link #top}, {@link #left}, {@link #right},\n\t * {@link #bottom}, {@link #width} and {@link #height}) are the equal in both rect\n\t * instances.\n\t *\n\t * @param {module:utils/dom/rect~Rect} anotherRect A rect instance to compare with.\n\t * @returns {Boolean} `true` when Rects are equal. `false` otherwise.\n\t */\n\tpublic isEqual( anotherRect: Rect ): boolean {\n\t\tfor ( const prop of rectProperties ) {\n\t\t\tif ( this[ prop ] !== anotherRect[ prop ] ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t}\n\n\t/**\n\t * Checks whether a rect fully contains another rect instance.\n\t *\n\t * @param {module:utils/dom/rect~Rect} anotherRect\n\t * @returns {Boolean} `true` if contains, `false` otherwise.\n\t */\n\tpublic contains( anotherRect: Rect ): boolean {\n\t\tconst intersectRect = this.getIntersection( anotherRect );\n\n\t\treturn !!( intersectRect && intersectRect.isEqual( anotherRect ) );\n\t}\n\n\t/**\n\t * Excludes scrollbars and CSS borders from the rect.\n\t *\n\t * * Borders are removed when {@link #_source} is an HTML element.\n\t * * Scrollbars are excluded from HTML elements and the `window`.\n\t *\n\t * @returns {module:utils/dom/rect~Rect} A rect which has been updated.\n\t */\n\tpublic excludeScrollbarsAndBorders(): this {\n\t\tconst source = this._source as ( HTMLElement | Window );\n\t\tlet scrollBarWidth, scrollBarHeight, direction;\n\n\t\tif ( isWindow( source ) ) {\n\t\t\tscrollBarWidth = source.innerWidth - source.document.documentElement.clientWidth;\n\t\t\tscrollBarHeight = source.innerHeight - source.document.documentElement.clientHeight;\n\t\t\tdirection = source.getComputedStyle( source.document.documentElement ).direction;\n\t\t} else {\n\t\t\tconst borderWidths = getBorderWidths( source );\n\n\t\t\tscrollBarWidth = source.offsetWidth - source.clientWidth - borderWidths.left - borderWidths.right;\n\t\t\tscrollBarHeight = source.offsetHeight - source.clientHeight - borderWidths.top - borderWidths.bottom;\n\t\t\tdirection = source.ownerDocument.defaultView!.getComputedStyle( source ).direction;\n\n\t\t\tthis.left += borderWidths.left;\n\t\t\tthis.top += borderWidths.top;\n\t\t\tthis.right -= borderWidths.right;\n\t\t\tthis.bottom -= borderWidths.bottom;\n\t\t\tthis.width = this.right - this.left;\n\t\t\tthis.height = this.bottom - this.top;\n\t\t}\n\n\t\tthis.width -= scrollBarWidth;\n\n\t\tif ( direction === 'ltr' ) {\n\t\t\tthis.right -= scrollBarWidth;\n\t\t} else {\n\t\t\tthis.left += scrollBarWidth;\n\t\t}\n\n\t\tthis.height -= scrollBarHeight;\n\t\tthis.bottom -= scrollBarHeight;\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Returns an array of rects of the given native DOM Range.\n\t *\n\t * @param {Range} range A native DOM range.\n\t * @returns {Array.<module:utils/dom/rect~Rect>} DOM Range rects.\n\t */\n\tpublic static getDomRangeRects( range: Range ): Array<Rect> {\n\t\tconst rects: Array<Rect> = [];\n\t\t// Safari does not iterate over ClientRectList using for...of loop.\n\t\tconst clientRects = Array.from( range.getClientRects() );\n\n\t\tif ( clientRects.length ) {\n\t\t\tfor ( const rect of clientRects ) {\n\t\t\t\trects.push( new Rect( rect ) );\n\t\t\t}\n\t\t}\n\t\t// If there's no client rects for the Range, use parent container's bounding rect\n\t\t// instead and adjust rect's width to simulate the actual geometry of such range.\n\t\t// https://github.com/ckeditor/ckeditor5-utils/issues/153\n\t\t// https://github.com/ckeditor/ckeditor5-ui/issues/317\n\t\telse {\n\t\t\tlet startContainer = range.startContainer;\n\n\t\t\tif ( isText( startContainer ) ) {\n\t\t\t\tstartContainer = startContainer.parentNode!;\n\t\t\t}\n\n\t\t\tconst rect = new Rect( ( startContainer as Element ).getBoundingClientRect() );\n\t\t\trect.right = rect.left;\n\t\t\trect.width = 0;\n\n\t\t\trects.push( rect );\n\t\t}\n\n\t\treturn rects;\n\t}\n\n\t/**\n\t * Returns a bounding rectangle that contains all the given `rects`.\n\t *\n\t * @param {Iterable.<module:utils/dom/rect~Rect>} rects A list of rectangles that should be contained in the result rectangle.\n\t * @returns {module:utils/dom/rect~Rect|null} Bounding rectangle or `null` if no `rects` were given.\n\t */\n\tpublic static getBoundingRect( rects: Iterable<Rect> ): Rect | null {\n\t\tconst boundingRectData = {\n\t\t\tleft: Number.POSITIVE_INFINITY,\n\t\t\ttop: Number.POSITIVE_INFINITY,\n\t\t\tright: Number.NEGATIVE_INFINITY,\n\t\t\tbottom: Number.NEGATIVE_INFINITY,\n\t\t\twidth: 0,\n\t\t\theight: 0\n\t\t};\n\t\tlet rectangleCount = 0;\n\n\t\tfor ( const rect of rects ) {\n\t\t\trectangleCount++;\n\n\t\t\tboundingRectData.left = Math.min( boundingRectData.left, rect.left );\n\t\t\tboundingRectData.top = Math.min( boundingRectData.top, rect.top );\n\t\t\tboundingRectData.right = Math.max( boundingRectData.right, rect.right );\n\t\t\tboundingRectData.bottom = Math.max( boundingRectData.bottom, rect.bottom );\n\t\t}\n\n\t\tif ( rectangleCount == 0 ) {\n\t\t\treturn null;\n\t\t}\n\n\t\tboundingRectData.width = boundingRectData.right - boundingRectData.left;\n\t\tboundingRectData.height = boundingRectData.bottom - boundingRectData.top;\n\n\t\treturn new Rect( boundingRectData );\n\t}\n}\n\n/**\n * A source of {@link module:utils/dom/rect~Rect}.\n *\n * @typedef {HTMLElement|Range|Window|module:utils/dom/rect~RectLike} module:utils/dom/rect~RectSource\n */\nexport type RectSource = HTMLElement | Range | Window | RectLike;\n\n/**\n * An object that describes properties of `ClientRect` object.\n *\n * @typedef {Object} module:utils/dom/rect~RectLike\n * @property {Number} top\n * @property {Number} right\n * @property {Number} bottom\n * @property {Number} left\n * @property {Number} width\n * @property {Number} height\n */\nexport interface RectLike {\n\treadonly top: number;\n\treadonly right: number;\n\treadonly bottom: number;\n\treadonly left: number;\n\treadonly width: number;\n\treadonly height: number;\n}\n\n// Acquires all the rect properties from the passed source.\n//\n// @private\n// @param {module:utils/dom/rect~Rect} rect\n// @param {module:utils/dom/rect~RectLike} source\nfunction copyRectProperties( rect: Rect, source: RectLike ): void {\n\tfor ( const p of rectProperties ) {\n\t\trect[ p ] = source[ p ];\n\t}\n}\n\n// Checks if provided object is a <body> HTML element.\n//\n// @private\n// @param {*} value\n// @returns {Boolean}\nfunction isBody( value: unknown ): value is HTMLBodyElement {\n\tif ( !isDomElement( value ) ) {\n\t\treturn false;\n\t}\n\n\treturn value === value.ownerDocument.body;\n}\n\n// Checks if provided object \"looks like\" a DOM Element and has API required by `Rect` class.\n//\n// @private\n// @param {*} value\n// @returns {Boolean}\nfunction isDomElement( value: any ): value is Element {\n\t// Note: earlier we used `isElement()` from lodash library, however that function is less performant because\n\t// it makes complicated checks to make sure that given value is a DOM element.\n\treturn value !== null && typeof value === 'object' && value.nodeType === 1 && typeof value.getBoundingClientRect === 'function';\n}\n","/**\n * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module utils/dom/scroll\n */\n\nimport isRange from './isrange';\nimport Rect from './rect';\nimport isText from './istext';\n\n/**\n * Makes any page `HTMLElement` or `Range` (`target`) visible inside the browser viewport.\n * This helper will scroll all `target` ancestors and the web browser viewport to reveal the target to\n * the user. If the `target` is already visible, nothing will happen.\n *\n * @param {Object} options\n * @param {HTMLElement|Range} options.target A target, which supposed to become visible to the user.\n * @param {Number} [options.viewportOffset] An offset from the edge of the viewport (in pixels)\n * the `target` will be moved by when the viewport is scrolled. It enhances the user experience\n * by keeping the `target` some distance from the edge of the viewport and thus making it easier to\n * read or edit by the user.\n */\nexport function scrollViewportToShowTarget(\n\t{ target, viewportOffset = 0 }: { readonly target: HTMLElement | Range; readonly viewportOffset?: number }\n): void {\n\tconst targetWindow = getWindow( target );\n\tlet currentWindow: Window | null = targetWindow;\n\tlet currentFrame: HTMLElement | null = null;\n\n\t// Iterate over all windows, starting from target's parent window up to window#top.\n\twhile ( currentWindow ) {\n\t\tlet firstAncestorToScroll: HTMLElement;\n\n\t\t// Let's scroll target's ancestors first to reveal it. Then, once the ancestor scrolls\n\t\t// settled down, the algorithm can eventually scroll the viewport of the current window.\n\t\t//\n\t\t// Note: If the current window is target's **original** window (e.g. the first one),\n\t\t// start scrolling the closest parent of the target. If not, scroll the closest parent\n\t\t// of an iframe that resides in the current window.\n\t\tif ( currentWindow == targetWindow ) {\n\t\t\tfirstAncestorToScroll = getParentElement( target );\n\t\t} else {\n\t\t\tfirstAncestorToScroll = getParentElement( currentFrame! );\n\t\t}\n\n\t\t// Scroll the target's ancestors first. Once done, scrolling the viewport is easy.\n\t\tscrollAncestorsToShowRect( firstAncestorToScroll, () => {\n\t\t\t// Note: If the target does not belong to the current window **directly**,\n\t\t\t// i.e. it resides in an iframe belonging to the window, obtain the target's rect\n\t\t\t// in the coordinates of the current window. By default, a Rect returns geometry\n\t\t\t// relative to the current window's viewport. To make it work in a parent window,\n\t\t\t// it must be shifted.\n\t\t\treturn getRectRelativeToWindow( target, currentWindow! );\n\t\t} );\n\n\t\t// Obtain the rect of the target after it has been scrolled within its ancestors.\n\t\t// It's time to scroll the viewport.\n\t\tconst targetRect = getRectRelativeToWindow( target, currentWindow );\n\n\t\tscrollWindowToShowRect( currentWindow, targetRect, viewportOffset );\n\n\t\tif ( currentWindow.parent != currentWindow ) {\n\t\t\t// Keep the reference to the <iframe> element the \"previous current window\" was\n\t\t\t// rendered within. It will be useful to re–calculate the rect of the target\n\t\t\t// in the parent window's relative geometry. The target's rect must be shifted\n\t\t\t// by it's iframe's position.\n\t\t\tcurrentFrame = currentWindow.frameElement as HTMLElement | null;\n\t\t\tcurrentWindow = currentWindow.parent;\n\n\t\t\t// If the current window has some parent but frameElement is inaccessible, then they have\n\t\t\t// different domains/ports and, due to security reasons, accessing and scrolling\n\t\t\t// the parent window won't be possible.\n\t\t\t// See https://github.com/ckeditor/ckeditor5/issues/930.\n\t\t\tif ( !currentFrame ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t} else {\n\t\t\tcurrentWindow = null;\n\t\t}\n\t}\n}\n\n/**\n * Makes any page `HTMLElement` or `Range` (target) visible within its scrollable ancestors,\n * e.g. if they have `overflow: scroll` CSS style.\n *\n * @param {HTMLElement|Range} target A target, which supposed to become visible to the user.\n */\nexport function scrollAncestorsToShowTarget( target: HTMLElement | Range ): void {\n\tconst targetParent = getParentElement( target );\n\n\tscrollAncestorsToShowRect( targetParent, () => {\n\t\treturn new Rect( target );\n\t} );\n}\n\n// Makes a given rect visible within its parent window.\n//\n// Note: Avoid the situation where the caret is still in the viewport, but totally\n// at the edge of it. In such situation, if it moved beyond the viewport in the next\n// action e.g. after paste, the scrolling would move it to the viewportOffset level\n// and it all would look like the caret visually moved up/down:\n//\n// 1.\n//\t\t| foo[]\n//\t\t| <--- N px of space below the caret\n//\t\t+---------------------------------...\n//\n// 2. *paste*\n// 3.\n//\t\t|\n//\t\t|\n//\t\t+-foo-----------------------------...\n//\t\t bar[] <--- caret below viewport, scrolling...\n//\n// 4. *scrolling*\n// 5.\n//\t\t|\n//\t\t| foo\n//\t\t| bar[] <--- caret precisely at the edge\n//\t\t+---------------------------------...\n//\n// To prevent this, this method checks the rects moved by the viewportOffset to cover\n// the upper/lower edge of the viewport. It makes sure if the action repeats, there's\n// no twitching – it's a purely visual improvement:\n//\n// 5. (after fix)\n//\t\t|\n//\t\t| foo\n//\t\t| bar[]\n//\t\t| <--- N px of space below the caret\n//\t\t+---------------------------------...\n//\n// @private\n// @param {Window} window A window which is scrolled to reveal the rect.\n// @param {module:utils/dom/rect~Rect} rect A rect which is to be revealed.\n// @param {Number} viewportOffset See scrollViewportToShowTarget.\nfunction scrollWindowToShowRect( window: Window, rect: Rect, viewportOffset: number ): void {\n\tconst targetShiftedDownRect = rect.clone().moveBy( 0, viewportOffset );\n\tconst targetShiftedUpRect = rect.clone().moveBy( 0, -viewportOffset );\n\tconst viewportRect = new Rect( window ).excludeScrollbarsAndBorders();\n\n\tconst rects = [ targetShiftedUpRect, targetShiftedDownRect ];\n\n\tif ( !rects.every( rect => viewportRect.contains( rect ) ) ) {\n\t\tlet { scrollX, scrollY } = window;\n\n\t\tif ( isAbove( targetShiftedUpRect, viewportRect ) ) {\n\t\t\tscrollY -= viewportRect.top - rect.top + viewportOffset;\n\t\t} else if ( isBelow( targetShiftedDownRect, viewportRect ) ) {\n\t\t\tscrollY += rect.bottom - viewportRect.bottom + viewportOffset;\n\t\t}\n\n\t\t// TODO: Web browsers scroll natively to place the target in the middle\n\t\t// of the viewport. It's not a very popular case, though.\n\t\tif ( isLeftOf( rect, viewportRect ) ) {\n\t\t\tscrollX -= viewportRect.left - rect.left + viewportOffset;\n\t\t} else if ( isRightOf( rect, viewportRect ) ) {\n\t\t\tscrollX += rect.right - viewportRect.right + viewportOffset;\n\t\t}\n\n\t\twindow.scrollTo( scrollX, scrollY );\n\t}\n}\n\n// Recursively scrolls element ancestors to visually reveal a rect.\n//\n// @private\n// @param {HTMLElement} A parent The first ancestors to start scrolling.\n// @param {Function} getRect A function which returns the Rect, which is to be revealed.\nfunction scrollAncestorsToShowRect( parent: HTMLElement, getRect: () => Rect ): void {\n\tconst parentWindow = getWindow( parent );\n\tlet parentRect: Rect, targetRect: Rect;\n\n\twhile ( parent != parentWindow.document.body ) {\n\t\ttargetRect = getRect();\n\t\tparentRect = new Rect( parent ).excludeScrollbarsAndBorders();\n\n\t\tif ( !parentRect.contains( targetRect ) ) {\n\t\t\tif ( isAbove( targetRect, parentRect ) ) {\n\t\t\t\tparent.scrollTop -= parentRect.top - targetRect.top;\n\t\t\t} else if ( isBelow( targetRect, parentRect ) ) {\n\t\t\t\tparent.scrollTop += targetRect.bottom - parentRect.bottom;\n\t\t\t}\n\n\t\t\tif ( isLeftOf( targetRect, parentRect ) ) {\n\t\t\t\tparent.scrollLeft -= parentRect.left - targetRect.left;\n\t\t\t} else if ( isRightOf( targetRect, parentRect ) ) {\n\t\t\t\tparent.scrollLeft += targetRect.right - parentRect.right;\n\t\t\t}\n\t\t}\n\n\t\tparent = parent.parentNode as HTMLElement;\n\t}\n}\n\n// Determines if a given `Rect` extends beyond the bottom edge of the second `Rect`.\n//\n// @private\n// @param {module:utils/dom/rect~Rect} firstRect\n// @param {module:utils/dom/rect~Rect} secondRect\n// @returns {Boolean}\nfunction isBelow( firstRect: Rect, secondRect: Rect ): boolean {\n\treturn firstRect.bottom > secondRect.bottom;\n}\n\n// Determines if a given `Rect` extends beyond the top edge of the second `Rect`.\n//\n// @private\n// @param {module:utils/dom/rect~Rect} firstRect\n// @param {module:utils/dom/rect~Rect} secondRect\n// @returns {Boolean}\nfunction isAbove( firstRect: Rect, secondRect: Rect ): boolean {\n\treturn firstRect.top < secondRect.top;\n}\n\n// Determines if a given `Rect` extends beyond the left edge of the second `Rect`.\n//\n// @private\n// @param {module:utils/dom/rect~Rect} firstRect\n// @param {module:utils/dom/rect~Rect} secondRect\n// @returns {Boolean}\nfunction isLeftOf( firstRect: Rect, secondRect: Rect ): boolean {\n\treturn firstRect.left < secondRect.left;\n}\n\n// Determines if a given `Rect` extends beyond the right edge of the second `Rect`.\n//\n// @private\n// @param {module:utils/dom/rect~Rect} firstRect\n// @param {module:utils/dom/rect~Rect} secondRect\n// @returns {Boolean}\nfunction isRightOf( firstRect: Rect, secondRect: Rect ): boolean {\n\treturn firstRect.right > secondRect.right;\n}\n\n// Returns the closest window of an element or range.\n//\n// @private\n// @param {HTMLElement|Range} elementOrRange\n// @returns {Window}\nfunction getWindow( elementOrRange: HTMLElement | Range ): Window {\n\tif ( isRange( elementOrRange ) ) {\n\t\treturn elementOrRange.startContainer.ownerDocument!.defaultView!;\n\t} else {\n\t\treturn elementOrRange.ownerDocument.defaultView!;\n\t}\n}\n\n// Returns the closest parent of an element or DOM range.\n//\n// @private\n// @param {HTMLElement|Range} elementOrRange\n// @returns {HTMLelement}\nfunction getParentElement( elementOrRange: HTMLElement | Range ): HTMLElement {\n\tif ( isRange( elementOrRange ) ) {\n\t\tlet parent = elementOrRange.commonAncestorContainer as HTMLElement;\n\n\t\t// If a Range is attached to the Text, use the closest element ancestor.\n\t\tif ( isText( parent ) ) {\n\t\t\tparent = parent.parentNode as HTMLElement;\n\t\t}\n\n\t\treturn parent;\n\t} else {\n\t\treturn elementOrRange.parentNode as HTMLElement;\n\t}\n}\n\n// Returns the rect of an element or range residing in an iframe.\n// The result rect is relative to the geometry of the passed window instance.\n//\n// @private\n// @param {HTMLElement|Range} target Element or range which rect should be returned.\n// @param {Window} relativeWindow A window the rect should be relative to.\n// @returns {module:utils/dom/rect~Rect}\nfunction getRectRelativeToWindow( target: HTMLElement | Range, relativeWindow: Window ): Rect {\n\tconst targetWindow = getWindow( target );\n\tconst rect = new Rect( target );\n\n\tif ( targetWindow === relativeWindow ) {\n\t\treturn rect;\n\t} else {\n\t\tlet currentWindow = targetWindow;\n\n\t\twhile ( currentWindow != relativeWindow ) {\n\t\t\tconst frame = currentWindow.frameElement as HTMLElement;\n\t\t\tconst frameRect = new Rect( frame ).excludeScrollbarsAndBorders();\n\n\t\t\trect.moveBy( frameRect.left, frameRect.top );\n\n\t\t\tcurrentWindow = currentWindow.parent;\n\t\t}\n\t}\n\n\treturn rect;\n}\n","/**\n * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module find-and-replace/findandreplace\n */\n\nimport { Plugin } from 'ckeditor5/src/core';\nimport FindAndReplaceUI from './findandreplaceui';\nimport FindAndReplaceEditing from './findandreplaceediting';\n\n/**\n * The find and replace plugin.\n *\n * For a detailed overview, check the {@glink features/find-and-replace Find and replace feature documentation}.\n *\n * This is a \"glue\" plugin which loads the following plugins:\n *\n * * The {@link module:find-and-replace/findandreplaceediting~FindAndReplaceEditing find and replace editing feature},\n * * The {@link module:find-and-replace/findandreplaceui~FindAndReplaceUI find and replace UI feature}\n *\n * @extends module:core/plugin~Plugin\n */\nexport default class FindAndReplace extends Plugin {\n\t/**\n\t * @inheritDoc\n\t */\n\tstatic get requires() {\n\t\treturn [ FindAndReplaceEditing, FindAndReplaceUI ];\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tstatic get pluginName() {\n\t\treturn 'FindAndReplace';\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tinit() {\n\t\tconst ui = this.editor.plugins.get( 'FindAndReplaceUI' );\n\t\tconst findAndReplaceEditing = this.editor.plugins.get( 'FindAndReplaceEditing' );\n\t\tconst state = findAndReplaceEditing.state;\n\n\t\tui.on( 'findNext', ( event, data ) => {\n\t\t\t// Data is contained only for the \"find\" button.\n\t\t\tif ( data ) {\n\t\t\t\tstate.searchText = data.searchText;\n\t\t\t\tthis.editor.execute( 'find', data.searchText, data );\n\t\t\t} else {\n\t\t\t\t// Find next arrow button press.\n\t\t\t\tthis.editor.execute( 'findNext' );\n\t\t\t}\n\t\t} );\n\n\t\tui.on( 'findPrevious', ( event, data ) => {\n\t\t\tif ( data && state.searchText !== data.searchText ) {\n\t\t\t\tthis.editor.execute( 'find', data.searchText );\n\t\t\t} else {\n\t\t\t\t// Subsequent calls.\n\t\t\t\tthis.editor.execute( 'findPrevious' );\n\t\t\t}\n\t\t} );\n\n\t\tui.on( 'replace', ( event, data ) => {\n\t\t\tif ( state.searchText !== data.searchText ) {\n\t\t\t\tthis.editor.execute( 'find', data.searchText );\n\t\t\t}\n\n\t\t\tconst highlightedResult = state.highlightedResult;\n\n\t\t\tif ( highlightedResult ) {\n\t\t\t\tthis.editor.execute( 'replace', data.replaceText, highlightedResult );\n\t\t\t}\n\t\t} );\n\n\t\tui.on( 'replaceAll', ( event, data ) => {\n\t\t\t// The state hadn't been yet built for this search text.\n\t\t\tif ( state.searchText !== data.searchText ) {\n\t\t\t\tthis.editor.execute( 'find', data.searchText );\n\t\t\t}\n\n\t\t\tthis.editor.execute( 'replaceAll', data.replaceText, state.results );\n\t\t} );\n\n\t\t// Reset the state when the user invalidated last search results, for instance,\n\t\t// by starting typing another search query or changing options.\n\t\tui.on( 'searchReseted', () => {\n\t\t\tstate.clear( this.editor.model );\n\t\t\tfindAndReplaceEditing.stop();\n\t\t} );\n\t}\n}\n","/**\n * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module find-and-replace/findandreplaceediting\n */\n\nimport { Plugin } from 'ckeditor5/src/core';\nimport { updateFindResultFromRange } from './utils';\nimport FindCommand from './findcommand';\nimport ReplaceCommand from './replacecommand';\nimport ReplaceAllCommand from './replaceallcommand';\nimport FindNextCommand from './findnextcommand';\nimport FindPreviousCommand from './findpreviouscommand';\nimport FindAndReplaceState from './findandreplacestate';\n\n// eslint-disable-next-line ckeditor5-rules/ckeditor-imports\nimport { scrollViewportToShowTarget } from '@ckeditor/ckeditor5-utils/src/dom/scroll';\n\nimport { debounce } from 'lodash-es';\n\nimport '../theme/findandreplace.css';\n\nconst HIGHLIGHT_CLASS = 'ck-find-result_selected';\n\n// Reacts to document changes in order to update search list.\nfunction onDocumentChange( results, model, searchCallback ) {\n\tconst changedNodes = new Set();\n\tconst removedMarkers = new Set();\n\n\tconst changes = model.document.differ.getChanges();\n\n\t// Get nodes in which changes happened to re-run a search callback on them.\n\tchanges.forEach( change => {\n\t\tif ( change.name === '$text' || model.schema.isInline( change.position.nodeAfter ) ) {\n\t\t\tchangedNodes.add( change.position.parent );\n\n\t\t\t[ ...model.markers.getMarkersAtPosition( change.position ) ].forEach( markerAtChange => {\n\t\t\t\tremovedMarkers.add( markerAtChange.name );\n\t\t\t} );\n\t\t} else if ( change.type === 'insert' ) {\n\t\t\tchangedNodes.add( change.position.nodeAfter );\n\t\t}\n\t} );\n\n\t// Get markers from removed nodes also.\n\tmodel.document.differ.getChangedMarkers().forEach( ( { name, data: { newRange } } ) => {\n\t\tif ( newRange && newRange.start.root.rootName === '$graveyard' ) {\n\t\t\tremovedMarkers.add( name );\n\t\t}\n\t} );\n\n\t// Get markers from the updated nodes and remove all (search will be re-run on these nodes).\n\tchangedNodes.forEach( node => {\n\t\tconst markersInNode = [ ...model.markers.getMarkersIntersectingRange( model.createRangeIn( node ) ) ];\n\n\t\tmarkersInNode.forEach( marker => removedMarkers.add( marker.name ) );\n\t} );\n\n\t// Remove results & markers from the changed part of content.\n\tmodel.change( writer => {\n\t\tremovedMarkers.forEach( markerName => {\n\t\t\t// Remove the result first - in order to prevent rendering a removed marker.\n\t\t\tif ( results.has( markerName ) ) {\n\t\t\t\tresults.remove( markerName );\n\t\t\t}\n\n\t\t\twriter.removeMarker( markerName );\n\t\t} );\n\t} );\n\n\t// Run search callback again on updated nodes.\n\tchangedNodes.forEach( nodeToCheck => {\n\t\tupdateFindResultFromRange( model.createRangeOn( nodeToCheck ), model, searchCallback, results );\n\t} );\n}\n\n/**\n * Implements the editing part for find and replace plugin. For example conversion, commands etc.\n *\n * @extends module:core/plugin~Plugin\n */\nexport default class FindAndReplaceEditing extends Plugin {\n\t/**\n\t * @inheritDoc\n\t */\n\tstatic get pluginName() {\n\t\treturn 'FindAndReplaceEditing';\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tinit() {\n\t\t/**\n\t\t * The collection of currently highlighted search results.\n\t\t *\n\t\t * @private\n\t\t * @member {module:utils/collection~Collection} #_activeResults\n\t\t */\n\t\tthis._activeResults = null;\n\n\t\t/**\n\t\t * An object storing the find and replace state within a given editor instance.\n\t\t *\n\t\t * @member {module:find-and-replace/findandreplacestate~FindAndReplaceState} #state\n\t\t */\n\t\tthis.state = new FindAndReplaceState( this.editor.model );\n\n\t\tthis._defineConverters();\n\t\tthis._defineCommands();\n\n\t\tthis.listenTo( this.state, 'change:highlightedResult', ( eventInfo, name, newValue, oldValue ) => {\n\t\t\tconst { model } = this.editor;\n\n\t\t\tmodel.change( writer => {\n\t\t\t\tif ( oldValue ) {\n\t\t\t\t\tconst oldMatchId = oldValue.marker.name.split( ':' )[ 1 ];\n\t\t\t\t\tconst oldMarker = model.markers.get( `findResultHighlighted:${ oldMatchId }` );\n\n\t\t\t\t\tif ( oldMarker ) {\n\t\t\t\t\t\twriter.removeMarker( oldMarker );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif ( newValue ) {\n\t\t\t\t\tconst newMatchId = newValue.marker.name.split( ':' )[ 1 ];\n\t\t\t\t\twriter.addMarker( `findResultHighlighted:${ newMatchId }`, {\n\t\t\t\t\t\tusingOperation: false,\n\t\t\t\t\t\taffectsData: false,\n\t\t\t\t\t\trange: newValue.marker.getRange()\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\n\t\tconst debouncedScrollListener = debounce( scrollToHighlightedResult.bind( this ), 32 );\n\t\t// Debounce scroll as highlight might be changed very frequently, e.g. when there's a replace all command.\n\t\tthis.listenTo( this.state, 'change:highlightedResult', debouncedScrollListener, { priority: 'low' } );\n\n\t\t// It's possible that the editor will get destroyed before debounced call kicks in.\n\t\t// This would result with accessing a view three that is no longer in DOM.\n\t\tthis.listenTo( this.editor, 'destroy', debouncedScrollListener.cancel );\n\n\t\t/* istanbul ignore next */\n\t\tfunction scrollToHighlightedResult( eventInfo, name, newValue ) {\n\t\t\tif ( newValue ) {\n\t\t\t\tconst domConverter = this.editor.editing.view.domConverter;\n\t\t\t\tconst viewRange = this.editor.editing.mapper.toViewRange( newValue.marker.getRange() );\n\n\t\t\t\tscrollViewportToShowTarget( {\n\t\t\t\t\ttarget: domConverter.viewRangeToDom( viewRange ),\n\t\t\t\t\tviewportOffset: 40\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Initiate a search.\n\t *\n\t * @param {Function|String} callbackOrText\n\t * @returns {module:utils/collection~Collection}\n\t */\n\tfind( callbackOrText ) {\n\t\tconst { editor } = this;\n\t\tconst { model } = editor;\n\n\t\tconst { findCallback, results } = editor.execute( 'find', callbackOrText );\n\n\t\tthis._activeResults = results;\n\n\t\t// @todo: handle this listener, another copy is in findcommand.js file.\n\t\tthis.listenTo( model.document, 'change:data', () => onDocumentChange( this._activeResults, model, findCallback ) );\n\n\t\treturn this._activeResults;\n\t}\n\n\t/**\n\t * Stops active results from updating, and clears out the results.\n\t */\n\tstop() {\n\t\tif ( !this._activeResults ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.stopListening( this.editor.model.document );\n\n\t\tthis.state.clear( this.editor.model );\n\n\t\tthis._activeResults = null;\n\t}\n\n\t/**\n\t * Sets up the commands.\n\t *\n\t * @private\n\t */\n\t_defineCommands() {\n\t\tthis.editor.commands.add( 'find', new FindCommand( this.editor, this.state ) );\n\t\tthis.editor.commands.add( 'findNext', new FindNextCommand( this.editor, this.state ) );\n\t\tthis.editor.commands.add( 'findPrevious', new FindPreviousCommand( this.editor, this.state ) );\n\t\tthis.editor.commands.add( 'replace', new ReplaceCommand( this.editor, this.state ) );\n\t\tthis.editor.commands.add( 'replaceAll', new ReplaceAllCommand( this.editor, this.state ) );\n\t}\n\n\t/**\n\t * Sets up the marker downcast converters for search results highlighting.\n\t *\n\t * @private\n\t */\n\t_defineConverters() {\n\t\tconst { editor } = this;\n\n\t\t// Setup the marker highlighting conversion.\n\t\teditor.conversion.for( 'editingDowncast' ).markerToHighlight( {\n\t\t\tmodel: 'findResult',\n\t\t\tview: ( { markerName } ) => {\n\t\t\t\tconst [ , id ] = markerName.split( ':' );\n\n\t\t\t\t// Marker removal from the view has a bug: https://github.com/ckeditor/ckeditor5/issues/7499\n\t\t\t\t// A minimal option is to return a new object for each converted marker...\n\t\t\t\treturn {\n\t\t\t\t\tname: 'span',\n\t\t\t\t\tclasses: [ 'ck-find-result' ],\n\t\t\t\t\tattributes: {\n\t\t\t\t\t\t// ...however, adding a unique attribute should be future-proof..\n\t\t\t\t\t\t'data-find-result': id\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t} );\n\n\t\teditor.conversion.for( 'editingDowncast' ).markerToHighlight( {\n\t\t\tmodel: 'findResultHighlighted',\n\t\t\tview: ( { markerName } ) => {\n\t\t\t\tconst [ , id ] = markerName.split( ':' );\n\n\t\t\t\t// Marker removal from the view has a bug: https://github.com/ckeditor/ckeditor5/issues/7499\n\t\t\t\t// A minimal option is to return a new object for each converted marker...\n\t\t\t\treturn {\n\t\t\t\t\tname: 'span',\n\t\t\t\t\tclasses: [ HIGHLIGHT_CLASS ],\n\t\t\t\t\tattributes: {\n\t\t\t\t\t\t// ...however, adding a unique attribute should be future-proof..\n\t\t\t\t\t\t'data-find-result': id\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t} );\n\t}\n}\n","/**\n * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module find-and-replace/findandreplacestate\n */\n\nimport { ObservableMixin, mix, Collection } from 'ckeditor5/src/utils';\n\n/**\n * The object storing find and replace plugin state for a given editor instance.\n *\n * @mixes module:utils/observablemixin~ObservableMixin\n */\nexport default class FindAndReplaceState {\n\t/**\n\t * Creates an instance of the state.\n\t *\n\t * @param {module:engine/model/model~Model} model\n\t */\n\tconstructor( model ) {\n\t\t/**\n\t\t * A collection of find matches.\n\t\t *\n\t\t * @protected\n\t\t * @observable\n\t\t * @member {module:utils/collection~Collection} #results\n\t\t */\n\t\tthis.set( 'results', new Collection() );\n\n\t\t/**\n\t\t * Currently highlighted search result in {@link #results matched results}.\n\t\t *\n\t\t * @readonly\n\t\t * @observable\n\t\t * @member {Object|null} #highlightedResult\n\t\t */\n\t\tthis.set( 'highlightedResult', null );\n\n\t\t/**\n\t\t * Searched text value.\n\t\t *\n\t\t * @readonly\n\t\t * @observable\n\t\t * @member {String} #searchText\n\t\t */\n\t\tthis.set( 'searchText', '' );\n\n\t\t/**\n\t\t * Replace text value.\n\t\t *\n\t\t * @readonly\n\t\t * @observable\n\t\t * @member {String} #replaceText\n\t\t */\n\t\tthis.set( 'replaceText', '' );\n\n\t\t/**\n\t\t * Indicates whether the matchCase checkbox has been checked.\n\t\t *\n\t\t * @readonly\n\t\t * @observable\n\t\t * @member {Boolean} #matchCase\n\t\t */\n\t\tthis.set( 'matchCase', false );\n\n\t\t/**\n\t\t * Indicates whether the matchWholeWords checkbox has been checked.\n\t\t *\n\t\t * @readonly\n\t\t * @observable\n\t\t * @member {Boolean} #matchWholeWords\n\t\t */\n\t\tthis.set( 'matchWholeWords', false );\n\n\t\tthis.results.on( 'change', ( eventInfo, { removed, index } ) => {\n\t\t\tremoved = Array.from( removed );\n\n\t\t\tif ( removed.length ) {\n\t\t\t\tlet highlightedResultRemoved = false;\n\n\t\t\t\tmodel.change( writer => {\n\t\t\t\t\tfor ( const removedResult of removed ) {\n\t\t\t\t\t\tif ( this.highlightedResult === removedResult ) {\n\t\t\t\t\t\t\thighlightedResultRemoved = true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( model.markers.has( removedResult.marker.name ) ) {\n\t\t\t\t\t\t\twriter.removeMarker( removedResult.marker );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\n\t\t\t\tif ( highlightedResultRemoved ) {\n\t\t\t\t\tconst nextHighlightedIndex = index >= this.results.length ? 0 : index;\n\t\t\t\t\tthis.highlightedResult = this.results.get( nextHighlightedIndex );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t}\n\n\t/**\n\t * Cleans the state up and removes markers from the model.\n\t *\n\t * @param {module:engine/model/model~Model} model\n\t */\n\tclear( model ) {\n\t\tthis.searchText = '';\n\n\t\tmodel.change( writer => {\n\t\t\tif ( this.highlightedResult ) {\n\t\t\t\tconst oldMatchId = this.highlightedResult.marker.name.split( ':' )[ 1 ];\n\t\t\t\tconst oldMarker = model.markers.get( `findResultHighlighted:${ oldMatchId }` );\n\n\t\t\t\tif ( oldMarker ) {\n\t\t\t\t\twriter.removeMarker( oldMarker );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t[ ...this.results ].forEach( ( { marker } ) => {\n\t\t\t\twriter.removeMarker( marker );\n\t\t\t} );\n\t\t} );\n\n\t\tthis.results.clear();\n\t}\n}\n\nmix( FindAndReplaceState, ObservableMixin );\n","/**\n * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module find-and-replace/findandreplaceui\n */\n\nimport { Plugin } from 'ckeditor5/src/core';\nimport { createDropdown } from 'ckeditor5/src/ui';\nimport FindAndReplaceFormView from './ui/findandreplaceformview';\n\nimport loupeIcon from '../theme/icons/find-replace.svg';\n\n/**\n * The default find and replace UI.\n *\n * It registers the `'findAndReplace'` UI button in the editor's {@link module:ui/componentfactory~ComponentFactory component factory}.\n * that uses the {@link module:find-and-replace/findandreplace~FindAndReplace FindAndReplace} plugin API.\n *\n * @extends module:core/plugin~Plugin\n */\nexport default class FindAndReplaceUI extends Plugin {\n\t/**\n\t * @inheritDoc\n\t */\n\tstatic get pluginName() {\n\t\treturn 'FindAndReplaceUI';\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tconstructor( editor ) {\n\t\tsuper( editor );\n\n\t\t/**\n\t\t * A reference to the find and replace form view.\n\t\t *\n\t\t * @member {module:find-and-replace/ui/findandreplaceformview~FindAndReplaceFormView} #formView\n\t\t */\n\t\tthis.formView = null;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tinit() {\n\t\tconst editor = this.editor;\n\n\t\t// Register the toolbar dropdown component.\n\t\teditor.ui.componentFactory.add( 'findAndReplace', locale => {\n\t\t\tconst dropdown = createDropdown( locale );\n\t\t\tconst formView = this.formView = new FindAndReplaceFormView( editor.locale );\n\n\t\t\t// Dropdown should be disabled when in source editing mode. See #10001.\n\t\t\tdropdown.bind( 'isEnabled' ).to( editor.commands.get( 'find' ) );\n\t\t\tdropdown.panelView.children.add( formView );\n\n\t\t\t// Every time a dropdown is opened, the search text field should get focused and selected for better UX.\n\t\t\t// Note: Using the low priority here to make sure the following listener starts working after\n\t\t\t// the default action of the drop-down is executed (i.e. the panel showed up). Otherwise,\n\t\t\t// the invisible form/input cannot be focused/selected.\n\t\t\t//\n\t\t\t// Each time a dropdown is closed, move the focus back to the find and replace toolbar button\n\t\t\t// and let the find and replace editing feature know that all search results can be invalidated\n\t\t\t// and no longer should be marked in the content.\n\t\t\tdropdown.on( 'change:isOpen', ( event, name, isOpen ) => {\n\t\t\t\tif ( isOpen ) {\n\t\t\t\t\tformView.disableCssTransitions();\n\n\t\t\t\t\tformView.reset();\n\t\t\t\t\tformView._findInputView.fieldView.select();\n\n\t\t\t\t\tformView.enableCssTransitions();\n\t\t\t\t} else {\n\t\t\t\t\tthis.fire( 'searchReseted' );\n\t\t\t\t}\n\t\t\t}, { priority: 'low' } );\n\n\t\t\tthis._setupDropdownButton( dropdown );\n\t\t\tthis._setupFormView( formView );\n\n\t\t\treturn dropdown;\n\t\t} );\n\t}\n\n\t/**\n\t * Sets up the find and replace button.\n\t *\n\t * @private\n\t * @param {module:ui/dropdown/dropdownview~DropdownView} dropdown\n\t */\n\t_setupDropdownButton( dropdown ) {\n\t\tconst editor = this.editor;\n\t\tconst t = editor.locale.t;\n\n\t\tdropdown.buttonView.set( {\n\t\t\ticon: loupeIcon,\n\t\t\tlabel: t( 'Find and replace' ),\n\t\t\tkeystroke: 'CTRL+F',\n\t\t\ttooltip: true\n\t\t} );\n\n\t\teditor.keystrokes.set( 'Ctrl+F', ( data, cancelEvent ) => {\n\t\t\tdropdown.isOpen = true;\n\t\t\tcancelEvent();\n\t\t} );\n\t}\n\n\t/**\n\t * Sets up the form view for the find and replace.\n\t *\n\t * @private\n\t * @param {module:find-and-replace/ui/findandreplaceformview~FindAndReplaceFormView} formView A related form view.\n\t */\n\t_setupFormView( formView ) {\n\t\tconst editor = this.editor;\n\t\tconst commands = editor.commands;\n\t\tconst findAndReplaceEditing = this.editor.plugins.get( 'FindAndReplaceEditing' );\n\t\tconst editingState = findAndReplaceEditing.state;\n\t\tconst sortMapping = { before: -1, same: 0, after: 1 };\n\n\t\t// Let the form know which result is being highlighted.\n\t\tformView.bind( 'highlightOffset' ).to( editingState, 'highlightedResult', highlightedResult => {\n\t\t\tif ( !highlightedResult ) {\n\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t\treturn Array.from( editingState.results )\n\t\t\t\t.sort( ( a, b ) => sortMapping[ a.marker.getStart().compareWith( b.marker.getStart() ) ] )\n\t\t\t\t.indexOf( highlightedResult ) + 1;\n\t\t} );\n\n\t\t// Let the form know how many results were found in total.\n\t\tformView.listenTo( editingState.results, 'change', () => {\n\t\t\tformView.matchCount = editingState.results.length;\n\t\t} );\n\n\t\t// Command states are used to enable/disable individual form controls.\n\t\t// To keep things simple, instead of binding 4 individual observables, there's only one that combines every\n\t\t// commands' isEnabled state. Yes, it will change more often but this simplifies the structure of the form.\n\t\tformView.bind( '_areCommandsEnabled' ).to(\n\t\t\tcommands.get( 'findNext' ), 'isEnabled',\n\t\t\tcommands.get( 'findPrevious' ), 'isEnabled',\n\t\t\tcommands.get( 'replace' ), 'isEnabled',\n\t\t\tcommands.get( 'replaceAll' ), 'isEnabled',\n\t\t\t( findNext, findPrevious, replace, replaceAll ) => ( { findNext, findPrevious, replace, replaceAll } )\n\t\t);\n\n\t\t// The UI plugin works as an interface between the form and the editing part of the feature.\n\t\tformView.delegate( 'findNext', 'findPrevious', 'replace', 'replaceAll' ).to( this );\n\n\t\t// Let the feature know that search results are no longer relevant because the user changed the searched phrase\n\t\t// (or options) but didn't hit the \"Find\" button yet (e.g. still typing).\n\t\tformView.on( 'change:isDirty', ( evt, data, isDirty ) => {\n\t\t\tif ( isDirty ) {\n\t\t\t\tthis.fire( 'searchReseted' );\n\t\t\t}\n\t\t} );\n\t}\n}\n\n/**\n * Fired when the find next button is triggered.\n *\n * @event findNext\n * @param {String} searchText Search text.\n */\n\n/**\n * Fired when the find previous button is triggered.\n *\n * @event findPrevious\n * @param {String} searchText Search text.\n */\n\n/**\n * Fired when the replace button is triggered.\n *\n * @event replace\n * @param {String} replaceText Replacement text.\n */\n\n/**\n * Fired when the replaceAll button is triggered.\n *\n * @event replaceAll\n * @param {String} replaceText Replacement text.\n */\n\n/**\n * Fired when the UI was reset and the search results marked in the editing root should be invalidated,\n * for instance, because the user changed the searched phrase (or options) but didn't hit\n * the \"Find\" button yet.\n *\n * @event searchReseted\n */\n","/**\n * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module find-and-replace/findcommand\n*/\n\nimport { Command } from 'ckeditor5/src/core';\nimport { updateFindResultFromRange, findByTextCallback } from './utils';\n\n/**\n * The find command. It is used by the {@link module:find-and-replace/findandreplace~FindAndReplace find and replace feature}.\n *\n * @extends module:core/command~Command\n */\nexport default class FindCommand extends Command {\n\t/**\n\t * Creates a new `FindCommand` instance.\n\t *\n\t * @param {module:core/editor/editor~Editor} editor The editor on which this command will be used.\n\t * @param {module:find-and-replace/findandreplacestate~FindAndReplaceState} state An object to hold plugin state.\n\t */\n\tconstructor( editor, state ) {\n\t\tsuper( editor );\n\n\t\t// The find command is always enabled.\n\t\tthis.isEnabled = true;\n\n\t\t// It does not affect data so should be enabled in read-only mode.\n\t\tthis.affectsData = false;\n\n\t\t/**\n\t\t * The find and replace state object used for command operations.\n\t\t *\n\t\t * @private\n\t\t * @member {module:find-and-replace/findandreplacestate~FindAndReplaceState} #_state\n\t\t */\n\t\tthis._state = state;\n\t}\n\n\t/**\n\t * Executes the command.\n\t *\n\t * @param {Function|String} callbackOrText\n\t * @param {Object} [options]\n\t * @param {Boolean} [options.matchCase=false] If set to `true`, the letter case will be matched.\n\t * @param {Boolean} [options.wholeWords=false] If set to `true`, only whole words that match `callbackOrText` will be matched.\n\t *\n\t * @fires execute\n\t */\n\texecute( callbackOrText, { matchCase, wholeWords } = {} ) {\n\t\tconst { editor } = this;\n\t\tconst { model } = editor;\n\n\t\tlet findCallback;\n\n\t\t// Allow to execute `find()` on a plugin with a keyword only.\n\t\tif ( typeof callbackOrText === 'string' ) {\n\t\t\tfindCallback = findByTextCallback( callbackOrText, { matchCase, wholeWords } );\n\n\t\t\tthis._state.searchText = callbackOrText;\n\t\t} else {\n\t\t\tfindCallback = callbackOrText;\n\t\t}\n\n\t\t// Initial search is done on all nodes in all roots inside the content.\n\t\tconst results = model.document.getRootNames()\n\t\t\t.reduce( ( ( currentResults, rootName ) => updateFindResultFromRange(\n\t\t\t\tmodel.createRangeIn( model.document.getRoot( rootName ) ),\n\t\t\t\tmodel,\n\t\t\t\tfindCallback,\n\t\t\t\tcurrentResults\n\t\t\t) ), null );\n\n\t\tthis._state.clear( model );\n\t\tthis._state.results.addMany( Array.from( results ) );\n\t\tthis._state.highlightedResult = results.get( 0 );\n\n\t\tif ( typeof callbackOrText === 'string' ) {\n\t\t\tthis._state.searchText = callbackOrText;\n\t\t}\n\n\t\tthis._state.matchCase = !!matchCase;\n\t\tthis._state.matchWholeWords = !!wholeWords;\n\n\t\treturn {\n\t\t\tresults,\n\t\t\tfindCallback\n\t\t};\n\t}\n}\n","/**\n * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module find-and-replace/findnextcommand\n*/\n\nimport { Command } from 'ckeditor5/src/core';\n\n/**\n * The find next command. Moves the highlight to the next search result.\n *\n * It is used by the {@link module:find-and-replace/findandreplace~FindAndReplace find and replace feature}.\n *\n * @extends module:core/command~Command\n */\nexport default class FindNextCommand extends Command {\n\t/**\n\t * Creates a new `FindNextCommand` instance.\n\t *\n\t * @param {module:core/editor/editor~Editor} editor The editor on which this command will be used.\n\t * @param {module:find-and-replace/findandreplacestate~FindAndReplaceState} state An object to hold plugin state.\n\t */\n\tconstructor( editor, state ) {\n\t\tsuper( editor );\n\n\t\t// It does not affect data so should be enabled in read-only mode.\n\t\tthis.affectsData = false;\n\n\t\t/**\n\t\t * The find and replace state object used for command operations.\n\t\t *\n\t\t * @protected\n\t\t * @member {module:find-and-replace/findandreplacestate~FindAndReplaceState} #_state\n\t\t */\n\t\tthis._state = state;\n\n\t\tthis.isEnabled = false;\n\n\t\tthis.listenTo( this._state.results, 'change', () => {\n\t\t\tthis.isEnabled = this._state.results.length > 1;\n\t\t} );\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\trefresh() {\n\t\tthis.isEnabled = this._state.results.length > 1;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\texecute() {\n\t\tconst results = this._state.results;\n\t\tconst currentIndex = results.getIndex( this._state.highlightedResult );\n\t\tconst nextIndex = currentIndex + 1 >= results.length ?\n\t\t\t0 : currentIndex + 1;\n\n\t\tthis._state.highlightedResult = this._state.results.get( nextIndex );\n\t}\n}\n","/**\n * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module find-and-replace/findpreviouscommand\n*/\n\nimport FindNextCommand from './findnextcommand';\n\n/**\n * The find previous command. Moves the highlight to the previous search result.\n *\n * It is used by the {@link module:find-and-replace/findandreplace~FindAndReplace find and replace feature}.\n *\n * @extends module:find-and-replace/findnextcommand~FindNextCommand\n */\nexport default class FindPreviousCommand extends FindNextCommand {\n\t/**\n\t * @inheritDoc\n\t */\n\texecute() {\n\t\tconst results = this._state.results;\n\t\tconst currentIndex = results.getIndex( this._state.highlightedResult );\n\t\tconst previousIndex = currentIndex - 1 < 0 ?\n\t\t\tthis._state.results.length - 1 : currentIndex - 1;\n\n\t\tthis._state.highlightedResult = this._state.results.get( previousIndex );\n\t}\n}\n","/**\n * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module find-and-replace/replaceallcommand\n */\n\nimport { updateFindResultFromRange, findByTextCallback } from './utils';\nimport { Collection } from 'ckeditor5/src/utils';\nimport ReplaceCommand from './replacecommand';\n\n/**\n * The replace all command. It is used by the {@link module:find-and-replace/findandreplace~FindAndReplace find and replace feature}.\n *\n * @extends module:find-and-replace/replacecommand~ReplaceCommand\n */\nexport default class ReplaceAllCommand extends ReplaceCommand {\n\t/**\n\t * Replaces all the occurrences of `textToReplace` with a given `newText` string.\n\t *\n\t * ```js\n\t *\treplaceAllCommand.execute( 'replaceAll', 'new text replacement', 'text to replace' );\n\t * ```\n\t *\n\t * Alternatively you can call it from editor instance:\n\t *\n\t * ```js\n\t *\teditor.execute( 'replaceAll', 'new text', 'old text' );\n\t * ```\n\t *\n\t * @param {String} newText Text that will be inserted to the editor for each match.\n\t * @param {String|module:utils/collection~Collection} textToReplace Text to be replaced or a collection of matches\n\t * as returned by the find command.\n\t *\n\t * @fires module:core/command~Command#event:execute\n\t */\n\texecute( newText, textToReplace ) {\n\t\tconst { editor } = this;\n\t\tconst { model } = editor;\n\n\t\tconst results = textToReplace instanceof Collection ?\n\t\t\ttextToReplace : model.document.getRootNames()\n\t\t\t\t.reduce( ( ( currentResults, rootName ) => updateFindResultFromRange(\n\t\t\t\t\tmodel.createRangeIn( model.document.getRoot( rootName ) ),\n\t\t\t\t\tmodel,\n\t\t\t\t\tfindByTextCallback( textToReplace, this._state ),\n\t\t\t\t\tcurrentResults\n\t\t\t\t) ), null );\n\n\t\tif ( results.length ) {\n\t\t\tmodel.change( () => {\n\t\t\t\t[ ...results ].forEach( searchResult => {\n\t\t\t\t\t// Just reuse logic from the replace command to replace a single match.\n\t\t\t\t\tsuper.execute( newText, searchResult );\n\t\t\t\t} );\n\t\t\t} );\n\t\t}\n\t}\n}\n","/**\n * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module find-and-replace/replacecommand\n*/\n\nimport { Command } from 'ckeditor5/src/core';\n\n/**\n * The replace command. It is used by the {@link module:find-and-replace/findandreplace~FindAndReplace find and replace feature}.\n *\n * @extends module:core/command~Command\n */\nexport default class ReplaceCommand extends Command {\n\t/**\n\t * Creates a new `ReplaceCommand` instance.\n\t *\n\t * @param {module:core/editor/editor~Editor} editor Editor on which this command will be used.\n\t * @param {module:find-and-replace/findandreplacestate~FindAndReplaceState} state An object to hold plugin state.\n\t */\n\tconstructor( editor, state ) {\n\t\tsuper( editor );\n\n\t\t// The replace command is always enabled.\n\t\tthis.isEnabled = true;\n\n\t\t/**\n\t\t * The find and replace state object used for command operations.\n\t\t *\n\t\t * @protected\n\t\t * @member {module:find-and-replace/findandreplacestate~FindAndReplaceState} #_state\n\t\t */\n\t\tthis._state = state;\n\t}\n\n\t/**\n\t * Replace a given find result by a string or a callback.\n\t *\n\t * @param {String} replacementText\n\t * @param {Object} result A single result from the find command.\n\t *\n\t * @fires module:core/command~Command#event:execute\n\t */\n\texecute( replacementText, result ) {\n\t\tconst { model } = this.editor;\n\n\t\tmodel.change( writer => {\n\t\t\tconst range = result.marker.getRange();\n\n\t\t\t// Don't replace a result (marker) that found its way into the $graveyard (e.g. removed by collaborators).\n\t\t\tif ( range.root.rootName === '$graveyard' ) {\n\t\t\t\tthis._state.results.remove( result );\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet textAttributes = {};\n\n\t\t\tfor ( const item of range.getItems() ) {\n\t\t\t\tif ( item.is( '$text' ) || item.is( '$textProxy' ) ) {\n\t\t\t\t\ttextAttributes = item.getAttributes();\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tmodel.insertContent( writer.createText( replacementText, textAttributes ), range );\n\n\t\t\tif ( this._state.results.has( result ) ) {\n\t\t\t\tthis._state.results.remove( result );\n\t\t\t}\n\t\t} );\n\t}\n}\n","/**\n * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module find-and-replace/ui/findandreplaceformview\n */\n\nimport {\n\tView,\n\tButtonView,\n\tFormHeaderView,\n\tLabeledFieldView,\n\n\tModel,\n\tFocusCycler,\n\tcreateLabeledInputText,\n\tsubmitHandler,\n\tViewCollection,\n\tinjectCssTransitionDisabler,\n\n\tcreateDropdown,\n\taddListToDropdown\n} from 'ckeditor5/src/ui';\n\nimport {\n\tFocusTracker,\n\tKeystrokeHandler,\n\tCollection,\n\tRect,\n\tisVisible\n} from 'ckeditor5/src/utils';\n\n// See: #8833.\n// eslint-disable-next-line ckeditor5-rules/ckeditor-imports\nimport '@ckeditor/ckeditor5-ui/theme/components/responsive-form/responsiveform.css';\nimport '../../theme/findandreplaceform.css';\n\n// eslint-disable-next-line ckeditor5-rules/ckeditor-imports\nimport previousArrow from '@ckeditor/ckeditor5-ui/theme/icons/previous-arrow.svg';\nimport { icons } from 'ckeditor5/src/core';\n\n/**\n * The find and replace form view class.\n *\n * See {@link module:find-and-replace/ui/findandreplaceformview~FindAndReplaceFormView}.\n *\n * @extends module:ui/view~View\n */\nexport default class FindAndReplaceFormView extends View {\n\t/**\n\t * Creates a view of find and replace form.\n\t *\n\t * @param {module:utils/locale~Locale} [locale] The localization services instance.\n\t */\n\tconstructor( locale ) {\n\t\tsuper( locale );\n\n\t\tconst t = locale.t;\n\n\t\t/**\n\t\t * Stores the number of matched search results.\n\t\t *\n\t\t * @readonly\n\t\t * @observable\n\t\t * @member {Number} #matchCount\n\t\t */\n\t\tthis.set( 'matchCount', 0 );\n\n\t\t/**\n\t\t * The offset of currently highlighted search result in {@link #matchCount matched results}.\n\t\t *\n\t\t * @readonly\n\t\t * @observable\n\t\t * @member {Number|null} #highlightOffset\n\t\t */\n\t\tthis.set( 'highlightOffset', 0 );\n\n\t\t/**\n\t\t * `true` when the search params (find text, options) has been changed by the user since\n\t\t * the last time find was executed. `false` otherwise.\n\t\t *\n\t\t * @readonly\n\t\t * @observable\n\t\t * @member {Boolean} #isDirty\n\t\t */\n\t\tthis.set( 'isDirty', false );\n\n\t\t/**\n\t\t * A live object with the aggregated `isEnabled` states of editor commands related to find and\n\t\t * replace. For instance, it may look as follows:\n\t\t *\n\t\t *\t\t{\n\t\t *\t\t\tfindNext: true,\n\t\t *\t\t\tfindPrevious: true,\n\t\t *\t\t\treplace: false,\n\t\t *\t\t\treplaceAll: false\n\t\t *\t\t}\n\t\t *\n\t\t * @protected\n\t\t * @readonly\n\t\t * @observable\n\t\t * @member {Object} #_areCommandsEnabled\n\t\t */\n\t\tthis.set( '_areCommandsEnabled', {} );\n\n\t\t/**\n\t\t * The content of the counter label displaying the index of the current highlighted match\n\t\t * on top of the find input, for instance \"3 of 50\".\n\t\t *\n\t\t * @protected\n\t\t * @readonly\n\t\t * @observable\n\t\t * @member {String} #_resultsCounterText\n\t\t */\n\t\tthis.set( '_resultsCounterText', '' );\n\n\t\t/**\n\t\t * The flag reflecting the state of the \"Match case\" switch button in the search options\n\t\t * dropdown.\n\t\t *\n\t\t * @protected\n\t\t * @readonly\n\t\t * @observable\n\t\t * @member {Boolean} #_matchCase\n\t\t */\n\t\tthis.set( '_matchCase', false );\n\n\t\t/**\n\t\t * The flag reflecting the state of the \"Whole words only\" switch button in the search options\n\t\t * dropdown.\n\t\t *\n\t\t * @protected\n\t\t * @readonly\n\t\t * @observable\n\t\t * @member {Boolean} #_wholeWordsOnly\n\t\t */\n\t\tthis.set( '_wholeWordsOnly', false );\n\n\t\t/**\n\t\t * This flag is set `true` when some matches were found and the user didn't change the search\n\t\t * params (text to find, options) yet. This is only possible immediately after hitting the \"Find\" button.\n\t\t * `false` when there were no matches (see {@link #matchCount}) or the user changed the params (see {@link #isDirty}).\n\t\t *\n\t\t * It is used to control the enabled state of the replace UI (input and buttons); replacing text is only possible\n\t\t * if this flag is `true`.\n\t\t *\n\t\t * @protected\n\t\t * @readonly\n\t\t * @observable\n\t\t * @member {Boolean} #_searchResultsFound\n\t\t */\n\t\tthis.bind( '_searchResultsFound' ).to(\n\t\t\tthis, 'matchCount',\n\t\t\tthis, 'isDirty',\n\t\t\t( matchCount, isDirty ) => {\n\t\t\t\treturn matchCount > 0 && !isDirty;\n\t\t\t}\n\t\t);\n\n\t\t/**\n\t\t * The find in text input view that stores the searched string.\n\t\t *\n\t\t * @protected\n\t\t * @readonly\n\t\t * @member {module:ui/labeledfield/labeledfieldview~LabeledFieldView}\n\t\t */\n\t\tthis._findInputView = this._createInputField( t( 'Find in text…' ) );\n\n\t\t/**\n\t\t * The replace input view.\n\t\t *\n\t\t * @protected\n\t\t * @readonly\n\t\t * @member {module:ui/labeledfield/labeledfieldview~LabeledFieldView}\n\t\t */\n\t\tthis._replaceInputView = this._createInputField( t( 'Replace with…' ) );\n\n\t\t/**\n\t\t * The find button view that initializes the search process.\n\t\t *\n\t\t * @protected\n\t\t * @readonly\n\t\t * @member {module:ui/button/buttonview~ButtonView}\n\t\t */\n\t\tthis._findButtonView = this._createButton( {\n\t\t\tlabel: t( 'Find' ),\n\t\t\tclass: 'ck-button-find ck-button-action',\n\t\t\twithText: true\n\t\t} );\n\n\t\t/**\n\t\t * The find previous button view.\n\t\t *\n\t\t * @protected\n\t\t * @readonly\n\t\t * @member {module:ui/button/buttonview~ButtonView}\n\t\t */\n\t\tthis._findPrevButtonView = this._createButton( {\n\t\t\tlabel: t( 'Previous result' ),\n\t\t\tclass: 'ck-button-prev',\n\t\t\ticon: previousArrow,\n\t\t\tkeystroke: 'Shift+F3',\n\t\t\ttooltip: true\n\t\t} );\n\n\t\t/**\n\t\t * The find next button view.\n\t\t *\n\t\t * @protected\n\t\t * @readonly\n\t\t * @member {module:ui/button/buttonview~ButtonView}\n\t\t */\n\t\tthis._findNextButtonView = this._createButton( {\n\t\t\tlabel: t( 'Next result' ),\n\t\t\tclass: 'ck-button-next',\n\t\t\ticon: previousArrow,\n\t\t\tkeystroke: 'F3',\n\t\t\ttooltip: true\n\t\t} );\n\n\t\t/**\n\t\t * The find options dropdown.\n\t\t *\n\t\t * @protected\n\t\t * @readonly\n\t\t * @member {module:ui/dropdown/dropdownview~DropdownView}\n\t\t */\n\t\tthis._optionsDropdown = this._createOptionsDropdown();\n\n\t\t/**\n\t\t * The replace button view.\n\t\t *\n\t\t * @protected\n\t\t * @readonly\n\t\t * @member {module:ui/button/buttonview~ButtonView}\n\t\t */\n\t\tthis._replaceButtonView = this._createButton( {\n\t\t\tlabel: t( 'Replace' ),\n\t\t\tclass: 'ck-button-replace',\n\t\t\twithText: true\n\t\t} );\n\n\t\t/**\n\t\t * The replace all button view.\n\t\t *\n\t\t * @protected\n\t\t * @readonly\n\t\t * @member {module:ui/button/buttonview~ButtonView}\n\t\t */\n\t\tthis._replaceAllButtonView = this._createButton( {\n\t\t\tlabel: t( 'Replace all' ),\n\t\t\tclass: 'ck-button-replaceall',\n\t\t\twithText: true\n\t\t} );\n\n\t\t/**\n\t\t * The fieldset aggregating the find UI.\n\t\t *\n\t\t * @protected\n\t\t * @readonly\n\t\t * @member {module:ui/view/view~View}\n\t\t */\n\t\tthis._findFieldsetView = this._createFindFieldset();\n\n\t\t/**\n\t\t * The fieldset aggregating the replace UI.\n\t\t *\n\t\t * @protected\n\t\t * @readonly\n\t\t * @member {module:ui/view/view~View}\n\t\t */\n\t\tthis._replaceFieldsetView = this._createReplaceFieldset();\n\n\t\t/**\n\t\t * Tracks information about the DOM focus in the form.\n\t\t *\n\t\t * @readonly\n\t\t * @protected\n\t\t * @member {module:utils/focustracker~FocusTracker}\n\t\t */\n\t\tthis._focusTracker = new FocusTracker();\n\n\t\t/**\n\t\t * An instance of the {@link module:utils/keystrokehandler~KeystrokeHandler}.\n\t\t *\n\t\t * @readonly\n\t\t * @protected\n\t\t * @member {module:utils/keystrokehandler~KeystrokeHandler}\n\t\t */\n\t\tthis._keystrokes = new KeystrokeHandler();\n\n\t\t/**\n\t\t * A collection of views that can be focused in the form.\n\t\t *\n\t\t * @readonly\n\t\t * @protected\n\t\t * @member {module:ui/viewcollection~ViewCollection}\n\t\t */\n\t\tthis._focusables = new ViewCollection();\n\n\t\t/**\n\t\t * Helps cycling over {@link #_focusables} in the form.\n\t\t *\n\t\t * @readonly\n\t\t * @protected\n\t\t * @member {module:ui/focuscycler~FocusCycler}\n\t\t */\n\t\tthis._focusCycler = new FocusCycler( {\n\t\t\tfocusables: this._focusables,\n\t\t\tfocusTracker: this._focusTracker,\n\t\t\tkeystrokeHandler: this._keystrokes,\n\t\t\tactions: {\n\t\t\t\t// Navigate form fields backwards using the <kbd>Shift</kbd> + <kbd>Tab</kbd> keystroke.\n\t\t\t\tfocusPrevious: 'shift + tab',\n\n\t\t\t\t// Navigate form fields forwards using the <kbd>Tab</kbd> key.\n\t\t\t\tfocusNext: 'tab'\n\t\t\t}\n\t\t} );\n\n\t\tthis.setTemplate( {\n\t\t\ttag: 'form',\n\t\t\tattributes: {\n\t\t\t\tclass: [\n\t\t\t\t\t'ck',\n\t\t\t\t\t'ck-find-and-replace-form'\n\t\t\t\t],\n\n\t\t\t\ttabindex: '-1'\n\t\t\t},\n\t\t\tchildren: [\n\t\t\t\tnew FormHeaderView( locale, {\n\t\t\t\t\tlabel: t( 'Find and replace' )\n\t\t\t\t} ),\n\t\t\t\tthis._findFieldsetView,\n\t\t\t\tthis._replaceFieldsetView\n\t\t\t]\n\t\t} );\n\n\t\tinjectCssTransitionDisabler( this );\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\trender() {\n\t\tsuper.render();\n\n\t\tsubmitHandler( { view: this } );\n\n\t\tthis._initFocusCycling();\n\t\tthis._initKeystrokeHandling();\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tdestroy() {\n\t\tsuper.destroy();\n\n\t\tthis._focusTracker.destroy();\n\t\tthis._keystrokes.destroy();\n\t}\n\n\t/**\n\t * Focuses the fist {@link #_focusables} in the form.\n\t */\n\tfocus() {\n\t\tthis._focusCycler.focusFirst();\n\t}\n\n\t/**\n\t * Resets the form before re-appearing.\n\t *\n\t * It clears error messages, hides the match counter and disables the replace feature\n\t * until the next hit of the \"Find\" button.\n\t *\n\t * **Note**: It does not reset inputs and options, though. This way the form works better in editors with\n\t * disappearing toolbar (e.g. BalloonEditor): hiding the toolbar by accident (together with the find and replace UI)\n\t * does not require filling the entire form again.\n\t */\n\treset() {\n\t\tthis._findInputView.errorText = null;\n\t\tthis.isDirty = true;\n\t}\n\n\t/**\n\t * Returns the value of the find input.\n\t *\n\t * @protected\n\t * @returns {String}\n\t */\n\tget _textToFind() {\n\t\treturn this._findInputView.fieldView.element.value;\n\t}\n\n\t/**\n\t * Returns the value of the replace input.\n\t *\n\t * @protected\n\t * @returns {String}\n\t */\n\tget _textToReplace() {\n\t\treturn this._replaceInputView.fieldView.element.value;\n\t}\n\n\t/**\n\t * Configures and returns the `<fieldset>` aggregating all find controls.\n\t *\n\t * @private\n\t * @returns {module:ui/view~View}\n\t */\n\t_createFindFieldset() {\n\t\tconst locale = this.locale;\n\t\tconst fieldsetView = new View( locale );\n\n\t\t// Typing in the find field invalidates all previous results (the form is \"dirty\").\n\t\tthis._findInputView.fieldView.on( 'input', () => {\n\t\t\tthis.isDirty = true;\n\t\t} );\n\n\t\tthis._findButtonView.on( 'execute', this._onFindButtonExecute.bind( this ) );\n\n\t\t// Pressing prev/next buttons fires related event on the form.\n\t\tthis._findPrevButtonView.delegate( 'execute' ).to( this, 'findPrevious' );\n\t\tthis._findNextButtonView.delegate( 'execute' ).to( this, 'findNext' );\n\n\t\t// Prev/next buttons will be disabled when related editor command gets disabled.\n\t\tthis._findPrevButtonView.bind( 'isEnabled' ).to( this, '_areCommandsEnabled', ( { findPrevious } ) => findPrevious );\n\t\tthis._findNextButtonView.bind( 'isEnabled' ).to( this, '_areCommandsEnabled', ( { findNext } ) => findNext );\n\n\t\tthis._injectFindResultsCounter();\n\n\t\tfieldsetView.setTemplate( {\n\t\t\ttag: 'fieldset',\n\t\t\tattributes: {\n\t\t\t\tclass: [ 'ck', 'ck-find-and-replace-form__find' ]\n\t\t\t},\n\t\t\tchildren: [\n\t\t\t\tthis._findInputView,\n\t\t\t\tthis._findButtonView,\n\t\t\t\tthis._findPrevButtonView,\n\t\t\t\tthis._findNextButtonView\n\t\t\t]\n\t\t} );\n\n\t\treturn fieldsetView;\n\t}\n\n\t/**\n\t * The action performed when the {@link #_findButtonView} is pressed.\n\t *\n\t * @private\n\t */\n\t_onFindButtonExecute() {\n\t\t// When hitting \"Find\" in an empty input, an error should be displayed.\n\t\t// Also, if the form was \"dirty\", it should remain so.\n\t\tif ( !this._textToFind ) {\n\t\t\tconst t = this.t;\n\n\t\t\tthis._findInputView.errorText = t( 'Text to find must not be empty.' );\n\n\t\t\treturn;\n\t\t}\n\n\t\t// Hitting \"Find\" automatically clears the dirty state.\n\t\tthis.isDirty = false;\n\n\t\tthis.fire( 'findNext', {\n\t\t\tsearchText: this._textToFind,\n\t\t\tmatchCase: this._matchCase,\n\t\t\twholeWords: this._wholeWordsOnly\n\t\t} );\n\t}\n\n\t/**\n\t * Configures an injects the find results counter displaying a \"N of M\" label of the {@link #_findInputView}.\n\t *\n\t * @private\n\t */\n\t_injectFindResultsCounter() {\n\t\tconst locale = this.locale;\n\t\tconst t = locale.t;\n\t\tconst bind = this.bindTemplate;\n\t\tconst resultsCounterView = new View( locale );\n\n\t\tthis.bind( '_resultsCounterText' ).to( this, 'highlightOffset', this, 'matchCount',\n\t\t\t( highlightOffset, matchCount ) => t( '%0 of %1', [ highlightOffset, matchCount ] )\n\t\t);\n\n\t\tresultsCounterView.setTemplate( {\n\t\t\ttag: 'span',\n\t\t\tattributes: {\n\t\t\t\tclass: [\n\t\t\t\t\t'ck',\n\t\t\t\t\t'ck-results-counter',\n\t\t\t\t\t// The counter only makes sense when the field text corresponds to search results in the editing.\n\t\t\t\t\tbind.if( 'isDirty', 'ck-hidden' )\n\t\t\t\t]\n\t\t\t},\n\t\t\tchildren: [\n\t\t\t\t{\n\t\t\t\t\ttext: bind.to( '_resultsCounterText' )\n\t\t\t\t}\n\t\t\t]\n\t\t} );\n\n\t\t// The whole idea is that when the text of the counter changes, its width also increases/decreases and\n\t\t// it consumes more or less space over the input. The input, on the other hand, should adjust it's right\n\t\t// padding so its *entire* text always remains visible and available to the user.\n\t\tconst updateFindInputPadding = () => {\n\t\t\tconst inputElement = this._findInputView.fieldView.element;\n\n\t\t\t// Don't adjust the padding if the input (also: counter) were not rendered or not inserted into DOM yet.\n\t\t\tif ( !inputElement || !isVisible( inputElement ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst counterWidth = new Rect( resultsCounterView.element ).width;\n\t\t\tconst paddingPropertyName = locale.uiLanguageDirection === 'ltr' ? 'paddingRight' : 'paddingLeft';\n\n\t\t\tif ( !counterWidth ) {\n\t\t\t\tinputElement.style[ paddingPropertyName ] = null;\n\t\t\t} else {\n\t\t\t\tinputElement.style[ paddingPropertyName ] = `calc( 2 * var(--ck-spacing-standard) + ${ counterWidth }px )`;\n\t\t\t}\n\t\t};\n\n\t\t// Adjust the input padding when the text of the counter changes, for instance \"1 of 200\" is narrower than \"123 of 200\".\n\t\t// Using \"low\" priority to let the text be set by the template binding first.\n\t\tthis.on( 'change:_resultsCounterText', updateFindInputPadding, { priority: 'low' } );\n\n\t\t// Adjust the input padding when the counter shows or hides. When hidden, there should be no padding. When it shows, the\n\t\t// padding should be set according to the text of the counter.\n\t\t// Using \"low\" priority to let the text be set by the template binding first.\n\t\tthis.on( 'change:isDirty', updateFindInputPadding, { priority: 'low' } );\n\n\t\t// Put the counter element next to the <input> in the find field.\n\t\tthis._findInputView.template.children[ 0 ].children.push( resultsCounterView );\n\t}\n\n\t/**\n\t * Configures and returns the `<fieldset>` aggregating all replace controls.\n\t *\n\t * @private\n\t * @returns {module:ui/view~View}\n\t */\n\t_createReplaceFieldset() {\n\t\tconst locale = this.locale;\n\t\tconst t = locale.t;\n\t\tconst fieldsetView = new View( locale );\n\n\t\tthis._replaceButtonView.bind( 'isEnabled' ).to(\n\t\t\tthis, '_areCommandsEnabled',\n\t\t\tthis, '_searchResultsFound',\n\t\t\t( { replace }, resultsFound ) => replace && resultsFound );\n\n\t\tthis._replaceAllButtonView.bind( 'isEnabled' ).to(\n\t\t\tthis, '_areCommandsEnabled',\n\t\t\tthis, '_searchResultsFound',\n\t\t\t( { replaceAll }, resultsFound ) => replaceAll && resultsFound );\n\n\t\tthis._replaceInputView.bind( 'isEnabled' ).to(\n\t\t\tthis, '_areCommandsEnabled',\n\t\t\tthis, '_searchResultsFound',\n\t\t\t( { replace }, resultsFound ) => replace && resultsFound );\n\n\t\tthis._replaceInputView.bind( 'infoText' ).to(\n\t\t\tthis._replaceInputView, 'isEnabled',\n\t\t\tthis._replaceInputView, 'isFocused',\n\t\t\t( isEnabled, isFocused ) => {\n\t\t\t\tif ( isEnabled || !isFocused ) {\n\t\t\t\t\treturn '';\n\t\t\t\t}\n\n\t\t\t\treturn t( 'Tip: Find some text first in order to replace it.' );\n\t\t\t} );\n\n\t\tthis._replaceButtonView.on( 'execute', () => {\n\t\t\tthis.fire( 'replace', {\n\t\t\t\tsearchText: this._textToFind,\n\t\t\t\treplaceText: this._textToReplace\n\t\t\t} );\n\t\t} );\n\n\t\tthis._replaceAllButtonView.on( 'execute', () => {\n\t\t\tthis.fire( 'replaceAll', {\n\t\t\t\tsearchText: this._textToFind,\n\t\t\t\treplaceText: this._textToReplace\n\t\t\t} );\n\n\t\t\tthis.focus();\n\t\t} );\n\n\t\tfieldsetView.setTemplate( {\n\t\t\ttag: 'fieldset',\n\t\t\tattributes: {\n\t\t\t\tclass: [ 'ck', 'ck-find-and-replace-form__replace' ]\n\t\t\t},\n\t\t\tchildren: [\n\t\t\t\tthis._replaceInputView,\n\t\t\t\tthis._optionsDropdown,\n\t\t\t\tthis._replaceButtonView,\n\t\t\t\tthis._replaceAllButtonView\n\t\t\t]\n\t\t} );\n\n\t\treturn fieldsetView;\n\t}\n\n\t/**\n\t * Creates, configures and returns and instance of a dropdown allowing users to narrow\n\t * the search criteria down. The dropdown has a list with switch buttons for each option.\n\t *\n\t * @private\n\t * @returns {module:ui/dropdown/dropdownview~DropdownView}\n\t */\n\t_createOptionsDropdown() {\n\t\tconst locale = this.locale;\n\t\tconst t = locale.t;\n\t\tconst dropdownView = createDropdown( locale );\n\n\t\tdropdownView.class = 'ck-options-dropdown';\n\n\t\tdropdownView.buttonView.set( {\n\t\t\twithText: false,\n\t\t\tlabel: t( 'Show options' ),\n\t\t\ticon: icons.cog,\n\t\t\ttooltip: true\n\t\t} );\n\n\t\tconst matchCaseModel = new Model( {\n\t\t\twithText: true,\n\t\t\tlabel: t( 'Match case' ),\n\n\t\t\t// A dummy read-only prop to make it easy to tell which switch was toggled.\n\t\t\t_isMatchCaseSwitch: true\n\t\t} );\n\n\t\tconst wholeWordsOnlyModel = new Model( {\n\t\t\twithText: true,\n\t\t\tlabel: t( 'Whole words only' )\n\t\t} );\n\n\t\t// Let the switches be controlled by form's observable properties.\n\t\tmatchCaseModel.bind( 'isOn' ).to( this, '_matchCase' );\n\t\twholeWordsOnlyModel.bind( 'isOn' ).to( this, '_wholeWordsOnly' );\n\n\t\t// Update the state of the form when a switch is toggled.\n\t\tdropdownView.on( 'execute', evt => {\n\t\t\tif ( evt.source._isMatchCaseSwitch ) {\n\t\t\t\tthis._matchCase = !this._matchCase;\n\t\t\t} else {\n\t\t\t\tthis._wholeWordsOnly = !this._wholeWordsOnly;\n\t\t\t}\n\n\t\t\t// Toggling a switch makes the form dirty because this changes search criteria\n\t\t\t// just like typing text of the find input.\n\t\t\tthis.isDirty = true;\n\t\t} );\n\n\t\taddListToDropdown( dropdownView, new Collection( [\n\t\t\t{ type: 'switchbutton', model: matchCaseModel },\n\t\t\t{ type: 'switchbutton', model: wholeWordsOnlyModel }\n\t\t] ) );\n\n\t\treturn dropdownView;\n\t}\n\n\t/**\n\t * Initializes the {@link #_focusables} and {@link #_focusTracker} to allow navigation\n\t * using <kbd>Tab</kbd> and <kbd>Shift</kbd>+<kbd>Tab</kbd> keystrokes in the right order.\n\t *\n\t * @private\n\t */\n\t_initFocusCycling() {\n\t\tconst childViews = [\n\t\t\tthis._findInputView,\n\t\t\tthis._findButtonView,\n\t\t\tthis._findPrevButtonView,\n\t\t\tthis._findNextButtonView,\n\t\t\tthis._replaceInputView,\n\t\t\tthis._optionsDropdown,\n\t\t\tthis._replaceButtonView,\n\t\t\tthis._replaceAllButtonView\n\t\t];\n\n\t\tchildViews.forEach( v => {\n\t\t\t// Register the view as focusable.\n\t\t\tthis._focusables.add( v );\n\n\t\t\t// Register the view in the focus tracker.\n\t\t\tthis._focusTracker.add( v.element );\n\t\t} );\n\t}\n\n\t/**\n\t * Initializes the keystroke handling in the form.\n\t *\n\t * @private\n\t */\n\t_initKeystrokeHandling() {\n\t\tconst stopPropagation = data => data.stopPropagation();\n\t\tconst stopPropagationAndPreventDefault = data => {\n\t\t\tdata.stopPropagation();\n\t\t\tdata.preventDefault();\n\t\t};\n\n\t\t// Start listening for the keystrokes coming from #element.\n\t\tthis._keystrokes.listenTo( this.element );\n\n\t\t// Find the next result upon F3.\n\t\tthis._keystrokes.set( 'f3', event => {\n\t\t\tstopPropagationAndPreventDefault( event );\n\n\t\t\tthis._findNextButtonView.fire( 'execute' );\n\t\t} );\n\n\t\t// Find the previous result upon F3.\n\t\tthis._keystrokes.set( 'shift+f3', event => {\n\t\t\tstopPropagationAndPreventDefault( event );\n\n\t\t\tthis._findPrevButtonView.fire( 'execute' );\n\t\t} );\n\n\t\t// Find or replace upon pressing Enter in the find and replace fields.\n\t\tthis._keystrokes.set( 'enter', event => {\n\t\t\tconst target = event.target;\n\n\t\t\tif ( target === this._findInputView.fieldView.element ) {\n\t\t\t\tif ( this._areCommandsEnabled.findNext ) {\n\t\t\t\t\tthis._findNextButtonView.fire( 'execute' );\n\t\t\t\t} else {\n\t\t\t\t\tthis._findButtonView.fire( 'execute' );\n\t\t\t\t}\n\t\t\t\tstopPropagationAndPreventDefault( event );\n\t\t\t} else if ( target === this._replaceInputView.fieldView.element && !this.isDirty ) {\n\t\t\t\tthis._replaceButtonView.fire( 'execute' );\n\t\t\t\tstopPropagationAndPreventDefault( event );\n\t\t\t}\n\t\t} );\n\n\t\t// Find previous upon pressing Shift+Enter in the find field.\n\t\tthis._keystrokes.set( 'shift+enter', event => {\n\t\t\tconst target = event.target;\n\n\t\t\tif ( target !== this._findInputView.fieldView.element ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( this._areCommandsEnabled.findPrevious ) {\n\t\t\t\tthis._findPrevButtonView.fire( 'execute' );\n\t\t\t} else {\n\t\t\t\tthis._findButtonView.fire( 'execute' );\n\t\t\t}\n\n\t\t\tstopPropagationAndPreventDefault( event );\n\t\t} );\n\n\t\t// Since the form is in the dropdown panel which is a child of the toolbar, the toolbar's\n\t\t// keystroke handler would take over the key management in the URL input.\n\t\t// We need to prevent this ASAP. Otherwise, the basic caret movement using the arrow keys will be impossible.\n\t\tthis._keystrokes.set( 'arrowright', stopPropagation );\n\t\tthis._keystrokes.set( 'arrowleft', stopPropagation );\n\t\tthis._keystrokes.set( 'arrowup', stopPropagation );\n\t\tthis._keystrokes.set( 'arrowdown', stopPropagation );\n\n\t\t// Intercept the `selectstart` event, which is blocked by default because of the default behavior\n\t\t// of the DropdownView#panelView. This blocking prevents the native select all on Ctrl+A.\n\t\tthis.listenTo( this._findInputView.element, 'selectstart', ( evt, domEvt ) => {\n\t\t\tdomEvt.stopPropagation();\n\t\t}, { priority: 'high' } );\n\n\t\tthis.listenTo( this._replaceInputView.element, 'selectstart', ( evt, domEvt ) => {\n\t\t\tdomEvt.stopPropagation();\n\t\t}, { priority: 'high' } );\n\t}\n\n\t/**\n\t * Creates a button view.\n\t *\n\t * @private\n\t * @param {Object} options The properties of the `ButtonView`.\n\t * @returns {module:ui/button/buttonview~ButtonView} The button view instance.\n\t */\n\t_createButton( options ) {\n\t\tconst button = new ButtonView( this.locale );\n\n\t\tbutton.set( options );\n\n\t\treturn button;\n\t}\n\n\t/**\n\t * Creates a labeled input view.\n\t *\n\t * @private\n\t * @param {String} label The input label.\n\t * @returns {module:ui/labeledfield/labeledfieldview~LabeledFieldView} The labeled input view instance.\n\t */\n\t_createInputField( label ) {\n\t\tconst labeledInput = new LabeledFieldView( this.locale, createLabeledInputText );\n\n\t\tlabeledInput.label = label;\n\n\t\treturn labeledInput;\n\t}\n}\n\n/**\n * Fired when the find next button is triggered.\n *\n * @event findNext\n * @param {String} searchText Search text.\n */\n\n/**\n * Fired when the find previous button is triggered.\n *\n * @event findPrevious\n * @param {String} searchText Search text.\n */\n\n/**\n * Fired when the replace button is triggered.\n *\n * @event replace\n * @param {String} replaceText Replacement text.\n */\n\n/**\n * Fired when the replaceAll button is triggered.\n *\n * @event replaceAll\n * @param {String} replaceText Replacement text.\n */\n","/**\n * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module find-and-replace/utils\n */\n\nimport { uid, Collection } from 'ckeditor5/src/utils';\nimport { escapeRegExp } from 'lodash-es';\n\n/**\n * Executes findCallback and updates search results list.\n *\n * @param {module:engine/model/range~Range} range The model range to scan for matches.\n * @param {module:engine/model/model~Model} model The model.\n * @param {Function} findCallback The callback that should return `true` if provided text matches the search term.\n * @param {module:utils/collection~Collection} [startResults] An optional collection of find matches that the function should\n * start with. This would be a collection returned by a previous `updateFindResultFromRange()` call.\n * @returns {module:utils/collection~Collection} A collection of objects describing find match.\n *\n * An example structure:\n *\n * ```js\n * {\n *\tid: resultId,\n *\tlabel: foundItem.label,\n *\tmarker\n *\t}\n * ```\n */\nexport function updateFindResultFromRange( range, model, findCallback, startResults ) {\n\tconst results = startResults || new Collection();\n\n\tmodel.change( writer => {\n\t\t[ ...range ].forEach( ( { type, item } ) => {\n\t\t\tif ( type === 'elementStart' ) {\n\t\t\t\tif ( model.schema.checkChild( item, '$text' ) ) {\n\t\t\t\t\tconst foundItems = findCallback( {\n\t\t\t\t\t\titem,\n\t\t\t\t\t\ttext: rangeToText( model.createRangeIn( item ) )\n\t\t\t\t\t} );\n\n\t\t\t\t\tif ( !foundItems ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tfoundItems.forEach( foundItem => {\n\t\t\t\t\t\tconst resultId = `findResult:${ uid() }`;\n\t\t\t\t\t\tconst marker = writer.addMarker( resultId, {\n\t\t\t\t\t\t\tusingOperation: false,\n\t\t\t\t\t\t\taffectsData: false,\n\t\t\t\t\t\t\trange: writer.createRange(\n\t\t\t\t\t\t\t\twriter.createPositionAt( item, foundItem.start ),\n\t\t\t\t\t\t\t\twriter.createPositionAt( item, foundItem.end )\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t\tconst index = findInsertIndex( results, marker );\n\n\t\t\t\t\t\tresults.add(\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tid: resultId,\n\t\t\t\t\t\t\t\tlabel: foundItem.label,\n\t\t\t\t\t\t\t\tmarker\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tindex\n\t\t\t\t\t\t);\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t} );\n\n\treturn results;\n}\n\n/**\n * Returns text representation of a range. The returned text length should be the same as range length.\n * In order to achieve this this function will replace inline elements (text-line) as new line character (\"\\n\").\n *\n * @param {module:engine/model/range~Range} range The model range.\n * @returns {String} The text content of the provided range.\n */\nexport function rangeToText( range ) {\n\treturn Array.from( range.getItems() ).reduce( ( rangeText, node ) => {\n\t\t// Trim text to a last occurrence of an inline element and update range start.\n\t\tif ( !( node.is( 'text' ) || node.is( 'textProxy' ) ) ) {\n\t\t\t// Editor has only one inline element defined in schema: `<softBreak>` which is treated as new line character in blocks.\n\t\t\t// Special handling might be needed for other inline elements (inline widgets).\n\t\t\treturn `${ rangeText }\\n`;\n\t\t}\n\n\t\treturn rangeText + node.data;\n\t}, '' );\n}\n\n// Finds the appropriate index in the resultsList Collection.\nfunction findInsertIndex( resultsList, markerToInsert ) {\n\tconst result = resultsList.find( ( { marker } ) => {\n\t\treturn markerToInsert.getStart().isBefore( marker.getStart() );\n\t} );\n\n\treturn result ? resultsList.getIndex( result ) : resultsList.length;\n}\n\n// Maps RegExp match result to find result.\nfunction regexpMatchToFindResult( matchResult ) {\n\tconst lastGroupIndex = matchResult.length - 1;\n\n\tlet startOffset = matchResult.index;\n\n\t// Searches with match all flag have an extra matching group with empty string or white space matched before the word.\n\t// If the search term starts with the space already, there is no extra group even with match all flag on.\n\tif ( matchResult.length === 3 ) {\n\t\tstartOffset += matchResult[ 1 ].length;\n\t}\n\n\treturn {\n\t\tlabel: matchResult[ lastGroupIndex ],\n\t\tstart: startOffset,\n\t\tend: startOffset + matchResult[ lastGroupIndex ].length\n\t};\n}\n\n/**\n * Creates a text matching callback for a specified search term and matching options.\n *\n * @param {String} searchTerm The search term.\n * @param {Object} [options] Matching options.\n * @param {Boolean} [options.matchCase=false] If set to `true` letter casing will be ignored.\n * @param {Boolean} [options.wholeWords=false] If set to `true` only whole words that match `callbackOrText` will be matched.\n * @returns {Function}\n */\nexport function findByTextCallback( searchTerm, options ) {\n\tlet flags = 'gu';\n\n\tif ( !options.matchCase ) {\n\t\tflags += 'i';\n\t}\n\n\tlet regExpQuery = `(${ escapeRegExp( searchTerm ) })`;\n\n\tif ( options.wholeWords ) {\n\t\tconst nonLetterGroup = '[^a-zA-Z\\u00C0-\\u024F\\u1E00-\\u1EFF]';\n\n\t\tif ( !new RegExp( '^' + nonLetterGroup ).test( searchTerm ) ) {\n\t\t\tregExpQuery = `(^|${ nonLetterGroup }|_)${ regExpQuery }`;\n\t\t}\n\n\t\tif ( !new RegExp( nonLetterGroup + '$' ).test( searchTerm ) ) {\n\t\t\tregExpQuery = `${ regExpQuery }(?=_|${ nonLetterGroup }|$)`;\n\t\t}\n\t}\n\n\tconst regExp = new RegExp( regExpQuery, flags );\n\n\tfunction findCallback( { text } ) {\n\t\tconst matches = [ ...text.matchAll( regExp ) ];\n\n\t\treturn matches.map( regexpMatchToFindResult );\n\t}\n\n\treturn findCallback;\n}\n","module.exports = (__webpack_require__(/*! dll-reference CKEditor5.dll */ \"dll-reference CKEditor5.dll\"))(\"./src/core.js\");","module.exports = (__webpack_require__(/*! dll-reference CKEditor5.dll */ \"dll-reference CKEditor5.dll\"))(\"./src/ui.js\");","module.exports = (__webpack_require__(/*! dll-reference CKEditor5.dll */ \"dll-reference CKEditor5.dll\"))(\"./src/utils.js\");","module.exports = CKEditor5.dll;","import root from './_root.js';\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nexport default Symbol;\n","/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n}\n\nexport default arrayMap;\n","import Symbol from './_Symbol.js';\nimport getRawTag from './_getRawTag.js';\nimport objectToString from './_objectToString.js';\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nexport default baseGetTag;\n","import Symbol from './_Symbol.js';\nimport arrayMap from './_arrayMap.js';\nimport isArray from './isArray.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nexport default baseToString;\n","import trimmedEndIndex from './_trimmedEndIndex.js';\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\nexport default baseTrim;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nexport default freeGlobal;\n","import Symbol from './_Symbol.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nexport default getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nexport default objectToString;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nexport default root;\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n}\n\nexport default trimmedEndIndex;\n","import isObject from './isObject.js';\nimport now from './now.js';\nimport toNumber from './toNumber.js';\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nexport default debounce;\n","import toString from './toString.js';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g,\n reHasRegExpChar = RegExp(reRegExpChar.source);\n\n/**\n * Escapes the `RegExp` special characters \"^\", \"$\", \"\\\", \".\", \"*\", \"+\",\n * \"?\", \"(\", \")\", \"[\", \"]\", \"{\", \"}\", and \"|\" in `string`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to escape.\n * @returns {string} Returns the escaped string.\n * @example\n *\n * _.escapeRegExp('[lodash](https://lodash.com/)');\n * // => '\\[lodash\\]\\(https://lodash\\.com/\\)'\n */\nfunction escapeRegExp(string) {\n string = toString(string);\n return (string && reHasRegExpChar.test(string))\n ? string.replace(reRegExpChar, '\\\\$&')\n : string;\n}\n\nexport default escapeRegExp;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nexport default isArray;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nexport default isObject;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nexport default isObjectLike;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nexport default isSymbol;\n","import root from './_root.js';\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\nexport default now;\n","import baseTrim from './_baseTrim.js';\nimport isObject from './isObject.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nexport default toNumber;\n","import baseToString from './_baseToString.js';\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\nexport default toString;\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nc = undefined;","/**\n * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module find-and-replace\n */\n\nexport { default as FindAndReplace } from './findandreplace';\n"],"sourceRoot":""}
@@ -1 +1 @@
1
- !function(i){const e=i["pt-br"]=i["pt-br"]||{};e.dictionary=Object.assign(e.dictionary||{},{Find:"Pesquisar","Find and replace":"Pesquisar e substituir","Find in text…":"Pesquisar no texto","Match case":"Diferenciar maiúsculas de minúsculas","Next result":"Próxima ocorrência","Previous result":"Ocorrência anterior",Replace:"Substituir","Replace all":"Substituir tudo","Replace with…":"Substituir por...","Show options":"Mostrar opções","Text to find must not be empty.":"Texto a ser pesquisado não pode ser vazio.","Tip: Find some text first in order to replace it.":"Dica: Pesquise por algum texto antes para poder substituí-la.","Whole words only":"Apenas palavras inteiras"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
1
+ !function(i){const t=i["pt-br"]=i["pt-br"]||{};t.dictionary=Object.assign(t.dictionary||{},{Find:"Localizar","Find and replace":"Localizar e substituir","Find in text…":"Localizar no texto","Match case":"Diferenciar maiúsculas de minúsculas","Next result":"Próxima ocorrência","Previous result":"Ocorrência anterior",Replace:"Substituir","Replace all":"Substituir todos","Replace with…":"Substituir por...","Show options":"Mostrar opções","Text to find must not be empty.":"O texto a ser localizado não pode ser vazio.","Tip: Find some text first in order to replace it.":"Dica: Localize algum texto primeiro para poder substituí-lo.","Whole words only":"Apenas palavras inteiras"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
@@ -19,15 +19,15 @@ msgstr ""
19
19
 
20
20
  msgctxt "The tooltip of a find and replace button in the toolbar. Also, the title of the find and replace form."
21
21
  msgid "Find and replace"
22
- msgstr "Pesquisar e substituir"
22
+ msgstr "Localizar e substituir"
23
23
 
24
24
  msgctxt "The label for the searched text in the find and replace dropdown."
25
25
  msgid "Find in text…"
26
- msgstr "Pesquisar no texto"
26
+ msgstr "Localizar no texto"
27
27
 
28
28
  msgctxt "The label for the find action button in the find and replace dropdown."
29
29
  msgid "Find"
30
- msgstr "Pesquisar"
30
+ msgstr "Localizar"
31
31
 
32
32
  msgctxt "The label for the previous result button in the find and replace dropdown."
33
33
  msgid "Previous result"
@@ -43,7 +43,7 @@ msgstr "Substituir"
43
43
 
44
44
  msgctxt "The label for the replace all action button in the find and replace dropdown."
45
45
  msgid "Replace all"
46
- msgstr "Substituir tudo"
46
+ msgstr "Substituir todos"
47
47
 
48
48
  msgctxt "The label for the match case checkbox in the find and replace dropdown."
49
49
  msgid "Match case"
@@ -59,11 +59,11 @@ msgstr "Substituir por..."
59
59
 
60
60
  msgctxt "An error text displayed when user attempted to find an empty text."
61
61
  msgid "Text to find must not be empty."
62
- msgstr "Texto a ser pesquisado não pode ser vazio."
62
+ msgstr "O texto a ser localizado não pode ser vazio."
63
63
 
64
64
  msgctxt "A message displayed next to the replace field when disabled but user tries to use it."
65
65
  msgid "Tip: Find some text first in order to replace it."
66
- msgstr "Dica: Pesquise por algum texto antes para poder substituí-la."
66
+ msgstr "Dica: Localize algum texto primeiro para poder substituí-lo."
67
67
 
68
68
  msgctxt "The label and a tooltip of the options dropdown button in the find and replace form."
69
69
  msgid "Show options"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ckeditor/ckeditor5-find-and-replace",
3
- "version": "39.0.2",
3
+ "version": "40.0.0",
4
4
  "description": "Find and replace feature for CKEditor 5.",
5
5
  "keywords": [
6
6
  "ckeditor",
@@ -12,8 +12,8 @@
12
12
  ],
13
13
  "main": "src/index.js",
14
14
  "dependencies": {
15
- "@ckeditor/ckeditor5-ui": "39.0.2",
16
- "ckeditor5": "39.0.2",
15
+ "@ckeditor/ckeditor5-ui": "40.0.0",
16
+ "ckeditor5": "40.0.0",
17
17
  "lodash-es": "4.17.21"
18
18
  },
19
19
  "author": "CKSource (http://cksource.com/)",
@@ -1,20 +1,20 @@
1
- /**
2
- * @license Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.
3
- * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
4
- */
5
- import type { FindAndReplace, FindAndReplaceEditing, FindAndReplaceUI, FindAndReplaceUtils, FindCommand, FindNextCommand, FindPreviousCommand, ReplaceAllCommand, ReplaceCommand } from './index';
6
- declare module '@ckeditor/ckeditor5-core' {
7
- interface PluginsMap {
8
- [FindAndReplace.pluginName]: FindAndReplace;
9
- [FindAndReplaceEditing.pluginName]: FindAndReplaceEditing;
10
- [FindAndReplaceUI.pluginName]: FindAndReplaceUI;
11
- [FindAndReplaceUtils.pluginName]: FindAndReplaceUtils;
12
- }
13
- interface CommandsMap {
14
- find: FindCommand;
15
- findNext: FindNextCommand;
16
- findPrevious: FindPreviousCommand;
17
- replace: ReplaceCommand;
18
- replaceAll: ReplaceAllCommand;
19
- }
20
- }
1
+ /**
2
+ * @license Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
4
+ */
5
+ import type { FindAndReplace, FindAndReplaceEditing, FindAndReplaceUI, FindAndReplaceUtils, FindCommand, FindNextCommand, FindPreviousCommand, ReplaceAllCommand, ReplaceCommand } from './index';
6
+ declare module '@ckeditor/ckeditor5-core' {
7
+ interface PluginsMap {
8
+ [FindAndReplace.pluginName]: FindAndReplace;
9
+ [FindAndReplaceEditing.pluginName]: FindAndReplaceEditing;
10
+ [FindAndReplaceUI.pluginName]: FindAndReplaceUI;
11
+ [FindAndReplaceUtils.pluginName]: FindAndReplaceUtils;
12
+ }
13
+ interface CommandsMap {
14
+ find: FindCommand;
15
+ findNext: FindNextCommand;
16
+ findPrevious: FindPreviousCommand;
17
+ replace: ReplaceCommand;
18
+ replaceAll: ReplaceAllCommand;
19
+ }
20
+ }
@@ -1,5 +1,5 @@
1
- /**
2
- * @license Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.
3
- * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
4
- */
5
- export {};
1
+ /**
2
+ * @license Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
4
+ */
5
+ export {};