{"remainingRequest":"C:\\Users\\Admin\\Desktop\\education\\frontend\\node_modules\\babel-loader\\lib\\index.js!C:\\Users\\Admin\\Desktop\\education\\frontend\\node_modules\\quill\\themes\\bubble.js","dependencies":[{"path":"C:\\Users\\Admin\\Desktop\\education\\frontend\\node_modules\\quill\\themes\\bubble.js","mtime":1787309794109},{"path":"C:\\Users\\Admin\\Desktop\\education\\frontend\\babel.config.js","mtime":1787567871334},{"path":"C:\\Users\\Admin\\Desktop\\education\\frontend\\node_modules\\cache-loader\\dist\\cjs.js","mtime":1787309791955},{"path":"C:\\Users\\Admin\\Desktop\\education\\frontend\\node_modules\\babel-loader\\lib\\index.js","mtime":1787309793142}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:InVzZSBzdHJpY3QiOwoKdmFyIF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkID0gcmVxdWlyZSgiQzovVXNlcnMvQWRtaW4vRGVza3RvcC9lZHVjYXRpb24vZnJvbnRlbmQvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVXaWxkY2FyZC5qcyIpLmRlZmF1bHQ7CnZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0gcmVxdWlyZSgiQzovVXNlcnMvQWRtaW4vRGVza3RvcC9lZHVjYXRpb24vZnJvbnRlbmQvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0LmpzIikuZGVmYXVsdDsKT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICJfX2VzTW9kdWxlIiwgewogIHZhbHVlOiB0cnVlCn0pOwpleHBvcnRzLmRlZmF1bHQgPSBleHBvcnRzLkJ1YmJsZVRvb2x0aXAgPSB2b2lkIDA7CnJlcXVpcmUoImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5qb2luLmpzIik7CnZhciBfY2xhc3NDYWxsQ2hlY2syID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKCJDOi9Vc2Vycy9BZG1pbi9EZXNrdG9wL2VkdWNhdGlvbi9mcm9udGVuZC9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qcyIpKTsKdmFyIF9jcmVhdGVDbGFzczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoIkM6L1VzZXJzL0FkbWluL0Rlc2t0b3AvZWR1Y2F0aW9uL2Zyb250ZW5kL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzIikpOwp2YXIgX2NhbGxTdXBlcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoIkM6L1VzZXJzL0FkbWluL0Rlc2t0b3AvZWR1Y2F0aW9uL2Zyb250ZW5kL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2NhbGxTdXBlci5qcyIpKTsKdmFyIF9zdXBlclByb3BHZXQyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKCJDOi9Vc2Vycy9BZG1pbi9EZXNrdG9wL2VkdWNhdGlvbi9mcm9udGVuZC9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9zdXBlclByb3BHZXQuanMiKSk7CnZhciBfaW5oZXJpdHMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKCJDOi9Vc2Vycy9BZG1pbi9EZXNrdG9wL2VkdWNhdGlvbi9mcm9udGVuZC9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbmhlcml0cy5qcyIpKTsKdmFyIF9kZWZpbmVQcm9wZXJ0eTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoIkM6L1VzZXJzL0FkbWluL0Rlc2t0b3AvZWR1Y2F0aW9uL2Zyb250ZW5kL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2RlZmluZVByb3BlcnR5LmpzIikpOwp2YXIgX2xvZGFzaEVzID0gcmVxdWlyZSgibG9kYXNoLWVzIik7CnZhciBfZW1pdHRlciA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZSgiLi4vY29yZS9lbWl0dGVyLmpzIikpOwp2YXIgX2Jhc2UgPSBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChyZXF1aXJlKCIuL2Jhc2UuanMiKSk7CnZhciBfc2VsZWN0aW9uID0gcmVxdWlyZSgiLi4vY29yZS9zZWxlY3Rpb24uanMiKTsKdmFyIF9pY29ucyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZSgiLi4vdWkvaWNvbnMuanMiKSk7CnZhciBfcXVpbGwgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoIi4uL2NvcmUvcXVpbGwuanMiKSk7CnZhciBUT09MQkFSX0NPTkZJRyA9IFtbJ2JvbGQnLCAnaXRhbGljJywgJ2xpbmsnXSwgW3sKICBoZWFkZXI6IDEKfSwgewogIGhlYWRlcjogMgp9LCAnYmxvY2txdW90ZSddXTsKdmFyIEJ1YmJsZVRvb2x0aXAgPSBleHBvcnRzLkJ1YmJsZVRvb2x0aXAgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9CYXNlVG9vbHRpcCkgewogIGZ1bmN0aW9uIEJ1YmJsZVRvb2x0aXAocXVpbGwsIGJvdW5kcykgewogICAgdmFyIF90aGlzOwogICAgKDAsIF9jbGFzc0NhbGxDaGVjazIuZGVmYXVsdCkodGhpcywgQnViYmxlVG9vbHRpcCk7CiAgICBfdGhpcyA9ICgwLCBfY2FsbFN1cGVyMi5kZWZhdWx0KSh0aGlzLCBCdWJibGVUb29sdGlwLCBbcXVpbGwsIGJvdW5kc10pOwogICAgX3RoaXMucXVpbGwub24oX2VtaXR0ZXIuZGVmYXVsdC5ldmVudHMuRURJVE9SX0NIQU5HRSwgZnVuY3Rpb24gKHR5cGUsIHJhbmdlLCBvbGRSYW5nZSwgc291cmNlKSB7CiAgICAgIGlmICh0eXBlICE9PSBfZW1pdHRlci5kZWZhdWx0LmV2ZW50cy5TRUxFQ1RJT05fQ0hBTkdFKSByZXR1cm47CiAgICAgIGlmIChyYW5nZSAhPSBudWxsICYmIHJhbmdlLmxlbmd0aCA+IDAgJiYgc291cmNlID09PSBfZW1pdHRlci5kZWZhdWx0LnNvdXJjZXMuVVNFUikgewogICAgICAgIF90aGlzLnNob3coKTsKICAgICAgICAvLyBMb2NrIG91ciB3aWR0aCBzbyB3ZSB3aWxsIGV4cGFuZCBiZXlvbmQgb3VyIG9mZnNldFBhcmVudCBib3VuZGFyaWVzCiAgICAgICAgX3RoaXMucm9vdC5zdHlsZS5sZWZ0ID0gJzBweCc7CiAgICAgICAgX3RoaXMucm9vdC5zdHlsZS53aWR0aCA9ICcnOwogICAgICAgIF90aGlzLnJvb3Quc3R5bGUud2lkdGggPSAiIi5jb25jYXQoX3RoaXMucm9vdC5vZmZzZXRXaWR0aCwgInB4Iik7CiAgICAgICAgdmFyIGxpbmVzID0gX3RoaXMucXVpbGwuZ2V0TGluZXMocmFuZ2UuaW5kZXgsIHJhbmdlLmxlbmd0aCk7CiAgICAgICAgaWYgKGxpbmVzLmxlbmd0aCA9PT0gMSkgewogICAgICAgICAgdmFyIF9ib3VuZHMgPSBfdGhpcy5xdWlsbC5nZXRCb3VuZHMocmFuZ2UpOwogICAgICAgICAgaWYgKF9ib3VuZHMgIT0gbnVsbCkgewogICAgICAgICAgICBfdGhpcy5wb3NpdGlvbihfYm91bmRzKTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgdmFyIGxhc3RMaW5lID0gbGluZXNbbGluZXMubGVuZ3RoIC0gMV07CiAgICAgICAgICB2YXIgaW5kZXggPSBfdGhpcy5xdWlsbC5nZXRJbmRleChsYXN0TGluZSk7CiAgICAgICAgICB2YXIgbGVuZ3RoID0gTWF0aC5taW4obGFzdExpbmUubGVuZ3RoKCkgLSAxLCByYW5nZS5pbmRleCArIHJhbmdlLmxlbmd0aCAtIGluZGV4KTsKICAgICAgICAgIHZhciBpbmRleEJvdW5kcyA9IF90aGlzLnF1aWxsLmdldEJvdW5kcyhuZXcgX3NlbGVjdGlvbi5SYW5nZShpbmRleCwgbGVuZ3RoKSk7CiAgICAgICAgICBpZiAoaW5kZXhCb3VuZHMgIT0gbnVsbCkgewogICAgICAgICAgICBfdGhpcy5wb3NpdGlvbihpbmRleEJvdW5kcyk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgIT09IF90aGlzLnRleHRib3ggJiYgX3RoaXMucXVpbGwuaGFzRm9jdXMoKSkgewogICAgICAgIF90aGlzLmhpZGUoKTsKICAgICAgfQogICAgfSk7CiAgICByZXR1cm4gX3RoaXM7CiAgfQogICgwLCBfaW5oZXJpdHMyLmRlZmF1bHQpKEJ1YmJsZVRvb2x0aXAsIF9CYXNlVG9vbHRpcCk7CiAgcmV0dXJuICgwLCBfY3JlYXRlQ2xhc3MyLmRlZmF1bHQpKEJ1YmJsZVRvb2x0aXAsIFt7CiAgICBrZXk6ICJsaXN0ZW4iLAogICAgdmFsdWU6IGZ1bmN0aW9uIGxpc3RlbigpIHsKICAgICAgdmFyIF90aGlzMiA9IHRoaXM7CiAgICAgICgwLCBfc3VwZXJQcm9wR2V0Mi5kZWZhdWx0KShCdWJibGVUb29sdGlwLCAibGlzdGVuIiwgdGhpcywgMykoW10pOwogICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIEZpeCBtZSBsYXRlcgogICAgICB0aGlzLnJvb3QucXVlcnlTZWxlY3RvcignLnFsLWNsb3NlJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgX3RoaXMyLnJvb3QuY2xhc3NMaXN0LnJlbW92ZSgncWwtZWRpdGluZycpOwogICAgICB9KTsKICAgICAgdGhpcy5xdWlsbC5vbihfZW1pdHRlci5kZWZhdWx0LmV2ZW50cy5TQ1JPTExfT1BUSU1JWkUsIGZ1bmN0aW9uICgpIHsKICAgICAgICAvLyBMZXQgc2VsZWN0aW9uIGJlIHJlc3RvcmVkIGJ5IHRvb2xiYXIgaGFuZGxlcnMgYmVmb3JlIHJlcG9zaXRpb25pbmcKICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICAgIGlmIChfdGhpczIucm9vdC5jbGFzc0xpc3QuY29udGFpbnMoJ3FsLWhpZGRlbicpKSByZXR1cm47CiAgICAgICAgICB2YXIgcmFuZ2UgPSBfdGhpczIucXVpbGwuZ2V0U2VsZWN0aW9uKCk7CiAgICAgICAgICBpZiAocmFuZ2UgIT0gbnVsbCkgewogICAgICAgICAgICB2YXIgYm91bmRzID0gX3RoaXMyLnF1aWxsLmdldEJvdW5kcyhyYW5nZSk7CiAgICAgICAgICAgIGlmIChib3VuZHMgIT0gbnVsbCkgewogICAgICAgICAgICAgIF90aGlzMi5wb3NpdGlvbihib3VuZHMpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSwgMSk7CiAgICAgIH0pOwogICAgfQogIH0sIHsKICAgIGtleTogImNhbmNlbCIsCiAgICB2YWx1ZTogZnVuY3Rpb24gY2FuY2VsKCkgewogICAgICB0aGlzLnNob3coKTsKICAgIH0KICB9LCB7CiAgICBrZXk6ICJwb3NpdGlvbiIsCiAgICB2YWx1ZTogZnVuY3Rpb24gcG9zaXRpb24ocmVmZXJlbmNlKSB7CiAgICAgIHZhciBzaGlmdCA9ICgwLCBfc3VwZXJQcm9wR2V0Mi5kZWZhdWx0KShCdWJibGVUb29sdGlwLCAicG9zaXRpb24iLCB0aGlzLCAzKShbcmVmZXJlbmNlXSk7CiAgICAgIHZhciBhcnJvdyA9IHRoaXMucm9vdC5xdWVyeVNlbGVjdG9yKCcucWwtdG9vbHRpcC1hcnJvdycpOwogICAgICAvLyBAdHMtZXhwZWN0LWVycm9yCiAgICAgIGFycm93LnN0eWxlLm1hcmdpbkxlZnQgPSAnJzsKICAgICAgaWYgKHNoaWZ0ICE9PSAwKSB7CiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvcgogICAgICAgIGFycm93LnN0eWxlLm1hcmdpbkxlZnQgPSAiIi5jb25jYXQoLTEgKiBzaGlmdCAtIGFycm93Lm9mZnNldFdpZHRoIC8gMiwgInB4Iik7CiAgICAgIH0KICAgICAgcmV0dXJuIHNoaWZ0OwogICAgfQogIH1dKTsKfShfYmFzZS5CYXNlVG9vbHRpcCk7CigwLCBfZGVmaW5lUHJvcGVydHkyLmRlZmF1bHQpKEJ1YmJsZVRvb2x0aXAsICJURU1QTEFURSIsIFsnPHNwYW4gY2xhc3M9InFsLXRvb2x0aXAtYXJyb3ciPjwvc3Bhbj4nLCAnPGRpdiBjbGFzcz0icWwtdG9vbHRpcC1lZGl0b3IiPicsICc8aW5wdXQgdHlwZT0idGV4dCIgZGF0YS1mb3JtdWxhPSJlPW1jXjIiIGRhdGEtbGluaz0iaHR0cHM6Ly9xdWlsbGpzLmNvbSIgZGF0YS12aWRlbz0iRW1iZWQgVVJMIj4nLCAnPGEgY2xhc3M9InFsLWNsb3NlIj48L2E+JywgJzwvZGl2PiddLmpvaW4oJycpKTsKdmFyIEJ1YmJsZVRoZW1lID0gZXhwb3J0cy5kZWZhdWx0ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQmFzZVRoZW1lKSB7CiAgZnVuY3Rpb24gQnViYmxlVGhlbWUocXVpbGwsIG9wdGlvbnMpIHsKICAgIHZhciBfdGhpczM7CiAgICAoMCwgX2NsYXNzQ2FsbENoZWNrMi5kZWZhdWx0KSh0aGlzLCBCdWJibGVUaGVtZSk7CiAgICBpZiAob3B0aW9ucy5tb2R1bGVzLnRvb2xiYXIgIT0gbnVsbCAmJiBvcHRpb25zLm1vZHVsZXMudG9vbGJhci5jb250YWluZXIgPT0gbnVsbCkgewogICAgICBvcHRpb25zLm1vZHVsZXMudG9vbGJhci5jb250YWluZXIgPSBUT09MQkFSX0NPTkZJRzsKICAgIH0KICAgIF90aGlzMyA9ICgwLCBfY2FsbFN1cGVyMi5kZWZhdWx0KSh0aGlzLCBCdWJibGVUaGVtZSwgW3F1aWxsLCBvcHRpb25zXSk7CiAgICBfdGhpczMucXVpbGwuY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoJ3FsLWJ1YmJsZScpOwogICAgcmV0dXJuIF90aGlzMzsKICB9CiAgKDAsIF9pbmhlcml0czIuZGVmYXVsdCkoQnViYmxlVGhlbWUsIF9CYXNlVGhlbWUpOwogIHJldHVybiAoMCwgX2NyZWF0ZUNsYXNzMi5kZWZhdWx0KShCdWJibGVUaGVtZSwgW3sKICAgIGtleTogImV4dGVuZFRvb2xiYXIiLAogICAgdmFsdWU6IGZ1bmN0aW9uIGV4dGVuZFRvb2xiYXIodG9vbGJhcikgewogICAgICAvLyBAdHMtZXhwZWN0LWVycm9yCiAgICAgIHRoaXMudG9vbHRpcCA9IG5ldyBCdWJibGVUb29sdGlwKHRoaXMucXVpbGwsIHRoaXMub3B0aW9ucy5ib3VuZHMpOwogICAgICBpZiAodG9vbGJhci5jb250YWluZXIgIT0gbnVsbCkgewogICAgICAgIHRoaXMudG9vbHRpcC5yb290LmFwcGVuZENoaWxkKHRvb2xiYXIuY29udGFpbmVyKTsKICAgICAgICB0aGlzLmJ1aWxkQnV0dG9ucyh0b29sYmFyLmNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCdidXR0b24nKSwgX2ljb25zLmRlZmF1bHQpOwogICAgICAgIHRoaXMuYnVpbGRQaWNrZXJzKHRvb2xiYXIuY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoJ3NlbGVjdCcpLCBfaWNvbnMuZGVmYXVsdCk7CiAgICAgIH0KICAgIH0KICB9XSk7Cn0oX2Jhc2UuZGVmYXVsdCk7CkJ1YmJsZVRoZW1lLkRFRkFVTFRTID0gKDAsIF9sb2Rhc2hFcy5tZXJnZSkoe30sIF9iYXNlLmRlZmF1bHQuREVGQVVMVFMsIHsKICBtb2R1bGVzOiB7CiAgICB0b29sYmFyOiB7CiAgICAgIGhhbmRsZXJzOiB7CiAgICAgICAgbGluazogZnVuY3Rpb24gbGluayh2YWx1ZSkgewogICAgICAgICAgaWYgKCF2YWx1ZSkgewogICAgICAgICAgICB0aGlzLnF1aWxsLmZvcm1hdCgnbGluaycsIGZhbHNlLCBfcXVpbGwuZGVmYXVsdC5zb3VyY2VzLlVTRVIpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvcgogICAgICAgICAgICB0aGlzLnF1aWxsLnRoZW1lLnRvb2x0aXAuZWRpdCgpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KfSk7"},{"version":3,"names":["_lodashEs","require","_emitter","_interopRequireDefault","_base","_interopRequireWildcard","_selection","_icons","_quill","TOOLBAR_CONFIG","header","BubbleTooltip","exports","_BaseTooltip","constructor","quill","bounds","_this","_classCallCheck2","default","_callSuper2","on","Emitter","events","EDITOR_CHANGE","type","range","oldRange","source","SELECTION_CHANGE","length","sources","USER","show","root","style","left","width","concat","offsetWidth","lines","getLines","index","getBounds","position","lastLine","getIndex","Math","min","indexBounds","Range","document","activeElement","textbox","hasFocus","hide","_inherits2","_createClass2","key","value","listen","_this2","_superPropGet2","querySelector","addEventListener","classList","remove","SCROLL_OPTIMIZE","setTimeout","contains","getSelection","cancel","reference","shift","arrow","marginLeft","BaseTooltip","_defineProperty2","join","BubbleTheme","_BaseTheme","options","_this3","modules","toolbar","container","add","extendToolbar","tooltip","appendChild","buildButtons","querySelectorAll","icons","buildPickers","BaseTheme","DEFAULTS","merge","handlers","link","format","Quill","theme","edit"],"sources":["../../src/themes/bubble.ts"],"sourcesContent":["import { merge } from 'lodash-es';\nimport Emitter from '../core/emitter.js';\nimport BaseTheme, { BaseTooltip } from './base.js';\nimport { Range } from '../core/selection.js';\nimport type { Bounds } from '../core/selection.js';\nimport icons from '../ui/icons.js';\nimport Quill from '../core/quill.js';\nimport type { ThemeOptions } from '../core/theme.js';\nimport type Toolbar from '../modules/toolbar.js';\nimport type { ToolbarConfig } from '../modules/toolbar.js';\n\nconst TOOLBAR_CONFIG: ToolbarConfig = [\n ['bold', 'italic', 'link'],\n [{ header: 1 }, { header: 2 }, 'blockquote'],\n];\n\nclass BubbleTooltip extends BaseTooltip {\n static TEMPLATE = [\n '',\n '
',\n ].join('');\n\n constructor(quill: Quill, bounds?: HTMLElement) {\n super(quill, bounds);\n this.quill.on(\n Emitter.events.EDITOR_CHANGE,\n (type, range, oldRange, source) => {\n if (type !== Emitter.events.SELECTION_CHANGE) return;\n if (\n range != null &&\n range.length > 0 &&\n source === Emitter.sources.USER\n ) {\n this.show();\n // Lock our width so we will expand beyond our offsetParent boundaries\n this.root.style.left = '0px';\n this.root.style.width = '';\n this.root.style.width = `${this.root.offsetWidth}px`;\n const lines = this.quill.getLines(range.index, range.length);\n if (lines.length === 1) {\n const bounds = this.quill.getBounds(range);\n if (bounds != null) {\n this.position(bounds);\n }\n } else {\n const lastLine = lines[lines.length - 1];\n const index = this.quill.getIndex(lastLine);\n const length = Math.min(\n lastLine.length() - 1,\n range.index + range.length - index,\n );\n const indexBounds = this.quill.getBounds(new Range(index, length));\n if (indexBounds != null) {\n this.position(indexBounds);\n }\n }\n } else if (\n document.activeElement !== this.textbox &&\n this.quill.hasFocus()\n ) {\n this.hide();\n }\n },\n );\n }\n\n listen() {\n super.listen();\n // @ts-expect-error Fix me later\n this.root.querySelector('.ql-close').addEventListener('click', () => {\n this.root.classList.remove('ql-editing');\n });\n this.quill.on(Emitter.events.SCROLL_OPTIMIZE, () => {\n // Let selection be restored by toolbar handlers before repositioning\n setTimeout(() => {\n if (this.root.classList.contains('ql-hidden')) return;\n const range = this.quill.getSelection();\n if (range != null) {\n const bounds = this.quill.getBounds(range);\n if (bounds != null) {\n this.position(bounds);\n }\n }\n }, 1);\n });\n }\n\n cancel() {\n this.show();\n }\n\n position(reference: Bounds) {\n const shift = super.position(reference);\n const arrow = this.root.querySelector('.ql-tooltip-arrow');\n // @ts-expect-error\n arrow.style.marginLeft = '';\n if (shift !== 0) {\n // @ts-expect-error\n arrow.style.marginLeft = `${-1 * shift - arrow.offsetWidth / 2}px`;\n }\n return shift;\n }\n}\n\nclass BubbleTheme extends BaseTheme {\n tooltip: BubbleTooltip;\n\n constructor(quill: Quill, options: ThemeOptions) {\n if (\n options.modules.toolbar != null &&\n options.modules.toolbar.container == null\n ) {\n options.modules.toolbar.container = TOOLBAR_CONFIG;\n }\n super(quill, options);\n this.quill.container.classList.add('ql-bubble');\n }\n\n extendToolbar(toolbar: Toolbar) {\n // @ts-expect-error\n this.tooltip = new BubbleTooltip(this.quill, this.options.bounds);\n if (toolbar.container != null) {\n this.tooltip.root.appendChild