From 1797f903b42fb2a4145f5e4c4cff66033c3adb16 Mon Sep 17 00:00:00 2001 From: donfiguerres Date: Thu, 9 Jun 2022 22:09:40 +0800 Subject: [PATCH] Fixed CodeQL failures. --- static/js/darkreader.js | 5506 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 5486 insertions(+), 20 deletions(-) diff --git a/static/js/darkreader.js b/static/js/darkreader.js index 9a34598..a26996d 100644 --- a/static/js/darkreader.js +++ b/static/js/darkreader.js @@ -1,22 +1,5488 @@ /** - * Minified by jsDelivr using Terser v5.13.1. - * Original file: /npm/darkreader@4.9.51/darkreader.js - * - * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files + * Dark Reader v4.9.51 + * https://darkreader.org/ */ - !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).DarkReader={})}(this,(function(e){"use strict"; - /*! ***************************************************************************** - Copyright (c) Microsoft Corporation. - - Permission to use, copy, modify, and/or distribute this software for any - purpose with or without fee is hereby granted. - - THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY - AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, - INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM - LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR - OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - ***************************************************************************** */var t=function(){return t=Object.assign||function(e){for(var t,r=1,n=arguments.length;r0&&o[o.length-1])||6!==a[0]&&2!==a[0])){i=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function a(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,o,a=r.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(n=a.next()).done;)i.push(n.value)}catch(e){o={error:e}}finally{try{n&&!n.done&&(r=a.return)&&r.call(a)}finally{if(o)throw o.error}}return i}function i(e,t,r){if(r||2===arguments.length)for(var n,o=0,a=t.length;o Promise))`.","See if using `DarkReader.setFetchMethod(window.fetch)`","before `DarkReader.enable()` works."].join(" ")))]}))}))},C=x;function V(e){return r(this,void 0,void 0,(function(){return n(this,(function(t){switch(t.label){case 0:return[4,C(e)];case 1:return[2,t.sent()]}}))}))}window.chrome||(window.chrome={}),chrome.runtime||(chrome.runtime={});var R=new Set;function T(){for(var e=[],t=0;t=10){if(f-u1e3)return!0;for(var t=0,r=0;r1e3)return!0;return!1}(t))!a||H()?n.forEach((function(t){return(0,t.onHugeMutations)(e)})):i||(Q(o=function(){return n.forEach((function(t){return(0,t.onHugeMutations)(e)}))}),i=!0),a=!0;else{var r=function(e){var t=new Set,r=new Set,n=new Set;e.forEach((function(e){q(e.addedNodes,(function(e){e instanceof Element&&e.isConnected&&t.add(e)})),q(e.removedNodes,(function(e){e instanceof Element&&(e.isConnected?(n.add(e),t.delete(e)):r.add(e))}))}));var o=[],a=[];return t.forEach((function(e){t.has(e.parentElement)&&o.push(e)})),r.forEach((function(e){r.has(e.parentElement)&&a.push(e)})),o.forEach((function(e){return t.delete(e)})),a.forEach((function(e){return r.delete(e)})),{additions:t,moves:n,deletions:r}}(t);n.forEach((function(e){return(0,e.onMinorMutations)(r)}))}})),r.observe(e,{childList:!0,subtree:!0}),te.set(e,r),n=new Set,re.set(r,n)}return n.add(t),{disconnect:function(){n.delete(t),o&&K(o),0===n.size&&(r.disconnect(),re.delete(r),te.delete(e))}}}var oe=new Map;function ae(e){return ee||(ee=document.createElement("a")),ee.href=e,ee.href}function ie(e,t){void 0===t&&(t=null);var r="".concat(e).concat(t?";".concat(t):"");if(oe.has(r))return oe.get(r);if(t){var n=new URL(e,ae(t));return oe.set(r,n),n}var o=new URL(ae(e));return oe.set(e,o),o}function ce(e,t){if(t.match(/^data\\?\:/))return t;if(/^\/\//.test(t))return"".concat(location.protocol).concat(t);var r=ie(e);return ie(t,r.href).href}function ue(e,t,r){q(e,(function(e){if(e.selectorText)t(e);else if(e.href)try{ue(e.styleSheet.cssRules,t,r)}catch(e){N("Found a non-loaded link."),r&&r()}else if(e.media){var n=Array.from(e.media),o=n.some((function(e){return e.startsWith("screen")||e.startsWith("all")||e.startsWith("(")})),a=n.some((function(e){return e.startsWith("print")||e.startsWith("speech")}));!o&&a||ue(e.cssRules,t,r)}else e.conditionText?CSS.supports(e.conditionText)&&ue(e.cssRules,t,r):B("CSSRule type not supported",e)}))}var se=["background","border","border-color","border-bottom","border-left","border-right","border-top","outline","outline-color"],le=p?se.map((function(e){return[e,new RegExp("".concat(e,":\\s*(.*?)\\s*;"))]})):null;function de(e,t){q(e,(function(r){var n=e.getPropertyValue(r).trim();n&&t(r,n)}));var r=e.cssText;r.includes("var(")&&(p?le.forEach((function(e){var n=a(e,2),o=n[0],i=n[1],c=r.match(i);if(c&&c[1]){var u=c[1].trim();t(o,u)}})):se.forEach((function(r){var n=e.getPropertyValue(r);n&&n.includes("var(")&&t(r,n)})))}var fe=/url\((('.+?')|(".+?")|([^\)]*?))\)/g,he=/@import\s*(url\()?(('.+?')|(".+?")|([^\)]*?))\)? ?(screen)?;?/gi;function pe(e){return e.trim().replace(/^url\((.*)\)$/,"$1").trim().replace(/^"(.*)"$/,"$1").replace(/^'(.*)'$/,"$1")}function ve(e){var t=ie(e);return"".concat(t.origin).concat(t.pathname.replace(/\?.*$/,"").replace(/(\/)([^\/]+)$/i,"$1"))}var me=/\/\*[\s\S]*?\*\//g;var ge=/@font-face\s*{[^}]*}/g;function be(e){for(var t,r=[],n=[],o=0,c=e.length;o=0){var o=r.match(/0+$/);if(o)return o.index===n+1?r.substring(0,n):r.substring(0,o.index)}return r}function Ce(e){var t=e.h,r=e.s,n=e.l,o=e.a;return null!=o&&o<1?"hsla(".concat(xe(t),", ").concat(xe(100*r),"%, ").concat(xe(100*n),"%, ").concat(xe(o,2),")"):"hsl(".concat(xe(t),", ").concat(xe(100*r),"%, ").concat(xe(100*n),"%)")}var Ve=/^rgba?\([^\(\)]+\)$/,Re=/^hsla?\([^\(\)]+\)$/,Te=/^#[0-9a-f]+$/i;function Me(e){var t,r,n,o,i,c=e.trim().toLowerCase();if(c.match(Ve))return t=a(Ae(c,Le,Pe),4),r=t[0],n=t[1],o=t[2],i=t[3],{r:r,g:n,b:o,a:void 0===i?1:i};if(c.match(Re))return function(e){var t=a(Ae(e,Oe,je),4),r=t[0],n=t[1],o=t[2],i=t[3];return _e({h:r,s:n,l:o,a:void 0===i?1:i})}(c);if(c.match(Te))return function(e){var t=e.substring(1);switch(t.length){case 3:case 4:var r=a([0,1,2].map((function(e){return parseInt("".concat(t[e]).concat(t[e]),16)})),3);return{r:r[0],g:r[1],b:r[2],a:3===t.length?1:parseInt("".concat(t[3]).concat(t[3]),16)/255};case 6:case 8:var n=a([0,2,4].map((function(e){return parseInt(t.substring(e,e+2),16)})),3);return{r:n[0],g:n[1],b:n[2],a:6===t.length?1:parseInt(t.substring(6,8),16)/255}}throw new Error("Unable to parse ".concat(e))}(c);if(De.has(c))return function(e){var t=De.get(e);return{r:t>>16&255,g:t>>8&255,b:t>>0&255,a:1}}(c);if(qe.has(c))return function(e){var t=qe.get(e);return{r:t>>16&255,g:t>>8&255,b:t>>0&255,a:1}}(c);if("transparent"===e)return{r:0,g:0,b:0,a:0};throw new Error("Unable to parse ".concat(e))}function Ae(e,t,r){var n=function(e){var t=[],r=0,n=!1,o=e.indexOf("(");e=e.substring(o+1,e.length-1);for(var a=0;a="0"&&i<="9"||"."===i||"+"===i||"-"===i?n=!0:!n||" "!==i&&","!==i?n||(r=a+1):(t.push(e.substring(r,a)),n=!1,r=a+1)}return n&&t.push(e.substring(r,e.length)),t}(e),o=Object.entries(r);return n.map((function(e){return e.trim()})).map((function(e,r){var n,i=o.find((function(t){var r=a(t,1)[0];return e.endsWith(r)}));return n=i?parseFloat(e.substring(0,e.length-i[0].length))/i[1]*t[r]:parseFloat(e),t[r]>1?Math.round(n):n}))}var Le=[255,255,255,1],Pe={"%":100};var Oe=[360,1,1,1],je={"%":100,deg:360,rad:2*Math.PI,turn:1};var De=new Map(Object.entries({aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgrey:11119017,darkgreen:25600,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,grey:8421504,green:32768,greenyellow:11403055,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgrey:13882323,lightgreen:9498256,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074})),qe=new Map(Object.entries({ActiveBorder:3906044,ActiveCaption:0,AppWorkspace:11184810,Background:6513614,ButtonFace:16777215,ButtonHighlight:15329769,ButtonShadow:10461343,ButtonText:0,CaptionText:0,GrayText:8355711,Highlight:11720703,HighlightText:0,InactiveBorder:16777215,InactiveCaption:16777215,InactiveCaptionText:0,InfoBackground:16514245,InfoText:0,Menu:16185078,MenuText:16777215,Scrollbar:11184810,ThreeDDarkShadow:0,ThreeDFace:12632256,ThreeDHighlight:16777215,ThreeDLightShadow:16777215,ThreeDShadow:0,Window:15527148,WindowFrame:11184810,WindowText:0,"-webkit-focus-ring-color":15046400}).map((function(e){var t=a(e,2),r=t[0],n=t[1];return[r.toLowerCase(),n]})));function Fe(e,t,r){return(.2126*e+.7152*t+.0722*r)/255}function Ne(e,t,r,n,o){return(e-t)*(o-n)/(r-t)+n}function Be(e,t,r){return Math.min(r,Math.max(t,e))}function We(e,t){for(var r=[],n=0,o=e.length;n.8&&(o>200&&o<280);var s=o,l=i;return n&&(u?(s=t.h,l=t.s):(s=r.h,l=r.s)),{h:s,s:l,l:Ne(i,0,1,t.l,r.l),a:c}}function tt(e,t){var r=e.h,n=e.s,o=e.l,a=e.a,i=n<.12||o>.8&&(r>200&&r<280);if(o<.5){var c=Ne(o,0,.5,0,.4);return i?{h:t.h,s:t.s,l:c,a:a}:{h:r,s:n,l:c,a:a}}var u=Ne(o,.5,1,.4,t.l);if(i)return{h:t.h,s:t.s,l:u,a:a};var s=r;r>60&&r<180&&(s=r>120?Ne(r,120,180,135,180):Ne(r,60,120,60,105));return s>40&&s<80&&(u*=.75),{h:s,s:n,l:u,a:a}}function rt(e,r){if(0===r.mode)return Ze(e,r);var n=$e(r);return Xe(e,t(t({},r),{mode:0}),tt,n)}var nt,ot=.55;function at(e){return Ne(e,205,245,205,220)}function it(e,t){var r=e.h,n=e.s,o=e.l,a=e.a,i=o<.2||n<.24,c=!i&&r>205&&r<245;if(o>.5){var u=Ne(o,.5,1,ot,t.l);if(i)return{h:t.h,s:t.s,l:u,a:a};var s=r;return c&&(s=at(r)),{h:s,s:n,l:u,a:a}}if(i)return{h:t.h,s:t.s,l:Ne(o,0,.5,t.l,ot),a:a};var l,d=r;return c?(d=at(r),l=Ne(o,0,.5,t.l,Math.min(1,.6000000000000001))):l=Ne(o,0,.5,t.l,ot),{h:d,s:n,l:l,a:a}}function ct(e,r){if(0===r.mode)return Ze(e,r);var n=ze(r);return Xe(e,t(t({},r),{mode:0}),it,n)}function ut(e,t,r){var n=e.h,o=e.s,a=e.l,i=e.a,c=n,u=o;return(a<.2||o<.24)&&(a<.5?(c=t.h,u=t.s):(c=r.h,u=r.s)),{h:c,s:u,l:Ne(a,0,1,.5,.2),a:i}}function st(e,r){if(0===r.mode)return Ze(e,r);var n=ze(r),o=$e(r);return Xe(e,t(t({},r),{mode:0}),ut,n,o)}function lt(e,t){return rt(e,t)}function dt(e){var t=[];return e.mode===nt.dark&&t.push("invert(100%) hue-rotate(180deg)"),100!==e.brightness&&t.push("brightness(".concat(e.brightness,"%)")),100!==e.contrast&&t.push("contrast(".concat(e.contrast,"%)")),0!==e.grayscale&&t.push("grayscale(".concat(e.grayscale,"%)")),0!==e.sepia&&t.push("sepia(".concat(e.sepia,"%)")),0===t.length?null:t.join(" ")}!function(e){e[e.light=0]="light",e[e.dark=1]="dark"}(nt||(nt={}));var ft=0,ht=new Map,pt=new Map;function vt(e){return r(this,void 0,void 0,(function(){return n(this,(function(t){return[2,new Promise((function(t,r){var n=++ft;ht.set(n,t),pt.set(n,r),chrome.runtime.sendMessage({type:u,data:e,id:n})}))]}))}))}chrome.runtime.onMessage.addListener((function(e){var t=e.type,r=e.data,n=e.error,o=e.id;if(t===c){var a=ht.get(o),i=pt.get(o);ht.delete(o),pt.delete(o),n?i&&i(n):a&&a(r)}}));var mt=new(function(){function e(){this.queue=[],this.timerId=null,this.frameDuration=1e3/60}return e.prototype.addToQueue=function(e){this.queue.push(e),this.startQueue()},e.prototype.stopQueue=function(){null!==this.timerId&&(cancelAnimationFrame(this.timerId),this.timerId=null),this.queue=[]},e.prototype.startQueue=function(){var e=this;this.timerId||(this.timerId=requestAnimationFrame((function(){e.timerId=null;for(var t,r=Date.now();t=e.queue.shift();)if(t(),Date.now()-r>=e.frameDuration){e.startQueue();break}})))},e}());function gt(e){return r(this,void 0,void 0,(function(){var o=this;return n(this,(function(a){return[2,new Promise((function(a,i){return r(o,void 0,void 0,(function(){var r,o,c,u;return n(this,(function(n){switch(n.label){case 0:return e.startsWith("data:")?(r=e,[3,4]):[3,1];case 1:return n.trys.push([1,3,,4]),[4,bt(e)];case 2:return r=n.sent(),[3,4];case 3:return o=n.sent(),i(o),[2];case 4:return n.trys.push([4,6,,7]),[4,yt(r)];case 5:return c=n.sent(),mt.addToQueue((function(){a(t({src:e,dataURL:r,width:c.naturalWidth,height:c.naturalHeight},function(e){wt||(t=St,r=St,(wt=document.createElement("canvas")).width=t,wt.height=r,(kt=wt.getContext("2d")).imageSmoothingEnabled=!1);var t,r;var n=e.naturalWidth,o=e.naturalHeight;if(0===o||0===n)return B("logWarn(Image is empty ".concat(e.currentSrc,")")),null;if(n*o*4>_t)return N("Skipped large image analyzing(Larger than 5mb in memory)"),{isDark:!1,isLight:!1,isTransparent:!1,isLarge:!1,isTooLarge:!0};var a=n*o,i=Math.min(1,Math.sqrt(St/a)),c=Math.ceil(n*i),u=Math.ceil(o*i);kt.clearRect(0,0,c,u),kt.drawImage(e,0,0,n,o,0,0,c,u);var s,l,d,f,h,p,v,m=kt.getImageData(0,0,c,u).data,g=.05,b=.4,y=.7,w=0,k=0,S=0;for(d=0;dy&&S++);var _=c*u,E=_-w;return{isDark:k/E>=.7,isLight:S/E>=.7,isTransparent:w/_>=.1,isLarge:a>=48e4,isTooLarge:!1}}(c)))})),[3,7];case 6:return u=n.sent(),i(u),[3,7];case 7:return[2]}}))}))}))]}))}))}function bt(e){return r(this,void 0,void 0,(function(){return n(this,(function(t){switch(t.label){case 0:return new URL(e).origin!==location.origin?[3,2]:[4,_(e)];case 1:case 3:return[2,t.sent()];case 2:return[4,vt({url:e,responseType:"data-url"})]}}))}))}function yt(e){return r(this,void 0,void 0,(function(){return n(this,(function(t){return[2,new Promise((function(t,r){var n=new Image;n.onload=function(){return t(n)},n.onerror=function(){return r("Unable to load image ".concat(e))},n.src=e}))]}))}))}var wt,kt,St=1024;var _t=5242880;function Et(e,t){var r=e.dataURL,n=e.width,o=e.height,a=Ie(t).slice(0,4).map((function(e){return e.map((function(e){return e.toFixed(3)})).join(" ")})).join(" "),i=[''),"",'',''),"","",''),""].join("");return"data:image/svg+xml;base64,".concat(btoa(i))}function xt(){mt&&mt.stopQueue(),wt=null,kt=null}var Ct="gradient".length,Vt="conic-",Rt=Vt.length,Tt="radial-",Mt="linear-";function At(e,t){return Boolean(e&&e.getPropertyPriority(t))}function Lt(e,t,r,n,o,a){if(e.startsWith("--")){var i=function(e,t,r,n,o,a){return e.getModifierForVariable({varName:t,sourceValue:r,rule:n,ignoredImgSelectors:o,isCancelled:a})}(n,e,t,r,o,a);if(i)return{property:e,value:i,important:At(r.style,e),sourceValue:t}}else if(t.includes("var(")){i=function(e,t,r){return e.getModifierForVarDependant(t,r)}(n,e,t);if(i)return{property:e,value:i,important:At(r.style,e),sourceValue:t}}else if(e.includes("color")&&"-webkit-print-color-adjust"!==e||"fill"===e||"stroke"===e||"stop-color"===e){i=function(e,t){if(qt.has(t.toLowerCase()))return t;try{var r=Nt(t);return e.includes("background")?function(e){return rt(r,e)}:e.includes("border")||e.includes("outline")?function(e){return st(r,e)}:function(e){return ct(r,e)}}catch(e){return B("Color parse error",e),null}}(e,t);if(i)return{property:e,value:i,important:At(r.style,e),sourceValue:t}}else if("background-image"===e||"list-style-image"===e){if(i=Ut(t,r,o,a))return{property:e,value:i,important:At(r.style,e),sourceValue:t}}else if(e.includes("shadow")){i=function(e){var t=$t(e);if(!t)return null;return function(e){return t(e).result}}(t);if(i)return{property:e,value:i,important:At(r.style,e),sourceValue:t}}return null}function Pt(){for(var e=[],t=0;t.5,d=function(e){return t(t({},s),{l:Be(s.l+e,0,1)})},f=function(e){return t(t({},s),{l:Be(s.l-e,0,1)})};r=Ce(f(.4)),n=Ce(l?f(.4):d(.4)),o=Ce(s),a=Ce(d(.1)),i=Ce(d(.2))}u.push("::-webkit-scrollbar {"),u.push(" background-color: ".concat(r,";")),u.push(" color: ".concat(n,";")),u.push("}"),u.push("::-webkit-scrollbar-thumb {"),u.push(" background-color: ".concat(o,";")),u.push("}"),u.push("::-webkit-scrollbar-thumb:hover {"),u.push(" background-color: ".concat(a,";")),u.push("}"),u.push("::-webkit-scrollbar-thumb:active {"),u.push(" background-color: ".concat(i,";")),u.push("}"),u.push("::-webkit-scrollbar-corner {"),u.push(" background-color: ".concat(c,";")),u.push("}"),h&&(u.push("* {"),u.push(" scrollbar-color: ".concat(o," ").concat(r,";")),u.push("}"));return u.join("\n")}(e)),e.selectionColor&&o.push(function(e){var t=[],r=jt(e),n=r.backgroundColorSelection,o=r.foregroundColorSelection;return["::selection","::-moz-selection"].forEach((function(e){t.push("".concat(e," {")),t.push(" background-color: ".concat(n," !important;")),t.push(" color: ".concat(o," !important;")),t.push("}")})),t.join("\n")}(e)),o.join("\n")}function jt(e){var r,n;if("auto"===e.selectionColor)r=rt({r:0,g:96,b:212},t(t({},e),{grayscale:0})),n=ct({r:255,g:255,b:255},t(t({},e),{grayscale:0}));else{var o=Ee(Me(e.selectionColor));r=e.selectionColor,n=o.l<.5?"#FFF":"#000"}return{backgroundColorSelection:r,foregroundColorSelection:n}}function Dt(e,t){var r=t.strict,n=[],o=location.hostname.endsWith("microsoft.com");return n.push("html, body, ".concat(r?"body :not(iframe)".concat(o?':not(div[style^="position:absolute;top:0;left:-"]':""):"body > :not(iframe)"," {")),n.push(" background-color: ".concat(rt({r:255,g:255,b:255},e)," !important;")),n.push(" border-color: ".concat(st({r:64,g:64,b:64},e)," !important;")),n.push(" color: ".concat(ct({r:0,g:0,b:0},e)," !important;")),n.push("}"),n.join("\n")}var qt=new Set(["inherit","transparent","initial","currentcolor","none","unset"]),Ft=new Map;function Nt(e){if(e=e.trim(),Ft.has(e))return Ft.get(e);e.includes("calc(")&&(e=function(e){for(var t,r,n,o=0;-1!==(o=e.indexOf("calc("));){var a=Se(e,o);if(!a)break;var i=e.slice(a.start+1,a.end-1),c=i.includes("%");i=i.split("%").join("");var u=Math.round(be(i));t=a.start-4,r=a.end,n=u+(c?"%":""),e=e.substring(0,t)+n+e.substring(r)}return e}(e));var t=Me(e);return Ft.set(e,t),t}function Bt(e){try{return Nt(e)}catch(e){return null}}var Wt=new Map,It=new Map;function Ut(e,o,a,i){var c,u,s=this;try{var l=function(e){for(var t=[],r=0,n=Vt.length,o=function(){var o;if([Mt,Tt,Vt].find((function(t){if(r-t.length>=0&&e.substring(r-t.length,r)===t)return"repeating"===e.slice(r-t.length-10,r-t.length-1)?(o="repeating-".concat(t,"gradient"),!0):"-webkit"===e.slice(r-t.length-8,r-t.length-1)?(o="-webkit-".concat(t,"gradient"),!0):(o="".concat(t,"gradient"),!0)})),!o)return"break";var a=Se(e,r+Ct),i=a.start,c=a.end,u=e.substring(i+1,c-1);n=c+1+Rt,t.push({typeGradient:o,match:u,offset:o.length+2,index:r-o.length+Ct,hasComma:!0})};-1!==(r=e.indexOf("gradient",n))&&"break"!==o(););return t.length&&(t[t.length-1].hasComma=!1),t}(e),d=ke(fe,e);if(0===d.length&&0===l.length)return e;var f=l.map((function(e){return t({type:"gradient"},e)})).concat((c=d,u=0,c.map((function(t){var r=e.indexOf(t,u);return u=r+t.length,{match:t,index:r}}))).map((function(e){return t({type:"url",offset:0},e)}))).sort((function(e,t){return e.index>t.index?1:-1})),h=function(e,r){var n,o=e.isDark,a=e.isLight,i=e.isTransparent,c=e.isLarge,u=e.isTooLarge,s=e.width;if(u)n='url("'.concat(e.src,'")');else if(o&&i&&1===r.mode&&!c&&s>2){N("Inverting dark image ".concat(e.src));var l=Et(e,t(t({},r),{sepia:Be(r.sepia+10,0,100)}));n='url("'.concat(l,'")')}else if(a&&!i&&1===r.mode)if(c)n="none";else{N("Dimming light image ".concat(e.src));var d=Et(e,r);n='url("'.concat(d,'")')}else if(0===r.mode&&a&&!c){N("Applying filter to image ".concat(e.src));var f=Et(e,t(t({},r),{brightness:Be(r.brightness-10,5,200),sepia:Be(r.sepia+10,0,100)}));n='url("'.concat(f,'")')}else n=null;return n},p=[],v=0;return f.forEach((function(t,c){var u=t.type,l=t.match,d=t.index,m=t.typeGradient,g=t.hasComma,b=t.offset,y=d,w=v,k=y+l.length+b;v=k,w!==y&&p.push((function(){return e.substring(w,y)})),"url"===u?p.push(function(e){var t;if(function(e,t){if(!e||0===t.length)return!1;if(t.some((function(e){return"*"===e})))return!0;for(var r=e.split(/,\s*/g),n=function(e){var n=t[e];if(r.some((function(e){return e===n})))return{value:!0}},o=0;o0},e.prototype.addRulesForMatching=function(e){this.rulesQueue.push(e)},e.prototype.matchVariablesAndDependants=function(){var e=this;this.changedTypeVars.clear(),this.initialVarTypes=new Map(this.varTypes),this.collectRootVariables(),this.collectVariablesAndVarDep(this.rulesQueue),this.rulesQueue.splice(0),this.collectRootVarDependants(),this.varRefs.forEach((function(t,r){t.forEach((function(t){e.varTypes.has(r)&&e.resolveVariableType(t,e.varTypes.get(r))}))})),this.unknownColorVars.forEach((function(t){e.unknownBgVars.has(t)?(e.unknownColorVars.delete(t),e.unknownBgVars.delete(t),e.resolveVariableType(t,1)):e.isVarType(t,7)?e.unknownColorVars.delete(t):e.undefinedVars.add(t)})),this.unknownBgVars.forEach((function(t){null!=e.findVarRef(t,(function(t){return e.unknownColorVars.has(t)||e.isVarType(t,6)}))?e.itarateVarRefs(t,(function(t){e.resolveVariableType(t,1)})):e.isVarType(t,9)?e.unknownBgVars.delete(t):e.undefinedVars.add(t)})),this.changedTypeVars.forEach((function(t){e.typeChangeSubscriptions.has(t)&&e.typeChangeSubscriptions.get(t).forEach((function(e){e()}))})),this.changedTypeVars.clear()},e.prototype.getModifierForVariable=function(e){var t=this;return function(r){var n=e.varName,o=e.sourceValue,a=e.rule,i=e.ignoredImgSelectors,c=e.isCancelled,u=function(){var e=[],u=function(a,i,c){if(t.isVarType(n,a)){var u,s=i(n);if(rr(o))if(nr(o)){var l=sr(o,t.unstableVarValues);l||(l=1===a?"#ffffff":"#000000"),u=c(l,r)}else u=Jt(o,(function(e){return i(e)}),(function(e){return c(e,r)}));else u=c(o,r);e.push({property:s,value:u})}};if(u(1,Xt,ir),u(2,Yt,cr),u(4,Zt,ur),t.isVarType(n,8)){var s=er(n),l=o;rr(o)&&(l=Jt(o,(function(e){return Xt(e)}),(function(e){return ir(e,r)})));var d=Ut(l,a,i,c);l="function"==typeof d?d(r):d,e.push({property:s,value:l})}return e},s=new Set;return{declarations:u(),onTypeChange:{addListener:function(e){var r=function(){var t=u();e(t)};s.add(r),t.subscribeForVarTypeChange(n,r)},removeListeners:function(){s.forEach((function(e){t.unsubscribeFromVariableTypeChanges(n,e)}))}}}}},e.prototype.getModifierForVarDependant=function(e,t){var r=this;if(t.match(/^\s*(rgb|hsl)a?\(/)){var n=e.startsWith("background"),o="color"===e||"caret-color"===e;return function(e){var a=sr(t,r.unstableVarValues);return a||(a=n?"#ffffff":"#000000"),(n?ir:o?cr:ur)(a,e)}}return"background-color"===e?function(e){return Jt(t,(function(e){return Xt(e)}),(function(t){return ir(t,e)}))}:"color"===e||"caret-color"===e?function(e){return Jt(t,(function(e){return Yt(e)}),(function(t){return cr(t,e)}))}:"background"===e||"background-image"===e||"box-shadow"===e?function(n){var o=new Set,a=function(){var a=Jt(t,(function(e){return r.isVarType(e,1)?Xt(e):r.isVarType(e,8)?er(e):(o.add(e),e)}),(function(e){return ir(e,n)}));if("box-shadow"===e){var i=$t(a)(n);if(i.unparseableMatchesLength!==i.matchesLength)return i.result}return a},i=a();return o.size>0?new Promise((function(e){var t=o.values().next().value,n=function(){r.unsubscribeFromVariableTypeChanges(t,n);var o=a();e(o)};r.subscribeForVarTypeChange(t,n)})):i}:e.startsWith("border")||e.startsWith("outline")?function(e){return Jt(t,(function(e){return Zt(e)}),(function(t){return ur(t,e)}))}:null},e.prototype.subscribeForVarTypeChange=function(e,t){this.typeChangeSubscriptions.has(e)||this.typeChangeSubscriptions.set(e,new Set);var r=this.typeChangeSubscriptions.get(e);r.has(t)||r.add(t)},e.prototype.unsubscribeFromVariableTypeChanges=function(e,t){this.typeChangeSubscriptions.has(e)&&this.typeChangeSubscriptions.get(e).delete(t)},e.prototype.collectVariablesAndVarDep=function(e){var t=this;e.forEach((function(e){ue(e,(function(e){e.style&&de(e.style,(function(e,r){tr(e)&&t.inspectVariable(e,r),rr(r)&&t.inspectVarDependant(e,r)}))}))}))},e.prototype.collectRootVariables=function(){var e=this;de(document.documentElement.style,(function(t,r){tr(t)&&e.inspectVariable(t,r)}))},e.prototype.inspectVariable=function(e,t){(this.unstableVarValues.set(e,t),rr(t)&&nr(t)&&(this.unknownColorVars.add(e),this.definedVars.add(e)),this.definedVars.has(e))||(this.definedVars.add(e),Bt(t)?this.unknownColorVars.add(e):(t.includes("url(")||t.includes("linear-gradient(")||t.includes("radial-gradient("))&&this.resolveVariableType(e,8))},e.prototype.resolveVariableType=function(e,t){var r=this.initialVarTypes.get(e)||0,n=(this.varTypes.get(e)||0)|t;this.varTypes.set(e,n),(n!==r||this.undefinedVars.has(e))&&(this.changedTypeVars.add(e),this.undefinedVars.delete(e)),this.unknownColorVars.delete(e),this.unknownBgVars.delete(e)},e.prototype.collectRootVarDependants=function(){var e=this;de(document.documentElement.style,(function(t,r){rr(r)&&e.inspectVarDependant(t,r)}))},e.prototype.inspectVarDependant=function(e,t){var r=this;tr(e)?this.iterateVarDeps(t,(function(t){r.varRefs.has(e)||r.varRefs.set(e,new Set),r.varRefs.get(e).add(t)})):"background-color"===e||"box-shadow"===e?this.iterateVarDeps(t,(function(e){return r.resolveVariableType(e,1)})):"color"===e||"caret-color"===e?this.iterateVarDeps(t,(function(e){return r.resolveVariableType(e,2)})):e.startsWith("border")||e.startsWith("outline")?this.iterateVarDeps(t,(function(e){return r.resolveVariableType(e,4)})):"background"!==e&&"background-image"!==e||this.iterateVarDeps(t,(function(e){if(!r.isVarType(e,9)){var t=null!=r.findVarRef(e,(function(e){return r.unknownColorVars.has(e)||r.isVarType(e,6)}));r.itarateVarRefs(e,(function(e){t?r.resolveVariableType(e,1):r.unknownBgVars.add(e)}))}}))},e.prototype.iterateVarDeps=function(e,t){var r=new Set;!function(e,t){Jt(e,(function(e){return t(e),e}))}(e,(function(e){return r.add(e)})),r.forEach((function(e){return t(e)}))},e.prototype.findVarRef=function(e,t,r){var n,a;if(void 0===r&&(r=new Set),r.has(e))return null;if(r.add(e),t(e))return e;var i=this.varRefs.get(e);if(!i||0===i.size)return null;try{for(var c=o(i),u=c.next();!u.done;u=c.next()){var s=u.value,l=this.findVarRef(s,t,r);if(l)return l}}catch(e){n={error:e}}finally{try{u&&!u.done&&(a=c.return)&&a.call(c)}finally{if(n)throw n.error}}return null},e.prototype.itarateVarRefs=function(e,t){this.findVarRef(e,(function(e){return t(e),!1}))},e.prototype.setOnRootVariableChange=function(e){this.onRootVariableDefined=e},e.prototype.putRootVars=function(e,t){var r,n,i=this,c=e.sheet;c.cssRules.length>0&&c.deleteRule(0);var u=new Map;de(document.documentElement.style,(function(e,r){tr(e)&&(i.isVarType(e,1)&&u.set(Xt(e),ir(r,t)),i.isVarType(e,2)&&u.set(Yt(e),cr(r,t)),i.isVarType(e,4)&&u.set(Zt(e),ur(r,t)),i.subscribeForVarTypeChange(e,i.onRootVariableDefined))}));var s=[];s.push(":root {");try{for(var l=o(u),d=l.next();!d.done;d=l.next()){var f=a(d.value,2),h=f[0],p=f[1];s.push(" ".concat(h,": ").concat(p,";"))}}catch(e){r={error:e}}finally{try{d&&!d.done&&(n=l.return)&&n.call(l)}finally{if(r)throw r.error}}s.push("}");var v=s.join("\n");c.insertRule(v)},e}());function Gt(e,t){void 0===t&&(t=0);var r=e.indexOf("var(",t);if(r>=0){var n=Se(e,r+3);return n?{start:r,end:n.end}:null}}function Qt(e,t){var r=function(e){for(var t,r=[],n=0;t=Gt(e,n);){var o=t.start,a=t.end;r.push({start:o,end:a,value:e.substring(o,a)}),n=t.end+1}return r}(e),n=r.length;if(0===n)return e;var o=e.length,a=r.map((function(e){return t(e.value)})),i=[];i.push(e.substring(0,r[0].start));for(var c=0;c=0?(t=e.substring(4,n).trim(),r=e.substring(n+1,e.length-1).trim()):(t=e.substring(4,e.length-1).trim(),r=""),{name:t,fallback:r}}function Jt(e,t,r){return Qt(e,(function(e){var n,o=Kt(e),a=o.name,i=o.fallback,c=t(a);return i?(n=rr(i)?Jt(i,t,r):r?r(i):i,"var(".concat(c,", ").concat(n,")")):"var(".concat(c,")")}))}function Xt(e){return"--darkreader-bg".concat(e)}function Yt(e){return"--darkreader-text".concat(e)}function Zt(e){return"--darkreader-border".concat(e)}function er(e){return"--darkreader-bgimg".concat(e)}function tr(e){return e.startsWith("--")}function rr(e){return e.includes("var(")}function nr(e){return e.match(/^\s*(rgb|hsl)a?\(/)}var or=/^\d{1,3}, ?\d{1,3}, ?\d{1,3}$/;function ar(e,t,r){var n=function(e){if(or.test(e)){var t=e.split(","),r="rgb(";return t.forEach((function(e){r+="".concat(e.trim(),", ")})),r=r.substring(0,r.length-2),{isRaw:!0,color:r+=")"}}return{isRaw:!1,color:e}}(e),o=n.isRaw,a=n.color,i=Bt(a);if(i){var c=r(i,t);if(o){var u=Bt(c);return u?"".concat(u.r,", ").concat(u.g,", ").concat(u.b):c}return c}return a}function ir(e,t){return ar(e,t,rt)}function cr(e,t){return ar(e,t,ct)}function ur(e,t){return ar(e,t,st)}function sr(e,t,r){void 0===r&&(r=new Set);var n=!1,o=Qt(e,(function(e){var o=Kt(e),a=o.name,i=o.fallback;if(r.has(a))return n=!0,null;r.add(a);var c=t.get(a)||i,u=null;return c&&(u=rr(c)?sr(c,t,r):c),u||(n=!0,null)}));return n?null:o}var lr={"background-color":{customProp:"--darkreader-inline-bgcolor",cssProp:"background-color",dataAttr:"data-darkreader-inline-bgcolor"},"background-image":{customProp:"--darkreader-inline-bgimage",cssProp:"background-image",dataAttr:"data-darkreader-inline-bgimage"},"border-color":{customProp:"--darkreader-inline-border",cssProp:"border-color",dataAttr:"data-darkreader-inline-border"},"border-bottom-color":{customProp:"--darkreader-inline-border-bottom",cssProp:"border-bottom-color",dataAttr:"data-darkreader-inline-border-bottom"},"border-left-color":{customProp:"--darkreader-inline-border-left",cssProp:"border-left-color",dataAttr:"data-darkreader-inline-border-left"},"border-right-color":{customProp:"--darkreader-inline-border-right",cssProp:"border-right-color",dataAttr:"data-darkreader-inline-border-right"},"border-top-color":{customProp:"--darkreader-inline-border-top",cssProp:"border-top-color",dataAttr:"data-darkreader-inline-border-top"},"box-shadow":{customProp:"--darkreader-inline-boxshadow",cssProp:"box-shadow",dataAttr:"data-darkreader-inline-boxshadow"},color:{customProp:"--darkreader-inline-color",cssProp:"color",dataAttr:"data-darkreader-inline-color"},fill:{customProp:"--darkreader-inline-fill",cssProp:"fill",dataAttr:"data-darkreader-inline-fill"},stroke:{customProp:"--darkreader-inline-stroke",cssProp:"stroke",dataAttr:"data-darkreader-inline-stroke"},"outline-color":{customProp:"--darkreader-inline-outline",cssProp:"outline-color",dataAttr:"data-darkreader-inline-outline"},"stop-color":{customProp:"--darkreader-inline-stopcolor",cssProp:"stop-color",dataAttr:"data-darkreader-inline-stopcolor"}},dr=Object.values(lr),fr={};dr.forEach((function(e){var t=e.cssProp,r=e.customProp;return fr[r]=t}));var hr=["style","fill","stop-color","stroke","bgcolor","color"],pr=hr.map((function(e){return"[".concat(e,"]")})).join(", ");function vr(){return dr.map((function(e){var t=e.dataAttr,r=e.customProp,n=e.cssProp;return["[".concat(t,"] {")," ".concat(n,": var(").concat(r,") !important;"),"}"].join("\n")})).join("\n")}var mr=new Map,gr=new Map;function br(e,t,r){mr.has(e)&&(mr.get(e).disconnect(),gr.get(e).disconnect());var n=new WeakSet;function o(e){(function(e){var t=[];return e instanceof Element&&e.matches(pr)&&t.push(e),(e instanceof Element||b&&e instanceof ShadowRoot||e instanceof Document)&&F(t,e.querySelectorAll(pr)),t})(e).forEach((function(e){n.has(e)||(n.add(e),t(e))})),z(e,(function(o){n.has(e)||(n.add(e),r(o.shadowRoot),br(o.shadowRoot,t,r))}))}var c=ne(e,{onMinorMutations:function(e){e.additions.forEach((function(e){return o(e)}))},onHugeMutations:function(){o(e)}});mr.set(e,c);var u=0,s=null,l=I({seconds:10}),d=I({seconds:2}),f=[],h=null,p=W((function(e){e.forEach((function(e){hr.includes(e.attributeName)&&t(e.target)}))})),v=new MutationObserver((function(e){if(h)f.push.apply(f,i([],a(e),!1));else{u++;var t=Date.now();if(null==s)s=t;else if(u>=50){if(t-s0&&function(e,t){for(var r=0,n=t.length;r32||n>32?"background-color":"color",a)};J()?i():Y(i)}}e.hasAttribute("stop-color")&&u("stop-color","background-color",e.getAttribute("stop-color"))}if(e.hasAttribute("stroke")){var c=e.getAttribute("stroke");u("stroke",e instanceof SVGLineElement||e instanceof SVGTextElement?"border-color":"color",c)}e.style&&de(e.style,(function(t,r){if("background-image"!==t||!r.includes("url"))if(lr.hasOwnProperty(t)||t.startsWith("--")&&!fr[t])u(t,t,r);else{var n=fr[t];if(n&&!e.style.getPropertyValue(n)&&!e.hasAttribute(n)){if("background-color"===n&&e.hasAttribute("bgcolor"))return;e.style.setProperty(t,"")}}})),e.style&&e instanceof SVGTextElement&&e.style.fill&&u("fill","color",e.style.getPropertyValue("fill")),q(o,(function(t){e.removeAttribute(lr[t].dataAttr)})),yr.set(e,kr(e,t))}}function u(r,a,i){var c=r.startsWith("--"),u=c?{}:lr[r],s=u.customProp,l=u.dataAttr,d=Lt(a,i,{},Ht,n,null);if(d){var f=d.value;if("function"==typeof f&&(f=f(t)),c&&"object"==typeof f)f.declarations.forEach((function(t){var r=t.property,n=t.value;!(n instanceof Promise)&&e.style.setProperty(r,n)}));else e.style.setProperty(s,f),e.hasAttribute(l)||e.setAttribute(l,""),o.delete(r)}}}var _r="theme-color",Er='meta[name="'.concat(_r,'"]'),xr=null,Cr=null;function Vr(e,t){xr=xr||e.content;try{var r=Me(xr);e.content=rt(r,t)}catch(e){B(e)}}var Rr=["mode","brightness","contrast","grayscale","sepia","darkSchemeBackgroundColor","darkSchemeTextColor","lightSchemeBackgroundColor","lightSchemeTextColor"];var Tr=function(){var e=[],t=null;function r(){for(var r;r=e.shift();)r();t=null}return{add:function(n){e.push(n),t||(t=requestAnimationFrame(r))},cancel:function(){e.splice(0),cancelAnimationFrame(t),t=null}}}();function Mr(){var e=0,t=new Set,r=new Map,n=new Set,o=null,c=!1,u=!1;return{modifySheet:function(s){var l=s.sourceCSSRules,d=s.theme,f=s.ignoreImageAnalysis,h=s.force,p=s.prepareSheet,v=s.isAsyncCancelled,m=0===r.size,g=new Set(r.keys()),b=function(e){var t="";return Rr.forEach((function(r){t+="".concat(r,":").concat(e[r],";")})),t}(d),y=b!==o;c&&(u=!0);var w=[];if(ue(l,(function(e){var n=e.cssText,o=!1;if(g.delete(n),e.parentRule instanceof CSSMediaRule&&(n+=";".concat(e.parentRule.media.mediaText)),t.has(n)||(t.add(n),o=!0),o){m=!0;var a=[];e.style&&de(e.style,(function(t,r){var n=Lt(t,r,e,Ht,f,v);n&&a.push(n)}));var i=null;if(a.length>0){var c=e.parentRule;i={selector:e.selectorText,declarations:a,parentRule:c},w.push(i)}r.set(n,i)}else w.push(r.get(n))}),(function(){c=!0})),g.forEach((function(e){t.delete(e),r.delete(e)})),o=b,h||m||y){e++;var k=new Map,S=new Map,_=0,E=0,x={rule:null,rules:[],isGroup:!0},C=new WeakMap;n.forEach((function(e){return e()})),n.clear(),w.filter((function(e){return e})).forEach((function(t){var r=t.selector,o=t.declarations,c=T(t.parentRule),u={selector:r,declarations:[],isGroup:!1},s=u.declarations;function l(t,r,n,o){var a=++_,i={property:t,value:null,important:n,asyncKey:a,sourceValue:o};s.push(i);var c=e;r.then((function(t){t&&!v()&&c===e&&(i.value=t,Tr.add((function(){v()||c!==e||function(e){var t=k.get(e),r=t.rule,n=t.target,o=t.index;n.deleteRule(o),R(n,o,r),k.delete(e)}(a)})))}))}function f(t,r,o,c){var u=r,d=u.declarations,f=u.onTypeChange,h=++E,p=e,m=s.length,g=[];if(0===d.length){var b={property:t,value:c,important:o,sourceValue:c,varKey:h};s.push(b),g=[b]}d.forEach((function(e){if(e.value instanceof Promise)l(e.property,e.value,o,c);else{var t={property:e.property,value:e.value,important:o,sourceValue:c,varKey:h};s.push(t),g.push(t)}})),f.addListener((function(t){if(!v()&&p===e){var r=t.map((function(e){return{property:e.property,value:e.value,important:o,sourceValue:c,varKey:h}})),n=s.indexOf(g[0],m);s.splice.apply(s,i([n,g.length],a(r),!1)),g=r,function(e){var t=S.get(e),r=t.rule,n=t.target,o=t.index;n.deleteRule(o),R(n,o,r)}(h)}})),n.add((function(){return f.removeListeners()}))}c.rules.push(u),o.forEach((function(e){var t=e.property,r=e.value,n=e.important,o=e.sourceValue;if("function"==typeof r){var a=r(d);a instanceof Promise?l(t,a,n,o):t.startsWith("--")?f(t,a,n,o):s.push({property:t,value:a,important:n,sourceValue:o})}else s.push({property:t,value:r,important:n,sourceValue:o})}))}));var V=p();!function e(t,r,n){t.rules.forEach((function(t){if(t.isGroup){var o=function(e,t){var r=e.rule;if(r instanceof CSSMediaRule){var n=r.media,o=t.cssRules.length;return t.insertRule("@media ".concat(n.mediaText," {}"),o),t.cssRules[o]}return t}(t,r);e(t,o,n)}else n(t,r)}))}(x,V,(function(e,t){var r=t.cssRules.length;e.declarations.forEach((function(n){var o=n.asyncKey,a=n.varKey;null!=o&&k.set(o,{rule:e,target:t,index:r}),null!=a&&S.set(a,{rule:e,target:t,index:r})})),R(t,r,e)}))}function R(e,t,r){var n=r.selector,o=r.declarations,a="";o.forEach((function(e){var t,r,n,o,i;a+="".concat((r=(t=e).property,n=t.value,o=t.important,i=t.sourceValue,"".concat(r,": ").concat(null==n?i:n).concat(o?" !important":"",";"))," ")}));var i="".concat(n," { ").concat(a," }");e.insertRule(i,t)}function T(e){if(null==e)return x;if(C.has(e))return C.get(e);var t={rule:e,rules:[],isGroup:!0};return C.set(e,t),T(e.parentRule).rules.push(t),t}},shouldRebuildStyle:function(){return c&&!u}}}function Ar(e){return(e instanceof HTMLStyleElement||e instanceof SVGStyleElement||e instanceof HTMLLinkElement&&e.rel&&e.rel.toLowerCase().includes("stylesheet")&&!e.disabled&&(!h||!e.href.startsWith("moz-extension://"))&&!e.href.startsWith("https://fonts.googleapis.com"))&&!e.classList.contains("darkreader")&&"print"!==e.media.toLowerCase()&&!e.classList.contains("stylus")}function Lr(e,t,r){return void 0===t&&(t=[]),void 0===r&&(r=!0),Ar(e)?t.push(e):(e instanceof Element||b&&e instanceof ShadowRoot||e===document)&&(q(e.querySelectorAll('style, link[rel*="stylesheet" i]:not([disabled])'),(function(e){return Lr(e,t,!1)})),r&&z(e,(function(e){return Lr(e.shadowRoot,t,!1)}))),t}var Pr=new WeakSet,Or=new WeakSet,jr=!1;document.addEventListener("__darkreader__inlineScriptsAllowed",(function(){jr=!0}));var Dr=0,qr=new Map;function Fr(e,t){for(var o=t.update,i=t.loadingStart,c=t.loadingEnd,u=[],s=e;(s=s.nextElementSibling)&&s.matches(".darkreader");)u.push(s);var l=u.find((function(e){return e.matches(".darkreader--cors")&&!Or.has(e)}))||null,d=u.find((function(e){return e.matches(".darkreader--sync")&&!Pr.has(e)}))||null,h=null,v=null,m=!1,g=!0,b=Mr(),y=new MutationObserver((function(){o()})),w={attributes:!0,childList:!0,subtree:!0,characterData:!0};function k(){return e instanceof HTMLStyleElement&&e.textContent.trim().match(he)}function S(e,t){var r=!1;if(e){var n=void 0;e:for(var o=0,a=e.length;o=0;t--)e.deleteRule(t)}(d.sheet),v?v.run():v=$(d,"prev-sibling",(function(){T=!0,i()})),d.sheet}function i(){var e=T;T=!1,b.modifySheet({prepareSheet:a,sourceCSSRules:n,theme:t,ignoreImageAnalysis:r,force:e,isAsyncCancelled:function(){return m}}),g=0===d.sheet.cssRules.length,b.shouldRebuildStyle()&&Y((function(){return o()}))}n&&(m=!1,i())},pause:I,destroy:function(){if(I(),U(l),U(d),c(),qr.has(V)){var e=qr.get(V);qr.delete(V),e&&e()}},watch:function(){y.observe(e,w),e instanceof HTMLStyleElement&&L()},restore:function(){d&&(++z>10?B("Style sheet was moved multiple times",e):(B("Restore style",d,e),E(),h&&h.skip(),v&&v.skip(),g||(T=!0,o())))}}}function Nr(e,t){return r(this,void 0,void 0,(function(){return n(this,(function(r){return[2,new Promise((function(r,n){var o=function(){e.removeEventListener("load",a),e.removeEventListener("error",i),qr.delete(t)},a=function(){o(),N("Linkelement ".concat(t," has been loaded")),r()},i=function(){o(),n("Linkelement ".concat(t," couldn't be loaded. ").concat(e.href))};qr.set(t,(function(){o(),n()})),e.addEventListener("load",a),e.addEventListener("error",i),e.href||i()}))]}))}))}function Br(e){return r(this,void 0,void 0,(function(){return n(this,(function(t){switch(t.label){case 0:return e.startsWith("data:")?[4,fetch(e)]:[3,3];case 1:return[4,t.sent().text()];case 2:case 4:return[2,t.sent()];case 3:return[4,vt({url:e,responseType:"text",mimeType:"text/css",origin:window.location.origin})]}}))}))}function Wr(e,t,a){return void 0===a&&(a=new Map),r(this,void 0,void 0,(function(){var r,i,c,u,s,l,d,f,h,p;return n(this,(function(n){switch(n.label){case 0:e=function(e,t){return e.replace(fe,(function(e){var r=pe(e);try{return'url("'.concat(ce(t,r),'")')}catch(t){return B("Not able to replace relative URL with Absolute URL, skipping"),e}}))}(e=function(e){return e.replace(ge,"")}(e=e.replace(me,"")),t),r=ke(he,e),n.label=1;case 1:n.trys.push([1,10,11,12]),i=o(r),c=i.next(),n.label=2;case 2:return c.done?[3,9]:(u=c.value,s=pe(u.substring(7).trim().replace(/;$/,"").replace(/screen$/,"")),l=ce(t,s),d=void 0,a.has(l)?(d=a.get(l),[3,7]):[3,3]);case 3:return n.trys.push([3,6,,7]),[4,Br(l)];case 4:return d=n.sent(),a.set(l,d),[4,Wr(d,ve(l),a)];case 5:return d=n.sent(),[3,7];case 6:return B(n.sent()),d="",[3,7];case 7:e=e.split(u).join(d),n.label=8;case 8:return c=i.next(),[3,2];case 9:return[3,12];case 10:return f=n.sent(),h={error:f},[3,12];case 11:try{c&&!c.done&&(p=i.return)&&p.call(i)}finally{if(h)throw h.error}return[7];case 12:return[2,e=e.trim()]}}))}))}var Ir,Ur,$r=[],zr=new Map;function Hr(e){w&&q(e.querySelectorAll(":not(:defined)"),(function(e){var t=e.tagName.toLowerCase();if(!t.includes("-")){var o=e.getAttribute("is");if(!o)return;t=o}zr.has(t)||(zr.set(t,new Set),function(e){return r(this,void 0,void 0,(function(){return n(this,(function(t){return[2,new Promise((function(t){if(window.customElements&&"function"==typeof customElements.whenDefined)customElements.whenDefined(e).then((function(){return t()}));else if(Gr)Qr.set(e,t),document.dispatchEvent(new CustomEvent("__darkreader__addUndefinedResolver",{detail:{tag:e}}));else{var r=function(){var n=zr.get(e);n&&n.size>0&&(n.values().next().value.matches(":defined")?t():requestAnimationFrame(r))};requestAnimationFrame(r)}}))]}))}))}(t).then((function(){if(Ur){var e=zr.get(t);zr.delete(t),Ur(Array.from(e))}}))),zr.get(t).add(e)}))}var Gr=!1;document.addEventListener("__darkreader__inlineScriptsAllowed",(function(){Gr=!0}));var Qr=new Map;function Kr(e){(Gr=!0,Qr.has(e.detail.tag))&&Qr.get(e.detail.tag)()}function Jr(e,t,r){Xr();var n=new Set(e),o=new WeakMap,a=new WeakMap;function i(e){o.set(e,e.previousElementSibling),a.set(e,e.nextElementSibling)}function c(e){var r=e.createdStyles,c=e.removedStyles,u=e.movedStyles;r.forEach((function(e){return i(e)})),u.forEach((function(e){return i(e)})),c.forEach((function(e){return t=e,o.delete(t),void a.delete(t);var t})),r.forEach((function(e){return n.add(e)})),c.forEach((function(e){return n.delete(e)})),r.size+c.size+u.size>0&&t({created:Array.from(r),removed:Array.from(c),moved:Array.from(u),updated:[]})}function u(e){var t=e.additions,r=e.moves,n=e.deletions,o=new Set,a=new Set,i=new Set;t.forEach((function(e){return Lr(e).forEach((function(e){return o.add(e)}))})),n.forEach((function(e){return Lr(e).forEach((function(e){return a.add(e)}))})),r.forEach((function(e){return Lr(e).forEach((function(e){return i.add(e)}))})),c({createdStyles:o,removedStyles:a,movedStyles:i}),t.forEach((function(e){z(e,f),Hr(e)}))}function s(e){var t=new Set(Lr(e)),r=new Set,i=new Set,u=new Set;t.forEach((function(e){n.has(e)||r.add(e)})),n.forEach((function(e){t.has(e)||i.add(e)})),t.forEach((function(e){var t;r.has(e)||i.has(e)||(t=e).previousElementSibling===o.get(t)&&t.nextElementSibling===a.get(t)||u.add(e)})),c({createdStyles:r,removedStyles:i,movedStyles:u}),z(e,f),Hr(e)}function l(e){var r=new Set,n=new Set;e.forEach((function(e){var t=e.target;t.isConnected&&(Ar(t)?r.add(t):t instanceof HTMLLinkElement&&t.disabled&&n.add(t))})),r.size+n.size>0&&t({updated:Array.from(r),created:[],removed:Array.from(n),moved:[]})}function d(e){var t=ne(e,{onMinorMutations:u,onHugeMutations:s}),r=new MutationObserver(l);r.observe(e,{attributes:!0,attributeFilter:["rel","disabled","media"],subtree:!0}),$r.push(t,r),Ir.add(e)}function f(e){var t=e.shadowRoot;null==t||Ir.has(t)||(d(t),r(t))}e.forEach(i),d(document),z(document.documentElement,f),Ur=function(e){var r=[];e.forEach((function(e){return F(r,Lr(e.shadowRoot))})),t({created:r,updated:[],removed:[],moved:[]}),e.forEach((function(e){var t=e.shadowRoot;null!=t&&(f(e),z(t,f),Hr(t))}))},document.addEventListener("__darkreader__isDefined",Kr),Hr(document)}function Xr(){$r.forEach((function(e){return e.disconnect()})),$r.splice(0,$r.length),Ir=new WeakSet,Ur=null,zr.clear(),document.removeEventListener("__darkreader__isDefined",Kr)}var Yr=new WeakMap,Zr=new WeakSet;function en(e){var t=!1;return{render:function(r,n){e.adoptedStyleSheets.forEach((function(o){if(!Zr.has(o)){var c=o.rules,u=new CSSStyleSheet;Mr().modifySheet({prepareSheet:function(){for(var t=u.cssRules.length-1;t>=0;t--)u.deleteRule(t);return function(t,r){var n=i([],a(e.adoptedStyleSheets),!1),o=n.indexOf(t),c=n.indexOf(r);o!==c-1&&(c>=0&&n.splice(c,1),n.splice(o+1,0,r),e.adoptedStyleSheets=n)}(o,u),Yr.set(o,u),Zr.add(u),u},sourceCSSRules:c,theme:r,ignoreImageAnalysis:n,force:!1,isAsyncCancelled:function(){return t}})}}))},destroy:function(){t=!0;var r=i([],a(e.adoptedStyleSheets),!1);e.adoptedStyleSheets.forEach((function(e){if(Zr.has(e)){var t=r.indexOf(e);t>=0&&r.splice(t,1),Yr.delete(e),Zr.delete(e)}})),e.adoptedStyleSheets=r}}}function tn(e){document.dispatchEvent(new CustomEvent("__darkreader__inlineScriptsAllowed"));var t=Object.getOwnPropertyDescriptor(CSSStyleSheet.prototype,"addRule"),r=Object.getOwnPropertyDescriptor(CSSStyleSheet.prototype,"insertRule"),n=Object.getOwnPropertyDescriptor(CSSStyleSheet.prototype,"deleteRule"),o=Object.getOwnPropertyDescriptor(CSSStyleSheet.prototype,"removeRule"),c=e?Object.getOwnPropertyDescriptor(Document.prototype,"styleSheets"):null,u=location.hostname.endsWith("baidu.com"),s=u?Object.getOwnPropertyDescriptor(Element.prototype,"getElementsByTagName"):null,l=function(){Object.defineProperty(CSSStyleSheet.prototype,"addRule",t),Object.defineProperty(CSSStyleSheet.prototype,"insertRule",r),Object.defineProperty(CSSStyleSheet.prototype,"deleteRule",n),Object.defineProperty(CSSStyleSheet.prototype,"removeRule",o),document.removeEventListener("__darkreader__cleanUp",l),document.removeEventListener("__darkreader__addUndefinedResolver",d),e&&Object.defineProperty(Document.prototype,"styleSheets",c),u&&Object.defineProperty(Element.prototype,"getElementsByTagName",s)},d=function(e){customElements.whenDefined(e.detail.tag).then((function(){document.dispatchEvent(new CustomEvent("__darkreader__isDefined",{detail:{tag:e.detail.tag}}))}))};document.addEventListener("__darkreader__cleanUp",l),document.addEventListener("__darkreader__addUndefinedResolver",d);var f=new Event("__darkreader__updateSheet");Object.defineProperty(CSSStyleSheet.prototype,"addRule",Object.assign({},t,{value:function(e,r,n){return t.value.call(this,e,r,n),this.ownerNode&&!this.ownerNode.classList.contains("darkreader")&&this.ownerNode.dispatchEvent(f),-1}})),Object.defineProperty(CSSStyleSheet.prototype,"insertRule",Object.assign({},r,{value:function(e,t){var n=r.value.call(this,e,t);return this.ownerNode&&!this.ownerNode.classList.contains("darkreader")&&this.ownerNode.dispatchEvent(f),n}})),Object.defineProperty(CSSStyleSheet.prototype,"deleteRule",Object.assign({},n,{value:function(e){n.value.call(this,e),this.ownerNode&&!this.ownerNode.classList.contains("darkreader")&&this.ownerNode.dispatchEvent(f)}})),Object.defineProperty(CSSStyleSheet.prototype,"removeRule",Object.assign({},o,{value:function(e){o.value.call(this,e),this.ownerNode&&!this.ownerNode.classList.contains("darkreader")&&this.ownerNode.dispatchEvent(f)}})),e&&Object.defineProperty(Document.prototype,"styleSheets",Object.assign({},c,{get:function(){var e=this,t=function(){var t=i([],a(c.get.call(e)),!1).filter((function(e){return!e.ownerNode.classList.contains("darkreader")}));return t.item=function(e){return t[e]},Object.setPrototypeOf(t,StyleSheetList.prototype)},r=t();return new Proxy(r,{get:function(e,r){return t()[r]}})}})),u&&Object.defineProperty(Element.prototype,"getElementsByTagName",Object.assign({},s,{value:function(e){var t=this;if("style"!==e)return s.value.call(this,e);var r=function(){var r=s.value.call(t,e);return Object.setPrototypeOf(i([],a(r),!1).filter((function(e){return!e.classList.contains("darkreader")})),NodeList.prototype)},n=r();return new Proxy(n,{get:function(e,t){return r()[Number(t)||t]}})}}))}var rn=function(){if("randomUUID"in crypto){var e=crypto.randomUUID();return e.substring(0,8)+e.substring(9,13)+e.substring(14,18)+e.substring(19,23)+e.substring(24)}return Array.from(crypto.getRandomValues(new Uint8Array(16))).map((function(e){return((t=e)<16?"0":"")+t.toString(16);var t})).join("")}(),nn=new Map,on=[],an=null,cn=null,un=null,sn=null,ln=null;function dn(e,t){void 0===t&&(t=document.head||document);var r=t.querySelector(".".concat(e));return r||((r=document.createElement("style")).classList.add("darkreader"),r.classList.add(e),r.media="screen",r.textContent=""),r}var fn=new Map;function hn(e,t){fn.has(t)&&fn.get(t).stop(),fn.set(t,$(e,"parent"))}function pn(){var e=dn("darkreader--fallback",document);e.textContent=Dt(an,{strict:!0}),document.head.insertBefore(e,document.head.firstChild),hn(e,"fallback");var r=dn("darkreader--user-agent");r.textContent=Ot(an,un,an.styleSystemControls),document.head.insertBefore(r,e.nextSibling),hn(r,"user-agent");var n,o,a=dn("darkreader--text");an.useFont||an.textStroke>0?a.textContent=(n=an,(o=[]).push('*:not(pre, pre *, code, .far, .fa, .glyphicon, [class*="vjs-"], .fab, .fa-github, .fas, .material-icons, .icofont, .typcn, mu, [class*="mu-"], .glyphicon, .icon) {'),n.useFont&&n.fontFamily&&o.push(" font-family: ".concat(n.fontFamily," !important;")),n.textStroke>0&&(o.push(" -webkit-text-stroke: ".concat(n.textStroke,"px !important;")),o.push(" text-stroke: ".concat(n.textStroke,"px !important;"))),o.push("}"),o.join("\n")):a.textContent="",document.head.insertBefore(a,e.nextSibling),hn(a,"text");var i=dn("darkreader--invert");cn&&Array.isArray(cn.invert)&&cn.invert.length>0?i.textContent=["".concat(cn.invert.join(", ")," {")," filter: ".concat(dt(t(t({},an),{contrast:0===an.mode?an.contrast:Be(an.contrast-10,0,100)}))," !important;"),"}"].join("\n"):i.textContent="",document.head.insertBefore(i,a.nextSibling),hn(i,"invert");var c=dn("darkreader--inline");c.textContent=vr(),document.head.insertBefore(c,i.nextSibling),hn(c,"inline");var u=dn("darkreader--override");u.textContent=cn&&cn.css?gn(cn.css):"",document.head.appendChild(u),hn(u,"override");var s=dn("darkreader--variables"),l=jt(an),d=an.darkSchemeBackgroundColor,f=an.darkSchemeTextColor,h=an.lightSchemeBackgroundColor,p=an.lightSchemeTextColor,v=an.mode,m=0===v?h:d,g=0===v?p:f;m=rt(Me(m),an),g=ct(Me(g),an),s.textContent=[":root {"," --darkreader-neutral-background: ".concat(m,";")," --darkreader-neutral-text: ".concat(g,";")," --darkreader-selection-background: ".concat(l.backgroundColorSelection,";")," --darkreader-selection-text: ".concat(l.foregroundColorSelection,";"),"}"].join("\n"),document.head.insertBefore(s,c.nextSibling),hn(s,"variables");var b=dn("darkreader--root-vars");document.head.insertBefore(b,s.nextSibling);var y=function(e,t){void 0===t&&(t=document.head||document);var r=t.querySelector(".".concat(e));return r||((r=document.createElement("script")).classList.add("darkreader"),r.classList.add(e)),r}("darkreader--proxy");y.append("(".concat(tn,")(!").concat(cn&&cn.disableStyleSheetsProxy,")")),document.head.insertBefore(y,b.nextSibling),y.remove()}var vn=new Set;function mn(e){var r=dn("darkreader--inline",e);r.textContent=vr(),e.insertBefore(r,e.firstChild);var n=dn("darkreader--override",e);n.textContent=cn&&cn.css?gn(cn.css):"",e.insertBefore(n,r.nextSibling);var o=dn("darkreader--invert",e);cn&&Array.isArray(cn.invert)&&cn.invert.length>0?o.textContent=["".concat(cn.invert.join(", ")," {")," filter: ".concat(dt(t(t({},an),{contrast:0===an.mode?an.contrast:Be(an.contrast-10,0,100)}))," !important;"),"}"].join("\n"):o.textContent="",e.insertBefore(o,n.nextSibling),vn.add(e)}function gn(e){return e.replace(/\${(.+?)}/g,(function(e,t){var r=Bt(t);return r?Xe(r,an,Ye):(B("Couldn't parse CSSTemplate's color."),t)}))}function bn(){var e=document.querySelector(".darkreader--fallback");e&&(e.textContent="")}var yn=0,wn=new Set;function kn(e){var t=++yn;N("New manager for element, with loadingStyleID ".concat(t),e);var r=Fr(e,{update:function(){var e=r.details({secondRound:!0});e&&(Ht.addRulesForMatching(e.rules),Ht.matchVariablesAndDependants(),r.render(an,sn))},loadingStart:function(){if(!H()||!Vn){wn.add(t),N("Current amount of styles loading: ".concat(wn.size));var e=document.querySelector(".darkreader--fallback");e.textContent||(e.textContent=Dt(an,{strict:!1}))}},loadingEnd:function(){wn.delete(t),N("Removed loadingStyle ".concat(t,", now awaiting: ").concat(wn.size)),N("To-do to be loaded",wn),0===wn.size&&H()&&bn()}});return nn.set(e,r),r}function Sn(e){var t=nn.get(e);t&&(t.destroy(),nn.delete(e))}var _n=W((function(e){nn.forEach((function(e){return e.render(an,sn)})),on.forEach((function(e){return e.render(an,sn)})),e&&e()})),En=function(){_n.cancel()};function xn(){0!==wn.size?B("DOM is ready, but still have styles being loaded.",wn):bn()}var Cn=null,Vn=!document.hidden;function Rn(){document.removeEventListener("visibilitychange",Cn),Cn=null}function Tn(){function e(){var e,t;!function(){En();var e=Lr(document).filter((function(e){return!nn.has(e)})).map((function(e){return kn(e)}));e.map((function(e){return e.details({secondRound:!1})})).filter((function(e){return e&&e.rules.length>0})).forEach((function(e){Ht.addRulesForMatching(e.rules)})),Ht.matchVariablesAndDependants(),Ht.setOnRootVariableChange((function(){Ht.putRootVars(document.head.querySelector(".darkreader--root-vars"),an)})),Ht.putRootVars(document.head.querySelector(".darkreader--root-vars"),an),nn.forEach((function(e){return e.render(an,sn)})),0===wn.size&&bn(),e.forEach((function(e){return e.watch()}));var t=function(e){for(var t=[],r=0,n=e.length;r0&&F(t,r)})),t.forEach((function(e){return Sr(e,an,ln,sn)})),Mn(document)}(),Jr(Array.from(nn.keys()),(function(e){var t=e.created,r=e.updated,n=e.removed,o=e.moved,a=n,i=t.concat(r).concat(o).filter((function(e){return!nn.has(e)})),c=o.filter((function(e){return nn.has(e)}));N("Styles to be removed:",a),a.forEach((function(e){return Sn(e)}));var u=i.map((function(e){return kn(e)}));u.map((function(e){return e.details({secondRound:!1})})).filter((function(e){return e&&e.rules.length>0})).forEach((function(e){Ht.addRulesForMatching(e.rules)})),Ht.matchVariablesAndDependants(),u.forEach((function(e){return e.render(an,sn)})),u.forEach((function(e){return e.watch()})),c.forEach((function(e){return nn.get(e).restore()}))}),(function(e){mn(e),Mn(e)})),e=function(e){Sr(e,an,ln,sn),e===document.documentElement&&(e.getAttribute("style")||"").includes("--")&&(Ht.matchVariablesAndDependants(),Ht.putRootVars(document.head.querySelector(".darkreader--root-vars"),an))},t=function(e){mn(e);var t=e.querySelectorAll(pr);t.length>0&&q(t,(function(e){return Sr(e,an,ln,sn)}))},br(document,e,t),z(document.documentElement,(function(r){br(r.shadowRoot,e,t)})),Q(xn)}var t,r,n,o;pn(),document.hidden&&!an.immediateModify?(t=e,r=Boolean(Cn),Cn=function(){document.hidden||(Rn(),t(),Vn=!0)},r||document.addEventListener("visibilitychange",Cn)):e(),n=an,(o=document.querySelector(Er))?Vr(o,n):(Cr&&Cr.disconnect(),(Cr=new MutationObserver((function(e){e:for(var t=0;t0){var t=en(e);on.push(t),t.render(an,sn)}}catch(e){B("Error occured in handleAdoptedStyleSheets: ",e)}}function An(){nn.forEach((function(e){return e.pause()})),q(fn.values(),(function(e){return e.stop()})),fn.clear(),Xr(),mr.forEach((function(e){return e.disconnect()})),gr.forEach((function(e){return e.disconnect()})),mr.clear(),gr.clear(),K(xn),X.clear()}function Ln(){var e,t=document.querySelector('meta[name="darkreader"]');return t?t.content!==rn:((e=document.createElement("meta")).name="darkreader",e.content=rn,document.head.appendChild(e),!1)}function Pn(e,t,r){if(an=e,(cn=t)?(sn=Array.isArray(cn.ignoreImageAnalysis)?cn.ignoreImageAnalysis:[],ln=Array.isArray(cn.ignoreInlineStyle)?cn.ignoreInlineStyle:[]):(sn=[],ln=[]),an.immediateModify&&(H=function(){return!0}),un=r,document.head){if(Ln())return;document.documentElement.setAttribute("data-darkreader-mode","dynamic"),document.documentElement.setAttribute("data-darkreader-scheme",an.mode?"dark":"dimmed"),Tn()}else{if(!h){var n=dn("darkreader--fallback");document.documentElement.appendChild(n),n.textContent=Dt(an,{strict:!0})}var o=new MutationObserver((function(){if(document.head){if(o.disconnect(),Ln())return void On();Tn()}}));o.observe(document,{childList:!0,subtree:!0})}}function On(){document.documentElement.removeAttribute("data-darkreader-mode"),document.documentElement.removeAttribute("data-darkreader-scheme"),Ht.clear(),oe.clear(),Rn(),En(),An(),zt(),U(document.querySelector(".darkreader--fallback")),document.head&&(!function(){Cr&&(Cr.disconnect(),Cr=null);var e=document.querySelector(Er);e&&xr&&(e.content=xr)}(),U(document.head.querySelector(".darkreader--user-agent")),U(document.head.querySelector(".darkreader--text")),U(document.head.querySelector(".darkreader--invert")),U(document.head.querySelector(".darkreader--inline")),U(document.head.querySelector(".darkreader--override")),U(document.head.querySelector(".darkreader--variables")),U(document.head.querySelector(".darkreader--root-vars")),U(document.head.querySelector('meta[name="darkreader"]')),document.dispatchEvent(new CustomEvent("__darkreader__cleanUp")),U(document.head.querySelector(".darkreader--proxy"))),vn.forEach((function(e){U(e.querySelector(".darkreader--inline")),U(e.querySelector(".darkreader--override"))})),vn.clear(),q(nn.keys(),(function(e){return Sn(e)})),wn.clear(),qr.clear(),q(document.querySelectorAll(".darkreader"),U),on.forEach((function(e){e.destroy()})),on.splice(0)}var jn=/url\(\"(blob\:.*?)\"\)/g;function Dn(e){return r(this,void 0,void 0,(function(){var t,r;return n(this,(function(n){switch(n.label){case 0:return t=[],ke(jn,e,1).forEach((function(e){var r=_(e);t.push(r)})),[4,Promise.all(t)];case 1:return r=n.sent(),[2,e.replace(jn,(function(){return'url("'.concat(r.shift(),'")')}))]}}))}))}function qn(){return r(this,void 0,void 0,(function(){function e(e,r){var n=document.querySelector(e);n&&n.textContent&&(t.push("/* ".concat(r," */")),t.push(n.textContent),t.push(""))}var t,r,o,a,i;return n(this,(function(n){switch(n.label){case 0:return t=['/*\n _______\n / \\\n .==. .==.\n (( ))==(( ))\n / "==" "=="\\\n /____|| || ||___\\\n ________ ____ ________ ___ ___\n | ___ \\ / \\ | ___ \\ | | / /\n | | \\ \\ / /\\ \\ | | \\ \\| |_/ /\n | | ) / /__\\ \\ | |__/ /| ___ \\\n | |__/ / ______ \\| ____ \\| | \\ \\\n_______|_______/__/ ____ \\__\\__|___\\__\\__|___\\__\\____\n| ___ \\ | ____/ / \\ | ___ \\ | ____| ___ \\\n| | \\ \\| |___ / /\\ \\ | | \\ \\| |___| | \\ \\\n| |__/ /| ____/ /__\\ \\ | | ) | ____| |__/ /\n| ____ \\| |__/ ______ \\| |__/ /| |___| ____ \\\n|__| \\__\\____/__/ \\__\\_______/ |______|__| \\__\\\n https://darkreader.org\n*/\n\n/*! Dark reader generated CSS | Licensed under MIT https://github.com/darkreader/darkreader/blob/master/LICENSE */\n'],e(".darkreader--fallback","Fallback Style"),e(".darkreader--user-agent","User-Agent Style"),e(".darkreader--text","Text Style"),e(".darkreader--invert","Invert Style"),e(".darkreader--variables","Variables Style"),r=[],document.querySelectorAll(".darkreader--sync").forEach((function(e){q(e.sheet.cssRules,(function(e){e&&e.cssText&&r.push(e.cssText)}))})),r.length?(o=function(e){function t(e){return e.replace(/^\s+/,"")}function r(e){return 0===e?"":" ".repeat(4*e)}if(e.length<5e4)for(var n=/[^{}]+{\s*}/;n.test(e);)e=e.replace(n,"");for(var o=e.replace(/\s{2,}/g," ").replace(/\{/g,"{\n").replace(/\}/g,"\n}\n").replace(/\;(?![^\(|\"]*(\)|\"))/g,";\n").replace(/\,(?![^\(|\"]*(\)|\"))/g,",\n").replace(/\n\s*\n/g,"\n").split("\n"),a=0,i=[],c=0,u=o.length;c 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } + } + + function __values(o) { + var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; + if (m) return m.call(o); + if (o && typeof o.length === "number") return { + next: function () { + if (o && i >= o.length) o = void 0; + return { value: o && o[i++], done: !o }; + } + }; + throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); + } + + function __read(o, n) { + var m = typeof Symbol === "function" && o[Symbol.iterator]; + if (!m) return o; + var i = m.call(o), r, ar = [], e; + try { + while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); + } + catch (error) { e = { error: error }; } + finally { + try { + if (r && !r.done && (m = i["return"])) m.call(i); + } + finally { if (e) throw e.error; } + } + return ar; + } + + function __spreadArray(to, from, pack) { + if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { + if (ar || !(i in from)) { + if (!ar) ar = Array.prototype.slice.call(from, 0, i); + ar[i] = from[i]; + } + } + return to.concat(ar || Array.prototype.slice.call(from)); + } + + var MessageType = { + UI_GET_DATA: 'ui-get-data', + UI_SUBSCRIBE_TO_CHANGES: 'ui-subscribe-to-changes', + UI_UNSUBSCRIBE_FROM_CHANGES: 'ui-unsubscribe-from-changes', + UI_CHANGE_SETTINGS: 'ui-change-settings', + UI_SET_THEME: 'ui-set-theme', + UI_SET_SHORTCUT: 'ui-set-shortcut', + UI_TOGGLE_ACTIVE_TAB: 'ui-toggle-active-tab', + UI_MARK_NEWS_AS_READ: 'ui-mark-news-as-read', + UI_MARK_NEWS_AS_DISPLAYED: 'ui-mark-news-as-displayed', + UI_LOAD_CONFIG: 'ui-load-config', + UI_APPLY_DEV_DYNAMIC_THEME_FIXES: 'ui-apply-dev-dynamic-theme-fixes', + UI_RESET_DEV_DYNAMIC_THEME_FIXES: 'ui-reset-dev-dynamic-theme-fixes', + UI_APPLY_DEV_INVERSION_FIXES: 'ui-apply-dev-inversion-fixes', + UI_RESET_DEV_INVERSION_FIXES: 'ui-reset-dev-inversion-fixes', + UI_APPLY_DEV_STATIC_THEMES: 'ui-apply-dev-static-themes', + UI_RESET_DEV_STATIC_THEMES: 'ui-reset-dev-static-themes', + UI_SAVE_FILE: 'ui-save-file', + UI_REQUEST_EXPORT_CSS: 'ui-request-export-css', + BG_CHANGES: 'bg-changes', + BG_ADD_CSS_FILTER: 'bg-add-css-filter', + BG_ADD_STATIC_THEME: 'bg-add-static-theme', + BG_ADD_SVG_FILTER: 'bg-add-svg-filter', + BG_ADD_DYNAMIC_THEME: 'bg-add-dynamic-theme', + BG_EXPORT_CSS: 'bg-export-css', + BG_UNSUPPORTED_SENDER: 'bg-unsupported-sender', + BG_CLEAN_UP: 'bg-clean-up', + BG_RELOAD: 'bg-reload', + BG_FETCH_RESPONSE: 'bg-fetch-response', + BG_UI_UPDATE: 'bg-ui-update', + BG_CSS_UPDATE: 'bg-css-update', + CS_COLOR_SCHEME_CHANGE: 'cs-color-scheme-change', + CS_FRAME_CONNECT: 'cs-frame-connect', + CS_FRAME_FORGET: 'cs-frame-forget', + CS_FRAME_FREEZE: 'cs-frame-freeze', + CS_FRAME_RESUME: 'cs-frame-resume', + CS_EXPORT_CSS_RESPONSE: 'cs-export-css-response', + CS_FETCH: 'cs-fetch', + CS_DARK_THEME_DETECTED: 'cs-dark-theme-detected', + CS_DARK_THEME_NOT_DETECTED: 'cs-dark-theme-not-detected', + }; + + var userAgent = typeof navigator === 'undefined' ? 'some useragent' : navigator.userAgent.toLowerCase(); + var platform = typeof navigator === 'undefined' ? 'some platform' : navigator.platform.toLowerCase(); + var isChromium = userAgent.includes('chrome') || userAgent.includes('chromium'); + var isThunderbird = userAgent.includes('thunderbird'); + var isFirefox = userAgent.includes('firefox') || userAgent.includes('librewolf') || isThunderbird; + userAgent.includes('vivaldi'); + userAgent.includes('yabrowser'); + userAgent.includes('opr') || userAgent.includes('opera'); + userAgent.includes('edg'); + var isSafari = userAgent.includes('safari') && !isChromium; + var isWindows = platform.startsWith('win'); + var isMacOS = platform.startsWith('mac'); + userAgent.includes('mobile'); + var isShadowDomSupported = typeof ShadowRoot === 'function'; + var isMatchMediaChangeEventListenerSupported = (typeof MediaQueryList === 'function' && + typeof MediaQueryList.prototype.addEventListener === 'function'); + ((function () { + var m = userAgent.match(/chrom[e|ium]\/([^ ]+)/); + if (m && m[1]) { + return m[1]; + } + return ''; + }))(); + var isDefinedSelectorSupported = (function () { + try { + document.querySelector(':defined'); + return true; + } + catch (err) { + return false; + } + })(); + globalThis.chrome && globalThis.chrome.runtime && globalThis.chrome.runtime.getManifest && globalThis.chrome.runtime.getManifest().manifest_version === 3; + var isCSSColorSchemePropSupported = (function () { + if (typeof document === 'undefined') { + return false; + } + var el = document.createElement('div'); + el.setAttribute('style', 'color-scheme: dark'); + return el.style && el.style.colorScheme === 'dark'; + })(); + + function getOKResponse(url, mimeType, origin) { + return __awaiter(this, void 0, void 0, function () { + var response; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4, fetch(url, { + cache: 'force-cache', + credentials: 'omit', + referrer: origin + })]; + case 1: + response = _a.sent(); + if (isFirefox && mimeType === 'text/css' && url.startsWith('moz-extension://') && url.endsWith('.css')) { + return [2, response]; + } + if (mimeType && !response.headers.get('Content-Type').startsWith(mimeType)) { + throw new Error("Mime type mismatch when loading ".concat(url)); + } + if (!response.ok) { + throw new Error("Unable to load ".concat(url, " ").concat(response.status, " ").concat(response.statusText)); + } + return [2, response]; + } + }); + }); + } + function loadAsDataURL(url, mimeType) { + return __awaiter(this, void 0, void 0, function () { + var response; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4, getOKResponse(url, mimeType)]; + case 1: + response = _a.sent(); + return [4, readResponseAsDataURL(response)]; + case 2: return [2, _a.sent()]; + } + }); + }); + } + function readResponseAsDataURL(response) { + return __awaiter(this, void 0, void 0, function () { + var blob, dataURL; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4, response.blob()]; + case 1: + blob = _a.sent(); + return [4, (new Promise(function (resolve) { + var reader = new FileReader(); + reader.onloadend = function () { return resolve(reader.result); }; + reader.readAsDataURL(blob); + }))]; + case 2: + dataURL = _a.sent(); + return [2, dataURL]; + } + }); + }); + } + + var throwCORSError = function (url) { return __awaiter(void 0, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2, Promise.reject(new Error([ + 'Embedded Dark Reader cannot access a cross-origin resource', + url, + 'Overview your URLs and CORS policies or use', + '`DarkReader.setFetchMethod(fetch: (url) => Promise))`.', + 'See if using `DarkReader.setFetchMethod(window.fetch)`', + 'before `DarkReader.enable()` works.' + ].join(' ')))]; + }); + }); }; + var fetcher = throwCORSError; + function setFetchMethod$1(fetch) { + if (fetch) { + fetcher = fetch; + } + else { + fetcher = throwCORSError; + } + } + function callFetchMethod(url) { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4, fetcher(url)]; + case 1: return [2, _a.sent()]; + } + }); + }); + } + + if (!window.chrome) { + window.chrome = {}; + } + if (!chrome.runtime) { + chrome.runtime = {}; + } + var messageListeners = new Set(); + function sendMessage() { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + return __awaiter(this, void 0, void 0, function () { + var id_1, _a, url, responseType, response, text_1, error_1; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + if (!(args[0] && args[0].type === MessageType.CS_FETCH)) return [3, 8]; + id_1 = args[0].id; + _b.label = 1; + case 1: + _b.trys.push([1, 7, , 8]); + _a = args[0].data, url = _a.url, responseType = _a.responseType; + return [4, callFetchMethod(url)]; + case 2: + response = _b.sent(); + if (!(responseType === 'data-url')) return [3, 4]; + return [4, readResponseAsDataURL(response)]; + case 3: + text_1 = _b.sent(); + return [3, 6]; + case 4: return [4, response.text()]; + case 5: + text_1 = _b.sent(); + _b.label = 6; + case 6: + messageListeners.forEach(function (cb) { return cb({ type: MessageType.BG_FETCH_RESPONSE, data: text_1, error: null, id: id_1 }); }); + return [3, 8]; + case 7: + error_1 = _b.sent(); + console.error(error_1); + messageListeners.forEach(function (cb) { return cb({ type: MessageType.BG_FETCH_RESPONSE, data: null, error: error_1, id: id_1 }); }); + return [3, 8]; + case 8: return [2]; + } + }); + }); + } + function addMessageListener(callback) { + messageListeners.add(callback); + } + if (typeof chrome.runtime.sendMessage === 'function') { + var nativeSendMessage_1 = chrome.runtime.sendMessage; + chrome.runtime.sendMessage = function () { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + sendMessage.apply(void 0, __spreadArray([], __read(args), false)); + nativeSendMessage_1.apply(chrome.runtime, args); + }; + } + else { + chrome.runtime.sendMessage = sendMessage; + } + if (!chrome.runtime.onMessage) { + chrome.runtime.onMessage = {}; + } + if (typeof chrome.runtime.onMessage.addListener === 'function') { + var nativeAddListener_1 = chrome.runtime.onMessage.addListener; + chrome.runtime.onMessage.addListener = function () { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + addMessageListener(args[0]); + nativeAddListener_1.apply(chrome.runtime.onMessage, args); + }; + } + else { + chrome.runtime.onMessage.addListener = function () { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + return addMessageListener(args[0]); + }; + } + + var ThemeEngines = { + cssFilter: 'cssFilter', + svgFilter: 'svgFilter', + staticTheme: 'staticTheme', + dynamicTheme: 'dynamicTheme', + }; + + var DEFAULT_COLORS = { + darkScheme: { + background: '#181a1b', + text: '#e8e6e3', + }, + lightScheme: { + background: '#dcdad7', + text: '#181a1b', + }, + }; + var DEFAULT_THEME = { + mode: 1, + brightness: 100, + contrast: 100, + grayscale: 0, + sepia: 0, + useFont: false, + fontFamily: isMacOS ? 'Helvetica Neue' : isWindows ? 'Segoe UI' : 'Open Sans', + textStroke: 0, + engine: ThemeEngines.dynamicTheme, + stylesheet: '', + darkSchemeBackgroundColor: DEFAULT_COLORS.darkScheme.background, + darkSchemeTextColor: DEFAULT_COLORS.darkScheme.text, + lightSchemeBackgroundColor: DEFAULT_COLORS.lightScheme.background, + lightSchemeTextColor: DEFAULT_COLORS.lightScheme.text, + scrollbarColor: isMacOS ? '' : 'auto', + selectionColor: 'auto', + styleSystemControls: !isCSSColorSchemePropSupported, + lightColorScheme: 'Default', + darkColorScheme: 'Default', + immediateModify: false, + }; + + function isArrayLike(items) { + return items.length != null; + } + function forEach(items, iterator) { + var e_1, _a; + if (isArrayLike(items)) { + for (var i = 0, len = items.length; i < len; i++) { + iterator(items[i]); + } + } + else { + try { + for (var items_1 = __values(items), items_1_1 = items_1.next(); !items_1_1.done; items_1_1 = items_1.next()) { + var item = items_1_1.value; + iterator(item); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (items_1_1 && !items_1_1.done && (_a = items_1.return)) _a.call(items_1); + } + finally { if (e_1) throw e_1.error; } + } + } + } + function push(array, addition) { + forEach(addition, function (a) { return array.push(a); }); + } + function toArray(items) { + var results = []; + for (var i = 0, len = items.length; i < len; i++) { + results.push(items[i]); + } + return results; + } + + function logInfo() { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + } + function logWarn() { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + } + + function throttle(callback) { + var pending = false; + var frameId = null; + var lastArgs; + var throttled = (function () { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + lastArgs = args; + if (frameId) { + pending = true; + } + else { + callback.apply(void 0, __spreadArray([], __read(lastArgs), false)); + frameId = requestAnimationFrame(function () { + frameId = null; + if (pending) { + callback.apply(void 0, __spreadArray([], __read(lastArgs), false)); + pending = false; + } + }); + } + }); + var cancel = function () { + cancelAnimationFrame(frameId); + pending = false; + frameId = null; + }; + return Object.assign(throttled, { cancel: cancel }); + } + function createAsyncTasksQueue() { + var tasks = []; + var frameId = null; + function runTasks() { + var task; + while ((task = tasks.shift())) { + task(); + } + frameId = null; + } + function add(task) { + tasks.push(task); + if (!frameId) { + frameId = requestAnimationFrame(runTasks); + } + } + function cancel() { + tasks.splice(0); + cancelAnimationFrame(frameId); + frameId = null; + } + return { add: add, cancel: cancel }; + } + + function getDuration(time) { + var duration = 0; + if (time.seconds) { + duration += time.seconds * 1000; + } + if (time.minutes) { + duration += time.minutes * 60 * 1000; + } + if (time.hours) { + duration += time.hours * 60 * 60 * 1000; + } + if (time.days) { + duration += time.days * 24 * 60 * 60 * 1000; + } + return duration; + } + + function removeNode(node) { + node && node.parentNode && node.parentNode.removeChild(node); + } + function watchForNodePosition(node, mode, onRestore) { + if (onRestore === void 0) { onRestore = Function.prototype; } + var MAX_ATTEMPTS_COUNT = 10; + var RETRY_TIMEOUT = getDuration({ seconds: 2 }); + var ATTEMPTS_INTERVAL = getDuration({ seconds: 10 }); + var prevSibling = node.previousSibling; + var parent = node.parentNode; + if (!parent) { + throw new Error('Unable to watch for node position: parent element not found'); + } + if (mode === 'prev-sibling' && !prevSibling) { + throw new Error('Unable to watch for node position: there is no previous sibling'); + } + var attempts = 0; + var start = null; + var timeoutId = null; + var restore = throttle(function () { + if (timeoutId) { + return; + } + attempts++; + var now = Date.now(); + if (start == null) { + start = now; + } + else if (attempts >= MAX_ATTEMPTS_COUNT) { + if (now - start < ATTEMPTS_INTERVAL) { + logWarn("Node position watcher paused: retry in ".concat(RETRY_TIMEOUT, "ms"), node, prevSibling); + timeoutId = setTimeout(function () { + start = null; + attempts = 0; + timeoutId = null; + restore(); + }, RETRY_TIMEOUT); + return; + } + start = now; + attempts = 1; + } + if (mode === 'parent') { + if (prevSibling && prevSibling.parentNode !== parent) { + logWarn('Unable to restore node position: sibling parent changed', node, prevSibling, parent); + stop(); + return; + } + } + if (mode === 'prev-sibling') { + if (prevSibling.parentNode == null) { + logWarn('Unable to restore node position: sibling was removed', node, prevSibling, parent); + stop(); + return; + } + if (prevSibling.parentNode !== parent) { + logWarn('Style was moved to another parent', node, prevSibling, parent); + updateParent(prevSibling.parentNode); + } + } + logWarn('Restoring node position', node, prevSibling, parent); + parent.insertBefore(node, prevSibling ? prevSibling.nextSibling : parent.firstChild); + observer.takeRecords(); + onRestore && onRestore(); + }); + var observer = new MutationObserver(function () { + if ((mode === 'parent' && node.parentNode !== parent) || + (mode === 'prev-sibling' && node.previousSibling !== prevSibling)) { + restore(); + } + }); + var run = function () { + observer.observe(parent, { childList: true }); + }; + var stop = function () { + clearTimeout(timeoutId); + observer.disconnect(); + restore.cancel(); + }; + var skip = function () { + observer.takeRecords(); + }; + var updateParent = function (parentNode) { + parent = parentNode; + stop(); + run(); + }; + run(); + return { run: run, stop: stop, skip: skip }; + } + function iterateShadowHosts(root, iterator) { + if (root == null) { + return; + } + var walker = document.createTreeWalker(root, NodeFilter.SHOW_ELEMENT, { + acceptNode: function (node) { + return node.shadowRoot == null ? NodeFilter.FILTER_SKIP : NodeFilter.FILTER_ACCEPT; + } + }); + for (var node = (root.shadowRoot ? walker.currentNode : walker.nextNode()); node != null; node = walker.nextNode()) { + if (node.classList.contains('surfingkeys_hints_host')) { + continue; + } + iterator(node); + iterateShadowHosts(node.shadowRoot, iterator); + } + } + var isDOMReady = function () { + return document.readyState === 'complete' || document.readyState === 'interactive'; + }; + function setIsDOMReady(newFunc) { + isDOMReady = newFunc; + } + var readyStateListeners = new Set(); + function addDOMReadyListener(listener) { + isDOMReady() ? listener() : readyStateListeners.add(listener); + } + function removeDOMReadyListener(listener) { + readyStateListeners.delete(listener); + } + function isReadyStateComplete() { + return document.readyState === 'complete'; + } + var readyStateCompleteListeners = new Set(); + function addReadyStateCompleteListener(listener) { + isReadyStateComplete() ? listener() : readyStateCompleteListeners.add(listener); + } + function cleanReadyStateCompleteListeners() { + readyStateCompleteListeners.clear(); + } + if (!isDOMReady()) { + var onReadyStateChange_1 = function () { + if (isDOMReady()) { + readyStateListeners.forEach(function (listener) { return listener(); }); + readyStateListeners.clear(); + if (isReadyStateComplete()) { + document.removeEventListener('readystatechange', onReadyStateChange_1); + readyStateCompleteListeners.forEach(function (listener) { return listener(); }); + readyStateCompleteListeners.clear(); + } + } + }; + document.addEventListener('readystatechange', onReadyStateChange_1); + } + var HUGE_MUTATIONS_COUNT = 1000; + function isHugeMutation(mutations) { + if (mutations.length > HUGE_MUTATIONS_COUNT) { + return true; + } + var addedNodesCount = 0; + for (var i = 0; i < mutations.length; i++) { + addedNodesCount += mutations[i].addedNodes.length; + if (addedNodesCount > HUGE_MUTATIONS_COUNT) { + return true; + } + } + return false; + } + function getElementsTreeOperations(mutations) { + var additions = new Set(); + var deletions = new Set(); + var moves = new Set(); + mutations.forEach(function (m) { + forEach(m.addedNodes, function (n) { + if (n instanceof Element && n.isConnected) { + additions.add(n); + } + }); + forEach(m.removedNodes, function (n) { + if (n instanceof Element) { + if (n.isConnected) { + moves.add(n); + additions.delete(n); + } + else { + deletions.add(n); + } + } + }); + }); + var duplicateAdditions = []; + var duplicateDeletions = []; + additions.forEach(function (node) { + if (additions.has(node.parentElement)) { + duplicateAdditions.push(node); + } + }); + deletions.forEach(function (node) { + if (deletions.has(node.parentElement)) { + duplicateDeletions.push(node); + } + }); + duplicateAdditions.forEach(function (node) { return additions.delete(node); }); + duplicateDeletions.forEach(function (node) { return deletions.delete(node); }); + return { additions: additions, moves: moves, deletions: deletions }; + } + var optimizedTreeObservers = new Map(); + var optimizedTreeCallbacks = new WeakMap(); + function createOptimizedTreeObserver(root, callbacks) { + var observer; + var observerCallbacks; + var domReadyListener; + if (optimizedTreeObservers.has(root)) { + observer = optimizedTreeObservers.get(root); + observerCallbacks = optimizedTreeCallbacks.get(observer); + } + else { + var hadHugeMutationsBefore_1 = false; + var subscribedForReadyState_1 = false; + observer = new MutationObserver(function (mutations) { + if (isHugeMutation(mutations)) { + if (!hadHugeMutationsBefore_1 || isDOMReady()) { + observerCallbacks.forEach(function (_a) { + var onHugeMutations = _a.onHugeMutations; + return onHugeMutations(root); + }); + } + else if (!subscribedForReadyState_1) { + domReadyListener = function () { return observerCallbacks.forEach(function (_a) { + var onHugeMutations = _a.onHugeMutations; + return onHugeMutations(root); + }); }; + addDOMReadyListener(domReadyListener); + subscribedForReadyState_1 = true; + } + hadHugeMutationsBefore_1 = true; + } + else { + var elementsOperations_1 = getElementsTreeOperations(mutations); + observerCallbacks.forEach(function (_a) { + var onMinorMutations = _a.onMinorMutations; + return onMinorMutations(elementsOperations_1); + }); + } + }); + observer.observe(root, { childList: true, subtree: true }); + optimizedTreeObservers.set(root, observer); + observerCallbacks = new Set(); + optimizedTreeCallbacks.set(observer, observerCallbacks); + } + observerCallbacks.add(callbacks); + return { + disconnect: function () { + observerCallbacks.delete(callbacks); + if (domReadyListener) { + removeDOMReadyListener(domReadyListener); + } + if (observerCallbacks.size === 0) { + observer.disconnect(); + optimizedTreeCallbacks.delete(observer); + optimizedTreeObservers.delete(root); + } + }, + }; + } + + var anchor; + var parsedURLCache = new Map(); + function fixBaseURL($url) { + if (!anchor) { + anchor = document.createElement('a'); + } + anchor.href = $url; + return anchor.href; + } + function parseURL($url, $base) { + if ($base === void 0) { $base = null; } + var key = "".concat($url).concat($base ? ";".concat($base) : ''); + if (parsedURLCache.has(key)) { + return parsedURLCache.get(key); + } + if ($base) { + var parsedURL_1 = new URL($url, fixBaseURL($base)); + parsedURLCache.set(key, parsedURL_1); + return parsedURL_1; + } + var parsedURL = new URL(fixBaseURL($url)); + parsedURLCache.set($url, parsedURL); + return parsedURL; + } + function getAbsoluteURL($base, $relative) { + if ($relative.match(/^data\\?\:/)) { + return $relative; + } + if (/^\/\//.test($relative)) { + return "".concat(location.protocol).concat($relative); + } + var b = parseURL($base); + var a = parseURL($relative, b.href); + return a.href; + } + function isRelativeHrefOnAbsolutePath(href) { + if (href.startsWith('data:')) { + return true; + } + var url = parseURL(href); + if (url.protocol !== location.protocol) { + return false; + } + if (url.hostname !== location.hostname) { + return false; + } + if (url.port !== location.port) { + return false; + } + return url.pathname === location.pathname; + } + + function iterateCSSRules(rules, iterate, onMediaRuleError) { + forEach(rules, function (rule) { + if (rule.selectorText) { + iterate(rule); + } + else if (rule.href) { + try { + iterateCSSRules(rule.styleSheet.cssRules, iterate, onMediaRuleError); + } + catch (err) { + logInfo("Found a non-loaded link."); + onMediaRuleError && onMediaRuleError(); + } + } + else if (rule.media) { + var media = Array.from(rule.media); + var isScreenOrAllOrQuery = media.some(function (m) { return m.startsWith('screen') || m.startsWith('all') || m.startsWith('('); }); + var isPrintOrSpeech = media.some(function (m) { return m.startsWith('print') || m.startsWith('speech'); }); + if (isScreenOrAllOrQuery || !isPrintOrSpeech) { + iterateCSSRules(rule.cssRules, iterate, onMediaRuleError); + } + } + else if (rule.conditionText) { + if (CSS.supports(rule.conditionText)) { + iterateCSSRules(rule.cssRules, iterate, onMediaRuleError); + } + } + else { + logWarn("CSSRule type not supported", rule); + } + }); + } + var shorthandVarDependantProperties = [ + 'background', + 'border', + 'border-color', + 'border-bottom', + 'border-left', + 'border-right', + 'border-top', + 'outline', + 'outline-color', + ]; + var shorthandVarDepPropRegexps = isSafari ? shorthandVarDependantProperties.map(function (prop) { + var regexp = new RegExp("".concat(prop, ":\\s*(.*?)\\s*;")); + return [prop, regexp]; + }) : null; + function iterateCSSDeclarations(style, iterate) { + forEach(style, function (property) { + var value = style.getPropertyValue(property).trim(); + if (!value) { + return; + } + iterate(property, value); + }); + var cssText = style.cssText; + if (cssText.includes('var(')) { + if (isSafari) { + shorthandVarDepPropRegexps.forEach(function (_a) { + var _b = __read(_a, 2), prop = _b[0], regexp = _b[1]; + var match = cssText.match(regexp); + if (match && match[1]) { + var val = match[1].trim(); + iterate(prop, val); + } + }); + } + else { + shorthandVarDependantProperties.forEach(function (prop) { + var val = style.getPropertyValue(prop); + if (val && val.includes('var(')) { + iterate(prop, val); + } + }); + } + } + } + var cssURLRegex = /url\((('.+?')|(".+?")|([^\)]*?))\)/g; + var cssImportRegex = /@import\s*(url\()?(('.+?')|(".+?")|([^\)]*?))\)? ?(screen)?;?/gi; + function getCSSURLValue(cssURL) { + return cssURL.trim().replace(/^url\((.*)\)$/, '$1').trim().replace(/^"(.*)"$/, '$1').replace(/^'(.*)'$/, '$1'); + } + function getCSSBaseBath(url) { + var cssURL = parseURL(url); + return "".concat(cssURL.origin).concat(cssURL.pathname.replace(/\?.*$/, '').replace(/(\/)([^\/]+)$/i, '$1')); + } + function replaceCSSRelativeURLsWithAbsolute($css, cssBasePath) { + return $css.replace(cssURLRegex, function (match) { + var pathValue = getCSSURLValue(match); + try { + return "url(\"".concat(getAbsoluteURL(cssBasePath, pathValue), "\")"); + } + catch (err) { + logWarn('Not able to replace relative URL with Absolute URL, skipping'); + return match; + } + }); + } + var cssCommentsRegex = /\/\*[\s\S]*?\*\//g; + function removeCSSComments($css) { + return $css.replace(cssCommentsRegex, ''); + } + var fontFaceRegex = /@font-face\s*{[^}]*}/g; + function replaceCSSFontFace($css) { + return $css.replace(fontFaceRegex, ''); + } + + function evalMath(expression) { + var rpnStack = []; + var workingStack = []; + var lastToken; + for (var i = 0, len = expression.length; i < len; i++) { + var token = expression[i]; + if (!token || token === ' ') { + continue; + } + if (operators.has(token)) { + var op = operators.get(token); + while (workingStack.length) { + var currentOp = operators.get(workingStack[0]); + if (!currentOp) { + break; + } + if (op.lessOrEqualThan(currentOp)) { + rpnStack.push(workingStack.shift()); + } + else { + break; + } + } + workingStack.unshift(token); + } + else if (!lastToken || operators.has(lastToken)) { + rpnStack.push(token); + } + else { + rpnStack[rpnStack.length - 1] += token; + } + lastToken = token; + } + rpnStack.push.apply(rpnStack, __spreadArray([], __read(workingStack), false)); + var stack = []; + for (var i = 0, len = rpnStack.length; i < len; i++) { + var op = operators.get(rpnStack[i]); + if (op) { + var args = stack.splice(0, 2); + stack.push(op.exec(args[1], args[0])); + } + else { + stack.unshift(parseFloat(rpnStack[i])); + } + } + return stack[0]; + } + var Operator = (function () { + function Operator(precedence, method) { + this.precendce = precedence; + this.execMethod = method; + } + Operator.prototype.exec = function (left, right) { + return this.execMethod(left, right); + }; + Operator.prototype.lessOrEqualThan = function (op) { + return this.precendce <= op.precendce; + }; + return Operator; + }()); + var operators = new Map([ + ['+', new Operator(1, function (left, right) { return left + right; })], + ['-', new Operator(1, function (left, right) { return left - right; })], + ['*', new Operator(2, function (left, right) { return left * right; })], + ['/', new Operator(2, function (left, right) { return left / right; })], + ]); + + function getMatches(regex, input, group) { + if (group === void 0) { group = 0; } + var matches = []; + var m; + while ((m = regex.exec(input))) { + matches.push(m[group]); + } + return matches; + } + function formatCSS(text) { + function trimLeft(text) { + return text.replace(/^\s+/, ''); + } + function getIndent(depth) { + if (depth === 0) { + return ''; + } + return ' '.repeat(4 * depth); + } + if (text.length < 50000) { + var emptyRuleRegexp = /[^{}]+{\s*}/; + while (emptyRuleRegexp.test(text)) { + text = text.replace(emptyRuleRegexp, ''); + } + } + var css = (text + .replace(/\s{2,}/g, ' ') + .replace(/\{/g, '{\n') + .replace(/\}/g, '\n}\n') + .replace(/\;(?![^\(|\"]*(\)|\"))/g, ';\n') + .replace(/\,(?![^\(|\"]*(\)|\"))/g, ',\n') + .replace(/\n\s*\n/g, '\n') + .split('\n')); + var depth = 0; + var formatted = []; + for (var x = 0, len = css.length; x < len; x++) { + var line = "".concat(css[x], "\n"); + if (line.includes('{')) { + formatted.push(getIndent(depth++) + trimLeft(line)); + } + else if (line.includes('\}')) { + formatted.push(getIndent(--depth) + trimLeft(line)); + } + else { + formatted.push(getIndent(depth) + trimLeft(line)); + } + } + return formatted.join('').trim(); + } + function getParenthesesRange(input, searchStartIndex) { + if (searchStartIndex === void 0) { searchStartIndex = 0; } + var length = input.length; + var depth = 0; + var firstOpenIndex = -1; + for (var i = searchStartIndex; i < length; i++) { + if (depth === 0) { + var openIndex = input.indexOf('(', i); + if (openIndex < 0) { + break; + } + firstOpenIndex = openIndex; + depth++; + i = openIndex; + } + else { + var closingIndex = input.indexOf(')', i); + if (closingIndex < 0) { + break; + } + var openIndex = input.indexOf('(', i); + if (openIndex < 0 || closingIndex < openIndex) { + depth--; + if (depth === 0) { + return { start: firstOpenIndex, end: closingIndex + 1 }; + } + i = closingIndex; + } + else { + depth++; + i = openIndex; + } + } + } + return null; + } + + function hslToRGB(_a) { + var h = _a.h, s = _a.s, l = _a.l, _b = _a.a, a = _b === void 0 ? 1 : _b; + if (s === 0) { + var _c = __read([l, l, l].map(function (x) { return Math.round(x * 255); }), 3), r_1 = _c[0], b_1 = _c[1], g_1 = _c[2]; + return { r: r_1, g: g_1, b: b_1, a: a }; + } + var c = (1 - Math.abs(2 * l - 1)) * s; + var x = c * (1 - Math.abs((h / 60) % 2 - 1)); + var m = l - c / 2; + var _d = __read((h < 60 ? [c, x, 0] : + h < 120 ? [x, c, 0] : + h < 180 ? [0, c, x] : + h < 240 ? [0, x, c] : + h < 300 ? [x, 0, c] : + [c, 0, x]).map(function (n) { return Math.round((n + m) * 255); }), 3), r = _d[0], g = _d[1], b = _d[2]; + return { r: r, g: g, b: b, a: a }; + } + function rgbToHSL(_a) { + var r255 = _a.r, g255 = _a.g, b255 = _a.b, _b = _a.a, a = _b === void 0 ? 1 : _b; + var r = r255 / 255; + var g = g255 / 255; + var b = b255 / 255; + var max = Math.max(r, g, b); + var min = Math.min(r, g, b); + var c = max - min; + var l = (max + min) / 2; + if (c === 0) { + return { h: 0, s: 0, l: l, a: a }; + } + var h = (max === r ? (((g - b) / c) % 6) : + max === g ? ((b - r) / c + 2) : + ((r - g) / c + 4)) * 60; + if (h < 0) { + h += 360; + } + var s = c / (1 - Math.abs(2 * l - 1)); + return { h: h, s: s, l: l, a: a }; + } + function toFixed(n, digits) { + if (digits === void 0) { digits = 0; } + var fixed = n.toFixed(digits); + if (digits === 0) { + return fixed; + } + var dot = fixed.indexOf('.'); + if (dot >= 0) { + var zerosMatch = fixed.match(/0+$/); + if (zerosMatch) { + if (zerosMatch.index === dot + 1) { + return fixed.substring(0, dot); + } + return fixed.substring(0, zerosMatch.index); + } + } + return fixed; + } + function rgbToString(rgb) { + var r = rgb.r, g = rgb.g, b = rgb.b, a = rgb.a; + if (a != null && a < 1) { + return "rgba(".concat(toFixed(r), ", ").concat(toFixed(g), ", ").concat(toFixed(b), ", ").concat(toFixed(a, 2), ")"); + } + return "rgb(".concat(toFixed(r), ", ").concat(toFixed(g), ", ").concat(toFixed(b), ")"); + } + function rgbToHexString(_a) { + var r = _a.r, g = _a.g, b = _a.b, a = _a.a; + return "#".concat((a != null && a < 1 ? [r, g, b, Math.round(a * 255)] : [r, g, b]).map(function (x) { + return "".concat(x < 16 ? '0' : '').concat(x.toString(16)); + }).join('')); + } + function hslToString(hsl) { + var h = hsl.h, s = hsl.s, l = hsl.l, a = hsl.a; + if (a != null && a < 1) { + return "hsla(".concat(toFixed(h), ", ").concat(toFixed(s * 100), "%, ").concat(toFixed(l * 100), "%, ").concat(toFixed(a, 2), ")"); + } + return "hsl(".concat(toFixed(h), ", ").concat(toFixed(s * 100), "%, ").concat(toFixed(l * 100), "%)"); + } + var rgbMatch = /^rgba?\([^\(\)]+\)$/; + var hslMatch = /^hsla?\([^\(\)]+\)$/; + var hexMatch = /^#[0-9a-f]+$/i; + function parse($color) { + var c = $color.trim().toLowerCase(); + if (c.match(rgbMatch)) { + return parseRGB(c); + } + if (c.match(hslMatch)) { + return parseHSL(c); + } + if (c.match(hexMatch)) { + return parseHex(c); + } + if (knownColors.has(c)) { + return getColorByName(c); + } + if (systemColors.has(c)) { + return getSystemColor(c); + } + if ($color === 'transparent') { + return { r: 0, g: 0, b: 0, a: 0 }; + } + throw new Error("Unable to parse ".concat($color)); + } + function getNumbers($color) { + var numbers = []; + var prevPos = 0; + var isMining = false; + var startIndex = $color.indexOf('('); + $color = $color.substring(startIndex + 1, $color.length - 1); + for (var i = 0; i < $color.length; i++) { + var c = $color[i]; + if (c >= '0' && c <= '9' || c === '.' || c === '+' || c === '-') { + isMining = true; + } + else if (isMining && (c === ' ' || c === ',')) { + numbers.push($color.substring(prevPos, i)); + isMining = false; + prevPos = i + 1; + } + else if (!isMining) { + prevPos = i + 1; + } + } + if (isMining) { + numbers.push($color.substring(prevPos, $color.length)); + } + return numbers; + } + function getNumbersFromString(str, range, units) { + var raw = getNumbers(str); + var unitsList = Object.entries(units); + var numbers = raw.map(function (r) { return r.trim(); }).map(function (r, i) { + var n; + var unit = unitsList.find(function (_a) { + var _b = __read(_a, 1), u = _b[0]; + return r.endsWith(u); + }); + if (unit) { + n = parseFloat(r.substring(0, r.length - unit[0].length)) / unit[1] * range[i]; + } + else { + n = parseFloat(r); + } + if (range[i] > 1) { + return Math.round(n); + } + return n; + }); + return numbers; + } + var rgbRange = [255, 255, 255, 1]; + var rgbUnits = { '%': 100 }; + function parseRGB($rgb) { + var _a = __read(getNumbersFromString($rgb, rgbRange, rgbUnits), 4), r = _a[0], g = _a[1], b = _a[2], _b = _a[3], a = _b === void 0 ? 1 : _b; + return { r: r, g: g, b: b, a: a }; + } + var hslRange = [360, 1, 1, 1]; + var hslUnits = { '%': 100, 'deg': 360, 'rad': 2 * Math.PI, 'turn': 1 }; + function parseHSL($hsl) { + var _a = __read(getNumbersFromString($hsl, hslRange, hslUnits), 4), h = _a[0], s = _a[1], l = _a[2], _b = _a[3], a = _b === void 0 ? 1 : _b; + return hslToRGB({ h: h, s: s, l: l, a: a }); + } + function parseHex($hex) { + var h = $hex.substring(1); + switch (h.length) { + case 3: + case 4: { + var _a = __read([0, 1, 2].map(function (i) { return parseInt("".concat(h[i]).concat(h[i]), 16); }), 3), r = _a[0], g = _a[1], b = _a[2]; + var a = h.length === 3 ? 1 : (parseInt("".concat(h[3]).concat(h[3]), 16) / 255); + return { r: r, g: g, b: b, a: a }; + } + case 6: + case 8: { + var _b = __read([0, 2, 4].map(function (i) { return parseInt(h.substring(i, i + 2), 16); }), 3), r = _b[0], g = _b[1], b = _b[2]; + var a = h.length === 6 ? 1 : (parseInt(h.substring(6, 8), 16) / 255); + return { r: r, g: g, b: b, a: a }; + } + } + throw new Error("Unable to parse ".concat($hex)); + } + function getColorByName($color) { + var n = knownColors.get($color); + return { + r: (n >> 16) & 255, + g: (n >> 8) & 255, + b: (n >> 0) & 255, + a: 1 + }; + } + function getSystemColor($color) { + var n = systemColors.get($color); + return { + r: (n >> 16) & 255, + g: (n >> 8) & 255, + b: (n >> 0) & 255, + a: 1 + }; + } + function lowerCalcExpression(color) { + var searchIndex = 0; + var replaceBetweenIndices = function (start, end, replacement) { + color = color.substring(0, start) + replacement + color.substring(end); + }; + while ((searchIndex = color.indexOf('calc(')) !== -1) { + var range = getParenthesesRange(color, searchIndex); + if (!range) { + break; + } + var slice = color.slice(range.start + 1, range.end - 1); + var includesPercentage = slice.includes('%'); + slice = slice.split('%').join(''); + var output = Math.round(evalMath(slice)); + replaceBetweenIndices(range.start - 4, range.end, output + (includesPercentage ? '%' : '')); + } + return color; + } + var knownColors = new Map(Object.entries({ + aliceblue: 0xf0f8ff, + antiquewhite: 0xfaebd7, + aqua: 0x00ffff, + aquamarine: 0x7fffd4, + azure: 0xf0ffff, + beige: 0xf5f5dc, + bisque: 0xffe4c4, + black: 0x000000, + blanchedalmond: 0xffebcd, + blue: 0x0000ff, + blueviolet: 0x8a2be2, + brown: 0xa52a2a, + burlywood: 0xdeb887, + cadetblue: 0x5f9ea0, + chartreuse: 0x7fff00, + chocolate: 0xd2691e, + coral: 0xff7f50, + cornflowerblue: 0x6495ed, + cornsilk: 0xfff8dc, + crimson: 0xdc143c, + cyan: 0x00ffff, + darkblue: 0x00008b, + darkcyan: 0x008b8b, + darkgoldenrod: 0xb8860b, + darkgray: 0xa9a9a9, + darkgrey: 0xa9a9a9, + darkgreen: 0x006400, + darkkhaki: 0xbdb76b, + darkmagenta: 0x8b008b, + darkolivegreen: 0x556b2f, + darkorange: 0xff8c00, + darkorchid: 0x9932cc, + darkred: 0x8b0000, + darksalmon: 0xe9967a, + darkseagreen: 0x8fbc8f, + darkslateblue: 0x483d8b, + darkslategray: 0x2f4f4f, + darkslategrey: 0x2f4f4f, + darkturquoise: 0x00ced1, + darkviolet: 0x9400d3, + deeppink: 0xff1493, + deepskyblue: 0x00bfff, + dimgray: 0x696969, + dimgrey: 0x696969, + dodgerblue: 0x1e90ff, + firebrick: 0xb22222, + floralwhite: 0xfffaf0, + forestgreen: 0x228b22, + fuchsia: 0xff00ff, + gainsboro: 0xdcdcdc, + ghostwhite: 0xf8f8ff, + gold: 0xffd700, + goldenrod: 0xdaa520, + gray: 0x808080, + grey: 0x808080, + green: 0x008000, + greenyellow: 0xadff2f, + honeydew: 0xf0fff0, + hotpink: 0xff69b4, + indianred: 0xcd5c5c, + indigo: 0x4b0082, + ivory: 0xfffff0, + khaki: 0xf0e68c, + lavender: 0xe6e6fa, + lavenderblush: 0xfff0f5, + lawngreen: 0x7cfc00, + lemonchiffon: 0xfffacd, + lightblue: 0xadd8e6, + lightcoral: 0xf08080, + lightcyan: 0xe0ffff, + lightgoldenrodyellow: 0xfafad2, + lightgray: 0xd3d3d3, + lightgrey: 0xd3d3d3, + lightgreen: 0x90ee90, + lightpink: 0xffb6c1, + lightsalmon: 0xffa07a, + lightseagreen: 0x20b2aa, + lightskyblue: 0x87cefa, + lightslategray: 0x778899, + lightslategrey: 0x778899, + lightsteelblue: 0xb0c4de, + lightyellow: 0xffffe0, + lime: 0x00ff00, + limegreen: 0x32cd32, + linen: 0xfaf0e6, + magenta: 0xff00ff, + maroon: 0x800000, + mediumaquamarine: 0x66cdaa, + mediumblue: 0x0000cd, + mediumorchid: 0xba55d3, + mediumpurple: 0x9370db, + mediumseagreen: 0x3cb371, + mediumslateblue: 0x7b68ee, + mediumspringgreen: 0x00fa9a, + mediumturquoise: 0x48d1cc, + mediumvioletred: 0xc71585, + midnightblue: 0x191970, + mintcream: 0xf5fffa, + mistyrose: 0xffe4e1, + moccasin: 0xffe4b5, + navajowhite: 0xffdead, + navy: 0x000080, + oldlace: 0xfdf5e6, + olive: 0x808000, + olivedrab: 0x6b8e23, + orange: 0xffa500, + orangered: 0xff4500, + orchid: 0xda70d6, + palegoldenrod: 0xeee8aa, + palegreen: 0x98fb98, + paleturquoise: 0xafeeee, + palevioletred: 0xdb7093, + papayawhip: 0xffefd5, + peachpuff: 0xffdab9, + peru: 0xcd853f, + pink: 0xffc0cb, + plum: 0xdda0dd, + powderblue: 0xb0e0e6, + purple: 0x800080, + rebeccapurple: 0x663399, + red: 0xff0000, + rosybrown: 0xbc8f8f, + royalblue: 0x4169e1, + saddlebrown: 0x8b4513, + salmon: 0xfa8072, + sandybrown: 0xf4a460, + seagreen: 0x2e8b57, + seashell: 0xfff5ee, + sienna: 0xa0522d, + silver: 0xc0c0c0, + skyblue: 0x87ceeb, + slateblue: 0x6a5acd, + slategray: 0x708090, + slategrey: 0x708090, + snow: 0xfffafa, + springgreen: 0x00ff7f, + steelblue: 0x4682b4, + tan: 0xd2b48c, + teal: 0x008080, + thistle: 0xd8bfd8, + tomato: 0xff6347, + turquoise: 0x40e0d0, + violet: 0xee82ee, + wheat: 0xf5deb3, + white: 0xffffff, + whitesmoke: 0xf5f5f5, + yellow: 0xffff00, + yellowgreen: 0x9acd32, + })); + var systemColors = new Map(Object.entries({ + ActiveBorder: 0x3b99fc, + ActiveCaption: 0x000000, + AppWorkspace: 0xaaaaaa, + Background: 0x6363ce, + ButtonFace: 0xffffff, + ButtonHighlight: 0xe9e9e9, + ButtonShadow: 0x9fa09f, + ButtonText: 0x000000, + CaptionText: 0x000000, + GrayText: 0x7f7f7f, + Highlight: 0xb2d7ff, + HighlightText: 0x000000, + InactiveBorder: 0xffffff, + InactiveCaption: 0xffffff, + InactiveCaptionText: 0x000000, + InfoBackground: 0xfbfcc5, + InfoText: 0x000000, + Menu: 0xf6f6f6, + MenuText: 0xffffff, + Scrollbar: 0xaaaaaa, + ThreeDDarkShadow: 0x000000, + ThreeDFace: 0xc0c0c0, + ThreeDHighlight: 0xffffff, + ThreeDLightShadow: 0xffffff, + ThreeDShadow: 0x000000, + Window: 0xececec, + WindowFrame: 0xaaaaaa, + WindowText: 0x000000, + '-webkit-focus-ring-color': 0xe59700 + }).map(function (_a) { + var _b = __read(_a, 2), key = _b[0], value = _b[1]; + return [key.toLowerCase(), value]; + })); + function getSRGBLightness(r, g, b) { + return (0.2126 * r + 0.7152 * g + 0.0722 * b) / 255; + } + + function scale(x, inLow, inHigh, outLow, outHigh) { + return (x - inLow) * (outHigh - outLow) / (inHigh - inLow) + outLow; + } + function clamp(x, min, max) { + return Math.min(max, Math.max(min, x)); + } + function multiplyMatrices(m1, m2) { + var result = []; + for (var i = 0, len = m1.length; i < len; i++) { + result[i] = []; + for (var j = 0, len2 = m2[0].length; j < len2; j++) { + var sum = 0; + for (var k = 0, len3 = m1[0].length; k < len3; k++) { + sum += m1[i][k] * m2[k][j]; + } + result[i][j] = sum; + } + } + return result; + } + + function createFilterMatrix(config) { + var m = Matrix.identity(); + if (config.sepia !== 0) { + m = multiplyMatrices(m, Matrix.sepia(config.sepia / 100)); + } + if (config.grayscale !== 0) { + m = multiplyMatrices(m, Matrix.grayscale(config.grayscale / 100)); + } + if (config.contrast !== 100) { + m = multiplyMatrices(m, Matrix.contrast(config.contrast / 100)); + } + if (config.brightness !== 100) { + m = multiplyMatrices(m, Matrix.brightness(config.brightness / 100)); + } + if (config.mode === 1) { + m = multiplyMatrices(m, Matrix.invertNHue()); + } + return m; + } + function applyColorMatrix(_a, matrix) { + var _b = __read(_a, 3), r = _b[0], g = _b[1], b = _b[2]; + var rgb = [[r / 255], [g / 255], [b / 255], [1], [1]]; + var result = multiplyMatrices(matrix, rgb); + return [0, 1, 2].map(function (i) { return clamp(Math.round(result[i][0] * 255), 0, 255); }); + } + var Matrix = { + identity: function () { + return [ + [1, 0, 0, 0, 0], + [0, 1, 0, 0, 0], + [0, 0, 1, 0, 0], + [0, 0, 0, 1, 0], + [0, 0, 0, 0, 1] + ]; + }, + invertNHue: function () { + return [ + [0.333, -0.667, -0.667, 0, 1], + [-0.667, 0.333, -0.667, 0, 1], + [-0.667, -0.667, 0.333, 0, 1], + [0, 0, 0, 1, 0], + [0, 0, 0, 0, 1] + ]; + }, + brightness: function (v) { + return [ + [v, 0, 0, 0, 0], + [0, v, 0, 0, 0], + [0, 0, v, 0, 0], + [0, 0, 0, 1, 0], + [0, 0, 0, 0, 1] + ]; + }, + contrast: function (v) { + var t = (1 - v) / 2; + return [ + [v, 0, 0, 0, t], + [0, v, 0, 0, t], + [0, 0, v, 0, t], + [0, 0, 0, 1, 0], + [0, 0, 0, 0, 1] + ]; + }, + sepia: function (v) { + return [ + [(0.393 + 0.607 * (1 - v)), (0.769 - 0.769 * (1 - v)), (0.189 - 0.189 * (1 - v)), 0, 0], + [(0.349 - 0.349 * (1 - v)), (0.686 + 0.314 * (1 - v)), (0.168 - 0.168 * (1 - v)), 0, 0], + [(0.272 - 0.272 * (1 - v)), (0.534 - 0.534 * (1 - v)), (0.131 + 0.869 * (1 - v)), 0, 0], + [0, 0, 0, 1, 0], + [0, 0, 0, 0, 1] + ]; + }, + grayscale: function (v) { + return [ + [(0.2126 + 0.7874 * (1 - v)), (0.7152 - 0.7152 * (1 - v)), (0.0722 - 0.0722 * (1 - v)), 0, 0], + [(0.2126 - 0.2126 * (1 - v)), (0.7152 + 0.2848 * (1 - v)), (0.0722 - 0.0722 * (1 - v)), 0, 0], + [(0.2126 - 0.2126 * (1 - v)), (0.7152 - 0.7152 * (1 - v)), (0.0722 + 0.9278 * (1 - v)), 0, 0], + [0, 0, 0, 1, 0], + [0, 0, 0, 0, 1] + ]; + }, + }; + + function getBgPole(theme) { + var isDarkScheme = theme.mode === 1; + var prop = isDarkScheme ? 'darkSchemeBackgroundColor' : 'lightSchemeBackgroundColor'; + return theme[prop]; + } + function getFgPole(theme) { + var isDarkScheme = theme.mode === 1; + var prop = isDarkScheme ? 'darkSchemeTextColor' : 'lightSchemeTextColor'; + return theme[prop]; + } + var colorModificationCache = new Map(); + var colorParseCache$1 = new Map(); + function parseToHSLWithCache(color) { + if (colorParseCache$1.has(color)) { + return colorParseCache$1.get(color); + } + var rgb = parse(color); + var hsl = rgbToHSL(rgb); + colorParseCache$1.set(color, hsl); + return hsl; + } + function clearColorModificationCache() { + colorModificationCache.clear(); + colorParseCache$1.clear(); + } + var rgbCacheKeys = ['r', 'g', 'b', 'a']; + var themeCacheKeys$1 = ['mode', 'brightness', 'contrast', 'grayscale', 'sepia', 'darkSchemeBackgroundColor', 'darkSchemeTextColor', 'lightSchemeBackgroundColor', 'lightSchemeTextColor']; + function getCacheId(rgb, theme) { + var resultId = ''; + rgbCacheKeys.forEach(function (key) { + resultId += "".concat(rgb[key], ";"); + }); + themeCacheKeys$1.forEach(function (key) { + resultId += "".concat(theme[key], ";"); + }); + return resultId; + } + function modifyColorWithCache(rgb, theme, modifyHSL, poleColor, anotherPoleColor) { + var fnCache; + if (colorModificationCache.has(modifyHSL)) { + fnCache = colorModificationCache.get(modifyHSL); + } + else { + fnCache = new Map(); + colorModificationCache.set(modifyHSL, fnCache); + } + var id = getCacheId(rgb, theme); + if (fnCache.has(id)) { + return fnCache.get(id); + } + var hsl = rgbToHSL(rgb); + var pole = poleColor == null ? null : parseToHSLWithCache(poleColor); + var anotherPole = anotherPoleColor == null ? null : parseToHSLWithCache(anotherPoleColor); + var modified = modifyHSL(hsl, pole, anotherPole); + var _a = hslToRGB(modified), r = _a.r, g = _a.g, b = _a.b, a = _a.a; + var matrix = createFilterMatrix(theme); + var _b = __read(applyColorMatrix([r, g, b], matrix), 3), rf = _b[0], gf = _b[1], bf = _b[2]; + var color = (a === 1 ? + rgbToHexString({ r: rf, g: gf, b: bf }) : + rgbToString({ r: rf, g: gf, b: bf, a: a })); + fnCache.set(id, color); + return color; + } + function noopHSL(hsl) { + return hsl; + } + function modifyColor(rgb, theme) { + return modifyColorWithCache(rgb, theme, noopHSL); + } + function modifyLightSchemeColor(rgb, theme) { + var poleBg = getBgPole(theme); + var poleFg = getFgPole(theme); + return modifyColorWithCache(rgb, theme, modifyLightModeHSL, poleFg, poleBg); + } + function modifyLightModeHSL(_a, poleFg, poleBg) { + var h = _a.h, s = _a.s, l = _a.l, a = _a.a; + var isDark = l < 0.5; + var isNeutral; + if (isDark) { + isNeutral = l < 0.2 || s < 0.12; + } + else { + var isBlue = h > 200 && h < 280; + isNeutral = s < 0.24 || (l > 0.8 && isBlue); + } + var hx = h; + var sx = l; + if (isNeutral) { + if (isDark) { + hx = poleFg.h; + sx = poleFg.s; + } + else { + hx = poleBg.h; + sx = poleBg.s; + } + } + var lx = scale(l, 0, 1, poleFg.l, poleBg.l); + return { h: hx, s: sx, l: lx, a: a }; + } + var MAX_BG_LIGHTNESS = 0.4; + function modifyBgHSL(_a, pole) { + var h = _a.h, s = _a.s, l = _a.l, a = _a.a; + var isDark = l < 0.5; + var isBlue = h > 200 && h < 280; + var isNeutral = s < 0.12 || (l > 0.8 && isBlue); + if (isDark) { + var lx_1 = scale(l, 0, 0.5, 0, MAX_BG_LIGHTNESS); + if (isNeutral) { + var hx_1 = pole.h; + var sx = pole.s; + return { h: hx_1, s: sx, l: lx_1, a: a }; + } + return { h: h, s: s, l: lx_1, a: a }; + } + var lx = scale(l, 0.5, 1, MAX_BG_LIGHTNESS, pole.l); + if (isNeutral) { + var hx_2 = pole.h; + var sx = pole.s; + return { h: hx_2, s: sx, l: lx, a: a }; + } + var hx = h; + var isYellow = h > 60 && h < 180; + if (isYellow) { + var isCloserToGreen = h > 120; + if (isCloserToGreen) { + hx = scale(h, 120, 180, 135, 180); + } + else { + hx = scale(h, 60, 120, 60, 105); + } + } + if (hx > 40 && hx < 80) { + lx *= 0.75; + } + return { h: hx, s: s, l: lx, a: a }; + } + function modifyBackgroundColor(rgb, theme) { + if (theme.mode === 0) { + return modifyLightSchemeColor(rgb, theme); + } + var pole = getBgPole(theme); + return modifyColorWithCache(rgb, __assign(__assign({}, theme), { mode: 0 }), modifyBgHSL, pole); + } + var MIN_FG_LIGHTNESS = 0.55; + function modifyBlueFgHue(hue) { + return scale(hue, 205, 245, 205, 220); + } + function modifyFgHSL(_a, pole) { + var h = _a.h, s = _a.s, l = _a.l, a = _a.a; + var isLight = l > 0.5; + var isNeutral = l < 0.2 || s < 0.24; + var isBlue = !isNeutral && h > 205 && h < 245; + if (isLight) { + var lx_2 = scale(l, 0.5, 1, MIN_FG_LIGHTNESS, pole.l); + if (isNeutral) { + var hx_3 = pole.h; + var sx = pole.s; + return { h: hx_3, s: sx, l: lx_2, a: a }; + } + var hx_4 = h; + if (isBlue) { + hx_4 = modifyBlueFgHue(h); + } + return { h: hx_4, s: s, l: lx_2, a: a }; + } + if (isNeutral) { + var hx_5 = pole.h; + var sx = pole.s; + var lx_3 = scale(l, 0, 0.5, pole.l, MIN_FG_LIGHTNESS); + return { h: hx_5, s: sx, l: lx_3, a: a }; + } + var hx = h; + var lx; + if (isBlue) { + hx = modifyBlueFgHue(h); + lx = scale(l, 0, 0.5, pole.l, Math.min(1, MIN_FG_LIGHTNESS + 0.05)); + } + else { + lx = scale(l, 0, 0.5, pole.l, MIN_FG_LIGHTNESS); + } + return { h: hx, s: s, l: lx, a: a }; + } + function modifyForegroundColor(rgb, theme) { + if (theme.mode === 0) { + return modifyLightSchemeColor(rgb, theme); + } + var pole = getFgPole(theme); + return modifyColorWithCache(rgb, __assign(__assign({}, theme), { mode: 0 }), modifyFgHSL, pole); + } + function modifyBorderHSL(_a, poleFg, poleBg) { + var h = _a.h, s = _a.s, l = _a.l, a = _a.a; + var isDark = l < 0.5; + var isNeutral = l < 0.2 || s < 0.24; + var hx = h; + var sx = s; + if (isNeutral) { + if (isDark) { + hx = poleFg.h; + sx = poleFg.s; + } + else { + hx = poleBg.h; + sx = poleBg.s; + } + } + var lx = scale(l, 0, 1, 0.5, 0.2); + return { h: hx, s: sx, l: lx, a: a }; + } + function modifyBorderColor(rgb, theme) { + if (theme.mode === 0) { + return modifyLightSchemeColor(rgb, theme); + } + var poleFg = getFgPole(theme); + var poleBg = getBgPole(theme); + return modifyColorWithCache(rgb, __assign(__assign({}, theme), { mode: 0 }), modifyBorderHSL, poleFg, poleBg); + } + function modifyShadowColor(rgb, filter) { + return modifyBackgroundColor(rgb, filter); + } + function modifyGradientColor(rgb, filter) { + return modifyBackgroundColor(rgb, filter); + } + + function createTextStyle(config) { + var lines = []; + lines.push('*:not(pre, pre *, code, .far, .fa, .glyphicon, [class*="vjs-"], .fab, .fa-github, .fas, .material-icons, .icofont, .typcn, mu, [class*="mu-"], .glyphicon, .icon) {'); + if (config.useFont && config.fontFamily) { + lines.push(" font-family: ".concat(config.fontFamily, " !important;")); + } + if (config.textStroke > 0) { + lines.push(" -webkit-text-stroke: ".concat(config.textStroke, "px !important;")); + lines.push(" text-stroke: ".concat(config.textStroke, "px !important;")); + } + lines.push('}'); + return lines.join('\n'); + } + + var FilterMode; + (function (FilterMode) { + FilterMode[FilterMode["light"] = 0] = "light"; + FilterMode[FilterMode["dark"] = 1] = "dark"; + })(FilterMode || (FilterMode = {})); + function getCSSFilterValue(config) { + var filters = []; + if (config.mode === FilterMode.dark) { + filters.push('invert(100%) hue-rotate(180deg)'); + } + if (config.brightness !== 100) { + filters.push("brightness(".concat(config.brightness, "%)")); + } + if (config.contrast !== 100) { + filters.push("contrast(".concat(config.contrast, "%)")); + } + if (config.grayscale !== 0) { + filters.push("grayscale(".concat(config.grayscale, "%)")); + } + if (config.sepia !== 0) { + filters.push("sepia(".concat(config.sepia, "%)")); + } + if (filters.length === 0) { + return null; + } + return filters.join(' '); + } + + function toSVGMatrix(matrix) { + return matrix.slice(0, 4).map(function (m) { return m.map(function (m) { return m.toFixed(3); }).join(' '); }).join(' '); + } + function getSVGFilterMatrixValue(config) { + return toSVGMatrix(createFilterMatrix(config)); + } + + var counter = 0; + var resolvers$1 = new Map(); + var rejectors = new Map(); + function bgFetch(request) { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2, new Promise(function (resolve, reject) { + var id = ++counter; + resolvers$1.set(id, resolve); + rejectors.set(id, reject); + chrome.runtime.sendMessage({ type: MessageType.CS_FETCH, data: request, id: id }); + })]; + }); + }); + } + chrome.runtime.onMessage.addListener(function (_a) { + var type = _a.type, data = _a.data, error = _a.error, id = _a.id; + if (type === MessageType.BG_FETCH_RESPONSE) { + var resolve = resolvers$1.get(id); + var reject = rejectors.get(id); + resolvers$1.delete(id); + rejectors.delete(id); + if (error) { + reject && reject(error); + } + else { + resolve && resolve(data); + } + } + }); + + var AsyncQueue = (function () { + function AsyncQueue() { + this.queue = []; + this.timerId = null; + this.frameDuration = 1000 / 60; + } + AsyncQueue.prototype.addToQueue = function (entry) { + this.queue.push(entry); + this.startQueue(); + }; + AsyncQueue.prototype.stopQueue = function () { + if (this.timerId !== null) { + cancelAnimationFrame(this.timerId); + this.timerId = null; + } + this.queue = []; + }; + AsyncQueue.prototype.startQueue = function () { + var _this = this; + if (this.timerId) { + return; + } + this.timerId = requestAnimationFrame(function () { + _this.timerId = null; + var start = Date.now(); + var cb; + while ((cb = _this.queue.shift())) { + cb(); + if (Date.now() - start >= _this.frameDuration) { + _this.startQueue(); + break; + } + } + }); + }; + return AsyncQueue; + }()); + + var imageManager = new AsyncQueue(); + function getImageDetails(url) { + return __awaiter(this, void 0, void 0, function () { + var _this = this; + return __generator(this, function (_a) { + return [2, new Promise(function (resolve, reject) { return __awaiter(_this, void 0, void 0, function () { + var dataURL, error_1, image_1, error_2; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + if (!url.startsWith('data:')) return [3, 1]; + dataURL = url; + return [3, 4]; + case 1: + _a.trys.push([1, 3, , 4]); + return [4, getImageDataURL(url)]; + case 2: + dataURL = _a.sent(); + return [3, 4]; + case 3: + error_1 = _a.sent(); + reject(error_1); + return [2]; + case 4: + _a.trys.push([4, 6, , 7]); + return [4, urlToImage(dataURL)]; + case 5: + image_1 = _a.sent(); + imageManager.addToQueue(function () { + resolve(__assign({ src: url, dataURL: dataURL, width: image_1.naturalWidth, height: image_1.naturalHeight }, analyzeImage(image_1))); + }); + return [3, 7]; + case 6: + error_2 = _a.sent(); + reject(error_2); + return [3, 7]; + case 7: return [2]; + } + }); + }); })]; + }); + }); + } + function getImageDataURL(url) { + return __awaiter(this, void 0, void 0, function () { + var parsedURL; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + parsedURL = new URL(url); + if (!(parsedURL.origin === location.origin)) return [3, 2]; + return [4, loadAsDataURL(url)]; + case 1: return [2, _a.sent()]; + case 2: return [4, bgFetch({ url: url, responseType: 'data-url' })]; + case 3: return [2, _a.sent()]; + } + }); + }); + } + function urlToImage(url) { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2, new Promise(function (resolve, reject) { + var image = new Image(); + image.onload = function () { return resolve(image); }; + image.onerror = function () { return reject("Unable to load image ".concat(url)); }; + image.src = url; + })]; + }); + }); + } + var MAX_ANALIZE_PIXELS_COUNT = 32 * 32; + var canvas; + var context; + function createCanvas() { + var maxWidth = MAX_ANALIZE_PIXELS_COUNT; + var maxHeight = MAX_ANALIZE_PIXELS_COUNT; + canvas = document.createElement('canvas'); + canvas.width = maxWidth; + canvas.height = maxHeight; + context = canvas.getContext('2d'); + context.imageSmoothingEnabled = false; + } + function removeCanvas() { + canvas = null; + context = null; + } + var MAX_IMAGE_SIZE = 5 * 1024 * 1024; + function analyzeImage(image) { + if (!canvas) { + createCanvas(); + } + var naturalWidth = image.naturalWidth, naturalHeight = image.naturalHeight; + if (naturalHeight === 0 || naturalWidth === 0) { + logWarn("logWarn(Image is empty ".concat(image.currentSrc, ")")); + return null; + } + var size = naturalWidth * naturalHeight * 4; + if (size > MAX_IMAGE_SIZE) { + logInfo('Skipped large image analyzing(Larger than 5mb in memory)'); + return { + isDark: false, + isLight: false, + isTransparent: false, + isLarge: false, + isTooLarge: true, + }; + } + var naturalPixelsCount = naturalWidth * naturalHeight; + var k = Math.min(1, Math.sqrt(MAX_ANALIZE_PIXELS_COUNT / naturalPixelsCount)); + var width = Math.ceil(naturalWidth * k); + var height = Math.ceil(naturalHeight * k); + context.clearRect(0, 0, width, height); + context.drawImage(image, 0, 0, naturalWidth, naturalHeight, 0, 0, width, height); + var imageData = context.getImageData(0, 0, width, height); + var d = imageData.data; + var TRANSPARENT_ALPHA_THRESHOLD = 0.05; + var DARK_LIGHTNESS_THRESHOLD = 0.4; + var LIGHT_LIGHTNESS_THRESHOLD = 0.7; + var transparentPixelsCount = 0; + var darkPixelsCount = 0; + var lightPixelsCount = 0; + var i, x, y; + var r, g, b, a; + var l; + for (y = 0; y < height; y++) { + for (x = 0; x < width; x++) { + i = 4 * (y * width + x); + r = d[i + 0]; + g = d[i + 1]; + b = d[i + 2]; + a = d[i + 3]; + if (a / 255 < TRANSPARENT_ALPHA_THRESHOLD) { + transparentPixelsCount++; + } + else { + l = getSRGBLightness(r, g, b); + if (l < DARK_LIGHTNESS_THRESHOLD) { + darkPixelsCount++; + } + if (l > LIGHT_LIGHTNESS_THRESHOLD) { + lightPixelsCount++; + } + } + } + } + var totalPixelsCount = width * height; + var opaquePixelsCount = totalPixelsCount - transparentPixelsCount; + var DARK_IMAGE_THRESHOLD = 0.7; + var LIGHT_IMAGE_THRESHOLD = 0.7; + var TRANSPARENT_IMAGE_THRESHOLD = 0.1; + var LARGE_IMAGE_PIXELS_COUNT = 800 * 600; + return { + isDark: ((darkPixelsCount / opaquePixelsCount) >= DARK_IMAGE_THRESHOLD), + isLight: ((lightPixelsCount / opaquePixelsCount) >= LIGHT_IMAGE_THRESHOLD), + isTransparent: ((transparentPixelsCount / totalPixelsCount) >= TRANSPARENT_IMAGE_THRESHOLD), + isLarge: (naturalPixelsCount >= LARGE_IMAGE_PIXELS_COUNT), + isTooLarge: false, + }; + } + function getFilteredImageDataURL(_a, theme) { + var dataURL = _a.dataURL, width = _a.width, height = _a.height; + var matrix = getSVGFilterMatrixValue(theme); + var svg = [ + ""), + '', + '', + ""), + '', + '', + ""), + '', + ].join(''); + return "data:image/svg+xml;base64,".concat(btoa(svg)); + } + function cleanImageProcessingCache() { + imageManager && imageManager.stopQueue(); + removeCanvas(); + } + + var gradientLength = 'gradient'.length; + var conicGradient = 'conic-'; + var conicGradientLength = conicGradient.length; + var radialGradient = 'radial-'; + var linearGradient = 'linear-'; + function parseGradient(value) { + var result = []; + var index = 0; + var startIndex = conicGradient.length; + var _loop_1 = function () { + var typeGradient; + [linearGradient, radialGradient, conicGradient].find(function (possibleType) { + if (index - possibleType.length >= 0) { + var possibleGradient = value.substring(index - possibleType.length, index); + if (possibleGradient === possibleType) { + if (value.slice(index - possibleType.length - 10, index - possibleType.length - 1) === 'repeating') { + typeGradient = "repeating-".concat(possibleType, "gradient"); + return true; + } + if (value.slice(index - possibleType.length - 8, index - possibleType.length - 1) === '-webkit') { + typeGradient = "-webkit-".concat(possibleType, "gradient"); + return true; + } + typeGradient = "".concat(possibleType, "gradient"); + return true; + } + } + }); + if (!typeGradient) { + return "break"; + } + var _a = getParenthesesRange(value, index + gradientLength), start = _a.start, end = _a.end; + var match = value.substring(start + 1, end - 1); + startIndex = end + 1 + conicGradientLength; + result.push({ + typeGradient: typeGradient, + match: match, + offset: typeGradient.length + 2, + index: index - typeGradient.length + gradientLength, + hasComma: true, + }); + }; + while ((index = value.indexOf('gradient', startIndex)) !== -1) { + var state_1 = _loop_1(); + if (state_1 === "break") + break; + } + if (result.length) { + result[result.length - 1].hasComma = false; + } + return result; + } + + function getPriority(ruleStyle, property) { + return Boolean(ruleStyle && ruleStyle.getPropertyPriority(property)); + } + function getModifiableCSSDeclaration(property, value, rule, variablesStore, ignoreImageSelectors, isCancelled) { + if (property.startsWith('--')) { + var modifier = getVariableModifier(variablesStore, property, value, rule, ignoreImageSelectors, isCancelled); + if (modifier) { + return { property: property, value: modifier, important: getPriority(rule.style, property), sourceValue: value }; + } + } + else if (value.includes('var(')) { + var modifier = getVariableDependantModifier(variablesStore, property, value); + if (modifier) { + return { property: property, value: modifier, important: getPriority(rule.style, property), sourceValue: value }; + } + } + else if ((property.includes('color') && property !== '-webkit-print-color-adjust') || + property === 'fill' || + property === 'stroke' || + property === 'stop-color') { + var modifier = getColorModifier(property, value); + if (modifier) { + return { property: property, value: modifier, important: getPriority(rule.style, property), sourceValue: value }; + } + } + else if (property === 'background-image' || property === 'list-style-image') { + var modifier = getBgImageModifier(value, rule, ignoreImageSelectors, isCancelled); + if (modifier) { + return { property: property, value: modifier, important: getPriority(rule.style, property), sourceValue: value }; + } + } + else if (property.includes('shadow')) { + var modifier = getShadowModifier(value); + if (modifier) { + return { property: property, value: modifier, important: getPriority(rule.style, property), sourceValue: value }; + } + } + return null; + } + function joinSelectors() { + var selectors = []; + for (var _i = 0; _i < arguments.length; _i++) { + selectors[_i] = arguments[_i]; + } + return selectors.filter(Boolean).join(', '); + } + function getModifiedUserAgentStyle(theme, isIFrame, styleSystemControls) { + var lines = []; + if (!isIFrame) { + lines.push('html {'); + lines.push(" background-color: ".concat(modifyBackgroundColor({ r: 255, g: 255, b: 255 }, theme), " !important;")); + lines.push('}'); + } + if (isCSSColorSchemePropSupported) { + lines.push('html {'); + lines.push(" color-scheme: ".concat(theme.mode === 1 ? 'dark' : 'dark light', " !important;")); + lines.push('}'); + } + var bgSelectors = joinSelectors(isIFrame ? '' : 'html, body', styleSystemControls ? 'input, textarea, select, button' : ''); + if (bgSelectors) { + lines.push("".concat(bgSelectors, " {")); + lines.push(" background-color: ".concat(modifyBackgroundColor({ r: 255, g: 255, b: 255 }, theme), ";")); + lines.push('}'); + } + lines.push("".concat(joinSelectors('html, body', styleSystemControls ? 'input, textarea, select, button' : ''), " {")); + lines.push(" border-color: ".concat(modifyBorderColor({ r: 76, g: 76, b: 76 }, theme), ";")); + lines.push(" color: ".concat(modifyForegroundColor({ r: 0, g: 0, b: 0 }, theme), ";")); + lines.push('}'); + lines.push('a {'); + lines.push(" color: ".concat(modifyForegroundColor({ r: 0, g: 64, b: 255 }, theme), ";")); + lines.push('}'); + lines.push('table {'); + lines.push(" border-color: ".concat(modifyBorderColor({ r: 128, g: 128, b: 128 }, theme), ";")); + lines.push('}'); + lines.push('::placeholder {'); + lines.push(" color: ".concat(modifyForegroundColor({ r: 169, g: 169, b: 169 }, theme), ";")); + lines.push('}'); + lines.push('input:-webkit-autofill,'); + lines.push('textarea:-webkit-autofill,'); + lines.push('select:-webkit-autofill {'); + lines.push(" background-color: ".concat(modifyBackgroundColor({ r: 250, g: 255, b: 189 }, theme), " !important;")); + lines.push(" color: ".concat(modifyForegroundColor({ r: 0, g: 0, b: 0 }, theme), " !important;")); + lines.push('}'); + if (theme.scrollbarColor) { + lines.push(getModifiedScrollbarStyle(theme)); + } + if (theme.selectionColor) { + lines.push(getModifiedSelectionStyle(theme)); + } + return lines.join('\n'); + } + function getSelectionColor(theme) { + var backgroundColorSelection; + var foregroundColorSelection; + if (theme.selectionColor === 'auto') { + backgroundColorSelection = modifyBackgroundColor({ r: 0, g: 96, b: 212 }, __assign(__assign({}, theme), { grayscale: 0 })); + foregroundColorSelection = modifyForegroundColor({ r: 255, g: 255, b: 255 }, __assign(__assign({}, theme), { grayscale: 0 })); + } + else { + var rgb = parse(theme.selectionColor); + var hsl = rgbToHSL(rgb); + backgroundColorSelection = theme.selectionColor; + if (hsl.l < 0.5) { + foregroundColorSelection = '#FFF'; + } + else { + foregroundColorSelection = '#000'; + } + } + return { backgroundColorSelection: backgroundColorSelection, foregroundColorSelection: foregroundColorSelection }; + } + function getModifiedSelectionStyle(theme) { + var lines = []; + var modifiedSelectionColor = getSelectionColor(theme); + var backgroundColorSelection = modifiedSelectionColor.backgroundColorSelection; + var foregroundColorSelection = modifiedSelectionColor.foregroundColorSelection; + ['::selection', '::-moz-selection'].forEach(function (selection) { + lines.push("".concat(selection, " {")); + lines.push(" background-color: ".concat(backgroundColorSelection, " !important;")); + lines.push(" color: ".concat(foregroundColorSelection, " !important;")); + lines.push('}'); + }); + return lines.join('\n'); + } + function getModifiedScrollbarStyle(theme) { + var lines = []; + var colorTrack; + var colorIcons; + var colorThumb; + var colorThumbHover; + var colorThumbActive; + var colorCorner; + if (theme.scrollbarColor === 'auto') { + colorTrack = modifyBackgroundColor({ r: 241, g: 241, b: 241 }, theme); + colorIcons = modifyForegroundColor({ r: 96, g: 96, b: 96 }, theme); + colorThumb = modifyBackgroundColor({ r: 176, g: 176, b: 176 }, theme); + colorThumbHover = modifyBackgroundColor({ r: 144, g: 144, b: 144 }, theme); + colorThumbActive = modifyBackgroundColor({ r: 96, g: 96, b: 96 }, theme); + colorCorner = modifyBackgroundColor({ r: 255, g: 255, b: 255 }, theme); + } + else { + var rgb = parse(theme.scrollbarColor); + var hsl_1 = rgbToHSL(rgb); + var isLight = hsl_1.l > 0.5; + var lighten = function (lighter) { return (__assign(__assign({}, hsl_1), { l: clamp(hsl_1.l + lighter, 0, 1) })); }; + var darken = function (darker) { return (__assign(__assign({}, hsl_1), { l: clamp(hsl_1.l - darker, 0, 1) })); }; + colorTrack = hslToString(darken(0.4)); + colorIcons = hslToString(isLight ? darken(0.4) : lighten(0.4)); + colorThumb = hslToString(hsl_1); + colorThumbHover = hslToString(lighten(0.1)); + colorThumbActive = hslToString(lighten(0.2)); + } + lines.push('::-webkit-scrollbar {'); + lines.push(" background-color: ".concat(colorTrack, ";")); + lines.push(" color: ".concat(colorIcons, ";")); + lines.push('}'); + lines.push('::-webkit-scrollbar-thumb {'); + lines.push(" background-color: ".concat(colorThumb, ";")); + lines.push('}'); + lines.push('::-webkit-scrollbar-thumb:hover {'); + lines.push(" background-color: ".concat(colorThumbHover, ";")); + lines.push('}'); + lines.push('::-webkit-scrollbar-thumb:active {'); + lines.push(" background-color: ".concat(colorThumbActive, ";")); + lines.push('}'); + lines.push('::-webkit-scrollbar-corner {'); + lines.push(" background-color: ".concat(colorCorner, ";")); + lines.push('}'); + if (isFirefox) { + lines.push('* {'); + lines.push(" scrollbar-color: ".concat(colorThumb, " ").concat(colorTrack, ";")); + lines.push('}'); + } + return lines.join('\n'); + } + function getModifiedFallbackStyle(filter, _a) { + var strict = _a.strict; + var lines = []; + var isMicrosoft = ['microsoft.com', 'docs.microsoft.com'].includes(location.hostname); + lines.push("html, body, ".concat(strict ? "body :not(iframe)".concat(isMicrosoft ? ':not(div[style^="position:absolute;top:0;left:-"]' : '') : 'body > :not(iframe)', " {")); + lines.push(" background-color: ".concat(modifyBackgroundColor({ r: 255, g: 255, b: 255 }, filter), " !important;")); + lines.push(" border-color: ".concat(modifyBorderColor({ r: 64, g: 64, b: 64 }, filter), " !important;")); + lines.push(" color: ".concat(modifyForegroundColor({ r: 0, g: 0, b: 0 }, filter), " !important;")); + lines.push('}'); + return lines.join('\n'); + } + var unparsableColors = new Set([ + 'inherit', + 'transparent', + 'initial', + 'currentcolor', + 'none', + 'unset', + ]); + var colorParseCache = new Map(); + function parseColorWithCache($color) { + $color = $color.trim(); + if (colorParseCache.has($color)) { + return colorParseCache.get($color); + } + if ($color.includes('calc(')) { + $color = lowerCalcExpression($color); + } + var color = parse($color); + colorParseCache.set($color, color); + return color; + } + function tryParseColor($color) { + try { + return parseColorWithCache($color); + } + catch (err) { + return null; + } + } + function getColorModifier(prop, value) { + if (unparsableColors.has(value.toLowerCase())) { + return value; + } + try { + var rgb_1 = parseColorWithCache(value); + if (prop.includes('background')) { + return function (filter) { return modifyBackgroundColor(rgb_1, filter); }; + } + if (prop.includes('border') || prop.includes('outline')) { + return function (filter) { return modifyBorderColor(rgb_1, filter); }; + } + return function (filter) { return modifyForegroundColor(rgb_1, filter); }; + } + catch (err) { + logWarn('Color parse error', err); + return null; + } + } + var imageDetailsCache = new Map(); + var awaitingForImageLoading = new Map(); + function shouldIgnoreImage(selectorText, selectors) { + if (!selectorText || selectors.length === 0) { + return false; + } + if (selectors.some(function (s) { return s === '*'; })) { + return true; + } + var ruleSelectors = selectorText.split(/,\s*/g); + var _loop_1 = function (i) { + var ignoredSelector = selectors[i]; + if (ruleSelectors.some(function (s) { return s === ignoredSelector; })) { + return { value: true }; + } + }; + for (var i = 0; i < selectors.length; i++) { + var state_1 = _loop_1(i); + if (typeof state_1 === "object") + return state_1.value; + } + return false; + } + function getBgImageModifier(value, rule, ignoreImageSelectors, isCancelled) { + var _this = this; + try { + var gradients = parseGradient(value); + var urls = getMatches(cssURLRegex, value); + if (urls.length === 0 && gradients.length === 0) { + return value; + } + var getIndices = function (matches) { + var index = 0; + return matches.map(function (match) { + var valueIndex = value.indexOf(match, index); + index = valueIndex + match.length; + return { match: match, index: valueIndex }; + }); + }; + var matches_1 = gradients.map(function (i) { return (__assign({ type: 'gradient' }, i)); }) + .concat(getIndices(urls).map(function (i) { return (__assign({ type: 'url', offset: 0 }, i)); })) + .sort(function (a, b) { return a.index > b.index ? 1 : -1; }); + var getGradientModifier_1 = function (gradient) { + var typeGradient = gradient.typeGradient, match = gradient.match, hasComma = gradient.hasComma; + var partsRegex = /([^\(\),]+(\([^\(\)]*(\([^\(\)]*\)*[^\(\)]*)?\))?[^\(\),]*),?/g; + var colorStopRegex = /^(from|color-stop|to)\(([^\(\)]*?,\s*)?(.*?)\)$/; + var parts = getMatches(partsRegex, match, 1).map(function (part) { + part = part.trim(); + var rgb = tryParseColor(part); + if (rgb) { + return function (filter) { return modifyGradientColor(rgb, filter); }; + } + var space = part.lastIndexOf(' '); + rgb = tryParseColor(part.substring(0, space)); + if (rgb) { + return function (filter) { return "".concat(modifyGradientColor(rgb, filter), " ").concat(part.substring(space + 1)); }; + } + var colorStopMatch = part.match(colorStopRegex); + if (colorStopMatch) { + rgb = tryParseColor(colorStopMatch[3]); + if (rgb) { + return function (filter) { return "".concat(colorStopMatch[1], "(").concat(colorStopMatch[2] ? "".concat(colorStopMatch[2], ", ") : '').concat(modifyGradientColor(rgb, filter), ")"); }; + } + } + return function () { return part; }; + }); + return function (filter) { + return "".concat(typeGradient, "(").concat(parts.map(function (modify) { return modify(filter); }).join(', '), ")").concat(hasComma ? ', ' : ''); + }; + }; + var getURLModifier_1 = function (urlValue) { + var _a; + if (shouldIgnoreImage(rule.selectorText, ignoreImageSelectors)) { + return null; + } + var url = getCSSURLValue(urlValue); + var parentStyleSheet = rule.parentStyleSheet; + var baseURL = (parentStyleSheet && parentStyleSheet.href) ? + getCSSBaseBath(parentStyleSheet.href) : + ((_a = parentStyleSheet.ownerNode) === null || _a === void 0 ? void 0 : _a.baseURI) || location.origin; + url = getAbsoluteURL(baseURL, url); + var absoluteValue = "url(\"".concat(url, "\")"); + return function (filter) { return __awaiter(_this, void 0, void 0, function () { + var imageDetails, awaiters_1, err_1, bgImageValue; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + if (!imageDetailsCache.has(url)) return [3, 1]; + imageDetails = imageDetailsCache.get(url); + return [3, 7]; + case 1: + _a.trys.push([1, 6, , 7]); + if (!awaitingForImageLoading.has(url)) return [3, 3]; + awaiters_1 = awaitingForImageLoading.get(url); + return [4, new Promise(function (resolve) { return awaiters_1.push(resolve); })]; + case 2: + imageDetails = _a.sent(); + if (!imageDetails) { + return [2, null]; + } + return [3, 5]; + case 3: + awaitingForImageLoading.set(url, []); + return [4, getImageDetails(url)]; + case 4: + imageDetails = _a.sent(); + imageDetailsCache.set(url, imageDetails); + awaitingForImageLoading.get(url).forEach(function (resolve) { return resolve(imageDetails); }); + awaitingForImageLoading.delete(url); + _a.label = 5; + case 5: + if (isCancelled()) { + return [2, null]; + } + return [3, 7]; + case 6: + err_1 = _a.sent(); + logWarn(err_1); + if (awaitingForImageLoading.has(url)) { + awaitingForImageLoading.get(url).forEach(function (resolve) { return resolve(null); }); + awaitingForImageLoading.delete(url); + } + return [2, absoluteValue]; + case 7: + bgImageValue = getBgImageValue_1(imageDetails, filter) || absoluteValue; + return [2, bgImageValue]; + } + }); + }); }; + }; + var getBgImageValue_1 = function (imageDetails, filter) { + var isDark = imageDetails.isDark, isLight = imageDetails.isLight, isTransparent = imageDetails.isTransparent, isLarge = imageDetails.isLarge, isTooLarge = imageDetails.isTooLarge, width = imageDetails.width; + var result; + if (isTooLarge) { + result = "url(\"".concat(imageDetails.src, "\")"); + } + else if (isDark && isTransparent && filter.mode === 1 && !isLarge && width > 2) { + logInfo("Inverting dark image ".concat(imageDetails.src)); + var inverted = getFilteredImageDataURL(imageDetails, __assign(__assign({}, filter), { sepia: clamp(filter.sepia + 10, 0, 100) })); + result = "url(\"".concat(inverted, "\")"); + } + else if (isLight && !isTransparent && filter.mode === 1) { + if (isLarge) { + result = 'none'; + } + else { + logInfo("Dimming light image ".concat(imageDetails.src)); + var dimmed = getFilteredImageDataURL(imageDetails, filter); + result = "url(\"".concat(dimmed, "\")"); + } + } + else if (filter.mode === 0 && isLight && !isLarge) { + logInfo("Applying filter to image ".concat(imageDetails.src)); + var filtered = getFilteredImageDataURL(imageDetails, __assign(__assign({}, filter), { brightness: clamp(filter.brightness - 10, 5, 200), sepia: clamp(filter.sepia + 10, 0, 100) })); + result = "url(\"".concat(filtered, "\")"); + } + else { + result = null; + } + return result; + }; + var modifiers_1 = []; + var matchIndex_1 = 0; + matches_1.forEach(function (_a, i) { + var type = _a.type, match = _a.match, index = _a.index, typeGradient = _a.typeGradient, hasComma = _a.hasComma, offset = _a.offset; + var matchStart = index; + var prefixStart = matchIndex_1; + var matchEnd = matchStart + match.length + offset; + matchIndex_1 = matchEnd; + prefixStart !== matchStart && modifiers_1.push(function () { return value.substring(prefixStart, matchStart); }); + if (type === 'url') { + modifiers_1.push(getURLModifier_1(match)); + } + else if (type === 'gradient') { + modifiers_1.push(getGradientModifier_1({ match: match, index: index, typeGradient: typeGradient, hasComma: hasComma, offset: offset })); + } + if (i === matches_1.length - 1) { + modifiers_1.push(function () { return value.substring(matchEnd); }); + } + }); + return function (filter) { + var results = modifiers_1.filter(Boolean).map(function (modify) { return modify(filter); }); + if (results.some(function (r) { return r instanceof Promise; })) { + return Promise.all(results).then(function (asyncResults) { + return asyncResults.filter(Boolean).join(''); + }); + } + return results.join(''); + }; + } + catch (err) { + logWarn("Unable to parse gradient ".concat(value), err); + return null; + } + } + function getShadowModifierWithInfo(value) { + try { + var index_1 = 0; + var colorMatches_1 = getMatches(/(^|\s)(?!calc)([a-z]+\(.+?\)|#[0-9a-f]+|[a-z]+)(.*?(inset|outset)?($|,))/ig, value, 2); + var notParsed_1 = 0; + var modifiers_2 = colorMatches_1.map(function (match, i) { + var prefixIndex = index_1; + var matchIndex = value.indexOf(match, index_1); + var matchEnd = matchIndex + match.length; + index_1 = matchEnd; + var rgb = tryParseColor(match); + if (!rgb) { + notParsed_1++; + return function () { return value.substring(prefixIndex, matchEnd); }; + } + return function (filter) { return "".concat(value.substring(prefixIndex, matchIndex)).concat(modifyShadowColor(rgb, filter)).concat(i === colorMatches_1.length - 1 ? value.substring(matchEnd) : ''); }; + }); + return function (filter) { + var modified = modifiers_2.map(function (modify) { return modify(filter); }).join(''); + return { + matchesLength: colorMatches_1.length, + unparseableMatchesLength: notParsed_1, + result: modified, + }; + }; + } + catch (err) { + logWarn("Unable to parse shadow ".concat(value), err); + return null; + } + } + function getShadowModifier(value) { + var shadowModifier = getShadowModifierWithInfo(value); + if (!shadowModifier) { + return null; + } + return function (theme) { return shadowModifier(theme).result; }; + } + function getVariableModifier(variablesStore, prop, value, rule, ignoredImgSelectors, isCancelled) { + return variablesStore.getModifierForVariable({ + varName: prop, + sourceValue: value, + rule: rule, + ignoredImgSelectors: ignoredImgSelectors, + isCancelled: isCancelled, + }); + } + function getVariableDependantModifier(variablesStore, prop, value) { + return variablesStore.getModifierForVarDependant(prop, value); + } + function cleanModificationCache() { + colorParseCache.clear(); + clearColorModificationCache(); + imageDetailsCache.clear(); + cleanImageProcessingCache(); + awaitingForImageLoading.clear(); + } + + var VAR_TYPE_BGCOLOR = 1 << 0; + var VAR_TYPE_TEXTCOLOR = 1 << 1; + var VAR_TYPE_BORDERCOLOR = 1 << 2; + var VAR_TYPE_BGIMG = 1 << 3; + var VariablesStore = (function () { + function VariablesStore() { + this.varTypes = new Map(); + this.rulesQueue = []; + this.definedVars = new Set(); + this.varRefs = new Map(); + this.unknownColorVars = new Set(); + this.unknownBgVars = new Set(); + this.undefinedVars = new Set(); + this.initialVarTypes = new Map(); + this.changedTypeVars = new Set(); + this.typeChangeSubscriptions = new Map(); + this.unstableVarValues = new Map(); + } + VariablesStore.prototype.clear = function () { + this.varTypes.clear(); + this.rulesQueue.splice(0); + this.definedVars.clear(); + this.varRefs.clear(); + this.unknownColorVars.clear(); + this.unknownBgVars.clear(); + this.undefinedVars.clear(); + this.initialVarTypes.clear(); + this.changedTypeVars.clear(); + this.typeChangeSubscriptions.clear(); + this.unstableVarValues.clear(); + }; + VariablesStore.prototype.isVarType = function (varName, typeNum) { + return (this.varTypes.has(varName) && + (this.varTypes.get(varName) & typeNum) > 0); + }; + VariablesStore.prototype.addRulesForMatching = function (rules) { + this.rulesQueue.push(rules); + }; + VariablesStore.prototype.matchVariablesAndDependants = function () { + var _this = this; + this.changedTypeVars.clear(); + this.initialVarTypes = new Map(this.varTypes); + this.collectRootVariables(); + this.collectVariablesAndVarDep(this.rulesQueue); + this.rulesQueue.splice(0); + this.collectRootVarDependants(); + this.varRefs.forEach(function (refs, v) { + refs.forEach(function (r) { + if (_this.varTypes.has(v)) { + _this.resolveVariableType(r, _this.varTypes.get(v)); + } + }); + }); + this.unknownColorVars.forEach(function (v) { + if (_this.unknownBgVars.has(v)) { + _this.unknownColorVars.delete(v); + _this.unknownBgVars.delete(v); + _this.resolveVariableType(v, VAR_TYPE_BGCOLOR); + } + else if (_this.isVarType(v, VAR_TYPE_BGCOLOR | VAR_TYPE_TEXTCOLOR | VAR_TYPE_BORDERCOLOR)) { + _this.unknownColorVars.delete(v); + } + else { + _this.undefinedVars.add(v); + } + }); + this.unknownBgVars.forEach(function (v) { + var hasColor = _this.findVarRef(v, function (ref) { + return (_this.unknownColorVars.has(ref) || + _this.isVarType(ref, VAR_TYPE_TEXTCOLOR | VAR_TYPE_BORDERCOLOR)); + }) != null; + if (hasColor) { + _this.itarateVarRefs(v, function (ref) { + _this.resolveVariableType(ref, VAR_TYPE_BGCOLOR); + }); + } + else if (_this.isVarType(v, VAR_TYPE_BGCOLOR | VAR_TYPE_BGIMG)) { + _this.unknownBgVars.delete(v); + } + else { + _this.undefinedVars.add(v); + } + }); + this.changedTypeVars.forEach(function (varName) { + if (_this.typeChangeSubscriptions.has(varName)) { + _this.typeChangeSubscriptions + .get(varName) + .forEach(function (callback) { + callback(); + }); + } + }); + this.changedTypeVars.clear(); + }; + VariablesStore.prototype.getModifierForVariable = function (options) { + var _this = this; + return function (theme) { + var varName = options.varName, sourceValue = options.sourceValue, rule = options.rule, ignoredImgSelectors = options.ignoredImgSelectors, isCancelled = options.isCancelled; + var getDeclarations = function () { + var declarations = []; + var addModifiedValue = function (typeNum, varNameWrapper, colorModifier) { + if (!_this.isVarType(varName, typeNum)) { + return; + } + var property = varNameWrapper(varName); + var modifiedValue; + if (isVarDependant(sourceValue)) { + if (isConstructedColorVar(sourceValue)) { + var value = insertVarValues(sourceValue, _this.unstableVarValues); + if (!value) { + value = typeNum === VAR_TYPE_BGCOLOR ? '#ffffff' : '#000000'; + } + modifiedValue = colorModifier(value, theme); + } + else { + modifiedValue = replaceCSSVariablesNames(sourceValue, function (v) { return varNameWrapper(v); }, function (fallback) { return colorModifier(fallback, theme); }); + } + } + else { + modifiedValue = colorModifier(sourceValue, theme); + } + declarations.push({ + property: property, + value: modifiedValue, + }); + }; + addModifiedValue(VAR_TYPE_BGCOLOR, wrapBgColorVariableName, tryModifyBgColor); + addModifiedValue(VAR_TYPE_TEXTCOLOR, wrapTextColorVariableName, tryModifyTextColor); + addModifiedValue(VAR_TYPE_BORDERCOLOR, wrapBorderColorVariableName, tryModifyBorderColor); + if (_this.isVarType(varName, VAR_TYPE_BGIMG)) { + var property = wrapBgImgVariableName(varName); + var modifiedValue = sourceValue; + if (isVarDependant(sourceValue)) { + modifiedValue = replaceCSSVariablesNames(sourceValue, function (v) { return wrapBgColorVariableName(v); }, function (fallback) { return tryModifyBgColor(fallback, theme); }); + } + var bgModifier = getBgImageModifier(modifiedValue, rule, ignoredImgSelectors, isCancelled); + modifiedValue = typeof bgModifier === 'function' ? bgModifier(theme) : bgModifier; + declarations.push({ + property: property, + value: modifiedValue, + }); + } + return declarations; + }; + var callbacks = new Set(); + var addListener = function (onTypeChange) { + var callback = function () { + var decs = getDeclarations(); + onTypeChange(decs); + }; + callbacks.add(callback); + _this.subscribeForVarTypeChange(varName, callback); + }; + var removeListeners = function () { + callbacks.forEach(function (callback) { + _this.unsubscribeFromVariableTypeChanges(varName, callback); + }); + }; + return { + declarations: getDeclarations(), + onTypeChange: { addListener: addListener, removeListeners: removeListeners }, + }; + }; + }; + VariablesStore.prototype.getModifierForVarDependant = function (property, sourceValue) { + var _this = this; + if (sourceValue.match(/^\s*(rgb|hsl)a?\(/)) { + var isBg_1 = property.startsWith('background'); + var isText_1 = (property === 'color' || property === 'caret-color'); + return function (theme) { + var value = insertVarValues(sourceValue, _this.unstableVarValues); + if (!value) { + value = isBg_1 ? '#ffffff' : '#000000'; + } + var modifier = isBg_1 ? tryModifyBgColor : isText_1 ? tryModifyTextColor : tryModifyBorderColor; + return modifier(value, theme); + }; + } + if (property === 'background-color') { + return function (theme) { + return replaceCSSVariablesNames(sourceValue, function (v) { return wrapBgColorVariableName(v); }, function (fallback) { return tryModifyBgColor(fallback, theme); }); + }; + } + if (property === 'color' || property === 'caret-color') { + return function (theme) { + return replaceCSSVariablesNames(sourceValue, function (v) { return wrapTextColorVariableName(v); }, function (fallback) { return tryModifyTextColor(fallback, theme); }); + }; + } + if (property === 'background' || property === 'background-image' || property === 'box-shadow') { + return function (theme) { + var unknownVars = new Set(); + var modify = function () { + var variableReplaced = replaceCSSVariablesNames(sourceValue, function (v) { + if (_this.isVarType(v, VAR_TYPE_BGCOLOR)) { + return wrapBgColorVariableName(v); + } + if (_this.isVarType(v, VAR_TYPE_BGIMG)) { + return wrapBgImgVariableName(v); + } + unknownVars.add(v); + return v; + }, function (fallback) { return tryModifyBgColor(fallback, theme); }); + if (property === 'box-shadow') { + var shadowModifier = getShadowModifierWithInfo(variableReplaced); + var modifiedShadow = shadowModifier(theme); + if (modifiedShadow.unparseableMatchesLength !== modifiedShadow.matchesLength) { + return modifiedShadow.result; + } + } + return variableReplaced; + }; + var modified = modify(); + if (unknownVars.size > 0) { + return new Promise(function (resolve) { + var firstUnknownVar = unknownVars.values().next().value; + var callback = function () { + _this.unsubscribeFromVariableTypeChanges(firstUnknownVar, callback); + var newValue = modify(); + resolve(newValue); + }; + _this.subscribeForVarTypeChange(firstUnknownVar, callback); + }); + } + return modified; + }; + } + if (property.startsWith('border') || property.startsWith('outline')) { + return function (theme) { + return replaceCSSVariablesNames(sourceValue, function (v) { return wrapBorderColorVariableName(v); }, function (fallback) { return tryModifyBorderColor(fallback, theme); }); + }; + } + return null; + }; + VariablesStore.prototype.subscribeForVarTypeChange = function (varName, callback) { + if (!this.typeChangeSubscriptions.has(varName)) { + this.typeChangeSubscriptions.set(varName, new Set()); + } + var rootStore = this.typeChangeSubscriptions.get(varName); + if (!rootStore.has(callback)) { + rootStore.add(callback); + } + }; + VariablesStore.prototype.unsubscribeFromVariableTypeChanges = function (varName, callback) { + if (this.typeChangeSubscriptions.has(varName)) { + this.typeChangeSubscriptions.get(varName).delete(callback); + } + }; + VariablesStore.prototype.collectVariablesAndVarDep = function (ruleList) { + var _this = this; + ruleList.forEach(function (rules) { + iterateCSSRules(rules, function (rule) { + rule.style && iterateCSSDeclarations(rule.style, function (property, value) { + if (isVariable(property)) { + _this.inspectVariable(property, value); + } + if (isVarDependant(value)) { + _this.inspectVarDependant(property, value); + } + }); + }); + }); + }; + VariablesStore.prototype.collectRootVariables = function () { + var _this = this; + iterateCSSDeclarations(document.documentElement.style, function (property, value) { + if (isVariable(property)) { + _this.inspectVariable(property, value); + } + }); + }; + VariablesStore.prototype.inspectVariable = function (varName, value) { + this.unstableVarValues.set(varName, value); + if (isVarDependant(value) && isConstructedColorVar(value)) { + this.unknownColorVars.add(varName); + this.definedVars.add(varName); + } + if (this.definedVars.has(varName)) { + return; + } + this.definedVars.add(varName); + var color = tryParseColor(value); + if (color) { + this.unknownColorVars.add(varName); + } + else if (value.includes('url(') || + value.includes('linear-gradient(') || + value.includes('radial-gradient(')) { + this.resolveVariableType(varName, VAR_TYPE_BGIMG); + } + }; + VariablesStore.prototype.resolveVariableType = function (varName, typeNum) { + var initialType = this.initialVarTypes.get(varName) || 0; + var currentType = this.varTypes.get(varName) || 0; + var newType = currentType | typeNum; + this.varTypes.set(varName, newType); + if (newType !== initialType || this.undefinedVars.has(varName)) { + this.changedTypeVars.add(varName); + this.undefinedVars.delete(varName); + } + this.unknownColorVars.delete(varName); + this.unknownBgVars.delete(varName); + }; + VariablesStore.prototype.collectRootVarDependants = function () { + var _this = this; + iterateCSSDeclarations(document.documentElement.style, function (property, value) { + if (isVarDependant(value)) { + _this.inspectVarDependant(property, value); + } + }); + }; + VariablesStore.prototype.inspectVarDependant = function (property, value) { + var _this = this; + if (isVariable(property)) { + this.iterateVarDeps(value, function (ref) { + if (!_this.varRefs.has(property)) { + _this.varRefs.set(property, new Set()); + } + _this.varRefs.get(property).add(ref); + }); + } + else if (property === 'background-color' || property === 'box-shadow') { + this.iterateVarDeps(value, function (v) { return _this.resolveVariableType(v, VAR_TYPE_BGCOLOR); }); + } + else if (property === 'color' || property === 'caret-color') { + this.iterateVarDeps(value, function (v) { return _this.resolveVariableType(v, VAR_TYPE_TEXTCOLOR); }); + } + else if (property.startsWith('border') || property.startsWith('outline')) { + this.iterateVarDeps(value, function (v) { return _this.resolveVariableType(v, VAR_TYPE_BORDERCOLOR); }); + } + else if (property === 'background' || property === 'background-image') { + this.iterateVarDeps(value, function (v) { + if (_this.isVarType(v, VAR_TYPE_BGCOLOR | VAR_TYPE_BGIMG)) { + return; + } + var isBgColor = _this.findVarRef(v, function (ref) { + return (_this.unknownColorVars.has(ref) || + _this.isVarType(ref, VAR_TYPE_TEXTCOLOR | VAR_TYPE_BORDERCOLOR)); + }) != null; + _this.itarateVarRefs(v, function (ref) { + if (isBgColor) { + _this.resolveVariableType(ref, VAR_TYPE_BGCOLOR); + } + else { + _this.unknownBgVars.add(ref); + } + }); + }); + } + }; + VariablesStore.prototype.iterateVarDeps = function (value, iterator) { + var varDeps = new Set(); + iterateVarDependencies(value, function (v) { return varDeps.add(v); }); + varDeps.forEach(function (v) { return iterator(v); }); + }; + VariablesStore.prototype.findVarRef = function (varName, iterator, stack) { + var e_1, _a; + if (stack === void 0) { stack = new Set(); } + if (stack.has(varName)) { + return null; + } + stack.add(varName); + var result = iterator(varName); + if (result) { + return varName; + } + var refs = this.varRefs.get(varName); + if (!refs || refs.size === 0) { + return null; + } + try { + for (var refs_1 = __values(refs), refs_1_1 = refs_1.next(); !refs_1_1.done; refs_1_1 = refs_1.next()) { + var ref = refs_1_1.value; + var found = this.findVarRef(ref, iterator, stack); + if (found) { + return found; + } + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (refs_1_1 && !refs_1_1.done && (_a = refs_1.return)) _a.call(refs_1); + } + finally { if (e_1) throw e_1.error; } + } + return null; + }; + VariablesStore.prototype.itarateVarRefs = function (varName, iterator) { + this.findVarRef(varName, function (ref) { + iterator(ref); + return false; + }); + }; + VariablesStore.prototype.setOnRootVariableChange = function (callback) { + this.onRootVariableDefined = callback; + }; + VariablesStore.prototype.putRootVars = function (styleElement, theme) { + var e_2, _a; + var _this = this; + var sheet = styleElement.sheet; + if (sheet.cssRules.length > 0) { + sheet.deleteRule(0); + } + var declarations = new Map(); + iterateCSSDeclarations(document.documentElement.style, function (property, value) { + if (isVariable(property)) { + if (_this.isVarType(property, VAR_TYPE_BGCOLOR)) { + declarations.set(wrapBgColorVariableName(property), tryModifyBgColor(value, theme)); + } + if (_this.isVarType(property, VAR_TYPE_TEXTCOLOR)) { + declarations.set(wrapTextColorVariableName(property), tryModifyTextColor(value, theme)); + } + if (_this.isVarType(property, VAR_TYPE_BORDERCOLOR)) { + declarations.set(wrapBorderColorVariableName(property), tryModifyBorderColor(value, theme)); + } + _this.subscribeForVarTypeChange(property, _this.onRootVariableDefined); + } + }); + var cssLines = []; + cssLines.push(':root {'); + try { + for (var declarations_1 = __values(declarations), declarations_1_1 = declarations_1.next(); !declarations_1_1.done; declarations_1_1 = declarations_1.next()) { + var _b = __read(declarations_1_1.value, 2), property = _b[0], value = _b[1]; + cssLines.push(" ".concat(property, ": ").concat(value, ";")); + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (declarations_1_1 && !declarations_1_1.done && (_a = declarations_1.return)) _a.call(declarations_1); + } + finally { if (e_2) throw e_2.error; } + } + cssLines.push('}'); + var cssText = cssLines.join('\n'); + sheet.insertRule(cssText); + }; + return VariablesStore; + }()); + var variablesStore = new VariablesStore(); + function getVariableRange(input, searchStart) { + if (searchStart === void 0) { searchStart = 0; } + var start = input.indexOf('var(', searchStart); + if (start >= 0) { + var range = getParenthesesRange(input, start + 3); + if (range) { + return { start: start, end: range.end }; + } + return null; + } + } + function getVariablesMatches(input) { + var ranges = []; + var i = 0; + var range; + while ((range = getVariableRange(input, i))) { + var start = range.start, end = range.end; + ranges.push({ start: start, end: end, value: input.substring(start, end) }); + i = range.end + 1; + } + return ranges; + } + function replaceVariablesMatches(input, replacer) { + var matches = getVariablesMatches(input); + var matchesCount = matches.length; + if (matchesCount === 0) { + return input; + } + var inputLength = input.length; + var replacements = matches.map(function (m) { return replacer(m.value); }); + var parts = []; + parts.push(input.substring(0, matches[0].start)); + for (var i = 0; i < matchesCount; i++) { + parts.push(replacements[i]); + var start = matches[i].end; + var end = i < matchesCount - 1 ? matches[i + 1].start : inputLength; + parts.push(input.substring(start, end)); + } + return parts.join(''); + } + function getVariableNameAndFallback(match) { + var commaIndex = match.indexOf(','); + var name; + var fallback; + if (commaIndex >= 0) { + name = match.substring(4, commaIndex).trim(); + fallback = match.substring(commaIndex + 1, match.length - 1).trim(); + } + else { + name = match.substring(4, match.length - 1).trim(); + fallback = ''; + } + return { name: name, fallback: fallback }; + } + function replaceCSSVariablesNames(value, nameReplacer, fallbackReplacer) { + var matchReplacer = function (match) { + var _a = getVariableNameAndFallback(match), name = _a.name, fallback = _a.fallback; + var newName = nameReplacer(name); + if (!fallback) { + return "var(".concat(newName, ")"); + } + var newFallback; + if (isVarDependant(fallback)) { + newFallback = replaceCSSVariablesNames(fallback, nameReplacer, fallbackReplacer); + } + else if (fallbackReplacer) { + newFallback = fallbackReplacer(fallback); + } + else { + newFallback = fallback; + } + return "var(".concat(newName, ", ").concat(newFallback, ")"); + }; + return replaceVariablesMatches(value, matchReplacer); + } + function iterateVarDependencies(value, iterator) { + replaceCSSVariablesNames(value, function (varName) { + iterator(varName); + return varName; + }); + } + function wrapBgColorVariableName(name) { + return "--darkreader-bg".concat(name); + } + function wrapTextColorVariableName(name) { + return "--darkreader-text".concat(name); + } + function wrapBorderColorVariableName(name) { + return "--darkreader-border".concat(name); + } + function wrapBgImgVariableName(name) { + return "--darkreader-bgimg".concat(name); + } + function isVariable(property) { + return property.startsWith('--'); + } + function isVarDependant(value) { + return value.includes('var('); + } + function isConstructedColorVar(value) { + return value.match(/^\s*(rgb|hsl)a?\(/); + } + var rawValueRegex = /^\d{1,3}, ?\d{1,3}, ?\d{1,3}$/; + function parseRawValue(color) { + if (rawValueRegex.test(color)) { + var splitted = color.split(','); + var resultInRGB_1 = 'rgb('; + splitted.forEach(function (number) { + resultInRGB_1 += "".concat(number.trim(), ", "); + }); + resultInRGB_1 = resultInRGB_1.substring(0, resultInRGB_1.length - 2); + resultInRGB_1 += ')'; + return { isRaw: true, color: resultInRGB_1 }; + } + return { isRaw: false, color: color }; + } + function handleRawValue(color, theme, modifyFunction) { + var _a = parseRawValue(color), isRaw = _a.isRaw, newColor = _a.color; + var rgb = tryParseColor(newColor); + if (rgb) { + var outputColor = modifyFunction(rgb, theme); + if (isRaw) { + var outputInRGB = tryParseColor(outputColor); + return outputInRGB ? "".concat(outputInRGB.r, ", ").concat(outputInRGB.g, ", ").concat(outputInRGB.b) : outputColor; + } + return outputColor; + } + return newColor; + } + function tryModifyBgColor(color, theme) { + return handleRawValue(color, theme, modifyBackgroundColor); + } + function tryModifyTextColor(color, theme) { + return handleRawValue(color, theme, modifyForegroundColor); + } + function tryModifyBorderColor(color, theme) { + return handleRawValue(color, theme, modifyBorderColor); + } + function insertVarValues(source, varValues, stack) { + if (stack === void 0) { stack = new Set(); } + var containsUnresolvedVar = false; + var matchReplacer = function (match) { + var _a = getVariableNameAndFallback(match), name = _a.name, fallback = _a.fallback; + if (stack.has(name)) { + containsUnresolvedVar = true; + return null; + } + stack.add(name); + var varValue = varValues.get(name) || fallback; + var inserted = null; + if (varValue) { + if (isVarDependant(varValue)) { + inserted = insertVarValues(varValue, varValues, stack); + } + else { + inserted = varValue; + } + } + if (!inserted) { + containsUnresolvedVar = true; + return null; + } + return inserted; + }; + var replaced = replaceVariablesMatches(source, matchReplacer); + if (containsUnresolvedVar) { + return null; + } + return replaced; + } + + var overrides = { + 'background-color': { + customProp: '--darkreader-inline-bgcolor', + cssProp: 'background-color', + dataAttr: 'data-darkreader-inline-bgcolor', + }, + 'background-image': { + customProp: '--darkreader-inline-bgimage', + cssProp: 'background-image', + dataAttr: 'data-darkreader-inline-bgimage', + }, + 'border-color': { + customProp: '--darkreader-inline-border', + cssProp: 'border-color', + dataAttr: 'data-darkreader-inline-border', + }, + 'border-bottom-color': { + customProp: '--darkreader-inline-border-bottom', + cssProp: 'border-bottom-color', + dataAttr: 'data-darkreader-inline-border-bottom', + }, + 'border-left-color': { + customProp: '--darkreader-inline-border-left', + cssProp: 'border-left-color', + dataAttr: 'data-darkreader-inline-border-left', + }, + 'border-right-color': { + customProp: '--darkreader-inline-border-right', + cssProp: 'border-right-color', + dataAttr: 'data-darkreader-inline-border-right', + }, + 'border-top-color': { + customProp: '--darkreader-inline-border-top', + cssProp: 'border-top-color', + dataAttr: 'data-darkreader-inline-border-top', + }, + 'box-shadow': { + customProp: '--darkreader-inline-boxshadow', + cssProp: 'box-shadow', + dataAttr: 'data-darkreader-inline-boxshadow', + }, + 'color': { + customProp: '--darkreader-inline-color', + cssProp: 'color', + dataAttr: 'data-darkreader-inline-color', + }, + 'fill': { + customProp: '--darkreader-inline-fill', + cssProp: 'fill', + dataAttr: 'data-darkreader-inline-fill', + }, + 'stroke': { + customProp: '--darkreader-inline-stroke', + cssProp: 'stroke', + dataAttr: 'data-darkreader-inline-stroke', + }, + 'outline-color': { + customProp: '--darkreader-inline-outline', + cssProp: 'outline-color', + dataAttr: 'data-darkreader-inline-outline', + }, + 'stop-color': { + customProp: '--darkreader-inline-stopcolor', + cssProp: 'stop-color', + dataAttr: 'data-darkreader-inline-stopcolor', + }, + }; + var overridesList = Object.values(overrides); + var normalizedPropList = {}; + overridesList.forEach(function (_a) { + var cssProp = _a.cssProp, customProp = _a.customProp; + return normalizedPropList[customProp] = cssProp; + }); + var INLINE_STYLE_ATTRS = ['style', 'fill', 'stop-color', 'stroke', 'bgcolor', 'color']; + var INLINE_STYLE_SELECTOR = INLINE_STYLE_ATTRS.map(function (attr) { return "[".concat(attr, "]"); }).join(', '); + function getInlineOverrideStyle() { + return overridesList.map(function (_a) { + var dataAttr = _a.dataAttr, customProp = _a.customProp, cssProp = _a.cssProp; + return [ + "[".concat(dataAttr, "] {"), + " ".concat(cssProp, ": var(").concat(customProp, ") !important;"), + '}', + ].join('\n'); + }).join('\n'); + } + function getInlineStyleElements(root) { + var results = []; + if (root instanceof Element && root.matches(INLINE_STYLE_SELECTOR)) { + results.push(root); + } + if (root instanceof Element || (isShadowDomSupported && root instanceof ShadowRoot) || root instanceof Document) { + push(results, root.querySelectorAll(INLINE_STYLE_SELECTOR)); + } + return results; + } + var treeObservers = new Map(); + var attrObservers = new Map(); + function watchForInlineStyles(elementStyleDidChange, shadowRootDiscovered) { + deepWatchForInlineStyles(document, elementStyleDidChange, shadowRootDiscovered); + iterateShadowHosts(document.documentElement, function (host) { + deepWatchForInlineStyles(host.shadowRoot, elementStyleDidChange, shadowRootDiscovered); + }); + } + function deepWatchForInlineStyles(root, elementStyleDidChange, shadowRootDiscovered) { + if (treeObservers.has(root)) { + treeObservers.get(root).disconnect(); + attrObservers.get(root).disconnect(); + } + var discoveredNodes = new WeakSet(); + function discoverNodes(node) { + getInlineStyleElements(node).forEach(function (el) { + if (discoveredNodes.has(el)) { + return; + } + discoveredNodes.add(el); + elementStyleDidChange(el); + }); + iterateShadowHosts(node, function (n) { + if (discoveredNodes.has(node)) { + return; + } + discoveredNodes.add(node); + shadowRootDiscovered(n.shadowRoot); + deepWatchForInlineStyles(n.shadowRoot, elementStyleDidChange, shadowRootDiscovered); + }); + } + var treeObserver = createOptimizedTreeObserver(root, { + onMinorMutations: function (_a) { + var additions = _a.additions; + additions.forEach(function (added) { return discoverNodes(added); }); + }, + onHugeMutations: function () { + discoverNodes(root); + }, + }); + treeObservers.set(root, treeObserver); + var attemptCount = 0; + var start = null; + var ATTEMPTS_INTERVAL = getDuration({ seconds: 10 }); + var RETRY_TIMEOUT = getDuration({ seconds: 2 }); + var MAX_ATTEMPTS_COUNT = 50; + var cache = []; + var timeoutId = null; + var handleAttributeMutations = throttle(function (mutations) { + mutations.forEach(function (m) { + if (INLINE_STYLE_ATTRS.includes(m.attributeName)) { + elementStyleDidChange(m.target); + } + }); + }); + var attrObserver = new MutationObserver(function (mutations) { + if (timeoutId) { + cache.push.apply(cache, __spreadArray([], __read(mutations), false)); + return; + } + attemptCount++; + var now = Date.now(); + if (start == null) { + start = now; + } + else if (attemptCount >= MAX_ATTEMPTS_COUNT) { + if (now - start < ATTEMPTS_INTERVAL) { + timeoutId = setTimeout(function () { + start = null; + attemptCount = 0; + timeoutId = null; + var attributeCache = cache; + cache = []; + handleAttributeMutations(attributeCache); + }, RETRY_TIMEOUT); + cache.push.apply(cache, __spreadArray([], __read(mutations), false)); + return; + } + start = now; + attemptCount = 1; + } + handleAttributeMutations(mutations); + }); + attrObserver.observe(root, { + attributes: true, + attributeFilter: INLINE_STYLE_ATTRS.concat(overridesList.map(function (_a) { + var dataAttr = _a.dataAttr; + return dataAttr; + })), + subtree: true, + }); + attrObservers.set(root, attrObserver); + } + function stopWatchingForInlineStyles() { + treeObservers.forEach(function (o) { return o.disconnect(); }); + attrObservers.forEach(function (o) { return o.disconnect(); }); + treeObservers.clear(); + attrObservers.clear(); + } + var inlineStyleCache = new WeakMap(); + var filterProps = ['brightness', 'contrast', 'grayscale', 'sepia', 'mode']; + function getInlineStyleCacheKey(el, theme) { + return INLINE_STYLE_ATTRS + .map(function (attr) { return "".concat(attr, "=\"").concat(el.getAttribute(attr), "\""); }) + .concat(filterProps.map(function (prop) { return "".concat(prop, "=\"").concat(theme[prop], "\""); })) + .join(' '); + } + function shouldIgnoreInlineStyle(element, selectors) { + for (var i = 0, len = selectors.length; i < len; i++) { + var ingnoredSelector = selectors[i]; + if (element.matches(ingnoredSelector)) { + return true; + } + } + return false; + } + function overrideInlineStyle(element, theme, ignoreInlineSelectors, ignoreImageSelectors) { + var cacheKey = getInlineStyleCacheKey(element, theme); + if (cacheKey === inlineStyleCache.get(element)) { + return; + } + var unsetProps = new Set(Object.keys(overrides)); + function setCustomProp(targetCSSProp, modifierCSSProp, cssVal) { + var isPropertyVariable = targetCSSProp.startsWith('--'); + var _a = isPropertyVariable ? {} : overrides[targetCSSProp], customProp = _a.customProp, dataAttr = _a.dataAttr; + var mod = getModifiableCSSDeclaration(modifierCSSProp, cssVal, {}, variablesStore, ignoreImageSelectors, null); + if (!mod) { + return; + } + var value = mod.value; + if (typeof value === 'function') { + value = value(theme); + } + if (isPropertyVariable && typeof value === 'object') { + var typedValue = value; + typedValue.declarations.forEach(function (_a) { + var property = _a.property, value = _a.value; + !(value instanceof Promise) && element.style.setProperty(property, value); + }); + } + else { + element.style.setProperty(customProp, value); + if (!element.hasAttribute(dataAttr)) { + element.setAttribute(dataAttr, ''); + } + unsetProps.delete(targetCSSProp); + } + } + if (ignoreInlineSelectors.length > 0) { + if (shouldIgnoreInlineStyle(element, ignoreInlineSelectors)) { + unsetProps.forEach(function (cssProp) { + element.removeAttribute(overrides[cssProp].dataAttr); + }); + return; + } + } + if (element.hasAttribute('bgcolor')) { + var value = element.getAttribute('bgcolor'); + if (value.match(/^[0-9a-f]{3}$/i) || value.match(/^[0-9a-f]{6}$/i)) { + value = "#".concat(value); + } + setCustomProp('background-color', 'background-color', value); + } + if (element.hasAttribute('color') && element.rel !== 'mask-icon') { + var value = element.getAttribute('color'); + if (value.match(/^[0-9a-f]{3}$/i) || value.match(/^[0-9a-f]{6}$/i)) { + value = "#".concat(value); + } + setCustomProp('color', 'color', value); + } + if (element instanceof SVGElement) { + if (element.hasAttribute('fill')) { + var SMALL_SVG_LIMIT_1 = 32; + var value_1 = element.getAttribute('fill'); + if (value_1 !== 'none') { + if (!(element instanceof SVGTextElement)) { + var handleSVGElement = function () { + var _a = element.getBoundingClientRect(), width = _a.width, height = _a.height; + var isBg = (width > SMALL_SVG_LIMIT_1 || height > SMALL_SVG_LIMIT_1); + setCustomProp('fill', isBg ? 'background-color' : 'color', value_1); + }; + if (isReadyStateComplete()) { + handleSVGElement(); + } + else { + addReadyStateCompleteListener(handleSVGElement); + } + } + else { + setCustomProp('fill', 'color', value_1); + } + } + } + if (element.hasAttribute('stop-color')) { + setCustomProp('stop-color', 'background-color', element.getAttribute('stop-color')); + } + } + if (element.hasAttribute('stroke')) { + var value = element.getAttribute('stroke'); + setCustomProp('stroke', element instanceof SVGLineElement || element instanceof SVGTextElement ? 'border-color' : 'color', value); + } + element.style && iterateCSSDeclarations(element.style, function (property, value) { + if (property === 'background-image' && value.includes('url')) { + return; + } + if (overrides.hasOwnProperty(property) || (property.startsWith('--') && !normalizedPropList[property])) { + setCustomProp(property, property, value); + } + else { + var overridenProp = normalizedPropList[property]; + if (overridenProp && + (!element.style.getPropertyValue(overridenProp) && !element.hasAttribute(overridenProp))) { + if (overridenProp === 'background-color' && element.hasAttribute('bgcolor')) { + return; + } + element.style.setProperty(property, ''); + } + } + }); + if (element.style && element instanceof SVGTextElement && element.style.fill) { + setCustomProp('fill', 'color', element.style.getPropertyValue('fill')); + } + forEach(unsetProps, function (cssProp) { + element.removeAttribute(overrides[cssProp].dataAttr); + }); + inlineStyleCache.set(element, getInlineStyleCacheKey(element, theme)); + } + + var metaThemeColorName = 'theme-color'; + var metaThemeColorSelector = "meta[name=\"".concat(metaThemeColorName, "\"]"); + var srcMetaThemeColor = null; + var observer = null; + function changeMetaThemeColor(meta, theme) { + srcMetaThemeColor = srcMetaThemeColor || meta.content; + try { + var color = parse(srcMetaThemeColor); + meta.content = modifyBackgroundColor(color, theme); + } + catch (err) { + logWarn(err); + } + } + function changeMetaThemeColorWhenAvailable(theme) { + var meta = document.querySelector(metaThemeColorSelector); + if (meta) { + changeMetaThemeColor(meta, theme); + } + else { + if (observer) { + observer.disconnect(); + } + observer = new MutationObserver(function (mutations) { + loop: for (var i = 0; i < mutations.length; i++) { + var addedNodes = mutations[i].addedNodes; + for (var j = 0; j < addedNodes.length; j++) { + var node = addedNodes[j]; + if (node instanceof HTMLMetaElement && node.name === metaThemeColorName) { + observer.disconnect(); + observer = null; + changeMetaThemeColor(node, theme); + break loop; + } + } + } + }); + observer.observe(document.head, { childList: true }); + } + } + function restoreMetaThemeColor() { + if (observer) { + observer.disconnect(); + observer = null; + } + var meta = document.querySelector(metaThemeColorSelector); + if (meta && srcMetaThemeColor) { + meta.content = srcMetaThemeColor; + } + } + + var themeCacheKeys = [ + 'mode', + 'brightness', + 'contrast', + 'grayscale', + 'sepia', + 'darkSchemeBackgroundColor', + 'darkSchemeTextColor', + 'lightSchemeBackgroundColor', + 'lightSchemeTextColor', + ]; + function getThemeKey(theme) { + var resultKey = ''; + themeCacheKeys.forEach(function (key) { + resultKey += "".concat(key, ":").concat(theme[key], ";"); + }); + return resultKey; + } + var asyncQueue = createAsyncTasksQueue(); + function createStyleSheetModifier() { + var renderId = 0; + var rulesTextCache = new Set(); + var rulesModCache = new Map(); + var varTypeChangeCleaners = new Set(); + var prevFilterKey = null; + var hasNonLoadedLink = false; + var wasRebuilt = false; + function shouldRebuildStyle() { + return hasNonLoadedLink && !wasRebuilt; + } + function modifySheet(options) { + var rules = options.sourceCSSRules; + var theme = options.theme, ignoreImageAnalysis = options.ignoreImageAnalysis, force = options.force, prepareSheet = options.prepareSheet, isAsyncCancelled = options.isAsyncCancelled; + var rulesChanged = (rulesModCache.size === 0); + var notFoundCacheKeys = new Set(rulesModCache.keys()); + var themeKey = getThemeKey(theme); + var themeChanged = (themeKey !== prevFilterKey); + if (hasNonLoadedLink) { + wasRebuilt = true; + } + var modRules = []; + iterateCSSRules(rules, function (rule) { + var cssText = rule.cssText; + var textDiffersFromPrev = false; + notFoundCacheKeys.delete(cssText); + if (rule.parentRule instanceof CSSMediaRule) { + cssText += ";".concat(rule.parentRule.media.mediaText); + } + if (!rulesTextCache.has(cssText)) { + rulesTextCache.add(cssText); + textDiffersFromPrev = true; + } + if (textDiffersFromPrev) { + rulesChanged = true; + } + else { + modRules.push(rulesModCache.get(cssText)); + return; + } + var modDecs = []; + rule.style && iterateCSSDeclarations(rule.style, function (property, value) { + var mod = getModifiableCSSDeclaration(property, value, rule, variablesStore, ignoreImageAnalysis, isAsyncCancelled); + if (mod) { + modDecs.push(mod); + } + }); + var modRule = null; + if (modDecs.length > 0) { + var parentRule = rule.parentRule; + modRule = { selector: rule.selectorText, declarations: modDecs, parentRule: parentRule }; + modRules.push(modRule); + } + rulesModCache.set(cssText, modRule); + }, function () { + hasNonLoadedLink = true; + }); + notFoundCacheKeys.forEach(function (key) { + rulesTextCache.delete(key); + rulesModCache.delete(key); + }); + prevFilterKey = themeKey; + if (!force && !rulesChanged && !themeChanged) { + return; + } + renderId++; + function setRule(target, index, rule) { + var selector = rule.selector, declarations = rule.declarations; + var getDeclarationText = function (dec) { + var property = dec.property, value = dec.value, important = dec.important, sourceValue = dec.sourceValue; + return "".concat(property, ": ").concat(value == null ? sourceValue : value).concat(important ? ' !important' : '', ";"); + }; + var cssRulesText = ''; + declarations.forEach(function (declarations) { + cssRulesText += "".concat(getDeclarationText(declarations), " "); + }); + var ruleText = "".concat(selector, " { ").concat(cssRulesText, " }"); + target.insertRule(ruleText, index); + } + var asyncDeclarations = new Map(); + var varDeclarations = new Map(); + var asyncDeclarationCounter = 0; + var varDeclarationCounter = 0; + var rootReadyGroup = { rule: null, rules: [], isGroup: true }; + var groupRefs = new WeakMap(); + function getGroup(rule) { + if (rule == null) { + return rootReadyGroup; + } + if (groupRefs.has(rule)) { + return groupRefs.get(rule); + } + var group = { rule: rule, rules: [], isGroup: true }; + groupRefs.set(rule, group); + var parentGroup = getGroup(rule.parentRule); + parentGroup.rules.push(group); + return group; + } + varTypeChangeCleaners.forEach(function (clear) { return clear(); }); + varTypeChangeCleaners.clear(); + modRules.filter(function (r) { return r; }).forEach(function (_a) { + var selector = _a.selector, declarations = _a.declarations, parentRule = _a.parentRule; + var group = getGroup(parentRule); + var readyStyleRule = { selector: selector, declarations: [], isGroup: false }; + var readyDeclarations = readyStyleRule.declarations; + group.rules.push(readyStyleRule); + function handleAsyncDeclaration(property, modified, important, sourceValue) { + var asyncKey = ++asyncDeclarationCounter; + var asyncDeclaration = { property: property, value: null, important: important, asyncKey: asyncKey, sourceValue: sourceValue }; + readyDeclarations.push(asyncDeclaration); + var currentRenderId = renderId; + modified.then(function (asyncValue) { + if (!asyncValue || isAsyncCancelled() || currentRenderId !== renderId) { + return; + } + asyncDeclaration.value = asyncValue; + asyncQueue.add(function () { + if (isAsyncCancelled() || currentRenderId !== renderId) { + return; + } + rebuildAsyncRule(asyncKey); + }); + }); + } + function handleVarDeclarations(property, modified, important, sourceValue) { + var _a = modified, varDecs = _a.declarations, onTypeChange = _a.onTypeChange; + var varKey = ++varDeclarationCounter; + var currentRenderId = renderId; + var initialIndex = readyDeclarations.length; + var oldDecs = []; + if (varDecs.length === 0) { + var tempDec = { property: property, value: sourceValue, important: important, sourceValue: sourceValue, varKey: varKey }; + readyDeclarations.push(tempDec); + oldDecs = [tempDec]; + } + varDecs.forEach(function (mod) { + if (mod.value instanceof Promise) { + handleAsyncDeclaration(mod.property, mod.value, important, sourceValue); + } + else { + var readyDec = { property: mod.property, value: mod.value, important: important, sourceValue: sourceValue, varKey: varKey }; + readyDeclarations.push(readyDec); + oldDecs.push(readyDec); + } + }); + onTypeChange.addListener(function (newDecs) { + if (isAsyncCancelled() || currentRenderId !== renderId) { + return; + } + var readyVarDecs = newDecs.map(function (mod) { + return { property: mod.property, value: mod.value, important: important, sourceValue: sourceValue, varKey: varKey }; + }); + var index = readyDeclarations.indexOf(oldDecs[0], initialIndex); + readyDeclarations.splice.apply(readyDeclarations, __spreadArray([index, oldDecs.length], __read(readyVarDecs), false)); + oldDecs = readyVarDecs; + rebuildVarRule(varKey); + }); + varTypeChangeCleaners.add(function () { return onTypeChange.removeListeners(); }); + } + declarations.forEach(function (_a) { + var property = _a.property, value = _a.value, important = _a.important, sourceValue = _a.sourceValue; + if (typeof value === 'function') { + var modified = value(theme); + if (modified instanceof Promise) { + handleAsyncDeclaration(property, modified, important, sourceValue); + } + else if (property.startsWith('--')) { + handleVarDeclarations(property, modified, important, sourceValue); + } + else { + readyDeclarations.push({ property: property, value: modified, important: important, sourceValue: sourceValue }); + } + } + else { + readyDeclarations.push({ property: property, value: value, important: important, sourceValue: sourceValue }); + } + }); + }); + var sheet = prepareSheet(); + function buildStyleSheet() { + function createTarget(group, parent) { + var rule = group.rule; + if (rule instanceof CSSMediaRule) { + var media = rule.media; + var index = parent.cssRules.length; + parent.insertRule("@media ".concat(media.mediaText, " {}"), index); + return parent.cssRules[index]; + } + return parent; + } + function iterateReadyRules(group, target, styleIterator) { + group.rules.forEach(function (r) { + if (r.isGroup) { + var t = createTarget(r, target); + iterateReadyRules(r, t, styleIterator); + } + else { + styleIterator(r, target); + } + }); + } + iterateReadyRules(rootReadyGroup, sheet, function (rule, target) { + var index = target.cssRules.length; + rule.declarations.forEach(function (_a) { + var asyncKey = _a.asyncKey, varKey = _a.varKey; + if (asyncKey != null) { + asyncDeclarations.set(asyncKey, { rule: rule, target: target, index: index }); + } + if (varKey != null) { + varDeclarations.set(varKey, { rule: rule, target: target, index: index }); + } + }); + setRule(target, index, rule); + }); + } + function rebuildAsyncRule(key) { + var _a = asyncDeclarations.get(key), rule = _a.rule, target = _a.target, index = _a.index; + target.deleteRule(index); + setRule(target, index, rule); + asyncDeclarations.delete(key); + } + function rebuildVarRule(key) { + var _a = varDeclarations.get(key), rule = _a.rule, target = _a.target, index = _a.index; + target.deleteRule(index); + setRule(target, index, rule); + } + buildStyleSheet(); + } + return { modifySheet: modifySheet, shouldRebuildStyle: shouldRebuildStyle }; + } + + var STYLE_SELECTOR = 'style, link[rel*="stylesheet" i]:not([disabled])'; + function shouldManageStyle(element) { + return (((element instanceof HTMLStyleElement) || + (element instanceof SVGStyleElement) || + (element instanceof HTMLLinkElement && + element.rel && + element.rel.toLowerCase().includes('stylesheet') && + !element.disabled && + (isFirefox ? !element.href.startsWith('moz-extension://') : true) && + ((new URL(element.href)).hostname != 'fonts.googleapis.com'))) && + !element.classList.contains('darkreader') && + element.media.toLowerCase() !== 'print' && + !element.classList.contains('stylus')); + } + function getManageableStyles(node, results, deep) { + if (results === void 0) { results = []; } + if (deep === void 0) { deep = true; } + if (shouldManageStyle(node)) { + results.push(node); + } + else if (node instanceof Element || (isShadowDomSupported && node instanceof ShadowRoot) || node === document) { + forEach(node.querySelectorAll(STYLE_SELECTOR), function (style) { return getManageableStyles(style, results, false); }); + if (deep) { + iterateShadowHosts(node, function (host) { return getManageableStyles(host.shadowRoot, results, false); }); + } + } + return results; + } + var syncStyleSet = new WeakSet(); + var corsStyleSet = new WeakSet(); + var canOptimizeUsingProxy$1 = false; + document.addEventListener('__darkreader__inlineScriptsAllowed', function () { + canOptimizeUsingProxy$1 = true; + }); + var loadingLinkCounter = 0; + var rejectorsForLoadingLinks = new Map(); + function cleanLoadingLinks() { + rejectorsForLoadingLinks.clear(); + } + function manageStyle(element, _a) { + var update = _a.update, loadingStart = _a.loadingStart, loadingEnd = _a.loadingEnd; + var prevStyles = []; + var next = element; + while ((next = next.nextElementSibling) && next.matches('.darkreader')) { + prevStyles.push(next); + } + var corsCopy = prevStyles.find(function (el) { return el.matches('.darkreader--cors') && !corsStyleSet.has(el); }) || null; + var syncStyle = prevStyles.find(function (el) { return el.matches('.darkreader--sync') && !syncStyleSet.has(el); }) || null; + var corsCopyPositionWatcher = null; + var syncStylePositionWatcher = null; + var cancelAsyncOperations = false; + var isOverrideEmpty = true; + var sheetModifier = createStyleSheetModifier(); + var observer = new MutationObserver(function () { + update(); + }); + var observerOptions = { attributes: true, childList: true, subtree: true, characterData: true }; + function containsCSSImport() { + return element instanceof HTMLStyleElement && element.textContent.trim().match(cssImportRegex); + } + function hasImports(cssRules, checkCrossOrigin) { + var result = false; + if (cssRules) { + var rule = void 0; + cssRulesLoop: for (var i = 0, len = cssRules.length; i < len; i++) { + rule = cssRules[i]; + if (rule.href) { + if (checkCrossOrigin) { + if (rule.href.startsWith('http') && !rule.href.startsWith(location.origin)) { + result = true; + break cssRulesLoop; + } + } + else { + result = true; + break cssRulesLoop; + } + } + } + } + return result; + } + function getRulesSync() { + if (corsCopy) { + logInfo('[getRulesSync] Using cors-copy.'); + return corsCopy.sheet.cssRules; + } + if (containsCSSImport()) { + logInfo('[getRulesSync] CSSImport detected.'); + return null; + } + var cssRules = safeGetSheetRules(); + if (element instanceof HTMLLinkElement && + !isRelativeHrefOnAbsolutePath(element.href) && + hasImports(cssRules, false)) { + logInfo('[getRulesSync] CSSImportRule detected on non-local href.'); + return null; + } + if (hasImports(cssRules, true)) { + logInfo('[getRulesSync] Cross-Origin CSSImportRule detected.'); + return null; + } + logInfo('[getRulesSync] Using cssRules.'); + !cssRules && logWarn('[getRulesSync] cssRules is null, trying again.'); + return cssRules; + } + function insertStyle() { + if (corsCopy) { + if (element.nextSibling !== corsCopy) { + element.parentNode.insertBefore(corsCopy, element.nextSibling); + } + if (corsCopy.nextSibling !== syncStyle) { + element.parentNode.insertBefore(syncStyle, corsCopy.nextSibling); + } + } + else if (element.nextSibling !== syncStyle) { + element.parentNode.insertBefore(syncStyle, element.nextSibling); + } + } + function createSyncStyle() { + syncStyle = element instanceof SVGStyleElement ? + document.createElementNS('http://www.w3.org/2000/svg', 'style') : + document.createElement('style'); + syncStyle.classList.add('darkreader'); + syncStyle.classList.add('darkreader--sync'); + syncStyle.media = 'screen'; + if (element.title) { + syncStyle.title = element.title; + } + syncStyleSet.add(syncStyle); + } + var isLoadingRules = false; + var wasLoadingError = false; + var loadingLinkId = ++loadingLinkCounter; + function getRulesAsync() { + return __awaiter(this, void 0, void 0, function () { + var cssText, cssBasePath, _a, cssRules, accessError, err_1, fullCSSText, err_2; + var _b; + return __generator(this, function (_c) { + switch (_c.label) { + case 0: + if (!(element instanceof HTMLLinkElement)) return [3, 7]; + _a = __read(getRulesOrError(), 2), cssRules = _a[0], accessError = _a[1]; + if (accessError) { + logWarn(accessError); + } + if (!((!cssRules && !accessError && !isSafari) || + (isSafari && !element.sheet) || + isStillLoadingError(accessError))) return [3, 5]; + _c.label = 1; + case 1: + _c.trys.push([1, 3, , 4]); + logInfo("Linkelement ".concat(loadingLinkId, " is not loaded yet and thus will be await for"), element); + return [4, linkLoading(element, loadingLinkId)]; + case 2: + _c.sent(); + return [3, 4]; + case 3: + err_1 = _c.sent(); + logWarn(err_1); + wasLoadingError = true; + return [3, 4]; + case 4: + if (cancelAsyncOperations) { + return [2, null]; + } + _b = __read(getRulesOrError(), 2), cssRules = _b[0], accessError = _b[1]; + if (accessError) { + logWarn(accessError); + } + _c.label = 5; + case 5: + if (cssRules) { + if (!hasImports(cssRules, false)) { + return [2, cssRules]; + } + } + return [4, loadText(element.href)]; + case 6: + cssText = _c.sent(); + cssBasePath = getCSSBaseBath(element.href); + if (cancelAsyncOperations) { + return [2, null]; + } + return [3, 8]; + case 7: + if (containsCSSImport()) { + cssText = element.textContent.trim(); + cssBasePath = getCSSBaseBath(location.href); + } + else { + return [2, null]; + } + _c.label = 8; + case 8: + if (!cssText) return [3, 13]; + _c.label = 9; + case 9: + _c.trys.push([9, 11, , 12]); + return [4, replaceCSSImports(cssText, cssBasePath)]; + case 10: + fullCSSText = _c.sent(); + corsCopy = createCORSCopy(element, fullCSSText); + return [3, 12]; + case 11: + err_2 = _c.sent(); + logWarn(err_2); + return [3, 12]; + case 12: + if (corsCopy) { + corsCopyPositionWatcher = watchForNodePosition(corsCopy, 'prev-sibling'); + return [2, corsCopy.sheet.cssRules]; + } + _c.label = 13; + case 13: return [2, null]; + } + }); + }); + } + function details(options) { + var rules = getRulesSync(); + if (!rules) { + if (options.secondRound) { + logWarn('Detected dead-lock at details(), returning early to prevent it.'); + return null; + } + if (isLoadingRules || wasLoadingError) { + return null; + } + isLoadingRules = true; + loadingStart(); + getRulesAsync().then(function (results) { + isLoadingRules = false; + loadingEnd(); + if (results) { + update(); + } + }).catch(function (err) { + logWarn(err); + isLoadingRules = false; + loadingEnd(); + }); + return null; + } + return { rules: rules }; + } + var forceRenderStyle = false; + function render(theme, ignoreImageAnalysis) { + var rules = getRulesSync(); + if (!rules) { + return; + } + cancelAsyncOperations = false; + function removeCSSRulesFromSheet(sheet) { + for (var i = sheet.cssRules.length - 1; i >= 0; i--) { + sheet.deleteRule(i); + } + } + function prepareOverridesSheet() { + if (!syncStyle) { + createSyncStyle(); + } + syncStylePositionWatcher && syncStylePositionWatcher.stop(); + insertStyle(); + if (syncStyle.sheet == null) { + syncStyle.textContent = ''; + } + var sheet = syncStyle.sheet; + removeCSSRulesFromSheet(sheet); + if (syncStylePositionWatcher) { + syncStylePositionWatcher.run(); + } + else { + syncStylePositionWatcher = watchForNodePosition(syncStyle, 'prev-sibling', function () { + forceRenderStyle = true; + buildOverrides(); + }); + } + return syncStyle.sheet; + } + function buildOverrides() { + var force = forceRenderStyle; + forceRenderStyle = false; + sheetModifier.modifySheet({ + prepareSheet: prepareOverridesSheet, + sourceCSSRules: rules, + theme: theme, + ignoreImageAnalysis: ignoreImageAnalysis, + force: force, + isAsyncCancelled: function () { return cancelAsyncOperations; }, + }); + isOverrideEmpty = syncStyle.sheet.cssRules.length === 0; + if (sheetModifier.shouldRebuildStyle()) { + addReadyStateCompleteListener(function () { return update(); }); + } + } + buildOverrides(); + } + function getRulesOrError() { + try { + if (element.sheet == null) { + return [null, null]; + } + return [element.sheet.cssRules, null]; + } + catch (err) { + return [null, err]; + } + } + function isStillLoadingError(error) { + return error && error.message && error.message.includes('loading'); + } + function safeGetSheetRules() { + var _a = __read(getRulesOrError(), 2), cssRules = _a[0], err = _a[1]; + if (err) { + logWarn(err); + return null; + } + return cssRules; + } + function watchForSheetChanges() { + watchForSheetChangesUsingProxy(); + if (!isThunderbird && !(canOptimizeUsingProxy$1 && element.sheet)) { + watchForSheetChangesUsingRAF(); + } + } + var rulesChangeKey = null; + var rulesCheckFrameId = null; + function getRulesChangeKey() { + var rules = safeGetSheetRules(); + return rules ? rules.length : null; + } + function didRulesKeyChange() { + return getRulesChangeKey() !== rulesChangeKey; + } + function watchForSheetChangesUsingRAF() { + rulesChangeKey = getRulesChangeKey(); + stopWatchingForSheetChangesUsingRAF(); + var checkForUpdate = function () { + if (didRulesKeyChange()) { + rulesChangeKey = getRulesChangeKey(); + update(); + } + if (canOptimizeUsingProxy$1 && element.sheet) { + stopWatchingForSheetChangesUsingRAF(); + return; + } + rulesCheckFrameId = requestAnimationFrame(checkForUpdate); + }; + checkForUpdate(); + } + function stopWatchingForSheetChangesUsingRAF() { + cancelAnimationFrame(rulesCheckFrameId); + } + var areSheetChangesPending = false; + function onSheetChange() { + canOptimizeUsingProxy$1 = true; + stopWatchingForSheetChangesUsingRAF(); + if (areSheetChangesPending) { + return; + } + function handleSheetChanges() { + areSheetChangesPending = false; + if (cancelAsyncOperations) { + return; + } + update(); + } + areSheetChangesPending = true; + if (typeof queueMicrotask === 'function') { + queueMicrotask(handleSheetChanges); + } + else { + requestAnimationFrame(handleSheetChanges); + } + } + function watchForSheetChangesUsingProxy() { + element.addEventListener('__darkreader__updateSheet', onSheetChange); + } + function stopWatchingForSheetChangesUsingProxy() { + element.removeEventListener('__darkreader__updateSheet', onSheetChange); + } + function stopWatchingForSheetChanges() { + stopWatchingForSheetChangesUsingProxy(); + stopWatchingForSheetChangesUsingRAF(); + } + function pause() { + observer.disconnect(); + cancelAsyncOperations = true; + corsCopyPositionWatcher && corsCopyPositionWatcher.stop(); + syncStylePositionWatcher && syncStylePositionWatcher.stop(); + stopWatchingForSheetChanges(); + } + function destroy() { + pause(); + removeNode(corsCopy); + removeNode(syncStyle); + loadingEnd(); + if (rejectorsForLoadingLinks.has(loadingLinkId)) { + var reject = rejectorsForLoadingLinks.get(loadingLinkId); + rejectorsForLoadingLinks.delete(loadingLinkId); + reject && reject(); + } + } + function watch() { + observer.observe(element, observerOptions); + if (element instanceof HTMLStyleElement) { + watchForSheetChanges(); + } + } + var maxMoveCount = 10; + var moveCount = 0; + function restore() { + if (!syncStyle) { + return; + } + moveCount++; + if (moveCount > maxMoveCount) { + logWarn('Style sheet was moved multiple times', element); + return; + } + logWarn('Restore style', syncStyle, element); + insertStyle(); + corsCopyPositionWatcher && corsCopyPositionWatcher.skip(); + syncStylePositionWatcher && syncStylePositionWatcher.skip(); + if (!isOverrideEmpty) { + forceRenderStyle = true; + update(); + } + } + return { + details: details, + render: render, + pause: pause, + destroy: destroy, + watch: watch, + restore: restore, + }; + } + function linkLoading(link, loadingId) { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2, new Promise(function (resolve, reject) { + var cleanUp = function () { + link.removeEventListener('load', onLoad); + link.removeEventListener('error', onError); + rejectorsForLoadingLinks.delete(loadingId); + }; + var onLoad = function () { + cleanUp(); + logInfo("Linkelement ".concat(loadingId, " has been loaded")); + resolve(); + }; + var onError = function () { + cleanUp(); + reject("Linkelement ".concat(loadingId, " couldn't be loaded. ").concat(link.href)); + }; + rejectorsForLoadingLinks.set(loadingId, function () { + cleanUp(); + reject(); + }); + link.addEventListener('load', onLoad); + link.addEventListener('error', onError); + if (!link.href) { + onError(); + } + })]; + }); + }); + } + function getCSSImportURL(importDeclaration) { + return getCSSURLValue(importDeclaration.substring(7).trim().replace(/;$/, '').replace(/screen$/, '')); + } + function loadText(url) { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + if (!url.startsWith('data:')) return [3, 3]; + return [4, fetch(url)]; + case 1: return [4, (_a.sent()).text()]; + case 2: return [2, _a.sent()]; + case 3: return [4, bgFetch({ url: url, responseType: 'text', mimeType: 'text/css', origin: window.location.origin })]; + case 4: return [2, _a.sent()]; + } + }); + }); + } + function replaceCSSImports(cssText, basePath, cache) { + if (cache === void 0) { cache = new Map(); } + return __awaiter(this, void 0, void 0, function () { + var importMatches, importMatches_1, importMatches_1_1, match, importURL, absoluteURL, importedCSS, err_3, e_1_1; + var e_1, _a; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + cssText = removeCSSComments(cssText); + cssText = replaceCSSFontFace(cssText); + cssText = replaceCSSRelativeURLsWithAbsolute(cssText, basePath); + importMatches = getMatches(cssImportRegex, cssText); + _b.label = 1; + case 1: + _b.trys.push([1, 10, 11, 12]); + importMatches_1 = __values(importMatches), importMatches_1_1 = importMatches_1.next(); + _b.label = 2; + case 2: + if (!!importMatches_1_1.done) return [3, 9]; + match = importMatches_1_1.value; + importURL = getCSSImportURL(match); + absoluteURL = getAbsoluteURL(basePath, importURL); + importedCSS = void 0; + if (!cache.has(absoluteURL)) return [3, 3]; + importedCSS = cache.get(absoluteURL); + return [3, 7]; + case 3: + _b.trys.push([3, 6, , 7]); + return [4, loadText(absoluteURL)]; + case 4: + importedCSS = _b.sent(); + cache.set(absoluteURL, importedCSS); + return [4, replaceCSSImports(importedCSS, getCSSBaseBath(absoluteURL), cache)]; + case 5: + importedCSS = _b.sent(); + return [3, 7]; + case 6: + err_3 = _b.sent(); + logWarn(err_3); + importedCSS = ''; + return [3, 7]; + case 7: + cssText = cssText.split(match).join(importedCSS); + _b.label = 8; + case 8: + importMatches_1_1 = importMatches_1.next(); + return [3, 2]; + case 9: return [3, 12]; + case 10: + e_1_1 = _b.sent(); + e_1 = { error: e_1_1 }; + return [3, 12]; + case 11: + try { + if (importMatches_1_1 && !importMatches_1_1.done && (_a = importMatches_1.return)) _a.call(importMatches_1); + } + finally { if (e_1) throw e_1.error; } + return [7]; + case 12: + cssText = cssText.trim(); + return [2, cssText]; + } + }); + }); + } + function createCORSCopy(srcElement, cssText) { + if (!cssText) { + return null; + } + var cors = document.createElement('style'); + cors.classList.add('darkreader'); + cors.classList.add('darkreader--cors'); + cors.media = 'screen'; + cors.textContent = cssText; + srcElement.parentNode.insertBefore(cors, srcElement.nextSibling); + cors.sheet.disabled = true; + corsStyleSet.add(cors); + return cors; + } + + var observers = []; + var observedRoots; + var undefinedGroups = new Map(); + var elementsDefinitionCallback; + function collectUndefinedElements(root) { + if (!isDefinedSelectorSupported) { + return; + } + forEach(root.querySelectorAll(':not(:defined)'), function (el) { + var tag = el.tagName.toLowerCase(); + if (!tag.includes('-')) { + var extendedTag = el.getAttribute('is'); + if (extendedTag) { + tag = extendedTag; + } + else { + return; + } + } + if (!undefinedGroups.has(tag)) { + undefinedGroups.set(tag, new Set()); + customElementsWhenDefined(tag).then(function () { + if (elementsDefinitionCallback) { + var elements = undefinedGroups.get(tag); + undefinedGroups.delete(tag); + elementsDefinitionCallback(Array.from(elements)); + } + }); + } + undefinedGroups.get(tag).add(el); + }); + } + var canOptimizeUsingProxy = false; + document.addEventListener('__darkreader__inlineScriptsAllowed', function () { + canOptimizeUsingProxy = true; + }); + var resolvers = new Map(); + function handleIsDefined(e) { + canOptimizeUsingProxy = true; + if (resolvers.has(e.detail.tag)) { + var resolve = resolvers.get(e.detail.tag); + resolve(); + } + } + function customElementsWhenDefined(tag) { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2, new Promise(function (resolve) { + if (window.customElements && typeof customElements.whenDefined === 'function') { + customElements.whenDefined(tag).then(function () { return resolve(); }); + } + else if (canOptimizeUsingProxy) { + resolvers.set(tag, resolve); + document.dispatchEvent(new CustomEvent('__darkreader__addUndefinedResolver', { detail: { tag: tag } })); + } + else { + var checkIfDefined_1 = function () { + var elements = undefinedGroups.get(tag); + if (elements && elements.size > 0) { + if (elements.values().next().value.matches(':defined')) { + resolve(); + } + else { + requestAnimationFrame(checkIfDefined_1); + } + } + }; + requestAnimationFrame(checkIfDefined_1); + } + })]; + }); + }); + } + function watchWhenCustomElementsDefined(callback) { + elementsDefinitionCallback = callback; + } + function unsubscribeFromDefineCustomElements() { + elementsDefinitionCallback = null; + undefinedGroups.clear(); + document.removeEventListener('__darkreader__isDefined', handleIsDefined); + } + function watchForStyleChanges(currentStyles, update, shadowRootDiscovered) { + stopWatchingForStyleChanges(); + var prevStyles = new Set(currentStyles); + var prevStyleSiblings = new WeakMap(); + var nextStyleSiblings = new WeakMap(); + function saveStylePosition(style) { + prevStyleSiblings.set(style, style.previousElementSibling); + nextStyleSiblings.set(style, style.nextElementSibling); + } + function forgetStylePosition(style) { + prevStyleSiblings.delete(style); + nextStyleSiblings.delete(style); + } + function didStylePositionChange(style) { + return (style.previousElementSibling !== prevStyleSiblings.get(style) || + style.nextElementSibling !== nextStyleSiblings.get(style)); + } + currentStyles.forEach(saveStylePosition); + function handleStyleOperations(operations) { + var createdStyles = operations.createdStyles, removedStyles = operations.removedStyles, movedStyles = operations.movedStyles; + createdStyles.forEach(function (s) { return saveStylePosition(s); }); + movedStyles.forEach(function (s) { return saveStylePosition(s); }); + removedStyles.forEach(function (s) { return forgetStylePosition(s); }); + createdStyles.forEach(function (s) { return prevStyles.add(s); }); + removedStyles.forEach(function (s) { return prevStyles.delete(s); }); + if (createdStyles.size + removedStyles.size + movedStyles.size > 0) { + update({ + created: Array.from(createdStyles), + removed: Array.from(removedStyles), + moved: Array.from(movedStyles), + updated: [], + }); + } + } + function handleMinorTreeMutations(_a) { + var additions = _a.additions, moves = _a.moves, deletions = _a.deletions; + var createdStyles = new Set(); + var removedStyles = new Set(); + var movedStyles = new Set(); + additions.forEach(function (node) { return getManageableStyles(node).forEach(function (style) { return createdStyles.add(style); }); }); + deletions.forEach(function (node) { return getManageableStyles(node).forEach(function (style) { return removedStyles.add(style); }); }); + moves.forEach(function (node) { return getManageableStyles(node).forEach(function (style) { return movedStyles.add(style); }); }); + handleStyleOperations({ createdStyles: createdStyles, removedStyles: removedStyles, movedStyles: movedStyles }); + additions.forEach(function (n) { + iterateShadowHosts(n, subscribeForShadowRootChanges); + collectUndefinedElements(n); + }); + } + function handleHugeTreeMutations(root) { + var styles = new Set(getManageableStyles(root)); + var createdStyles = new Set(); + var removedStyles = new Set(); + var movedStyles = new Set(); + styles.forEach(function (s) { + if (!prevStyles.has(s)) { + createdStyles.add(s); + } + }); + prevStyles.forEach(function (s) { + if (!styles.has(s)) { + removedStyles.add(s); + } + }); + styles.forEach(function (s) { + if (!createdStyles.has(s) && !removedStyles.has(s) && didStylePositionChange(s)) { + movedStyles.add(s); + } + }); + handleStyleOperations({ createdStyles: createdStyles, removedStyles: removedStyles, movedStyles: movedStyles }); + iterateShadowHosts(root, subscribeForShadowRootChanges); + collectUndefinedElements(root); + } + function handleAttributeMutations(mutations) { + var updatedStyles = new Set(); + var removedStyles = new Set(); + mutations.forEach(function (m) { + var target = m.target; + if (target.isConnected) { + if (shouldManageStyle(target)) { + updatedStyles.add(target); + } + else if (target instanceof HTMLLinkElement && target.disabled) { + removedStyles.add(target); + } + } + }); + if (updatedStyles.size + removedStyles.size > 0) { + update({ + updated: Array.from(updatedStyles), + created: [], + removed: Array.from(removedStyles), + moved: [], + }); + } + } + function observe(root) { + var treeObserver = createOptimizedTreeObserver(root, { + onMinorMutations: handleMinorTreeMutations, + onHugeMutations: handleHugeTreeMutations, + }); + var attrObserver = new MutationObserver(handleAttributeMutations); + attrObserver.observe(root, { attributes: true, attributeFilter: ['rel', 'disabled', 'media'], subtree: true }); + observers.push(treeObserver, attrObserver); + observedRoots.add(root); + } + function subscribeForShadowRootChanges(node) { + var shadowRoot = node.shadowRoot; + if (shadowRoot == null || observedRoots.has(shadowRoot)) { + return; + } + observe(shadowRoot); + shadowRootDiscovered(shadowRoot); + } + observe(document); + iterateShadowHosts(document.documentElement, subscribeForShadowRootChanges); + watchWhenCustomElementsDefined(function (hosts) { + var newStyles = []; + hosts.forEach(function (host) { return push(newStyles, getManageableStyles(host.shadowRoot)); }); + update({ created: newStyles, updated: [], removed: [], moved: [] }); + hosts.forEach(function (host) { + var shadowRoot = host.shadowRoot; + if (shadowRoot == null) { + return; + } + subscribeForShadowRootChanges(host); + iterateShadowHosts(shadowRoot, subscribeForShadowRootChanges); + collectUndefinedElements(shadowRoot); + }); + }); + document.addEventListener('__darkreader__isDefined', handleIsDefined); + collectUndefinedElements(document); + } + function resetObservers() { + observers.forEach(function (o) { return o.disconnect(); }); + observers.splice(0, observers.length); + observedRoots = new WeakSet(); + } + function stopWatchingForStyleChanges() { + resetObservers(); + unsubscribeFromDefineCustomElements(); + } + + function hexify(number) { + return ((number < 16 ? '0' : '') + number.toString(16)); + } + function generateUID() { + if ('randomUUID' in crypto) { + var uuid = crypto.randomUUID(); + return uuid.substring(0, 8) + uuid.substring(9, 13) + uuid.substring(14, 18) + uuid.substring(19, 23) + uuid.substring(24); + } + return Array.from(crypto.getRandomValues(new Uint8Array(16))).map(function (x) { return hexify(x); }).join(''); + } + + var adoptedStyleOverrides = new WeakMap(); + var overrideList = new WeakSet(); + function createAdoptedStyleSheetOverride(node) { + var cancelAsyncOperations = false; + function injectSheet(sheet, override) { + var newSheets = __spreadArray([], __read(node.adoptedStyleSheets), false); + var sheetIndex = newSheets.indexOf(sheet); + var existingIndex = newSheets.indexOf(override); + if (sheetIndex === existingIndex - 1) { + return; + } + if (existingIndex >= 0) { + newSheets.splice(existingIndex, 1); + } + newSheets.splice(sheetIndex + 1, 0, override); + node.adoptedStyleSheets = newSheets; + } + function destroy() { + cancelAsyncOperations = true; + var newSheets = __spreadArray([], __read(node.adoptedStyleSheets), false); + node.adoptedStyleSheets.forEach(function (adoptedStyleSheet) { + if (overrideList.has(adoptedStyleSheet)) { + var existingIndex = newSheets.indexOf(adoptedStyleSheet); + if (existingIndex >= 0) { + newSheets.splice(existingIndex, 1); + } + adoptedStyleOverrides.delete(adoptedStyleSheet); + overrideList.delete(adoptedStyleSheet); + } + }); + node.adoptedStyleSheets = newSheets; + } + function render(theme, ignoreImageAnalysis) { + node.adoptedStyleSheets.forEach(function (sheet) { + if (overrideList.has(sheet)) { + return; + } + var rules = sheet.rules; + var override = new CSSStyleSheet(); + function prepareOverridesSheet() { + for (var i = override.cssRules.length - 1; i >= 0; i--) { + override.deleteRule(i); + } + injectSheet(sheet, override); + adoptedStyleOverrides.set(sheet, override); + overrideList.add(override); + return override; + } + var sheetModifier = createStyleSheetModifier(); + sheetModifier.modifySheet({ + prepareSheet: prepareOverridesSheet, + sourceCSSRules: rules, + theme: theme, + ignoreImageAnalysis: ignoreImageAnalysis, + force: false, + isAsyncCancelled: function () { return cancelAsyncOperations; }, + }); + }); + } + return { + render: render, + destroy: destroy + }; + } + + function injectProxy(enableStyleSheetsProxy) { + document.dispatchEvent(new CustomEvent('__darkreader__inlineScriptsAllowed')); + var addRuleDescriptor = Object.getOwnPropertyDescriptor(CSSStyleSheet.prototype, 'addRule'); + var insertRuleDescriptor = Object.getOwnPropertyDescriptor(CSSStyleSheet.prototype, 'insertRule'); + var deleteRuleDescriptor = Object.getOwnPropertyDescriptor(CSSStyleSheet.prototype, 'deleteRule'); + var removeRuleDescriptor = Object.getOwnPropertyDescriptor(CSSStyleSheet.prototype, 'removeRule'); + var documentStyleSheetsDescriptor = enableStyleSheetsProxy ? + Object.getOwnPropertyDescriptor(Document.prototype, 'styleSheets') : null; + var shouldWrapHTMLElement = [ + 'baidu.com', + 'baike.baidu.com', + 'ditu.baidu.com', + 'map.baidu.com', + 'maps.baidu.com', + 'haokan.baidu.com', + 'pan.baidu.com', + 'passport.baidu.com', + 'tieba.baidu.com', + 'www.baidu.com' + ].includes(location.hostname); + var getElementsByTagNameDescriptor = shouldWrapHTMLElement ? + Object.getOwnPropertyDescriptor(Element.prototype, 'getElementsByTagName') : null; + var cleanUp = function () { + Object.defineProperty(CSSStyleSheet.prototype, 'addRule', addRuleDescriptor); + Object.defineProperty(CSSStyleSheet.prototype, 'insertRule', insertRuleDescriptor); + Object.defineProperty(CSSStyleSheet.prototype, 'deleteRule', deleteRuleDescriptor); + Object.defineProperty(CSSStyleSheet.prototype, 'removeRule', removeRuleDescriptor); + document.removeEventListener('__darkreader__cleanUp', cleanUp); + document.removeEventListener('__darkreader__addUndefinedResolver', addUndefinedResolver); + if (enableStyleSheetsProxy) { + Object.defineProperty(Document.prototype, 'styleSheets', documentStyleSheetsDescriptor); + } + if (shouldWrapHTMLElement) { + Object.defineProperty(Element.prototype, 'getElementsByTagName', getElementsByTagNameDescriptor); + } + }; + var addUndefinedResolver = function (e) { + customElements.whenDefined(e.detail.tag).then(function () { + document.dispatchEvent(new CustomEvent('__darkreader__isDefined', { detail: { tag: e.detail.tag } })); + }); + }; + document.addEventListener('__darkreader__cleanUp', cleanUp); + document.addEventListener('__darkreader__addUndefinedResolver', addUndefinedResolver); + var updateSheetEvent = new Event('__darkreader__updateSheet'); + function proxyAddRule(selector, style, index) { + addRuleDescriptor.value.call(this, selector, style, index); + if (this.ownerNode && !this.ownerNode.classList.contains('darkreader')) { + this.ownerNode.dispatchEvent(updateSheetEvent); + } + return -1; + } + function proxyInsertRule(rule, index) { + var returnValue = insertRuleDescriptor.value.call(this, rule, index); + if (this.ownerNode && !this.ownerNode.classList.contains('darkreader')) { + this.ownerNode.dispatchEvent(updateSheetEvent); + } + return returnValue; + } + function proxyDeleteRule(index) { + deleteRuleDescriptor.value.call(this, index); + if (this.ownerNode && !this.ownerNode.classList.contains('darkreader')) { + this.ownerNode.dispatchEvent(updateSheetEvent); + } + } + function proxyRemoveRule(index) { + removeRuleDescriptor.value.call(this, index); + if (this.ownerNode && !this.ownerNode.classList.contains('darkreader')) { + this.ownerNode.dispatchEvent(updateSheetEvent); + } + } + function proxyDocumentStyleSheets() { + var _this = this; + var getCurrentValue = function () { + var docSheets = documentStyleSheetsDescriptor.get.call(_this); + var filteredSheets = __spreadArray([], __read(docSheets), false).filter(function (styleSheet) { + return !styleSheet.ownerNode.classList.contains('darkreader'); + }); + filteredSheets.item = function (item) { + return filteredSheets[item]; + }; + return Object.setPrototypeOf(filteredSheets, StyleSheetList.prototype); + }; + var elements = getCurrentValue(); + var styleSheetListBehavior = { + get: function (_, property) { + return getCurrentValue()[property]; + } + }; + elements = new Proxy(elements, styleSheetListBehavior); + return elements; + } + function proxyGetElementsByTagName(tagName) { + var _this = this; + if (tagName !== 'style') { + return getElementsByTagNameDescriptor.value.call(this, tagName); + } + var getCurrentElementValue = function () { + var elements = getElementsByTagNameDescriptor.value.call(_this, tagName); + return Object.setPrototypeOf(__spreadArray([], __read(elements), false).filter(function (element) { + return !element.classList.contains('darkreader'); + }), NodeList.prototype); + }; + var elements = getCurrentElementValue(); + var nodeListBehavior = { + get: function (_, property) { + return getCurrentElementValue()[Number(property) || property]; + } + }; + elements = new Proxy(elements, nodeListBehavior); + return elements; + } + Object.defineProperty(CSSStyleSheet.prototype, 'addRule', Object.assign({}, addRuleDescriptor, { value: proxyAddRule })); + Object.defineProperty(CSSStyleSheet.prototype, 'insertRule', Object.assign({}, insertRuleDescriptor, { value: proxyInsertRule })); + Object.defineProperty(CSSStyleSheet.prototype, 'deleteRule', Object.assign({}, deleteRuleDescriptor, { value: proxyDeleteRule })); + Object.defineProperty(CSSStyleSheet.prototype, 'removeRule', Object.assign({}, removeRuleDescriptor, { value: proxyRemoveRule })); + if (enableStyleSheetsProxy) { + Object.defineProperty(Document.prototype, 'styleSheets', Object.assign({}, documentStyleSheetsDescriptor, { get: proxyDocumentStyleSheets })); + } + if (shouldWrapHTMLElement) { + Object.defineProperty(Element.prototype, 'getElementsByTagName', Object.assign({}, getElementsByTagNameDescriptor, { value: proxyGetElementsByTagName })); + } + } + + var INSTANCE_ID = generateUID(); + var styleManagers = new Map(); + var adoptedStyleManagers = []; + var filter = null; + var fixes = null; + var isIFrame$1 = null; + var ignoredImageAnalysisSelectors = null; + var ignoredInlineSelectors = null; + function createOrUpdateStyle(className, root) { + if (root === void 0) { root = document.head || document; } + var element = root.querySelector(".".concat(className)); + if (!element) { + element = document.createElement('style'); + element.classList.add('darkreader'); + element.classList.add(className); + element.media = 'screen'; + element.textContent = ''; + } + return element; + } + function createOrUpdateScript(className, root) { + if (root === void 0) { root = document.head || document; } + var element = root.querySelector(".".concat(className)); + if (!element) { + element = document.createElement('script'); + element.classList.add('darkreader'); + element.classList.add(className); + } + return element; + } + var nodePositionWatchers = new Map(); + function setupNodePositionWatcher(node, alias) { + nodePositionWatchers.has(alias) && nodePositionWatchers.get(alias).stop(); + nodePositionWatchers.set(alias, watchForNodePosition(node, 'parent')); + } + function stopStylePositionWatchers() { + forEach(nodePositionWatchers.values(), function (watcher) { return watcher.stop(); }); + nodePositionWatchers.clear(); + } + function createStaticStyleOverrides() { + var fallbackStyle = createOrUpdateStyle('darkreader--fallback', document); + fallbackStyle.textContent = getModifiedFallbackStyle(filter, { strict: true }); + document.head.insertBefore(fallbackStyle, document.head.firstChild); + setupNodePositionWatcher(fallbackStyle, 'fallback'); + var userAgentStyle = createOrUpdateStyle('darkreader--user-agent'); + userAgentStyle.textContent = getModifiedUserAgentStyle(filter, isIFrame$1, filter.styleSystemControls); + document.head.insertBefore(userAgentStyle, fallbackStyle.nextSibling); + setupNodePositionWatcher(userAgentStyle, 'user-agent'); + var textStyle = createOrUpdateStyle('darkreader--text'); + if (filter.useFont || filter.textStroke > 0) { + textStyle.textContent = createTextStyle(filter); + } + else { + textStyle.textContent = ''; + } + document.head.insertBefore(textStyle, fallbackStyle.nextSibling); + setupNodePositionWatcher(textStyle, 'text'); + var invertStyle = createOrUpdateStyle('darkreader--invert'); + if (fixes && Array.isArray(fixes.invert) && fixes.invert.length > 0) { + invertStyle.textContent = [ + "".concat(fixes.invert.join(', '), " {"), + " filter: ".concat(getCSSFilterValue(__assign(__assign({}, filter), { contrast: filter.mode === 0 ? filter.contrast : clamp(filter.contrast - 10, 0, 100) })), " !important;"), + '}', + ].join('\n'); + } + else { + invertStyle.textContent = ''; + } + document.head.insertBefore(invertStyle, textStyle.nextSibling); + setupNodePositionWatcher(invertStyle, 'invert'); + var inlineStyle = createOrUpdateStyle('darkreader--inline'); + inlineStyle.textContent = getInlineOverrideStyle(); + document.head.insertBefore(inlineStyle, invertStyle.nextSibling); + setupNodePositionWatcher(inlineStyle, 'inline'); + var overrideStyle = createOrUpdateStyle('darkreader--override'); + overrideStyle.textContent = fixes && fixes.css ? replaceCSSTemplates(fixes.css) : ''; + document.head.appendChild(overrideStyle); + setupNodePositionWatcher(overrideStyle, 'override'); + var variableStyle = createOrUpdateStyle('darkreader--variables'); + var selectionColors = getSelectionColor(filter); + var darkSchemeBackgroundColor = filter.darkSchemeBackgroundColor, darkSchemeTextColor = filter.darkSchemeTextColor, lightSchemeBackgroundColor = filter.lightSchemeBackgroundColor, lightSchemeTextColor = filter.lightSchemeTextColor, mode = filter.mode; + var schemeBackgroundColor = mode === 0 ? lightSchemeBackgroundColor : darkSchemeBackgroundColor; + var schemeTextColor = mode === 0 ? lightSchemeTextColor : darkSchemeTextColor; + schemeBackgroundColor = modifyBackgroundColor(parse(schemeBackgroundColor), filter); + schemeTextColor = modifyForegroundColor(parse(schemeTextColor), filter); + variableStyle.textContent = [ + ":root {", + " --darkreader-neutral-background: ".concat(schemeBackgroundColor, ";"), + " --darkreader-neutral-text: ".concat(schemeTextColor, ";"), + " --darkreader-selection-background: ".concat(selectionColors.backgroundColorSelection, ";"), + " --darkreader-selection-text: ".concat(selectionColors.foregroundColorSelection, ";"), + "}" + ].join('\n'); + document.head.insertBefore(variableStyle, inlineStyle.nextSibling); + setupNodePositionWatcher(variableStyle, 'variables'); + var rootVarsStyle = createOrUpdateStyle('darkreader--root-vars'); + document.head.insertBefore(rootVarsStyle, variableStyle.nextSibling); + var proxyScript = createOrUpdateScript('darkreader--proxy'); + proxyScript.append("(".concat(injectProxy, ")(!").concat(fixes && fixes.disableStyleSheetsProxy, ")")); + document.head.insertBefore(proxyScript, rootVarsStyle.nextSibling); + proxyScript.remove(); + } + var shadowRootsWithOverrides = new Set(); + function createShadowStaticStyleOverrides(root) { + var inlineStyle = createOrUpdateStyle('darkreader--inline', root); + inlineStyle.textContent = getInlineOverrideStyle(); + root.insertBefore(inlineStyle, root.firstChild); + var overrideStyle = createOrUpdateStyle('darkreader--override', root); + overrideStyle.textContent = fixes && fixes.css ? replaceCSSTemplates(fixes.css) : ''; + root.insertBefore(overrideStyle, inlineStyle.nextSibling); + var invertStyle = createOrUpdateStyle('darkreader--invert', root); + if (fixes && Array.isArray(fixes.invert) && fixes.invert.length > 0) { + invertStyle.textContent = [ + "".concat(fixes.invert.join(', '), " {"), + " filter: ".concat(getCSSFilterValue(__assign(__assign({}, filter), { contrast: filter.mode === 0 ? filter.contrast : clamp(filter.contrast - 10, 0, 100) })), " !important;"), + '}', + ].join('\n'); + } + else { + invertStyle.textContent = ''; + } + root.insertBefore(invertStyle, overrideStyle.nextSibling); + shadowRootsWithOverrides.add(root); + } + function replaceCSSTemplates($cssText) { + return $cssText.replace(/\${(.+?)}/g, function (_, $color) { + var color = tryParseColor($color); + if (color) { + return modifyColor(color, filter); + } + logWarn("Couldn't parse CSSTemplate's color."); + return $color; + }); + } + function cleanFallbackStyle() { + var fallback = document.querySelector('.darkreader--fallback'); + if (fallback) { + fallback.textContent = ''; + } + } + function createDynamicStyleOverrides() { + cancelRendering(); + var allStyles = getManageableStyles(document); + var newManagers = allStyles + .filter(function (style) { return !styleManagers.has(style); }) + .map(function (style) { return createManager(style); }); + newManagers + .map(function (manager) { return manager.details({ secondRound: false }); }) + .filter(function (detail) { return detail && detail.rules.length > 0; }) + .forEach(function (detail) { + variablesStore.addRulesForMatching(detail.rules); + }); + variablesStore.matchVariablesAndDependants(); + variablesStore.setOnRootVariableChange(function () { + variablesStore.putRootVars(document.head.querySelector('.darkreader--root-vars'), filter); + }); + variablesStore.putRootVars(document.head.querySelector('.darkreader--root-vars'), filter); + styleManagers.forEach(function (manager) { return manager.render(filter, ignoredImageAnalysisSelectors); }); + if (loadingStyles.size === 0) { + cleanFallbackStyle(); + } + newManagers.forEach(function (manager) { return manager.watch(); }); + var inlineStyleElements = toArray(document.querySelectorAll(INLINE_STYLE_SELECTOR)); + iterateShadowHosts(document.documentElement, function (host) { + createShadowStaticStyleOverrides(host.shadowRoot); + var elements = host.shadowRoot.querySelectorAll(INLINE_STYLE_SELECTOR); + if (elements.length > 0) { + push(inlineStyleElements, elements); + } + }); + inlineStyleElements.forEach(function (el) { return overrideInlineStyle(el, filter, ignoredInlineSelectors, ignoredImageAnalysisSelectors); }); + handleAdoptedStyleSheets(document); + } + var loadingStylesCounter = 0; + var loadingStyles = new Set(); + function createManager(element) { + var loadingStyleId = ++loadingStylesCounter; + logInfo("New manager for element, with loadingStyleID ".concat(loadingStyleId), element); + function loadingStart() { + if (!isDOMReady() || !didDocumentShowUp) { + loadingStyles.add(loadingStyleId); + logInfo("Current amount of styles loading: ".concat(loadingStyles.size)); + var fallbackStyle = document.querySelector('.darkreader--fallback'); + if (!fallbackStyle.textContent) { + fallbackStyle.textContent = getModifiedFallbackStyle(filter, { strict: false }); + } + } + } + function loadingEnd() { + loadingStyles.delete(loadingStyleId); + logInfo("Removed loadingStyle ".concat(loadingStyleId, ", now awaiting: ").concat(loadingStyles.size)); + logInfo("To-do to be loaded", loadingStyles); + if (loadingStyles.size === 0 && isDOMReady()) { + cleanFallbackStyle(); + } + } + function update() { + var details = manager.details({ secondRound: true }); + if (!details) { + return; + } + variablesStore.addRulesForMatching(details.rules); + variablesStore.matchVariablesAndDependants(); + manager.render(filter, ignoredImageAnalysisSelectors); + } + var manager = manageStyle(element, { update: update, loadingStart: loadingStart, loadingEnd: loadingEnd }); + styleManagers.set(element, manager); + return manager; + } + function removeManager(element) { + var manager = styleManagers.get(element); + if (manager) { + manager.destroy(); + styleManagers.delete(element); + } + } + var throttledRenderAllStyles = throttle(function (callback) { + styleManagers.forEach(function (manager) { return manager.render(filter, ignoredImageAnalysisSelectors); }); + adoptedStyleManagers.forEach(function (manager) { return manager.render(filter, ignoredImageAnalysisSelectors); }); + callback && callback(); + }); + var cancelRendering = function () { + throttledRenderAllStyles.cancel(); + }; + function onDOMReady() { + if (loadingStyles.size === 0) { + cleanFallbackStyle(); + return; + } + logWarn("DOM is ready, but still have styles being loaded.", loadingStyles); + } + var documentVisibilityListener = null; + var didDocumentShowUp = !document.hidden; + function watchForDocumentVisibility(callback) { + var alreadyWatching = Boolean(documentVisibilityListener); + documentVisibilityListener = function () { + if (!document.hidden) { + stopWatchingForDocumentVisibility(); + callback(); + didDocumentShowUp = true; + } + }; + if (!alreadyWatching) { + document.addEventListener('visibilitychange', documentVisibilityListener); + } + } + function stopWatchingForDocumentVisibility() { + document.removeEventListener('visibilitychange', documentVisibilityListener); + documentVisibilityListener = null; + } + function createThemeAndWatchForUpdates() { + createStaticStyleOverrides(); + function runDynamicStyle() { + createDynamicStyleOverrides(); + watchForUpdates(); + } + if (document.hidden && !filter.immediateModify) { + watchForDocumentVisibility(runDynamicStyle); + } + else { + runDynamicStyle(); + } + changeMetaThemeColorWhenAvailable(filter); + } + function handleAdoptedStyleSheets(node) { + try { + if (Array.isArray(node.adoptedStyleSheets)) { + if (node.adoptedStyleSheets.length > 0) { + var newManger = createAdoptedStyleSheetOverride(node); + adoptedStyleManagers.push(newManger); + newManger.render(filter, ignoredImageAnalysisSelectors); + } + } + } + catch (err) { + logWarn('Error occured in handleAdoptedStyleSheets: ', err); + } + } + function watchForUpdates() { + var managedStyles = Array.from(styleManagers.keys()); + watchForStyleChanges(managedStyles, function (_a) { + var created = _a.created, updated = _a.updated, removed = _a.removed, moved = _a.moved; + var stylesToRemove = removed; + var stylesToManage = created.concat(updated).concat(moved) + .filter(function (style) { return !styleManagers.has(style); }); + var stylesToRestore = moved + .filter(function (style) { return styleManagers.has(style); }); + logInfo("Styles to be removed:", stylesToRemove); + stylesToRemove.forEach(function (style) { return removeManager(style); }); + var newManagers = stylesToManage + .map(function (style) { return createManager(style); }); + newManagers + .map(function (manager) { return manager.details({ secondRound: false }); }) + .filter(function (detail) { return detail && detail.rules.length > 0; }) + .forEach(function (detail) { + variablesStore.addRulesForMatching(detail.rules); + }); + variablesStore.matchVariablesAndDependants(); + newManagers.forEach(function (manager) { return manager.render(filter, ignoredImageAnalysisSelectors); }); + newManagers.forEach(function (manager) { return manager.watch(); }); + stylesToRestore.forEach(function (style) { return styleManagers.get(style).restore(); }); + }, function (shadowRoot) { + createShadowStaticStyleOverrides(shadowRoot); + handleAdoptedStyleSheets(shadowRoot); + }); + watchForInlineStyles(function (element) { + overrideInlineStyle(element, filter, ignoredInlineSelectors, ignoredImageAnalysisSelectors); + if (element === document.documentElement) { + var styleAttr = element.getAttribute('style') || ''; + if (styleAttr.includes('--')) { + variablesStore.matchVariablesAndDependants(); + variablesStore.putRootVars(document.head.querySelector('.darkreader--root-vars'), filter); + } + } + }, function (root) { + createShadowStaticStyleOverrides(root); + var inlineStyleElements = root.querySelectorAll(INLINE_STYLE_SELECTOR); + if (inlineStyleElements.length > 0) { + forEach(inlineStyleElements, function (el) { return overrideInlineStyle(el, filter, ignoredInlineSelectors, ignoredImageAnalysisSelectors); }); + } + }); + addDOMReadyListener(onDOMReady); + } + function stopWatchingForUpdates() { + styleManagers.forEach(function (manager) { return manager.pause(); }); + stopStylePositionWatchers(); + stopWatchingForStyleChanges(); + stopWatchingForInlineStyles(); + removeDOMReadyListener(onDOMReady); + cleanReadyStateCompleteListeners(); + } + function createDarkReaderInstanceMarker() { + var metaElement = document.createElement('meta'); + metaElement.name = 'darkreader'; + metaElement.content = INSTANCE_ID; + document.head.appendChild(metaElement); + } + function isAnotherDarkReaderInstanceActive() { + var meta = document.querySelector('meta[name="darkreader"]'); + if (meta) { + if (meta.content !== INSTANCE_ID) { + return true; + } + return false; + } + createDarkReaderInstanceMarker(); + return false; + } + function createOrUpdateDynamicTheme(filterConfig, dynamicThemeFixes, iframe) { + filter = filterConfig; + fixes = dynamicThemeFixes; + if (fixes) { + ignoredImageAnalysisSelectors = Array.isArray(fixes.ignoreImageAnalysis) ? fixes.ignoreImageAnalysis : []; + ignoredInlineSelectors = Array.isArray(fixes.ignoreInlineStyle) ? fixes.ignoreInlineStyle : []; + } + else { + ignoredImageAnalysisSelectors = []; + ignoredInlineSelectors = []; + } + if (filter.immediateModify) { + setIsDOMReady(function () { + return true; + }); + } + isIFrame$1 = iframe; + if (document.head) { + if (isAnotherDarkReaderInstanceActive()) { + return; + } + document.documentElement.setAttribute('data-darkreader-mode', 'dynamic'); + document.documentElement.setAttribute('data-darkreader-scheme', filter.mode ? 'dark' : 'dimmed'); + createThemeAndWatchForUpdates(); + } + else { + if (!isFirefox) { + var fallbackStyle = createOrUpdateStyle('darkreader--fallback'); + document.documentElement.appendChild(fallbackStyle); + fallbackStyle.textContent = getModifiedFallbackStyle(filter, { strict: true }); + } + var headObserver_1 = new MutationObserver(function () { + if (document.head) { + headObserver_1.disconnect(); + if (isAnotherDarkReaderInstanceActive()) { + removeDynamicTheme(); + return; + } + createThemeAndWatchForUpdates(); + } + }); + headObserver_1.observe(document, { childList: true, subtree: true }); + } + } + function removeProxy() { + document.dispatchEvent(new CustomEvent('__darkreader__cleanUp')); + removeNode(document.head.querySelector('.darkreader--proxy')); + } + function removeDynamicTheme() { + document.documentElement.removeAttribute("data-darkreader-mode"); + document.documentElement.removeAttribute("data-darkreader-scheme"); + cleanDynamicThemeCache(); + removeNode(document.querySelector('.darkreader--fallback')); + if (document.head) { + restoreMetaThemeColor(); + removeNode(document.head.querySelector('.darkreader--user-agent')); + removeNode(document.head.querySelector('.darkreader--text')); + removeNode(document.head.querySelector('.darkreader--invert')); + removeNode(document.head.querySelector('.darkreader--inline')); + removeNode(document.head.querySelector('.darkreader--override')); + removeNode(document.head.querySelector('.darkreader--variables')); + removeNode(document.head.querySelector('.darkreader--root-vars')); + removeNode(document.head.querySelector('meta[name="darkreader"]')); + removeProxy(); + } + shadowRootsWithOverrides.forEach(function (root) { + removeNode(root.querySelector('.darkreader--inline')); + removeNode(root.querySelector('.darkreader--override')); + }); + shadowRootsWithOverrides.clear(); + forEach(styleManagers.keys(), function (el) { return removeManager(el); }); + loadingStyles.clear(); + cleanLoadingLinks(); + forEach(document.querySelectorAll('.darkreader'), removeNode); + adoptedStyleManagers.forEach(function (manager) { + manager.destroy(); + }); + adoptedStyleManagers.splice(0); + } + function cleanDynamicThemeCache() { + variablesStore.clear(); + parsedURLCache.clear(); + stopWatchingForDocumentVisibility(); + cancelRendering(); + stopWatchingForUpdates(); + cleanModificationCache(); + } + + var blobRegex = /url\(\"(blob\:.*?)\"\)/g; + function replaceBlobs(text) { + return __awaiter(this, void 0, void 0, function () { + var promises, data; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + promises = []; + getMatches(blobRegex, text, 1).forEach(function (url) { + var promise = loadAsDataURL(url); + promises.push(promise); + }); + return [4, Promise.all(promises)]; + case 1: + data = _a.sent(); + return [2, text.replace(blobRegex, function () { return "url(\"".concat(data.shift(), "\")"); })]; + } + }); + }); + } + var banner = "/*\n _______\n / \\\n .==. .==.\n (( ))==(( ))\n / \"==\" \"==\"\\\n /____|| || ||___\\\n ________ ____ ________ ___ ___\n | ___ \\ / \\ | ___ \\ | | / /\n | | \\ \\ / /\\ \\ | | \\ \\| |_/ /\n | | ) / /__\\ \\ | |__/ /| ___ \\\n | |__/ / ______ \\| ____ \\| | \\ \\\n_______|_______/__/ ____ \\__\\__|___\\__\\__|___\\__\\____\n| ___ \\ | ____/ / \\ | ___ \\ | ____| ___ \\\n| | \\ \\| |___ / /\\ \\ | | \\ \\| |___| | \\ \\\n| |__/ /| ____/ /__\\ \\ | | ) | ____| |__/ /\n| ____ \\| |__/ ______ \\| |__/ /| |___| ____ \\\n|__| \\__\\____/__/ \\__\\_______/ |______|__| \\__\\\n https://darkreader.org\n*/\n\n/*! Dark reader generated CSS | Licensed under MIT https://github.com/darkreader/darkreader/blob/master/LICENSE */\n"; + function collectCSS() { + return __awaiter(this, void 0, void 0, function () { + function addStaticCSS(selector, comment) { + var staticStyle = document.querySelector(selector); + if (staticStyle && staticStyle.textContent) { + css.push("/* ".concat(comment, " */")); + css.push(staticStyle.textContent); + css.push(''); + } + } + var css, modifiedCSS, formattedCSS, _a, _b; + return __generator(this, function (_c) { + switch (_c.label) { + case 0: + css = [banner]; + addStaticCSS('.darkreader--fallback', 'Fallback Style'); + addStaticCSS('.darkreader--user-agent', 'User-Agent Style'); + addStaticCSS('.darkreader--text', 'Text Style'); + addStaticCSS('.darkreader--invert', 'Invert Style'); + addStaticCSS('.darkreader--variables', 'Variables Style'); + modifiedCSS = []; + document.querySelectorAll('.darkreader--sync').forEach(function (element) { + forEach(element.sheet.cssRules, function (rule) { + rule && rule.cssText && modifiedCSS.push(rule.cssText); + }); + }); + if (!modifiedCSS.length) return [3, 2]; + formattedCSS = formatCSS(modifiedCSS.join('\n')); + css.push('/* Modified CSS */'); + _b = (_a = css).push; + return [4, replaceBlobs(formattedCSS)]; + case 1: + _b.apply(_a, [_c.sent()]); + css.push(''); + _c.label = 2; + case 2: + addStaticCSS('.darkreader--override', 'Override Style'); + return [2, css.join('\n')]; + } + }); + }); + } + + var isDarkReaderEnabled = false; + var isIFrame = (function () { + try { + return window.self !== window.top; + } + catch (err) { + console.warn(err); + return true; + } + })(); + function enable(themeOptions, fixes) { + if (themeOptions === void 0) { themeOptions = {}; } + if (fixes === void 0) { fixes = null; } + var theme = __assign(__assign({}, DEFAULT_THEME), themeOptions); + if (theme.engine !== ThemeEngines.dynamicTheme) { + throw new Error('Theme engine is not supported.'); + } + createOrUpdateDynamicTheme(theme, fixes, isIFrame); + isDarkReaderEnabled = true; + } + function isEnabled() { + return isDarkReaderEnabled; + } + function disable() { + removeDynamicTheme(); + isDarkReaderEnabled = false; + } + var darkScheme = matchMedia('(prefers-color-scheme: dark)'); + var store = { + themeOptions: null, + fixes: null, + }; + function handleColorScheme() { + if (darkScheme.matches) { + enable(store.themeOptions, store.fixes); + } + else { + disable(); + } + } + function auto(themeOptions, fixes) { + if (themeOptions === void 0) { themeOptions = {}; } + if (fixes === void 0) { fixes = null; } + if (themeOptions) { + store = { themeOptions: themeOptions, fixes: fixes }; + handleColorScheme(); + if (isMatchMediaChangeEventListenerSupported) { + darkScheme.addEventListener('change', handleColorScheme); + } + else { + darkScheme.addListener(handleColorScheme); + } + } + else { + if (isMatchMediaChangeEventListenerSupported) { + darkScheme.removeEventListener('change', handleColorScheme); + } + else { + darkScheme.removeListener(handleColorScheme); + } + disable(); + } + } + function exportGeneratedCSS() { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4, collectCSS()]; + case 1: return [2, _a.sent()]; + } + }); + }); + } + var setFetchMethod = setFetchMethod$1; + + exports.auto = auto; + exports.disable = disable; + exports.enable = enable; + exports.exportGeneratedCSS = exportGeneratedCSS; + exports.isEnabled = isEnabled; + exports.setFetchMethod = setFetchMethod; + + Object.defineProperty(exports, '__esModule', { value: true }); + +}));